@@ -823,6 +823,7 @@ void ws_bootstrap_configuration_reset(protocol_interface_info_entry_t *cur)
823
823
cur -> ws_info -> trickle_pa_running = false;
824
824
cur -> ws_info -> trickle_pcs_running = false;
825
825
cur -> ws_info -> trickle_pc_running = false;
826
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
826
827
827
828
//cur->mac_security_key_usage_update_cb = ws_management_mac_security_key_update_cb;
828
829
return ;
@@ -1248,8 +1249,12 @@ static void ws_bootstrap_pan_config_analyse(struct protocol_interface_info_entry
1248
1249
if (cur -> ws_info -> configuration_learned ) {
1249
1250
tr_info ("PAN Config analyse own:%d, heard:%d" , cur -> ws_info -> pan_information .pan_version , pan_version );
1250
1251
if (cur -> ws_info -> pan_information .pan_version == pan_version ) {
1251
- // Same version heard so it is consistent
1252
- trickle_consistent_heard (& cur -> ws_info -> trickle_pan_config );
1252
+ //Check if Trgigle have been resetted in short time skip this then
1253
+ if (cur -> ws_info -> trickle_pc_consistency_block_period == 0 ) {
1254
+ // Same version heard so it is consistent
1255
+ trickle_consistent_heard (& cur -> ws_info -> trickle_pan_config );
1256
+ }
1257
+
1253
1258
if (neighbour_pointer_valid && neighbor_info .neighbor -> link_role == PRIORITY_PARENT_NEIGHBOUR ) {
1254
1259
ws_bootstrap_primary_parent_set (cur , & neighbor_info , WS_PARENT_SOFT_SYNCH );
1255
1260
}
@@ -1265,6 +1270,7 @@ static void ws_bootstrap_pan_config_analyse(struct protocol_interface_info_entry
1265
1270
// older version heard ignoring the message
1266
1271
return ;
1267
1272
}
1273
+ cur -> ws_info -> trickle_pc_consistency_block_period = WS_CONFIG_CONSISTENT_FILTER_PERIOD ;
1268
1274
}
1269
1275
}
1270
1276
@@ -2315,6 +2321,7 @@ static void ws_bootstrap_advertise_start(protocol_interface_info_entry_t *cur)
2315
2321
cur -> ws_info -> trickle_pa_running = true;
2316
2322
trickle_start (& cur -> ws_info -> trickle_pan_advertisement , & cur -> ws_info -> trickle_params_pan_discovery );
2317
2323
cur -> ws_info -> trickle_pc_running = true;
2324
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
2318
2325
trickle_start (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery );
2319
2326
}
2320
2327
@@ -2712,6 +2719,7 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
2712
2719
cur -> ws_info -> trickle_pc_running = false;
2713
2720
cur -> ws_info -> trickle_pas_running = false;
2714
2721
cur -> ws_info -> trickle_pcs_running = false;
2722
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
2715
2723
2716
2724
if (cur -> bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER ) {
2717
2725
tr_info ("Border router start network" );
@@ -2779,6 +2787,7 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
2779
2787
cur -> ws_info -> trickle_pc_running = false;
2780
2788
cur -> ws_info -> trickle_pas_running = false;
2781
2789
cur -> ws_info -> trickle_pcs_running = false;
2790
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
2782
2791
2783
2792
// Build list of possible neighbours and learn first broadcast schedule
2784
2793
@@ -2791,6 +2800,7 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
2791
2800
cur -> ws_info -> trickle_pc_running = false;
2792
2801
cur -> ws_info -> trickle_pas_running = false;
2793
2802
cur -> ws_info -> trickle_pcs_running = false;
2803
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
2794
2804
// Activate RPL
2795
2805
// Activate IPv6 stack
2796
2806
ws_bootstrap_ip_stack_activate (cur );
@@ -2810,6 +2820,7 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
2810
2820
cur -> ws_info -> trickle_pc_running = false;
2811
2821
cur -> ws_info -> trickle_pas_running = false;
2812
2822
cur -> ws_info -> trickle_pcs_running = false;
2823
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
2813
2824
2814
2825
// Indicate PAE controller that bootstrap is ready
2815
2826
ws_pae_controller_bootstrap_done (cur );
@@ -2969,6 +2980,7 @@ void ws_bootstrap_state_machine(protocol_interface_info_entry_t *cur)
2969
2980
cur -> ws_info -> trickle_pc_running = false;
2970
2981
cur -> ws_info -> trickle_pas_running = false;
2971
2982
cur -> ws_info -> trickle_pcs_running = false;
2983
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
2972
2984
ws_fhss_configure (cur , false);
2973
2985
ws_bootstrap_start_authentication (cur );
2974
2986
break ;
@@ -3029,11 +3041,21 @@ void ws_bootstrap_trickle_timer(protocol_interface_info_entry_t *cur, uint16_t t
3029
3041
tr_info ("Send PAN advertisement" );
3030
3042
ws_bootstrap_pan_advert (cur );
3031
3043
}
3032
- if (cur -> ws_info -> trickle_pc_running &&
3033
- trickle_timer (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery , ticks )) {
3034
- // send PAN Configuration
3035
- tr_info ("Send PAN configuration" );
3036
- ws_bootstrap_pan_config (cur );
3044
+ if (cur -> ws_info -> trickle_pc_running ) {
3045
+
3046
+ if (cur -> ws_info -> trickle_pc_consistency_block_period ) {
3047
+ if (ticks >= cur -> ws_info -> trickle_pc_consistency_block_period ) {
3048
+ cur -> ws_info -> trickle_pc_consistency_block_period = 0 ;
3049
+ } else {
3050
+ cur -> ws_info -> trickle_pc_consistency_block_period -= ticks ;
3051
+ }
3052
+ }
3053
+
3054
+ if (trickle_timer (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery , ticks )) {
3055
+ // send PAN Configuration
3056
+ tr_info ("Send PAN configuration" );
3057
+ ws_bootstrap_pan_config (cur );
3058
+ }
3037
3059
}
3038
3060
}
3039
3061
0 commit comments