Skip to content

Commit 3ad28c1

Browse files
author
Mika Leppänen
authored
Added throttling of number of simultaneous EAPOL authentications
Authentication count is throttled based on border router TX queue and memory.
1 parent 0b84299 commit 3ad28c1

File tree

13 files changed

+152
-60
lines changed

13 files changed

+152
-60
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99

1010
### Changes
11-
*
11+
* Added throttling of number of simultaneous EAPOL authentications based on Border Router TX queue size
1212

1313
### Bugfix
1414
*

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ static void ws_bootstrap_nw_frame_counter_read(protocol_interface_info_entry_t *
104104
static void ws_bootstrap_nw_info_updated(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, uint16_t pan_version, char *network_name);
105105
static void ws_bootstrap_authentication_completed(protocol_interface_info_entry_t *cur, auth_result_e result, uint8_t *target_eui_64);
106106
static const uint8_t *ws_bootstrap_authentication_next_target(protocol_interface_info_entry_t *cur, const uint8_t *previous_eui_64, uint16_t *pan_id);
107+
static bool ws_bootstrap_congestion_get(protocol_interface_info_entry_t *interface_ptr, uint16_t active_supp);
107108
static void ws_bootstrap_pan_version_increment(protocol_interface_info_entry_t *cur);
108109
static ws_nud_table_entry_t *ws_nud_entry_discover(protocol_interface_info_entry_t *cur, void *neighbor);
109110
static void ws_nud_entry_remove(protocol_interface_info_entry_t *cur, mac_neighbor_table_entry_t *entry_ptr);
@@ -2316,7 +2317,7 @@ int ws_bootstrap_init(int8_t interface_id, net_6lowpan_mode_e bootstrap_mode)
23162317
ret_val = -4;
23172318
goto init_fail;
23182319
}
2319-
if (ws_pae_controller_cb_register(cur, &ws_bootstrap_authentication_completed, &ws_bootstrap_authentication_next_target, &ws_bootstrap_nw_key_set, &ws_bootstrap_nw_key_clear, &ws_bootstrap_nw_key_index_set, &ws_bootstrap_nw_frame_counter_set, &ws_bootstrap_nw_frame_counter_read, &ws_bootstrap_pan_version_increment, &ws_bootstrap_nw_info_updated) < 0) {
2320+
if (ws_pae_controller_cb_register(cur, &ws_bootstrap_authentication_completed, &ws_bootstrap_authentication_next_target, &ws_bootstrap_nw_key_set, &ws_bootstrap_nw_key_clear, &ws_bootstrap_nw_key_index_set, &ws_bootstrap_nw_frame_counter_set, &ws_bootstrap_nw_frame_counter_read, &ws_bootstrap_pan_version_increment, &ws_bootstrap_nw_info_updated, &ws_bootstrap_congestion_get) < 0) {
23202321
ret_val = -4;
23212322
goto init_fail;
23222323
}
@@ -3136,6 +3137,70 @@ static const uint8_t *ws_bootstrap_authentication_next_target(protocol_interface
31363137
return previous_eui_64;
31373138
}
31383139

3140+
static bool ws_bootstrap_congestion_get(protocol_interface_info_entry_t *interface_ptr, uint16_t active_supp)
3141+
{
3142+
if (interface_ptr == NULL || interface_ptr->random_early_detection == NULL) {
3143+
return false;
3144+
}
3145+
3146+
bool return_value = false;
3147+
static struct red_info_s *red_info = NULL;
3148+
uint16_t average = 0;
3149+
uint8_t active_max = 0;
3150+
3151+
//TODO implement API for HEAP info request
3152+
uint32_t heap_size;
3153+
const mem_stat_t *mem_stats = ns_dyn_mem_get_mem_stat();
3154+
if (mem_stats) {
3155+
heap_size = mem_stats->heap_sector_size;
3156+
} else {
3157+
heap_size = 0;
3158+
}
3159+
3160+
/*
3161+
* For different memory sizes the max simultaneous authentications will be
3162+
* 32k: (32k / 50k) * 2 + 1 = 1
3163+
* 65k: (65k / 50k) * 2 + 1 = 3
3164+
* 250k: (250k / 50k) * 2 + 1 = 11
3165+
* 1000k: (1000k / 50k) * 2 + 1 = 41
3166+
* 2000k: (2000k / 50k) * 2 + 1 = 50 (upper limit)
3167+
*/
3168+
active_max = (heap_size / 50000) * 2 + 1;
3169+
if (active_max > 50) {
3170+
active_max = 50;
3171+
}
3172+
3173+
// Maximum for active supplicants based on memory reached, fail
3174+
if (active_supp >= active_max) {
3175+
return_value = true;
3176+
goto congestion_get_end;
3177+
}
3178+
3179+
// Always allow at least five negotiations (if memory does not limit)
3180+
if (active_supp < 5) {
3181+
goto congestion_get_end;
3182+
}
3183+
3184+
if (red_info == NULL) {
3185+
red_info = random_early_detection_create(
3186+
interface_ptr->ws_info->cfg->sec_prot.max_simult_sec_neg_tx_queue_min,
3187+
interface_ptr->ws_info->cfg->sec_prot.max_simult_sec_neg_tx_queue_max,
3188+
100, RED_AVERAGE_WEIGHT_DISABLED);
3189+
}
3190+
if (red_info == NULL) {
3191+
goto congestion_get_end;
3192+
}
3193+
3194+
average = random_early_detetction_aq_read(interface_ptr->random_early_detection);
3195+
average = random_early_detetction_aq_calc(red_info, average);
3196+
return_value = random_early_detection_congestion_check(red_info);
3197+
3198+
congestion_get_end:
3199+
tr_info("Active supplicant limit, active: %i max: %i averageQ: %i drop: %s", active_supp, active_max, average, return_value ? "T" : "F");
3200+
3201+
return return_value;
3202+
}
3203+
31393204
// Start configuration learning
31403205
static void ws_bootstrap_start_configuration_learn(protocol_interface_info_entry_t *cur)
31413206
{

source/6LoWPAN/ws/ws_cfg_settings.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,6 @@ static void ws_cfg_network_size_config_set_small(ws_cfg_nw_size_t *cfg)
457457
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
458458
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
459459

460-
cfg->sec_prot.sec_max_ongoing_authentication = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_SMALL;
461-
462460
cfg->sec_prot.initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
463461
cfg->sec_prot.initial_key_imin = SMALL_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
464462
cfg->sec_prot.initial_key_imax = SMALL_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
@@ -502,8 +500,6 @@ static void ws_cfg_network_size_config_set_medium(ws_cfg_nw_size_t *cfg)
502500
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
503501
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
504502

505-
cfg->sec_prot.sec_max_ongoing_authentication = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_MEDIUM;
506-
507503
cfg->sec_prot.initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
508504
cfg->sec_prot.initial_key_imin = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
509505
cfg->sec_prot.initial_key_imax = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
@@ -546,8 +542,6 @@ static void ws_cfg_network_size_config_set_large(ws_cfg_nw_size_t *cfg)
546542
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
547543
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_LARGE;
548544

549-
cfg->sec_prot.sec_max_ongoing_authentication = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_LARGE;
550-
551545
cfg->sec_prot.initial_key_retry_delay = NONE_INITIAL_KEY_RETRY_TIMER;
552546
cfg->sec_prot.initial_key_imin = LARGE_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
553547
cfg->sec_prot.initial_key_imax = LARGE_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
@@ -591,8 +585,6 @@ static void ws_cfg_network_size_config_set_xlarge(ws_cfg_nw_size_t *cfg)
591585
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
592586
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_LARGE;
593587

594-
cfg->sec_prot.sec_max_ongoing_authentication = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_LARGE;
595-
596588
cfg->sec_prot.initial_key_retry_delay = NONE_INITIAL_KEY_RETRY_TIMER;
597589
cfg->sec_prot.initial_key_imin = EXTRA_LARGE_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
598590
cfg->sec_prot.initial_key_imax = EXTRA_LARGE_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
@@ -635,8 +627,6 @@ static void ws_cfg_network_size_config_set_certificate(ws_cfg_nw_size_t *cfg)
635627
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
636628
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
637629

638-
cfg->sec_prot.sec_max_ongoing_authentication = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_SMALL;
639-
640630
cfg->sec_prot.initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
641631
cfg->sec_prot.initial_key_imin = SMALL_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
642632
cfg->sec_prot.initial_key_imax = SMALL_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
@@ -1237,7 +1227,8 @@ static int8_t ws_cfg_sec_prot_default_set(ws_sec_prot_cfg_t *cfg)
12371227
cfg->sec_prot_trickle_imax = SEC_PROT_SMALL_IMAX;
12381228
cfg->sec_prot_trickle_timer_exp = 2;
12391229
cfg->sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
1240-
cfg->sec_max_ongoing_authentication = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_MEDIUM;
1230+
cfg->max_simult_sec_neg_tx_queue_min = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_TX_QUEUE_MIN;
1231+
cfg->max_simult_sec_neg_tx_queue_max = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_TX_QUEUE_MAX;
12411232
cfg->initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
12421233
cfg->initial_key_imin = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
12431234
cfg->initial_key_imax = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
@@ -1263,7 +1254,8 @@ int8_t ws_cfg_sec_prot_validate(ws_sec_prot_cfg_t *cfg, ws_sec_prot_cfg_t *new_c
12631254
cfg->sec_prot_trickle_imax != new_cfg->sec_prot_trickle_imax ||
12641255
cfg->sec_prot_trickle_timer_exp != new_cfg->sec_prot_trickle_timer_exp ||
12651256
cfg->sec_prot_retry_timeout != new_cfg->sec_prot_retry_timeout ||
1266-
cfg->sec_max_ongoing_authentication != new_cfg->sec_max_ongoing_authentication ||
1257+
cfg->max_simult_sec_neg_tx_queue_min != new_cfg->max_simult_sec_neg_tx_queue_min ||
1258+
cfg->max_simult_sec_neg_tx_queue_max != new_cfg->max_simult_sec_neg_tx_queue_max ||
12671259
cfg->initial_key_retry_delay != new_cfg->initial_key_retry_delay ||
12681260
cfg->initial_key_imin != new_cfg->initial_key_retry_delay ||
12691261
cfg->initial_key_imax != new_cfg->initial_key_retry_delay ||

source/6LoWPAN/ws/ws_cfg_settings.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ typedef struct ws_sec_prot_cfg_s {
115115
uint16_t sec_prot_trickle_imin; /**< Security protocol trickle parameters Imin; seconds; default 30 */
116116
uint16_t sec_prot_trickle_imax; /**< Security protocol trickle parameters Imax; seconds; default 90 */
117117
uint8_t sec_prot_trickle_timer_exp; /**< Security protocol trickle timer expirations; default 2 */
118-
uint16_t sec_max_ongoing_authentication; /**< Pae authenticator max Accept ongoing authentication count */
118+
uint16_t max_simult_sec_neg_tx_queue_min; /**< PAE authenticator max simultaneous security negotiations TX queue minimum */
119+
uint16_t max_simult_sec_neg_tx_queue_max; /**< PAE authenticator max simultaneous security negotiations TX queue maximum */
119120
uint16_t initial_key_retry_delay; /**< Delay before starting initial key trickle; seconds; default 120 */
120121
uint16_t initial_key_imin; /**< Initial key trickle Imin; seconds; default 360 */
121122
uint16_t initial_key_imax; /**< Initial key trickle Imax; seconds; default 720 */

source/6LoWPAN/ws/ws_config.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,8 @@ extern uint8_t DEVICE_MIN_SENS;
254254
#define SEC_PROT_TIMER_EXPIRATIONS 2 // Number of retries
255255

256256
// Maximum number of simultaneous security negotiations
257-
#define MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_SMALL 20
258-
#define MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_MEDIUM 20
259-
#define MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_LARGE 50
257+
#define MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_TX_QUEUE_MIN 64
258+
#define MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_TX_QUEUE_MAX 192
260259

261260
/*
262261
* Security protocol timer configuration parameters

source/6LoWPAN/ws/ws_pae_auth.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ typedef struct {
9393
ws_pae_auth_nw_key_index_set *nw_key_index_set; /**< Key index set callback */
9494
ws_pae_auth_nw_info_updated *nw_info_updated; /**< Security keys network info updated callback */
9595
ws_pae_auth_ip_addr_get *ip_addr_get; /**< IP address get callback */
96+
ws_pae_auth_congestion_get *congestion_get; /**< Congestion get callback */
9697
supp_list_t active_supp_list; /**< List of active supplicants */
9798
shared_comp_list_t shared_comp_list; /**< Shared component list */
9899
arm_event_storage_t *timer; /**< Timer */
@@ -128,6 +129,7 @@ static bool ws_pae_auth_timer_running(pae_auth_t *pae_auth);
128129
static void ws_pae_auth_kmp_service_addr_get(kmp_service_t *service, kmp_api_t *kmp, kmp_addr_t *local_addr, kmp_addr_t *remote_addr);
129130
static void ws_pae_auth_kmp_service_ip_addr_get(kmp_service_t *service, kmp_api_t *kmp, uint8_t *address);
130131
static kmp_api_t *ws_pae_auth_kmp_service_api_get(kmp_service_t *service, kmp_api_t *kmp, kmp_type_e type);
132+
static bool ws_pae_auth_active_limit_reached(uint16_t active_supp, pae_auth_t *pae_auth);
131133
static kmp_api_t *ws_pae_auth_kmp_incoming_ind(kmp_service_t *service, uint8_t msg_if_instance_id, kmp_type_e type, const kmp_addr_t *addr, const void *pdu, uint16_t size);
132134
static void ws_pae_auth_kmp_api_create_confirm(kmp_api_t *kmp, kmp_result_e result);
133135
static void ws_pae_auth_kmp_api_create_indication(kmp_api_t *kmp, kmp_type_e type, kmp_addr_t *addr);
@@ -166,6 +168,9 @@ int8_t ws_pae_auth_init(protocol_interface_info_entry_t *interface_ptr, sec_prot
166168
pae_auth->nw_key_insert = NULL;
167169
pae_auth->nw_keys_remove = NULL;
168170
pae_auth->nw_key_index_set = NULL;
171+
pae_auth->nw_info_updated = NULL;
172+
pae_auth->ip_addr_get = NULL;
173+
pae_auth->congestion_get = NULL;
169174

170175
pae_auth->next_gtks = next_gtks;
171176
pae_auth->certs = certs;
@@ -302,7 +307,7 @@ int8_t ws_pae_auth_delete(protocol_interface_info_entry_t *interface_ptr)
302307
return 0;
303308
}
304309

305-
void ws_pae_auth_cb_register(protocol_interface_info_entry_t *interface_ptr, ws_pae_auth_gtk_hash_set *hash_set, ws_pae_auth_nw_key_insert *nw_key_insert, ws_pae_auth_nw_key_index_set *nw_key_index_set, ws_pae_auth_nw_info_updated *nw_info_updated, ws_pae_auth_ip_addr_get *ip_addr_get)
310+
void ws_pae_auth_cb_register(protocol_interface_info_entry_t *interface_ptr, ws_pae_auth_gtk_hash_set *hash_set, ws_pae_auth_nw_key_insert *nw_key_insert, ws_pae_auth_nw_key_index_set *nw_key_index_set, ws_pae_auth_nw_info_updated *nw_info_updated, ws_pae_auth_ip_addr_get *ip_addr_get, ws_pae_auth_congestion_get *congestion_get)
306311
{
307312
if (!interface_ptr) {
308313
return;
@@ -318,6 +323,7 @@ void ws_pae_auth_cb_register(protocol_interface_info_entry_t *interface_ptr, ws_
318323
pae_auth->nw_key_index_set = nw_key_index_set;
319324
pae_auth->nw_info_updated = nw_info_updated;
320325
pae_auth->ip_addr_get = ip_addr_get;
326+
pae_auth->congestion_get = congestion_get;
321327
}
322328

323329
void ws_pae_auth_start(protocol_interface_info_entry_t *interface_ptr)
@@ -936,6 +942,11 @@ static kmp_api_t *ws_pae_auth_kmp_service_api_get(kmp_service_t *service, kmp_ap
936942
return ws_pae_lib_kmp_list_type_get(&supp_entry->kmp_list, type);
937943
}
938944

945+
static bool ws_pae_auth_active_limit_reached(uint16_t active_supp, pae_auth_t *pae_auth)
946+
{
947+
return pae_auth->congestion_get(pae_auth->interface_ptr, active_supp);
948+
}
949+
939950
static kmp_api_t *ws_pae_auth_kmp_incoming_ind(kmp_service_t *service, uint8_t msg_if_instance_id, kmp_type_e type, const kmp_addr_t *addr, const void *pdu, uint16_t size)
940951
{
941952
pae_auth_t *pae_auth = ws_pae_auth_by_kmp_service_get(service);
@@ -954,8 +965,9 @@ static kmp_api_t *ws_pae_auth_kmp_incoming_ind(kmp_service_t *service, uint8_t m
954965
supp_entry_t *supp_entry = ws_pae_lib_supp_list_entry_eui_64_get(&pae_auth->active_supp_list, kmp_address_eui_64_get(addr));
955966

956967
if (!supp_entry) {
968+
uint16_t active_supp = ns_list_count(&pae_auth->active_supp_list);
957969
// Checks if active supplicant list has space for new supplicants
958-
if (ws_pae_lib_supp_list_active_limit_reached(&pae_auth->active_supp_list, pae_auth->sec_cfg->prot_cfg.sec_max_ongoing_authentication)) {
970+
if (ws_pae_auth_active_limit_reached(active_supp, pae_auth)) {
959971
tr_debug("PAE: active limit reached, eui-64: %s", trace_array(kmp_address_eui_64_get(addr), 8));
960972
return NULL;
961973
}
@@ -1103,10 +1115,10 @@ static void ws_pae_auth_next_kmp_trigger(pae_auth_t *pae_auth, supp_entry_t *sup
11031115
trigger timeout, authenticator initiates EAP-TLS towards
11041116
supplicant. Otherwise supplicant must re-send initial EAPOL-Key
11051117
to try again using its trickle schedule */
1106-
uint16_t ongoing_eap_tls_cnt = ws_pae_lib_supp_list_kmp_count(&pae_auth->active_supp_list, next_type);
1107-
if (ongoing_eap_tls_cnt >= pae_auth->sec_cfg->prot_cfg.sec_max_ongoing_authentication) {
1118+
uint16_t active_supp = ns_list_count(&pae_auth->active_supp_list);
1119+
if (ws_pae_auth_active_limit_reached(active_supp, pae_auth)) {
11081120
supp_entry->retry_ticks = EAP_TLS_NEGOTIATION_TRIGGER_TIMEOUT;
1109-
tr_info("EAP-TLS max ongoing reached, count %i, delayed: eui-64: %s", ongoing_eap_tls_cnt, trace_array(supp_entry->addr.eui_64, 8));
1121+
tr_info("EAP-TLS max ongoing reached, count %i, delayed: eui-64: %s", active_supp, trace_array(supp_entry->addr.eui_64, 8));
11101122
return;
11111123
}
11121124
}

source/6LoWPAN/ws/ws_pae_auth.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,17 @@ typedef void ws_pae_auth_nw_info_updated(protocol_interface_info_entry_t *interf
249249
*/
250250
typedef void ws_pae_auth_ip_addr_get(protocol_interface_info_entry_t *interface_ptr, uint8_t *address);
251251

252+
/**
253+
* ws_pae_auth_congestion_get get congestion information
254+
*
255+
* \param interface_ptr interface
256+
* \param active_supp active supplicants
257+
*
258+
* \return TRUE reject, FALSE accept
259+
*
260+
*/
261+
typedef bool ws_pae_auth_congestion_get(protocol_interface_info_entry_t *interface_ptr, uint16_t active_supp);
262+
252263
/**
253264
* ws_pae_auth_cb_register register PAE authenticator callbacks
254265
*
@@ -258,17 +269,18 @@ typedef void ws_pae_auth_ip_addr_get(protocol_interface_info_entry_t *interface_
258269
* \param nw_key_index_set network send key index callback
259270
* \param nw_info_updated network keys updated callback
260271
* \param ip_addr_get IP addressing information callback
272+
* \param congestion_get congestion get callback
261273
*
262274
*/
263-
void ws_pae_auth_cb_register(protocol_interface_info_entry_t *interface_ptr, ws_pae_auth_gtk_hash_set *hash_set, ws_pae_auth_nw_key_insert *nw_key_insert, ws_pae_auth_nw_key_index_set *nw_key_index_set, ws_pae_auth_nw_info_updated *nw_info_updated, ws_pae_auth_ip_addr_get *ip_addr_get);
275+
void ws_pae_auth_cb_register(protocol_interface_info_entry_t *interface_ptr, ws_pae_auth_gtk_hash_set *hash_set, ws_pae_auth_nw_key_insert *nw_key_insert, ws_pae_auth_nw_key_index_set *nw_key_index_set, ws_pae_auth_nw_info_updated *nw_info_updated, ws_pae_auth_ip_addr_get *ip_addr_get, ws_pae_auth_congestion_get *congestion_get);
264276

265277
#else
266278

267279
#define ws_pae_auth_init(interface_ptr, next_gtks, certs, sec_cfg, sec_keys_nw_info) 1
268280
#define ws_pae_auth_timing_adjust(timing)
269281
#define ws_pae_auth_addresses_set(interface_ptr, local_port, remote_addr, remote_port) 1
270282
#define ws_pae_auth_delete NULL
271-
#define ws_pae_auth_cb_register(interface_ptr, hash_set, nw_key_insert, nw_key_index_set, nw_info_updated, ip_addr_get) {(void) hash_set;}
283+
#define ws_pae_auth_cb_register(interface_ptr, hash_set, nw_key_insert, nw_key_index_set, nw_info_updated, ip_addr_get, congestion_get) {(void) hash_set;}
272284
#define ws_pae_auth_start(interface_ptr)
273285
#define ws_pae_auth_gtks_updated NULL
274286
#define ws_pae_auth_nw_key_index_update NULL

0 commit comments

Comments
 (0)