Skip to content

Commit 667b191

Browse files
author
Mika Leppänen
committed
Changed initial EAPOL-key retries from trickle to exponential backup
Changed initial EAPOL-key trickle to exponential backup and adjusted the timings according to testing.
1 parent d925145 commit 667b191

File tree

7 files changed

+205
-208
lines changed

7 files changed

+205
-208
lines changed

source/6LoWPAN/ws/ws_cfg_settings.c

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -467,10 +467,10 @@ static void ws_cfg_network_size_config_set_small(ws_cfg_nw_size_t *cfg)
467467
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
468468
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
469469

470-
cfg->sec_prot.initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
471-
cfg->sec_prot.initial_key_imin = SMALL_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
472-
cfg->sec_prot.initial_key_imax = SMALL_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
473-
cfg->sec_prot.initial_key_retry_cnt = DEFAULT_INITIAL_KEY_RETRY_COUNT;
470+
cfg->sec_prot.initial_key_retry_min = SMALL_NW_INITIAL_KEY_RETRY_MIN_SECS;
471+
cfg->sec_prot.initial_key_retry_max = SMALL_NW_INITIAL_KEY_RETRY_MAX_SECS;
472+
cfg->sec_prot.initial_key_retry_max_limit = SMALL_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS;
473+
cfg->sec_prot.initial_key_retry_cnt = SMALL_NW_INITIAL_KEY_RETRY_COUNT;
474474

475475
// Multicast timing configuration
476476
cfg->mpl.mpl_trickle_imin = MPL_SMALL_IMIN;
@@ -510,10 +510,10 @@ static void ws_cfg_network_size_config_set_medium(ws_cfg_nw_size_t *cfg)
510510
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
511511
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
512512

513-
cfg->sec_prot.initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
514-
cfg->sec_prot.initial_key_imin = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
515-
cfg->sec_prot.initial_key_imax = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
516-
cfg->sec_prot.initial_key_retry_cnt = DEFAULT_INITIAL_KEY_RETRY_COUNT;
513+
cfg->sec_prot.initial_key_retry_min = MEDIUM_NW_INITIAL_KEY_RETRY_MIN_SECS;
514+
cfg->sec_prot.initial_key_retry_max = MEDIUM_NW_INITIAL_KEY_RETRY_MAX_SECS;
515+
cfg->sec_prot.initial_key_retry_max_limit = MEDIUM_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS;
516+
cfg->sec_prot.initial_key_retry_cnt = MEDIUM_NW_INITIAL_KEY_RETRY_COUNT;
517517

518518
// Multicast timing configuration
519519
cfg->mpl.mpl_trickle_imin = MPL_MEDIUM_IMIN;
@@ -552,9 +552,9 @@ static void ws_cfg_network_size_config_set_large(ws_cfg_nw_size_t *cfg)
552552
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
553553
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_LARGE;
554554

555-
cfg->sec_prot.initial_key_retry_delay = NONE_INITIAL_KEY_RETRY_TIMER;
556-
cfg->sec_prot.initial_key_imin = LARGE_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
557-
cfg->sec_prot.initial_key_imax = LARGE_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
555+
cfg->sec_prot.initial_key_retry_min = LARGE_NW_INITIAL_KEY_RETRY_MIN_SECS;
556+
cfg->sec_prot.initial_key_retry_max = LARGE_NW_INITIAL_KEY_RETRY_MAX_SECS;
557+
cfg->sec_prot.initial_key_retry_max_limit = LARGE_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS;
558558
cfg->sec_prot.initial_key_retry_cnt = LARGE_NW_INITIAL_KEY_RETRY_COUNT;
559559

560560
// Multicast timing configuration
@@ -595,9 +595,9 @@ static void ws_cfg_network_size_config_set_xlarge(ws_cfg_nw_size_t *cfg)
595595
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
596596
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_LARGE;
597597

598-
cfg->sec_prot.initial_key_retry_delay = NONE_INITIAL_KEY_RETRY_TIMER;
599-
cfg->sec_prot.initial_key_imin = EXTRA_LARGE_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
600-
cfg->sec_prot.initial_key_imax = EXTRA_LARGE_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
598+
cfg->sec_prot.initial_key_retry_min = EXTRA_LARGE_NW_INITIAL_KEY_RETRY_MIN_SECS;
599+
cfg->sec_prot.initial_key_retry_max = EXTRA_LARGE_NW_INITIAL_KEY_RETRY_MAX_SECS;
600+
cfg->sec_prot.initial_key_retry_max_limit = EXTRA_LARGE_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS;
601601
cfg->sec_prot.initial_key_retry_cnt = EXTRA_LARGE_NW_INITIAL_KEY_RETRY_COUNT;
602602

