60
60
#include "platform/topo_trace.h"
61
61
#include "libDHCPv6/libDHCPv6.h"
62
62
#include "DHCPv6_client/dhcpv6_client_api.h"
63
+ #include "ws_management_api.h"
63
64
#include "net_rpl.h"
64
65
#include "mac_api.h"
65
66
#include "6LoWPAN/ws/ws_pae_controller.h"
71
72
72
73
#ifdef HAVE_WS
73
74
74
- #define TRICKLE_IMIN_60_SECS (60 * 10) //
75
-
76
- static const trickle_params_t trickle_params_pan_discovery = {
77
- .Imin = TRICKLE_IMIN_60_SECS , /* 60 second; ticks are 1s */
78
- .Imax = TRICKLE_IMIN_60_SECS << 4 , /* 960 seconds 16 min*/
79
- .k = 1 , /* 1 */
80
- .TimerExpirations = TRICKLE_EXPIRATIONS_INFINITE
81
- };
82
-
83
75
static void ws_bootstrap_event_handler (arm_event_s * event );
84
76
static void ws_bootstrap_state_change (protocol_interface_info_entry_t * cur , icmp_state_t nwk_bootstrap_state );
85
77
//static bool ws_bootstrap_state_active(struct protocol_interface_info_entry *cur);
@@ -757,9 +749,15 @@ static void ws_bootstrap_pan_advertisement_analyse_active(struct protocol_interf
757
749
if (pan_information -> routing_cost <= cur -> ws_info -> pan_information .routing_cost ) {
758
750
trickle_consistent_heard (& cur -> ws_info -> trickle_pan_advertisement );
759
751
} else {
760
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery );
752
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement , & cur -> ws_info -> trickle_params_pan_discovery );
761
753
}
762
754
755
+ // automatic network size adjustment
756
+ if (cur -> ws_info -> network_size_config == NETWORK_SIZE_AUTOMATIC &&
757
+ cur -> bootsrap_mode != ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER &&
758
+ cur -> ws_info -> pan_information .pan_size != pan_information -> pan_size ) {
759
+ ws_common_network_size_configure (cur , pan_information -> pan_size );
760
+ }
763
761
}
764
762
765
763
static void ws_bootstrap_pan_advertisement_analyse (struct protocol_interface_info_entry * cur , const struct mcps_data_ind_s * data , const struct mcps_data_ie_list * ie_ext , ws_utt_ie_t * ws_utt , ws_us_ie_t * ws_us )
@@ -846,7 +844,7 @@ static void ws_bootstrap_pan_advertisement_analyse(struct protocol_interface_inf
846
844
847
845
if (ws_neighbor_class_rssi_from_dbm_calculate (data -> signal_dbm ) < (CAND_PARENT_THRESHOLD + CAND_PARENT_HYSTERISIS )) {
848
846
// First neighbor is too low we need to wait one extra trickle
849
- cur -> bootsrap_state_machine_cnt += trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
847
+ cur -> bootsrap_state_machine_cnt += cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
850
848
}
851
849
}
852
850
@@ -896,7 +894,7 @@ static void ws_bootstrap_pan_advertisement_solicit_analyse(struct protocol_inter
896
894
* An inconsistent transmission is defined as:
897
895
* A PAN Advertisement Solicit with NETNAME-IE matching that of the receiving node.
898
896
*/
899
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery );
897
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement , & cur -> ws_info -> trickle_params_pan_discovery );
900
898
/*
901
899
* A consistent transmission is defined as
902
900
* a PAN Advertisement Solicit with NETNAME-IE / Network Name matching that configured on the receiving node.
@@ -973,7 +971,7 @@ static void ws_bootstrap_pan_config_analyse(struct protocol_interface_info_entry
973
971
trickle_consistent_heard (& cur -> ws_info -> trickle_pan_config );
974
972
} else {
975
973
tr_info ("different pan version heard" );
976
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery );
974
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery );
977
975
if (common_serial_number_greater_16 (cur -> ws_info -> pan_information .pan_version , pan_version )) {
978
976
// older version heard ignoring the message
979
977
return ;
@@ -1061,7 +1059,7 @@ static void ws_bootstrap_pan_config_solicit_analyse(struct protocol_interface_in
1061
1059
* A PAN Configuration Solicit with a PAN-ID matching that of the receiving node and
1062
1060
* a NETNAME-IE / Network Name matching the network name configured on the receiving
1063
1061
*/
1064
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery );
1062
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery );
1065
1063
}
1066
1064
static bool ws_bootstrap_network_found (protocol_interface_info_entry_t * cur )
1067
1065
{
@@ -1751,11 +1749,11 @@ static void ws_bootstrap_network_discovery_configure(protocol_interface_info_ent
1751
1749
static void ws_bootstrap_advertise_start (protocol_interface_info_entry_t * cur )
1752
1750
{
1753
1751
cur -> ws_info -> trickle_pa_running = true;
1754
- trickle_start (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery );
1755
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery );
1752
+ trickle_start (& cur -> ws_info -> trickle_pan_advertisement , & cur -> ws_info -> trickle_params_pan_discovery );
1753
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement , & cur -> ws_info -> trickle_params_pan_discovery );
1756
1754
cur -> ws_info -> trickle_pc_running = true;
1757
- trickle_start (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery );
1758
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery );
1755
+ trickle_start (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery );
1756
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery );
1759
1757
}
1760
1758
1761
1759
// Start network scan
@@ -1782,11 +1780,11 @@ static void ws_bootstrap_start_discovery(protocol_interface_info_entry_t *cur)
1782
1780
1783
1781
// Reset advertisement solicit trickle to start discovering network
1784
1782
cur -> ws_info -> trickle_pas_running = true;
1785
- trickle_start (& cur -> ws_info -> trickle_pan_advertisement_solicit , & trickle_params_pan_discovery );
1786
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement_solicit , & trickle_params_pan_discovery );
1783
+ trickle_start (& cur -> ws_info -> trickle_pan_advertisement_solicit , & cur -> ws_info -> trickle_params_pan_discovery );
1784
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_advertisement_solicit , & cur -> ws_info -> trickle_params_pan_discovery );
1787
1785
1788
1786
// Discovery statemachine is checkked after two trickle interval
1789
- cur -> bootsrap_state_machine_cnt = 2 * trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
1787
+ cur -> bootsrap_state_machine_cnt = 2 * cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
1790
1788
}
1791
1789
1792
1790
// Start authentication
@@ -1842,8 +1840,8 @@ static void ws_bootstrap_start_configuration_learn(protocol_interface_info_entry
1842
1840
cur -> ws_info -> pas_requests = 0 ;
1843
1841
// Reset advertisement solicit trickle to start discovering network
1844
1842
cur -> ws_info -> trickle_pcs_running = true;
1845
- trickle_start (& cur -> ws_info -> trickle_pan_config_solicit , & trickle_params_pan_discovery );
1846
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config_solicit , & trickle_params_pan_discovery );
1843
+ trickle_start (& cur -> ws_info -> trickle_pan_config_solicit , & cur -> ws_info -> trickle_params_pan_discovery );
1844
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config_solicit , & cur -> ws_info -> trickle_params_pan_discovery );
1847
1845
}
1848
1846
static void ws_bootstrap_rpl_scan_start (protocol_interface_info_entry_t * cur )
1849
1847
{
@@ -1880,7 +1878,7 @@ void ws_bootstrap_event_routing_ready(protocol_interface_info_entry_t *cur)
1880
1878
}
1881
1879
void ws_bootstrap_configuration_trickle_reset (protocol_interface_info_entry_t * cur )
1882
1880
{
1883
- trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery );
1881
+ trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery );
1884
1882
}
1885
1883
1886
1884
@@ -2185,7 +2183,7 @@ void ws_bootstrap_network_scan_process(protocol_interface_info_entry_t *cur)
2185
2183
2186
2184
if (!ws_bootstrap_network_found (cur )) {
2187
2185
// Next check will be after one trickle
2188
- cur -> bootsrap_state_machine_cnt += trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
2186
+ cur -> bootsrap_state_machine_cnt += cur -> ws_info -> trickle_params_pan_discovery .Imin + randLIB_get_8bit () % 50 ;
2189
2187
return ;
2190
2188
}
2191
2189
tr_info ("select network" );
@@ -2312,13 +2310,13 @@ void ws_bootstrap_state_machine(protocol_interface_info_entry_t *cur)
2312
2310
void ws_bootstrap_trickle_timer (protocol_interface_info_entry_t * cur , uint16_t ticks )
2313
2311
{
2314
2312
if (cur -> ws_info -> trickle_pas_running &&
2315
- trickle_timer (& cur -> ws_info -> trickle_pan_advertisement_solicit , & trickle_params_pan_discovery , ticks )) {
2313
+ trickle_timer (& cur -> ws_info -> trickle_pan_advertisement_solicit , & cur -> ws_info -> trickle_params_pan_discovery , ticks )) {
2316
2314
// send PAN advertisement solicit
2317
2315
tr_info ("Send PAN advertisement Solicit" );
2318
2316
ws_bootstrap_pan_advert_solicit (cur );
2319
2317
}
2320
2318
if (cur -> ws_info -> trickle_pcs_running &&
2321
- trickle_timer (& cur -> ws_info -> trickle_pan_config_solicit , & trickle_params_pan_discovery , ticks )) {
2319
+ trickle_timer (& cur -> ws_info -> trickle_pan_config_solicit , & cur -> ws_info -> trickle_params_pan_discovery , ticks )) {
2322
2320
// send PAN Configuration solicit
2323
2321
if (cur -> ws_info -> pas_requests > PCS_MAX ) {
2324
2322
// if MAX PCS sent restart discovery
@@ -2331,13 +2329,13 @@ void ws_bootstrap_trickle_timer(protocol_interface_info_entry_t *cur, uint16_t t
2331
2329
ws_bootstrap_pan_config_solicit (cur );
2332
2330
}
2333
2331
if (cur -> ws_info -> trickle_pa_running &&
2334
- trickle_timer (& cur -> ws_info -> trickle_pan_advertisement , & trickle_params_pan_discovery , ticks )) {
2332
+ trickle_timer (& cur -> ws_info -> trickle_pan_advertisement , & cur -> ws_info -> trickle_params_pan_discovery , ticks )) {
2335
2333
// send PAN advertisement
2336
2334
tr_info ("Send PAN advertisement" );
2337
2335
ws_bootstrap_pan_advert (cur );
2338
2336
}
2339
2337
if (cur -> ws_info -> trickle_pc_running &&
2340
- trickle_timer (& cur -> ws_info -> trickle_pan_config , & trickle_params_pan_discovery , ticks )) {
2338
+ trickle_timer (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery , ticks )) {
2341
2339
// send PAN Configuration
2342
2340
tr_info ("Send PAN configuration" );
2343
2341
ws_bootstrap_pan_config (cur );
0 commit comments