@@ -105,8 +105,8 @@ typedef struct {
105
105
static NS_LIST_DEFINE (pbbr_instance_list , thread_pbbr_t , link ) ;
106
106
static NS_LIST_DEFINE (duplicate_dua_tr_list , duplicate_dua_tr_t , link ) ;
107
107
108
- #define THREAD_BBR_MLR_REGISTRATION_TIMEOUT 600 //<* Default MLR timeout in seconds
109
- #define THREAD_BBR_DUA_REGISTRATION_TIMEOUT 3600
108
+ #define THREAD_BBR_MLR_REGISTRATION_TIMEOUT 3600 //<* Default MLR timeout in seconds
109
+ #define THREAD_BBR_DUA_REGISTRATION_TIMEOUT 3600*24 //<* 24 hours and we refresh the sequence number
110
110
#define THREAD_BBR_DUA_REGISTRATION_DELAY 5000 // 5 seconds in ms
111
111
#define THREAD_BBR_BACKBONE_PORT 5683 //<* Backbone border router
112
112
#define THREAD_BBR_DUA_DAD_QUERY_TIMEOUT 1 // wait period for Duplicate Address Detection
@@ -762,6 +762,7 @@ static int thread_extension_bbr_mlr_cb(int8_t service_id, uint8_t source_address
762
762
uint8_t * addr_data_ptr ;
763
763
uint8_t * invalid_addr_ptr = NULL ;
764
764
uint32_t timeout_value ;
765
+ bool commissioner = false;
765
766
uint8_t bbr_rloc_addr [16 ];
766
767
uint8_t bbr_status = THREAD_EXTENSION_ST_DUA_SUCCESS ;
767
768
uint8_t payload [4 + 18 ];
@@ -786,14 +787,6 @@ static int thread_extension_bbr_mlr_cb(int8_t service_id, uint8_t source_address
786
787
787
788
addr_len = thread_meshcop_tlv_find (request_ptr -> payload_ptr , request_ptr -> payload_len , TMFCOP_TLV_IPV6_ADDRESS , & addr_data_ptr );
788
789
789
- // check if we are not primary bbr respond status 5
790
- if (0 != thread_extension_primary_bbr_get (cur , bbr_rloc_addr , NULL , NULL , NULL ) ||
791
- !addr_get_entry (cur , bbr_rloc_addr )) {
792
- // Primary BBR not present or I am not BBR
793
- bbr_status = THREAD_EXTENSION_ST_DUA_BBR_NOT_PRIMARY ;
794
- goto send_response ;
795
- }
796
-
797
790
//check if commissioner
798
791
if (2 <= thread_meshcop_tlv_data_get_uint16 (request_ptr -> payload_ptr , request_ptr -> payload_len , TMFCOP_TLV_COMMISSIONER_SESSION_ID , & session_id )) {
799
792
// Session id present must be valid
@@ -804,8 +797,20 @@ static int thread_extension_bbr_mlr_cb(int8_t service_id, uint8_t source_address
804
797
goto send_response ;
805
798
}
806
799
thread_meshcop_tlv_data_get_uint32 (request_ptr -> payload_ptr , request_ptr -> payload_len , TMFCOP_TLV_TIMEOUT , & timeout_value );
800
+ commissioner = true;
801
+ }
802
+
803
+ if (!commissioner ) {
804
+ // check if we are not primary bbr respond status 5
805
+ if (0 != thread_extension_primary_bbr_get (cur , bbr_rloc_addr , NULL , NULL , NULL ) ||
806
+ !addr_get_entry (cur , bbr_rloc_addr )) {
807
+ // Primary BBR not present or I am not BBR
808
+ bbr_status = THREAD_EXTENSION_ST_DUA_BBR_NOT_PRIMARY ;
809
+ goto send_response ;
810
+ }
807
811
}
808
812
813
+
809
814
int16_t remaining = addr_len ;
810
815
uint8_t * addr_ptr = addr_data_ptr ;
811
816
@@ -848,7 +853,6 @@ static int thread_extension_bbr_mlr_cb(int8_t service_id, uint8_t source_address
848
853
remaining -= 16 ;
849
854
}
850
855
851
-
852
856
send_response :
853
857
854
858
if (request_ptr -> msg_type == COAP_MSG_TYPE_CONFIRMABLE ) {
@@ -1120,9 +1124,6 @@ static int thread_extension_bbr_pbbr_stop(thread_pbbr_t *this)
1120
1124
1121
1125
coap_service_unregister_uri (this -> coap_service_id , THREAD_URI_BBR_TRI_RX_NTF );
1122
1126
coap_service_unregister_uri (this -> coap_service_id , THREAD_URI_BBR_NMK_RX_NTF );
1123
- coap_service_unregister_uri (this -> coap_service_id , THREAD_URI_BBR_DOMAIN_ADDRESS_REGISTRATION );
1124
- coap_service_unregister_uri (this -> coap_service_id , THREAD_URI_BBR_MCAST_LISTENER_REPORT );
1125
- coap_service_unregister_uri (this -> coap_service_id , THREAD_URI_BBR_DATA_REQ );
1126
1127
1127
1128
coap_service_delete (this -> br_bb_service_id );
1128
1129
this -> br_bb_service_id = -1 ;
@@ -1184,17 +1185,9 @@ static int thread_extension_bbr_pbbr_start(thread_pbbr_t *this)
1184
1185
coap_service_register_uri (this -> br_bb_service_id , THREAD_URI_TRI_TX_NTF , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_relay_from_tri_cb );
1185
1186
coap_service_register_uri (this -> br_bb_service_id , THREAD_URI_BBR_BMLR_NTF , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_extension_bbr_bmlr_cb );
1186
1187
1187
- // Register Mesh address registration URI
1188
- coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_MCAST_LISTENER_REPORT , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_extension_bbr_mlr_cb );
1189
- coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_DOMAIN_ADDRESS_REGISTRATION , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_extension_bbr_dua_cb );
1190
1188
// Register Mesh side relay URI
1191
1189
coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_TRI_RX_NTF , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_relay_to_tri_cb );
1192
1190
coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_NMK_RX_NTF , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_nmkp_relay_rx_recv_cb );
1193
- // Register BBR data request URI
1194
- coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_DATA_REQ , COAP_SERVICE_ACCESS_GET_ALLOWED , thread_pbbr_data_req_recv_cb );
1195
- coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_DATA_SET , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_data_set_recv_cb );
1196
- coap_service_register_uri (this -> coap_service_id , THREAD_URI_MGMT_SEC_PENDING_SET , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_sec_data_set_recv_cb );
1197
-
1198
1191
1199
1192
// create secure service for Network master key provisioning
1200
1193
this -> coap_nmkp_virtual_service_id = coap_service_initialize (this -> interface_id , THREAD_MANAGEMENT_PORT , COAP_SERVICE_OPTIONS_SECURE | COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET , thread_pbbr_pskd_security_start_cb , NULL );
@@ -1249,6 +1242,20 @@ int8_t thread_extension_bbr_init(int8_t interface_id, int8_t backbone_interface_
1249
1242
1250
1243
// Set the partition weight to be 72
1251
1244
thread_management_partition_weighting_set (this -> interface_id , 72 );
1245
+ // Register Mesh address registration URI
1246
+ coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_MCAST_LISTENER_REPORT , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_extension_bbr_mlr_cb );
1247
+ coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_DOMAIN_ADDRESS_REGISTRATION , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_extension_bbr_dua_cb );
1248
+ // Register BBR data request URI
1249
+ coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_DATA_REQ , COAP_SERVICE_ACCESS_GET_ALLOWED , thread_pbbr_data_req_recv_cb );
1250
+ coap_service_register_uri (this -> coap_service_id , THREAD_URI_BBR_DATA_SET , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_data_set_recv_cb );
1251
+ coap_service_register_uri (this -> coap_service_id , THREAD_URI_MGMT_SEC_PENDING_SET , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_sec_data_set_recv_cb );
1252
+
1253
+ // add features to secure commissioner port
1254
+ int8_t commissioner_service_id = thread_bbr_get_commissioner_service (this -> interface_id );
1255
+ coap_service_register_uri (commissioner_service_id , THREAD_URI_BBR_DATA_REQ , COAP_SERVICE_ACCESS_GET_ALLOWED , thread_pbbr_data_req_recv_cb );
1256
+ coap_service_register_uri (commissioner_service_id , THREAD_URI_BBR_DATA_SET , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_data_set_recv_cb );
1257
+ coap_service_register_uri (commissioner_service_id , THREAD_URI_MGMT_SEC_PENDING_SET , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_pbbr_sec_data_set_recv_cb );
1258
+ coap_service_register_uri (commissioner_service_id , THREAD_URI_BBR_MCAST_LISTENER_REPORT , COAP_SERVICE_ACCESS_POST_ALLOWED , thread_extension_bbr_mlr_cb );
1252
1259
return 0 ;
1253
1260
}
1254
1261
@@ -1259,6 +1266,12 @@ void thread_extension_bbr_delete(int8_t interface_id)
1259
1266
return ;
1260
1267
}
1261
1268
thread_extension_bbr_pbbr_stop (this );
1269
+ int8_t commissioner_service_id = thread_bbr_get_commissioner_service (this -> interface_id );
1270
+ coap_service_unregister_uri (commissioner_service_id , THREAD_URI_BBR_DATA_REQ );
1271
+ coap_service_unregister_uri (commissioner_service_id , THREAD_URI_BBR_DATA_SET );
1272
+ coap_service_unregister_uri (commissioner_service_id , THREAD_URI_MGMT_SEC_PENDING_SET );
1273
+ coap_service_unregister_uri (commissioner_service_id , THREAD_URI_BBR_MCAST_LISTENER_REPORT );
1274
+
1262
1275
coap_service_delete (this -> coap_service_id );
1263
1276
1264
1277
ns_list_remove (& pbbr_instance_list , this );
0 commit comments