@@ -478,10 +478,10 @@ void ws_bootstrap_configuration_reset(protocol_interface_info_entry_t *cur)
478
478
479
479
cur -> nwk_bootstrap_state = ER_ACTIVE_SCAN ;
480
480
cur -> ws_info -> network_pan_id = 0xffff ;
481
- trickle_stop ( & cur -> ws_info -> trickle_pan_advertisement_solicit ) ;
482
- trickle_stop ( & cur -> ws_info -> trickle_pan_advertisement ) ;
483
- trickle_stop ( & cur -> ws_info -> trickle_pan_config_solicit ) ;
484
- trickle_stop ( & cur -> ws_info -> trickle_pan_config ) ;
481
+ cur -> ws_info -> trickle_pas_running = false ;
482
+ cur -> ws_info -> trickle_pa_running = false ;
483
+ cur -> ws_info -> trickle_pcs_running = false ;
484
+ cur -> ws_info -> trickle_pc_running = false ;
485
485
486
486
//cur->mac_security_key_usage_update_cb = ws_management_mac_security_key_update_cb;
487
487
return ;
@@ -524,9 +524,7 @@ static void ws_bootstrap_pan_advertisement_analyse_active(struct protocol_interf
524
524
if (pan_information -> routing_cost <= cur -> ws_info -> pan_information .routing_cost ) {
525
525
trickle_consistent_heard (& cur -> ws_info -> trickle_pan_advertisement );
526
526
} else {
527
- if (trickle_running (& cur -> ws_info -> trickle_pan_advertisement ,& trickle_params_pan_discovery )) {
528
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement ,& trickle_params_pan_discovery );
529
- }
527
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement ,& trickle_params_pan_discovery );
530
528
}
531
529
532
530
}
@@ -655,9 +653,7 @@ static void ws_bootstrap_pan_advertisement_solicit_analyse(struct protocol_inter
655
653
* An inconsistent transmission is defined as:
656
654
* A PAN Advertisement Solicit with NETNAME-IE matching that of the receiving node.
657
655
*/
658
- if (trickle_running (& cur -> ws_info -> trickle_pan_advertisement ,& trickle_params_pan_discovery )) {
659
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement ,& trickle_params_pan_discovery );
660
- }
656
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement ,& trickle_params_pan_discovery );
661
657
/*
662
658
* A consistent transmission is defined as
663
659
* a PAN Advertisement Solicit with NETNAME-IE / Network Name matching that configured on the receiving node.
@@ -734,9 +730,7 @@ static void ws_bootstrap_pan_config_analyse(struct protocol_interface_info_entry
734
730
trickle_consistent_heard (& cur -> ws_info -> trickle_pan_config );
735
731
} else {
736
732
tr_info ("different pan version heard" );
737
- if (trickle_running (& cur -> ws_info -> trickle_pan_config ,& trickle_params_pan_discovery )) {
738
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config ,& trickle_params_pan_discovery );
739
- }
733
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config ,& trickle_params_pan_discovery );
740
734
if (common_serial_number_greater_16 (cur -> ws_info -> pan_information .pan_version , pan_version )) {
741
735
// older version heard ignoring the message
742
736
return ;
@@ -813,9 +807,7 @@ static void ws_bootstrap_pan_config_solicit_analyse(struct protocol_interface_in
813
807
* A PAN Configuration Solicit with a PAN-ID matching that of the receiving node and
814
808
* a NETNAME-IE / Network Name matching the network name configured on the receiving
815
809
*/
816
- if (trickle_running (& cur -> ws_info -> trickle_pan_config ,& trickle_params_pan_discovery )) {
817
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config ,& trickle_params_pan_discovery );
818
- }
810
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config ,& trickle_params_pan_discovery );
819
811
}
820
812
static bool ws_bootstrap_network_found (protocol_interface_info_entry_t * cur )
821
813
{
@@ -1336,8 +1328,10 @@ static void ws_bootstrap_network_discovery_configure(protocol_interface_info_ent
1336
1328
1337
1329
static void ws_bootstrap_advertise_start (protocol_interface_info_entry_t * cur )
1338
1330
{
1331
+ cur -> ws_info -> trickle_pa_running = true;
1339
1332
trickle_start (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery );
1340
1333
trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery );
1334
+ cur -> ws_info -> trickle_pc_running = true;
1341
1335
trickle_start (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery );
1342
1336
trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery );
1343
1337
}
@@ -1365,6 +1359,7 @@ static void ws_bootstrap_start_discovery(protocol_interface_info_entry_t *cur)
1365
1359
ws_bootstrap_ip_stack_addr_clear (cur );
1366
1360
1367
1361
// Reset advertisement solicit trickle to start discovering network
1362
+ cur -> ws_info -> trickle_pas_running = true;
1368
1363
trickle_start (& cur -> ws_info -> trickle_pan_advertisement_solicit , & trickle_params_pan_discovery );
1369
1364
trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement_solicit , & trickle_params_pan_discovery );
1370
1365
@@ -1386,6 +1381,7 @@ static void ws_bootstrap_start_configuration_learn(protocol_interface_info_entry
1386
1381
1387
1382
cur -> ws_info -> pas_requests = 0 ;
1388
1383
// Reset advertisement solicit trickle to start discovering network
1384
+ cur -> ws_info -> trickle_pcs_running = true;
1389
1385
trickle_start (& cur -> ws_info -> trickle_pan_config_solicit , & trickle_params_pan_discovery );
1390
1386
trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config_solicit , & trickle_params_pan_discovery );
1391
1387
}
@@ -1592,8 +1588,11 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
1592
1588
break ;
1593
1589
case WS_DISCOVERY_START :
1594
1590
tr_info ("Discovery start" );
1595
- trickle_stop (& cur -> ws_info -> trickle_pan_advertisement );
1596
- trickle_stop (& cur -> ws_info -> trickle_pan_config );
1591
+ // All trikkles stopped so here can be entered anytime
1592
+ cur -> ws_info -> trickle_pa_running = false;
1593
+ cur -> ws_info -> trickle_pc_running = false;
1594
+ cur -> ws_info -> trickle_pas_running = false;
1595
+ cur -> ws_info -> trickle_pcs_running = false;
1597
1596
1598
1597
if (cur -> bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER ) {
1599
1598
tr_debug ("Border router start network" );
@@ -1625,25 +1624,33 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
1625
1624
break ;
1626
1625
case WS_AUTHENTICATION_START :
1627
1626
tr_info ("authentication start" );
1628
- trickle_stop (& cur -> ws_info -> trickle_pan_advertisement_solicit );
1627
+ // only advert sol stopped as we might be doing re authentication
1628
+ cur -> ws_info -> trickle_pas_running = false;
1629
1629
//Add Test ecurity key and security level's
1630
1630
ws_bootstrap_set_test_key (cur );
1631
1631
ws_bootstrap_event_configuration_start (cur );
1632
1632
break ;
1633
1633
case WS_CONFIGURATION_START :
1634
1634
tr_info ("Configuration start" );
1635
- trickle_stop (& cur -> ws_info -> trickle_pan_advertisement );
1636
- trickle_stop (& cur -> ws_info -> trickle_pan_config );
1635
+ // Old configuration is considered invalid stopping all
1636
+ cur -> ws_info -> trickle_pa_running = false;
1637
+ cur -> ws_info -> trickle_pc_running = false;
1638
+ cur -> ws_info -> trickle_pas_running = false;
1639
+ cur -> ws_info -> trickle_pcs_running = false;
1637
1640
1638
1641
// Build list of possible neighbours and learn first broadcast schedule
1639
1642
1640
1643
ws_bootstrap_start_configuration_learn (cur );
1641
1644
break ;
1642
1645
case WS_OPERATION_START :
1643
1646
tr_info ("operation start" );
1647
+ // Advertisements stopped during the RPL scan
1648
+ cur -> ws_info -> trickle_pa_running = false;
1649
+ cur -> ws_info -> trickle_pc_running = false;
1650
+ cur -> ws_info -> trickle_pas_running = false;
1651
+ cur -> ws_info -> trickle_pcs_running = false;
1644
1652
// Activate RPL
1645
1653
// Activate IPv6 stack
1646
- trickle_stop (& cur -> ws_info -> trickle_pan_config_solicit );
1647
1654
ws_bootstrap_ip_stack_activate (cur );
1648
1655
ws_bootstrap_rpl_activate (cur );
1649
1656
ws_bootstrap_network_start (cur );
@@ -1656,6 +1663,12 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
1656
1663
break ;
1657
1664
case WS_ROUTING_READY :
1658
1665
tr_info ("Routing ready" );
1666
+ // stopped all to make sure we can enter here from any state
1667
+ cur -> ws_info -> trickle_pa_running = false;
1668
+ cur -> ws_info -> trickle_pc_running = false;
1669
+ cur -> ws_info -> trickle_pas_running = false;
1670
+ cur -> ws_info -> trickle_pcs_running = false;
1671
+
1659
1672
ws_bootstrap_advertise_start (cur );
1660
1673
ws_bootstrap_state_change (cur , ER_BOOTSRAP_DONE );
1661
1674
break ;
@@ -1795,14 +1808,16 @@ void ws_bootstrap_state_machine(protocol_interface_info_entry_t *cur)
1795
1808
}
1796
1809
}
1797
1810
1798
- void ws_bootstrap_trigle_timer (protocol_interface_info_entry_t * cur , uint16_t ticks )
1811
+ void ws_bootstrap_trickle_timer (protocol_interface_info_entry_t * cur , uint16_t ticks )
1799
1812
{
1800
- if (trickle_timer (& cur -> ws_info -> trickle_pan_advertisement_solicit , & trickle_params_pan_discovery , ticks )) {
1813
+ if (cur -> ws_info -> trickle_pas_running &&
1814
+ trickle_timer (& cur -> ws_info -> trickle_pan_advertisement_solicit , & trickle_params_pan_discovery , ticks )) {
1801
1815
// send PAN advertisement solicit
1802
1816
tr_info ("Send PAN advertisement Solicit" );
1803
1817
ws_bootstrap_pan_advert_solicit (cur );
1804
1818
}
1805
- if (trickle_timer (& cur -> ws_info -> trickle_pan_config_solicit , & trickle_params_pan_discovery , ticks )) {
1819
+ if (cur -> ws_info -> trickle_pcs_running &&
1820
+ trickle_timer (& cur -> ws_info -> trickle_pan_config_solicit , & trickle_params_pan_discovery , ticks )) {
1806
1821
// send PAN Configuration solicit
1807
1822
if (cur -> ws_info -> pas_requests > PCS_MAX ) {
1808
1823
// if MAX PCS sent restart discovery
@@ -1814,12 +1829,14 @@ void ws_bootstrap_trigle_timer(protocol_interface_info_entry_t *cur, uint16_t ti
1814
1829
cur -> ws_info -> pas_requests ++ ;
1815
1830
ws_bootstrap_pan_config_solicit (cur );
1816
1831
}
1817
- if (trickle_timer (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery , ticks )) {
1832
+ if (cur -> ws_info -> trickle_pa_running &&
1833
+ trickle_timer (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery , ticks )) {
1818
1834
// send PAN advertisement
1819
1835
tr_info ("Send PAN advertisement" );
1820
1836
ws_bootstrap_pan_advert (cur );
1821
1837
}
1822
- if (trickle_timer (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery , ticks )) {
1838
+ if (cur -> ws_info -> trickle_pc_running &&
1839
+ trickle_timer (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery , ticks )) {
1823
1840
// send PAN Configuration
1824
1841
tr_info ("Send PAN configuration" );
1825
1842
ws_bootstrap_pan_config (cur );
0 commit comments