603603
// Multicast timing configuration
@@ -637,10 +637,10 @@ static void ws_cfg_network_size_config_set_certificate(ws_cfg_nw_size_t *cfg)
637637
cfg->sec_prot.sec_prot_trickle_timer_exp = SEC_PROT_TIMER_EXPIRATIONS;
638638
cfg->sec_prot.sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
639639

640-
cfg->sec_prot.initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
641-
cfg->sec_prot.initial_key_imin = SMALL_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
642-
cfg->sec_prot.initial_key_imax = SMALL_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
643-
cfg->sec_prot.initial_key_retry_cnt = DEFAULT_INITIAL_KEY_RETRY_COUNT;
640+
cfg->sec_prot.initial_key_retry_min = SMALL_NW_INITIAL_KEY_RETRY_MIN_SECS;
641+
cfg->sec_prot.initial_key_retry_max = SMALL_NW_INITIAL_KEY_RETRY_MAX_SECS;
642+
cfg->sec_prot.initial_key_retry_max_limit = SMALL_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS;
643+
cfg->sec_prot.initial_key_retry_cnt = SMALL_NW_INITIAL_KEY_RETRY_COUNT;
644644

645645
// Multicast timing configuration for certification uses the LARGE values as it is the one mentioned ins specification
646646
cfg->mpl.mpl_trickle_imin = MPL_XLARGE_IMIN;
@@ -1241,10 +1241,10 @@ static int8_t ws_cfg_sec_prot_default_set(ws_sec_prot_cfg_t *cfg)
12411241
cfg->sec_prot_retry_timeout = SEC_PROT_RETRY_TIMEOUT_SMALL;
12421242
cfg->max_simult_sec_neg_tx_queue_min = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_TX_QUEUE_MIN;
12431243
cfg->max_simult_sec_neg_tx_queue_max = MAX_SIMULTANEOUS_SECURITY_NEGOTIATIONS_TX_QUEUE_MAX;
1244-
cfg->initial_key_retry_delay = DEFAULT_INITIAL_KEY_RETRY_TIMER;
1245-
cfg->initial_key_imin = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMIN_SECS;
1246-
cfg->initial_key_imax = MEDIUM_NW_INITIAL_KEY_TRICKLE_IMAX_SECS;
1247-
cfg->initial_key_retry_cnt = DEFAULT_INITIAL_KEY_RETRY_COUNT;
1244+
cfg->initial_key_retry_min = MEDIUM_NW_INITIAL_KEY_RETRY_MIN_SECS;
1245+
cfg->initial_key_retry_max = MEDIUM_NW_INITIAL_KEY_RETRY_MAX_SECS;
1246+
cfg->initial_key_retry_max_limit = MEDIUM_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS;
1247+
cfg->initial_key_retry_cnt = MEDIUM_NW_INITIAL_KEY_RETRY_COUNT;
12481248

12491249
return CFG_SETTINGS_OK;
12501250
}
@@ -1268,10 +1268,10 @@ int8_t ws_cfg_sec_prot_validate(ws_sec_prot_cfg_t *cfg, ws_sec_prot_cfg_t *new_c
12681268
cfg->sec_prot_retry_timeout != new_cfg->sec_prot_retry_timeout ||
12691269
cfg->max_simult_sec_neg_tx_queue_min != new_cfg->max_simult_sec_neg_tx_queue_min ||
12701270
cfg->max_simult_sec_neg_tx_queue_max != new_cfg->max_simult_sec_neg_tx_queue_max ||
1271-
cfg->initial_key_retry_delay != new_cfg->initial_key_retry_delay ||
1272-
cfg->initial_key_imin != new_cfg->initial_key_retry_delay ||
1273-
cfg->initial_key_imax != new_cfg->initial_key_retry_delay ||
1274-
cfg->initial_key_retry_cnt != new_cfg->initial_key_retry_delay) {
1271+
cfg->initial_key_retry_min != new_cfg->initial_key_retry_min ||
1272+
cfg->initial_key_retry_max != new_cfg->initial_key_retry_max ||
1273+
cfg->initial_key_retry_max_limit != new_cfg->initial_key_retry_max_limit ||
1274+
cfg->initial_key_retry_cnt != new_cfg->initial_key_retry_cnt) {
12751275

12761276
return CFG_SETTINGS_CHANGED;
12771277
}

