@@ -1347,14 +1347,15 @@ static void ws_bootstrap_pan_advertisement_solicit_analyse(struct protocol_inter
1347
1347
* a PAN Advertisement Solicit with NETNAME-IE / Network Name matching that configured on the receiving node.
1348
1348
*/
1349
1349
trickle_consistent_heard (& cur -> ws_info -> trickle_pan_advertisement_solicit );
1350
-
1351
1350
/*
1352
1351
* Optimized PAN discovery to select faster the parent if we hear solicit from someone else
1353
1352
*/
1354
1353
1355
- if (ws_bootstrap_state_discovery (cur ) &&
1356
- cur -> bootsrap_state_machine_cnt > cur -> ws_info -> trickle_params_pan_discovery .Imin + 50 ) {
1357
- cur -> bootsrap_state_machine_cnt = cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
1354
+ if (ws_bootstrap_state_discovery (cur ) && cur -> ws_info -> cfg -> gen .network_size <= NETWORK_SIZE_MEDIUM &&
1355
+ cur -> bootsrap_state_machine_cnt > cur -> ws_info -> trickle_params_pan_discovery .Imin * 2 ) {
1356
+
1357
+ cur -> bootsrap_state_machine_cnt = cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_random_in_range (0 , cur -> ws_info -> trickle_params_pan_discovery .Imin );
1358
+
1358
1359
tr_info ("Making parent selection in %u s" , (cur -> bootsrap_state_machine_cnt / 10 ));
1359
1360
}
1360
1361
}
@@ -2638,7 +2639,7 @@ static void ws_bootstrap_start_discovery(protocol_interface_info_entry_t *cur)
2638
2639
}
2639
2640
2640
2641
// Discovery statemachine is checkked after we have sent the Solicit
2641
- uint16_t time_to_solicit = 0 ;
2642
+ uint32_t time_to_solicit = 0 ;
2642
2643
if (cur -> ws_info -> trickle_pan_advertisement_solicit .t > cur -> ws_info -> trickle_pan_advertisement_solicit .now ) {
2643
2644
time_to_solicit = cur -> ws_info -> trickle_pan_advertisement_solicit .t - cur -> ws_info -> trickle_pan_advertisement_solicit .now ;
2644
2645
}
@@ -2647,7 +2648,13 @@ static void ws_bootstrap_start_discovery(protocol_interface_info_entry_t *cur)
2647
2648
cur -> ws_info -> trickle_params_pan_discovery .Imin , cur -> ws_info -> trickle_params_pan_discovery .Imax , cur -> ws_info -> trickle_params_pan_discovery .TimerExpirations , cur -> ws_info -> trickle_params_pan_discovery .k ,
2648
2649
cur -> ws_info -> trickle_pan_advertisement_solicit .I , cur -> ws_info -> trickle_pan_advertisement_solicit .t , cur -> ws_info -> trickle_pan_advertisement_solicit .now , cur -> ws_info -> trickle_pan_advertisement_solicit .c );
2649
2650
2650
- cur -> bootsrap_state_machine_cnt = time_to_solicit + cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
2651
+ time_to_solicit += cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_random_in_range (0 , cur -> ws_info -> trickle_params_pan_discovery .Imin );
2652
+
2653
+ if (time_to_solicit > 0xffff ) {
2654
+ time_to_solicit = 0xffff ;
2655
+ }
2656
+ cur -> bootsrap_state_machine_cnt = time_to_solicit ;
2657
+
2651
2658
tr_info ("Making parent selection in %u s" , (cur -> bootsrap_state_machine_cnt / 10 ));
2652
2659
}
2653
2660
@@ -3217,7 +3224,12 @@ void ws_bootstrap_network_scan_process(protocol_interface_info_entry_t *cur)
3217
3224
// randomize new channel and start MAC
3218
3225
ws_bootstrap_fhss_activate (cur );
3219
3226
// Next check will be after one trickle
3220
- cur -> bootsrap_state_machine_cnt += cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
3227
+ uint32_t random_start = cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_random_in_range (0 , cur -> ws_info -> trickle_params_pan_discovery .Imin );
3228
+ if (random_start > 0xffff ) {
3229
+ random_start = 0xffff ;
3230
+ }
3231
+ cur -> bootsrap_state_machine_cnt = random_start ;
3232
+
3221
3233
tr_info ("Making parent selection in %u s" , (cur -> bootsrap_state_machine_cnt / 10 ));
3222
3234
return ;
3223
3235
}
0 commit comments