88
88
89
89
#define TRACE_GROUP "wsbs"
90
90
91
-
92
91
static void ws_bootstrap_event_handler (arm_event_s * event );
93
92
static int8_t ws_bootsrap_event_trig (ws_bootsrap_event_type_e event_type , int8_t interface_id , arm_library_event_priority_e priority , void * event_data );
94
-
95
93
static uint16_t ws_bootstrap_routing_cost_calculate (protocol_interface_info_entry_t * cur );
96
94
static uint16_t ws_bootstrap_rank_get (protocol_interface_info_entry_t * cur );
97
95
static uint16_t ws_bootstrap_min_rank_inc_get (protocol_interface_info_entry_t * cur );
98
-
99
96
static void ws_bootstrap_mac_security_enable (protocol_interface_info_entry_t * cur );
100
97
static void ws_bootstrap_nw_key_set (protocol_interface_info_entry_t * cur , uint8_t operation , uint8_t index , uint8_t * key );
101
98
static void ws_bootstrap_nw_key_clear (protocol_interface_info_entry_t * cur , uint8_t slot );
@@ -110,15 +107,12 @@ static void ws_bootstrap_pan_version_increment(protocol_interface_info_entry_t *
110
107
static ws_nud_table_entry_t * ws_nud_entry_discover (protocol_interface_info_entry_t * cur , void * neighbor );
111
108
static void ws_nud_entry_remove (protocol_interface_info_entry_t * cur , mac_neighbor_table_entry_t * entry_ptr );
112
109
static bool ws_neighbor_entry_nud_notify (mac_neighbor_table_entry_t * entry_ptr , void * user_data );
113
-
114
110
static void ws_bootstrap_dhcp_neighbour_update_cb (int8_t interface_id , uint8_t ll_addr [static 16 ]);
115
111
static void ws_bootstrap_dhcp_info_notify_cb (int8_t interface , dhcp_option_notify_t * options , dhcp_server_notify_info_t * server_info );
116
-
117
112
static void ws_bootstrap_test_procedure_trigger_timer (protocol_interface_info_entry_t * cur , uint32_t seconds );
118
113
119
114
uint16_t test_pan_version = 1 ;
120
115
121
-
122
116
static mac_neighbor_table_entry_t * ws_bootstrap_mac_neighbor_allocate (struct protocol_interface_info_entry * interface , const uint8_t * src64 )
123
117
{
124
118
mac_neighbor_table_entry_t * neighbor = mac_neighbor_table_entry_allocate (mac_neighbor_info (interface ), src64 );
@@ -136,7 +130,6 @@ static mac_neighbor_table_entry_t *ws_bootstrap_mac_neighbor_allocate(struct pro
136
130
}
137
131
138
132
mac_neighbor_table_entry_t * ws_bootstrap_mac_neighbor_add (struct protocol_interface_info_entry * interface , const uint8_t * src64 )
139
-
140
133
{
141
134
mac_neighbor_table_entry_t * neighbor = mac_neighbor_table_address_discover (mac_neighbor_info (interface ), src64 , MAC_ADDR_MODE_64_BIT );
142
135
if (neighbor ) {
@@ -277,6 +270,7 @@ static int ws_bootstrap_tasklet_init(protocol_interface_info_entry_t *cur)
277
270
278
271
return 0 ;
279
272
}
273
+
280
274
static void ws_nwk_event_post (protocol_interface_info_entry_t * cur , arm_nwk_interface_status_type_e posted_event )
281
275
{
282
276
arm_event_s event = {
@@ -292,6 +286,7 @@ static void ws_nwk_event_post(protocol_interface_info_entry_t *cur, arm_nwk_inte
292
286
tr_error ("nwk_net_event_post(): event send failed" );
293
287
}
294
288
}
289
+
295
290
static int8_t ws_bootsrap_event_trig (ws_bootsrap_event_type_e event_type , int8_t interface_id , arm_library_event_priority_e priority , void * event_data )
296
291
{
297
292
arm_event_s event = {
@@ -336,7 +331,6 @@ static ws_nud_table_entry_t *ws_nud_entry_get_free(protocol_interface_info_entry
336
331
return entry ;
337
332
}
338
333
339
-
340
334
void ws_nud_entry_remove_active (protocol_interface_info_entry_t * cur , void * neighbor )
341
335
{
342
336
ws_nud_table_entry_t * entry = ws_nud_entry_discover (cur , neighbor );
@@ -353,7 +347,6 @@ void ws_nud_entry_remove_active(protocol_interface_info_entry_t *cur, void *neig
353
347
}
354
348
}
355
349
356
-
357
350
static ws_nud_table_entry_t * ws_nud_entry_discover (protocol_interface_info_entry_t * cur , void * neighbor )
358
351
{
359
352
ns_list_foreach (ws_nud_table_entry_t , entry , & cur -> ws_info -> active_nud_process ) {
@@ -364,7 +357,6 @@ static ws_nud_table_entry_t *ws_nud_entry_discover(protocol_interface_info_entry
364
357
return NULL ;
365
358
}
366
359
367
-
368
360
static void ws_nud_state_clean (protocol_interface_info_entry_t * cur , ws_nud_table_entry_t * entry )
369
361
{
370
362
mac_neighbor_table_entry_t * neighbor = entry -> neighbor_info ;
@@ -383,6 +375,7 @@ static void ws_nud_entry_remove(protocol_interface_info_entry_t *cur, mac_neighb
383
375
ws_nud_state_clean (cur , nud_entry );
384
376
}
385
377
}
378
+
386
379
if_address_entry_t * ws_probe_aro_address (protocol_interface_info_entry_t * interface )
387
380
{
388
381
if (interface -> global_address_available ) {
@@ -395,7 +388,6 @@ if_address_entry_t *ws_probe_aro_address(protocol_interface_info_entry_t *interf
395
388
return NULL ;
396
389
}
397
390
398
-
399
391
static bool ws_nud_message_build (protocol_interface_info_entry_t * cur , mac_neighbor_table_entry_t * neighbor , bool nud_process )
400
392
{
401
393
//Send NS
@@ -483,7 +475,7 @@ void ws_nud_active_timer(protocol_interface_info_entry_t *cur, uint16_t ticks)
483
475
}
484
476
}
485
477
486
- static fhss_ws_neighbor_timing_info_t * ws_get_neighbor_info (const fhss_api_t * api , uint8_t eui64 [8 ])
478
+ static fhss_ws_neighbor_timing_info_t * ws_bootstrap_get_neighbor_info (const fhss_api_t * api , uint8_t eui64 [8 ])
487
479
{
488
480
protocol_interface_info_entry_t * cur = protocol_stack_interface_info_get_by_fhss_api (api );
489
481
if (!cur || !cur -> mac_parameters || !mac_neighbor_info (cur )) {
@@ -504,6 +496,7 @@ static fhss_ws_neighbor_timing_info_t *ws_get_neighbor_info(const fhss_api_t *ap
504
496
}
505
497
return & temp_entry -> neigh_info_list .fhss_data ;
506
498
}
499
+
507
500
void ws_bootstrap_llc_hopping_update (struct protocol_interface_info_entry * cur , const fhss_ws_configuration_t * fhss_configuration )
508
501
{
509
502
cur -> ws_info -> hopping_schdule .uc_fixed_channel = fhss_configuration -> unicast_fixed_channel ;
@@ -517,7 +510,7 @@ void ws_bootstrap_llc_hopping_update(struct protocol_interface_info_entry *cur,
517
510
cur -> ws_info -> hopping_schdule .fhss_bsi = fhss_configuration -> bsi ;
518
511
}
519
512
520
- static uint8_t ws_generate_exluded_channel_list_from_active_channels (ws_excluded_channel_data_t * excluded_data , const uint32_t * selected_channel_mask , const uint32_t * global_channel_mask , uint16_t number_of_channels )
513
+ static uint8_t ws_bootstrap_generate_exluded_channel_list_from_active_channels (ws_excluded_channel_data_t * excluded_data , const uint32_t * selected_channel_mask , const uint32_t * global_channel_mask , uint16_t number_of_channels )
521
514
{
522
515
bool active_range = false;
523
516
@@ -580,7 +573,7 @@ static uint8_t ws_generate_exluded_channel_list_from_active_channels(ws_excluded
580
573
return channel_plan ;
581
574
}
582
575
583
- void ws_fhss_configure_channel_masks (protocol_interface_info_entry_t * cur , fhss_ws_configuration_t * fhss_configuration )
576
+ void ws_bootstrap_fhss_configure_channel_masks (protocol_interface_info_entry_t * cur , fhss_ws_configuration_t * fhss_configuration )
584
577
{
585
578
fhss_configuration -> channel_mask_size = cur -> ws_info -> hopping_schdule .number_of_channels ;
586
579
ws_common_generate_channel_list (fhss_configuration -> channel_mask , cur -> ws_info -> hopping_schdule .number_of_channels , cur -> ws_info -> hopping_schdule .regulatory_domain , cur -> ws_info -> hopping_schdule .operating_class , cur -> ws_info -> hopping_schdule .channel_plan_id );
@@ -590,18 +583,18 @@ void ws_fhss_configure_channel_masks(protocol_interface_info_entry_t *cur, fhss_
590
583
fhss_configuration -> unicast_channel_mask [n ] &= cur -> ws_info -> cfg -> fhss .fhss_channel_mask [n ];
591
584
}
592
585
//Update Exluded channels
593
- cur -> ws_info -> hopping_schdule .channel_plan = ws_generate_exluded_channel_list_from_active_channels (& cur -> ws_info -> hopping_schdule .excluded_channels , fhss_configuration -> unicast_channel_mask , fhss_configuration -> channel_mask , cur -> ws_info -> hopping_schdule .number_of_channels );
586
+ cur -> ws_info -> hopping_schdule .channel_plan = ws_bootstrap_generate_exluded_channel_list_from_active_channels (& cur -> ws_info -> hopping_schdule .excluded_channels , fhss_configuration -> unicast_channel_mask , fhss_configuration -> channel_mask , cur -> ws_info -> hopping_schdule .number_of_channels );
594
587
}
595
588
596
- static int8_t ws_fhss_initialize (protocol_interface_info_entry_t * cur )
589
+ static int8_t ws_bootstrap_fhss_initialize (protocol_interface_info_entry_t * cur )
597
590
{
598
591
fhss_api_t * fhss_api = ns_sw_mac_get_fhss_api (cur -> mac_api );
599
592
fhss_ws_configuration_t fhss_configuration ;
600
593
memset (& fhss_configuration , 0 , sizeof (fhss_ws_configuration_t ));
601
594
if (!fhss_api ) {
602
595
// When FHSS doesn't exist yet, create one
603
- ws_fhss_configure_channel_masks (cur , & fhss_configuration );
604
- ws_fhss_set_defaults (cur , & fhss_configuration );
596
+ ws_bootstrap_fhss_configure_channel_masks (cur , & fhss_configuration );
597
+ ws_bootstrap_fhss_set_defaults (cur , & fhss_configuration );
605
598
fhss_api = ns_fhss_ws_create (& fhss_configuration , cur -> ws_info -> fhss_timer_ptr );
606
599
607
600
if (!fhss_api ) {
@@ -617,7 +610,7 @@ static int8_t ws_fhss_initialize(protocol_interface_info_entry_t *cur)
617
610
return 0 ;
618
611
}
619
612
620
- int8_t ws_fhss_set_defaults (protocol_interface_info_entry_t * cur , fhss_ws_configuration_t * fhss_configuration )
613
+ int8_t ws_bootstrap_fhss_set_defaults (protocol_interface_info_entry_t * cur , fhss_ws_configuration_t * fhss_configuration )
621
614
{
622
615
fhss_configuration -> fhss_uc_dwell_interval = cur -> ws_info -> cfg -> fhss .fhss_uc_dwell_interval ;
623
616
fhss_configuration -> ws_uc_channel_function = (fhss_ws_channel_functions )cur -> ws_info -> cfg -> fhss .fhss_uc_channel_function ;
@@ -630,19 +623,20 @@ int8_t ws_fhss_set_defaults(protocol_interface_info_entry_t *cur, fhss_ws_config
630
623
fhss_configuration -> broadcast_fixed_channel = cur -> ws_info -> cfg -> fhss .fhss_bc_fixed_channel ;
631
624
return 0 ;
632
625
}
633
- static bool ws_channel_allowed (uint8_t channel , uint32_t * channel_mask )
626
+
627
+ static bool ws_bootstrap_channel_allowed (uint8_t channel , uint32_t * channel_mask )
634
628
{
635
629
if ((1U << (channel % 32 )) & (channel_mask [channel / 32 ])) {
636
630
return true;
637
631
}
638
632
return false;
639
633
}
640
634
641
- uint16_t ws_randomize_fixed_channel (uint16_t configured_fixed_channel , uint8_t number_of_channels , uint32_t * channel_mask )
635
+ uint16_t ws_bootstrap_randomize_fixed_channel (uint16_t configured_fixed_channel , uint8_t number_of_channels , uint32_t * channel_mask )
642
636
{
643
637
if (configured_fixed_channel == 0xFFFF ) {
644
638
uint16_t random_channel = randLIB_get_random_in_range (0 , number_of_channels - 1 );
645
- while (ws_channel_allowed (random_channel , channel_mask ) == false) {
639
+ while (ws_bootstrap_channel_allowed (random_channel , channel_mask ) == false) {
646
640
random_channel = randLIB_get_random_in_range (0 , number_of_channels - 1 );
647
641
}
648
642
return random_channel ;
@@ -651,46 +645,18 @@ uint16_t ws_randomize_fixed_channel(uint16_t configured_fixed_channel, uint8_t n
651
645
}
652
646
}
653
647
654
- int8_t ws_fhss_configure (protocol_interface_info_entry_t * cur , bool discovery )
655
- {
656
- // Read configuration of existing FHSS and start using the default values for any network
657
- fhss_ws_configuration_t fhss_configuration = ws_common_get_current_fhss_configuration (cur );
658
- ws_fhss_set_defaults (cur , & fhss_configuration );
659
- ws_fhss_configure_channel_masks (cur , & fhss_configuration );
660
-
661
- // Discovery is done using fixed channel
662
- if (discovery ) {
663
- fhss_configuration .ws_uc_channel_function = WS_FIXED_CHANNEL ;
664
- } else {
665
- fhss_configuration .ws_uc_channel_function = (fhss_ws_channel_functions )cur -> ws_info -> cfg -> fhss .fhss_uc_channel_function ;
666
- }
667
- fhss_configuration .ws_bc_channel_function = WS_FIXED_CHANNEL ;
668
- fhss_configuration .fhss_broadcast_interval = 0 ;
669
- uint8_t tmp_uc_fixed_channel = ws_randomize_fixed_channel (cur -> ws_info -> cfg -> fhss .fhss_uc_fixed_channel , cur -> ws_info -> hopping_schdule .number_of_channels , fhss_configuration .channel_mask );
670
- uint8_t tmp_bc_fixed_channel = ws_randomize_fixed_channel (cur -> ws_info -> cfg -> fhss .fhss_bc_fixed_channel , cur -> ws_info -> hopping_schdule .number_of_channels , fhss_configuration .channel_mask );
671
- fhss_configuration .unicast_fixed_channel = tmp_uc_fixed_channel ;
672
- fhss_configuration .broadcast_fixed_channel = tmp_bc_fixed_channel ;
673
- ns_fhss_ws_configuration_set (cur -> ws_info -> fhss_api , & fhss_configuration );
674
- ns_fhss_ws_set_hop_count (cur -> ws_info -> fhss_api , 0xff );
675
- ws_bootstrap_llc_hopping_update (cur , & fhss_configuration );
676
-
677
- return 0 ;
678
- }
679
-
680
- static int8_t ws_fhss_enable (protocol_interface_info_entry_t * cur )
648
+ static int8_t ws_bootstrap_fhss_enable (protocol_interface_info_entry_t * cur )
681
649
{
682
650
fhss_ws_configuration_t fhss_configuration = ws_common_get_current_fhss_configuration (cur );
683
651
684
652
// Set the LLC information to follow the actual fhss settings
685
653
ws_bootstrap_llc_hopping_update (cur , & fhss_configuration );
686
654
687
655
// Set neighbor info callback
688
- if (ns_fhss_set_neighbor_info_fp (cur -> ws_info -> fhss_api , & ws_get_neighbor_info )) {
656
+ if (ns_fhss_set_neighbor_info_fp (cur -> ws_info -> fhss_api , & ws_bootstrap_get_neighbor_info )) {
689
657
return -1 ;
690
658
}
691
- if (cur -> bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER ) {
692
- ns_fhss_ws_set_hop_count (cur -> ws_info -> fhss_api , 0 );
693
- }
659
+
694
660
return 0 ;
695
661
}
696
662
@@ -709,7 +675,7 @@ void ws_bootstrap_primary_parent_set(struct protocol_interface_info_entry *cur,
709
675
// Learning broadcast network configuration
710
676
if (neighbor_info -> ws_neighbor -> broadcast_shedule_info_stored ) {
711
677
if (synch_req != WS_EAPOL_PARENT_SYNCH ) {
712
- ws_fhss_set_defaults (cur , & fhss_configuration );
678
+ ws_bootstrap_fhss_set_defaults (cur , & fhss_configuration );
713
679
}
714
680
fhss_configuration .ws_bc_channel_function = (fhss_ws_channel_functions )neighbor_info -> ws_neighbor -> fhss_data .bc_timing_info .broadcast_channel_function ;
715
681
if (fhss_configuration .ws_bc_channel_function == WS_FIXED_CHANNEL ) {
@@ -887,7 +853,7 @@ static int8_t ws_bootstrap_up(protocol_interface_info_entry_t *cur)
887
853
tr_error ("Interface not yet fully configured" );
888
854
return -2 ;
889
855
}
890
- if (ws_fhss_initialize (cur ) != 0 ) {
856
+ if (ws_bootstrap_fhss_initialize (cur ) != 0 ) {
891
857
tr_error ("fhss initialization failed" );
892
858
return -3 ;
893
859
}
@@ -1991,7 +1957,7 @@ static void ws_bootstrap_mac_activate(protocol_interface_info_entry_t *cur, uint
1991
1957
void ws_bootstrap_fhss_activate (protocol_interface_info_entry_t * cur )
1992
1958
{
1993
1959
tr_debug ("FHSS activate" );
1994
- ws_fhss_enable (cur );
1960
+ ws_bootstrap_fhss_enable (cur );
1995
1961
ws_llc_hopping_schedule_config (cur , & cur -> ws_info -> hopping_schdule );
1996
1962
// Only supporting fixed channel
1997
1963
@@ -2019,7 +1985,7 @@ void ws_bootstrap_ip_stack_activate(protocol_interface_info_entry_t *cur)
2019
1985
ws_bootstrap_ip_stack_reset (cur );
2020
1986
}
2021
1987
2022
- static void ws_set_fhss_hop (protocol_interface_info_entry_t * cur )
1988
+ static void ws_bootstrap_set_fhss_hop (protocol_interface_info_entry_t * cur )
2023
1989
{
2024
1990
uint16_t own_rank = ws_bootstrap_rank_get (cur );
2025
1991
uint16_t rank_inc = ws_bootstrap_min_rank_inc_get (cur );
@@ -2341,7 +2307,7 @@ static void ws_bootstrap_rpl_callback(rpl_event_t event, void *handle)
2341
2307
ws_bootstrap_advertise_start (cur );
2342
2308
}
2343
2309
2344
- ws_set_fhss_hop (cur );
2310
+ ws_bootstrap_set_fhss_hop (cur );
2345
2311
// Set retry configuration for bootstrap ready state
2346
2312
ws_bootstrap_configure_max_retries (cur , WS_MAX_FRAME_RETRIES );
2347
2313
// Set TX failure request restart configuration
@@ -2566,7 +2532,7 @@ static uint16_t ws_bootstrap_routing_cost_calculate(protocol_interface_info_entr
2566
2532
return ws_neighbor -> routing_cost + etx ;
2567
2533
}
2568
2534
2569
- static struct rpl_instance * ws_get_rpl_instance (protocol_interface_info_entry_t * cur )
2535
+ static struct rpl_instance * ws_bootstrap_get_rpl_instance (protocol_interface_info_entry_t * cur )
2570
2536
{
2571
2537
if (!cur || !cur -> rpl_domain ) {
2572
2538
return NULL ;
@@ -2581,7 +2547,7 @@ static struct rpl_instance *ws_get_rpl_instance(protocol_interface_info_entry_t
2581
2547
2582
2548
static uint16_t ws_bootstrap_rank_get (protocol_interface_info_entry_t * cur )
2583
2549
{
2584
- struct rpl_instance * rpl_instance = ws_get_rpl_instance (cur );
2550
+ struct rpl_instance * rpl_instance = ws_bootstrap_get_rpl_instance (cur );
2585
2551
if (!rpl_instance ) {
2586
2552
return 0xffff ;
2587
2553
}
@@ -2591,7 +2557,7 @@ static uint16_t ws_bootstrap_rank_get(protocol_interface_info_entry_t *cur)
2591
2557
2592
2558
static uint16_t ws_bootstrap_min_rank_inc_get (protocol_interface_info_entry_t * cur )
2593
2559
{
2594
- struct rpl_instance * rpl_instance = ws_get_rpl_instance (cur );
2560
+ struct rpl_instance * rpl_instance = ws_bootstrap_get_rpl_instance (cur );
2595
2561
if (!rpl_instance ) {
2596
2562
return 0xffff ;
2597
2563
}
@@ -2923,7 +2889,7 @@ void ws_bootstrap_configuration_trickle_reset(protocol_interface_info_entry_t *c
2923
2889
trickle_inconsistent_heard (& cur -> ws_info -> trickle_pan_config , & cur -> ws_info -> trickle_params_pan_discovery );
2924
2890
}
2925
2891
2926
- static void ws_set_asynch_channel_list (protocol_interface_info_entry_t * cur , asynch_request_t * async_req )
2892
+ static void ws_bootstrap_set_asynch_channel_list (protocol_interface_info_entry_t * cur , asynch_request_t * async_req )
2927
2893
{
2928
2894
memset (& async_req -> channel_list , 0 , sizeof (channel_list_s ));
2929
2895
if (cur -> ws_info -> cfg -> fhss .fhss_uc_channel_function == WS_FIXED_CHANNEL ) {
@@ -2947,7 +2913,7 @@ static void ws_bootstrap_pan_advert_solicit(protocol_interface_info_entry_t *cur
2947
2913
async_req .wp_requested_nested_ie_list .us_ie = true;
2948
2914
async_req .wp_requested_nested_ie_list .net_name_ie = true;
2949
2915
2950
- ws_set_asynch_channel_list (cur , & async_req );
2916
+ ws_bootstrap_set_asynch_channel_list (cur , & async_req );
2951
2917
2952
2918
2953
2919
async_req .security .SecurityLevel = 0 ;
@@ -2966,7 +2932,7 @@ static void ws_bootstrap_pan_config_solicit(protocol_interface_info_entry_t *cur
2966
2932
async_req .wp_requested_nested_ie_list .us_ie = true;
2967
2933
async_req .wp_requested_nested_ie_list .net_name_ie = true;
2968
2934
2969
- ws_set_asynch_channel_list (cur , & async_req );
2935
+ ws_bootstrap_set_asynch_channel_list (cur , & async_req );
2970
2936
async_req .security .SecurityLevel = 0 ;
2971
2937
2972
2938
ws_stats_update (cur , STATS_WS_ASYNCH_TX_PCS , 1 );
@@ -2987,7 +2953,7 @@ static void ws_bootstrap_pan_advert(protocol_interface_info_entry_t *cur)
2987
2953
async_req .wp_requested_nested_ie_list .phy_cap_ie = true;
2988
2954
}
2989
2955
2990
- ws_set_asynch_channel_list (cur , & async_req );
2956
+ ws_bootstrap_set_asynch_channel_list (cur , & async_req );
2991
2957
async_req .security .SecurityLevel = 0 ;
2992
2958
2993
2959
if (cur -> bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER ) {
@@ -3021,7 +2987,7 @@ static void ws_bootstrap_pan_config(protocol_interface_info_entry_t *cur)
3021
2987
async_req .wp_requested_nested_ie_list .lfn_gtk_version_ie = ws_lfn_version_learned (cur );
3022
2988
}
3023
2989
3024
- ws_set_asynch_channel_list (cur , & async_req );
2990
+ ws_bootstrap_set_asynch_channel_list (cur , & async_req );
3025
2991
3026
2992
async_req .security .SecurityLevel = mac_helper_default_security_level_get (cur );
3027
2993
async_req .security .KeyIdMode = mac_helper_default_security_key_id_mode_get (cur );
@@ -3436,8 +3402,6 @@ static uint16_t ws_bootstrap_packet_per_seconds(protocol_interface_info_entry_t
3436
3402
return data_rate / 5 ;
3437
3403
}
3438
3404
3439
-
3440
-
3441
3405
void ws_bootstrap_packet_congestion_init (protocol_interface_info_entry_t * cur )
3442
3406
{
3443
3407
random_early_detection_free (cur -> random_early_detection );
0 commit comments