source/6LoWPAN/ws/ws_cfg_settings.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,10 @@ typedef struct ws_sec_prot_cfg_s {
117117
uint8_t sec_prot_trickle_timer_exp; /**< Security protocol trickle timer expirations; default 2 */
118118
uint16_t max_simult_sec_neg_tx_queue_min; /**< PAE authenticator max simultaneous security negotiations TX queue minimum */
119119
uint16_t max_simult_sec_neg_tx_queue_max; /**< PAE authenticator max simultaneous security negotiations TX queue maximum */
120-
uint16_t initial_key_retry_delay; /**< Delay before starting initial key trickle; seconds; default 120 */
121-
uint16_t initial_key_imin; /**< Initial key trickle Imin; seconds; default 360 */
122-
uint16_t initial_key_imax; /**< Initial key trickle Imax; seconds; default 720 */
123-
uint8_t initial_key_retry_cnt; /**< Number of initial key retries; default 2 */
120+
uint16_t initial_key_retry_min; /**< Initial EAPOL-Key retry exponential backoff min; seconds; default 180 */
121+
uint16_t initial_key_retry_max; /**< Initial EAPOL-Key retry exponential backoff max; seconds; default 420 */
122+
uint16_t initial_key_retry_max_limit; /**< Initial EAPOL-Key retry exponential backoff max limit; seconds; default 720 */
123+
uint8_t initial_key_retry_cnt; /**< Number of initial key retries; default 4 */
124124
} ws_sec_prot_cfg_t;
125125

126126
/**

source/6LoWPAN/ws/ws_config.h

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -274,32 +274,51 @@ extern uint8_t DEVICE_MIN_SENS;
274274

275275
/*
276276
* Security protocol initial EAPOL-key parameters
277+
*
278+
* Retry time is randomized between minimum and maximum retry time: rand(min,max).
279+
* For each subsequent retry the maximum retry time is doubled until the maximum
280+
* limit is reached.
277281
*/
278282

279-
// How long the wait is before the first initial EAPOL-key retry
280-
#define DEFAULT_INITIAL_KEY_RETRY_TIMER 120
281-
#define NONE_INITIAL_KEY_RETRY_TIMER 0
282-
283-
// Small network Default trickle values for sending of initial EAPOL-key
284-
#define SMALL_NW_INITIAL_KEY_TRICKLE_IMIN_SECS 360 /* 6 to 8.3 minutes */
285-
#define SMALL_NW_INITIAL_KEY_TRICKLE_IMAX_SECS 500
286-
287-
// Small network Default trickle values for sending of initial EAPOL-key
288-
#define MEDIUM_NW_INITIAL_KEY_TRICKLE_IMIN_SECS 360 /* 6 to 12 minutes */
289-
#define MEDIUM_NW_INITIAL_KEY_TRICKLE_IMAX_SECS 720
290-
291-
// Large network trickle values for sending of initial EAPOL-key
292-
#define LARGE_NW_INITIAL_KEY_TRICKLE_IMIN_SECS 600 /* 10 to 20 minutes */
293-
#define LARGE_NW_INITIAL_KEY_TRICKLE_IMAX_SECS 1200
294-
#define LARGE_NW_INITIAL_KEY_RETRY_COUNT 3
295-
296-
// Very slow network values for sending of initial EAPOL-key
297-
#define EXTRA_LARGE_NW_INITIAL_KEY_TRICKLE_IMIN_SECS 600 /* 10 to 20 minutes */
298-
#define EXTRA_LARGE_NW_INITIAL_KEY_TRICKLE_IMAX_SECS 1200
299-
#define EXTRA_LARGE_NW_INITIAL_KEY_RETRY_COUNT 4
300-
301-
// How many times sending of initial EAPOL-key is retried
302-
#define DEFAULT_INITIAL_KEY_RETRY_COUNT 2
283+
/* Small network initial EAPOL-key retry exponential backoff parameters
284+
* 1st backoff 3 to 7 minutes, max 7 minutes, retries 2
285+
* Minimum time for sequence is 3 + 3 = 6 minutes
286+
* Maximum time for sequence is 7 + 7 = 14 minutes
287+
*/
288+
#define SMALL_NW_INITIAL_KEY_RETRY_MIN_SECS 180 // 3
289+
#define SMALL_NW_INITIAL_KEY_RETRY_MAX_SECS 420 // 7
290+
#define SMALL_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS 420 // 7
291+
#define SMALL_NW_INITIAL_KEY_RETRY_COUNT 2
292+
293+
/* Medium network initial EAPOL-key retry exponential backoff parameters
294+
* 1st backoff 3 to 7 minutes, max 12 minutes, retries 4
295+
* Minimum time for sequence is 3 + 3 + 3 + 3 = 12 minutes
296+
* Maximum time for sequence is 7 + 12 + 12 + 12 = 43 minutes
297+
*/
298+
#define MEDIUM_NW_INITIAL_KEY_RETRY_MIN_SECS 180 // 3
299+
#define MEDIUM_NW_INITIAL_KEY_RETRY_MAX_SECS 420 // 7
300+
#define MEDIUM_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS 720 // 12
301+
#define MEDIUM_NW_INITIAL_KEY_RETRY_COUNT 4
302+
303+
/* Large network initial EAPOL-key retry exponential backoff parameters
304+
* 1st backoff 5 to 10 minutes, max 15 minutes, retries 4
305+
* Minimum time for sequence is 5 + 5 + 5 + 5 = 20 minutes
306+
* Maximum time for sequence is 10 + 15 + 15 + 15 = 55 minutes
307+
*/
308+
#define LARGE_NW_INITIAL_KEY_RETRY_MIN_SECS 300 // 5
309+
#define LARGE_NW_INITIAL_KEY_RETRY_MAX_SECS 600 // 10
310+
#define LARGE_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS 900 // 15
311+
#define LARGE_NW_INITIAL_KEY_RETRY_COUNT 4
312+
313+
/* Extra large network initial EAPOL-key retry exponential backoff parameters
314+
* 1st backoff 5 to 10 minutes, max 20 minutes, retries 4
315+
* Minimum time for sequence is 5 + 5 + 5 + 5 = 20 minutes
316+
* Maximum time for sequence is 10 + 20 + 20 + 20 = 70 minutes
317+
*/
318+
#define EXTRA_LARGE_NW_INITIAL_KEY_RETRY_MIN_SECS 300 // 5
319+
#define EXTRA_LARGE_NW_INITIAL_KEY_RETRY_MAX_SECS 600 // 10
320+
#define EXTRA_LARGE_NW_INITIAL_KEY_RETRY_MAX_LIMIT_SECS 1200 // 20
321+
#define EXTRA_LARGE_NW_INITIAL_KEY_RETRY_COUNT 4
303322

304323
/*
305324
* RADIUS client retry timer defaults

source/6LoWPAN/ws/ws_pae_controller.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -721,11 +721,9 @@ int8_t ws_pae_controller_configure(protocol_interface_info_entry_t *interface_pt
721721
controller->sec_cfg.prot_cfg.sec_prot_trickle_params.k = 0;
722722
controller->sec_cfg.prot_cfg.sec_prot_trickle_params.TimerExpirations = sec_prot_cfg->sec_prot_trickle_timer_exp;
723723
controller->sec_cfg.prot_cfg.sec_prot_retry_timeout = sec_prot_cfg->sec_prot_retry_timeout * 10;
724-
controller->sec_cfg.prot_cfg.initial_key_retry_delay = sec_prot_cfg->initial_key_retry_delay;
725-
controller->sec_cfg.prot_cfg.initial_key_trickle_params.Imin = sec_prot_cfg->initial_key_imin;
726-
controller->sec_cfg.prot_cfg.initial_key_trickle_params.Imax = sec_prot_cfg->initial_key_imax;
727-
controller->sec_cfg.prot_cfg.initial_key_trickle_params.k = 0;
728-
controller->sec_cfg.prot_cfg.initial_key_trickle_params.TimerExpirations = 2;
724+
controller->sec_cfg.prot_cfg.initial_key_retry_min = sec_prot_cfg->initial_key_retry_min;
725+
controller->sec_cfg.prot_cfg.initial_key_retry_max = sec_prot_cfg->initial_key_retry_max;
726+
controller->sec_cfg.prot_cfg.initial_key_retry_max_limit = sec_prot_cfg->initial_key_retry_max_limit;
729727
controller->sec_cfg.prot_cfg.initial_key_retry_cnt = sec_prot_cfg->initial_key_retry_cnt;
730728
}
731729

0 commit comments

Comments
 (0)