Skip to content

Commit c8343b1

Browse files
Mika TervonenMika Tervonen
authored andcommitted
Added support for dynamic RPL default lifetime
RPL default lifetime is now controlled by the network size Clients can now have larger Maximum DAO registration times This reduces the DAO registration need if there is more devices in the network. DAO registrations are still done faster if we do not detect the Border router in any other means. or routing stops working.
1 parent d258068 commit c8343b1

File tree

6 files changed

+51
-10
lines changed

6 files changed

+51
-10
lines changed

source/6LoWPAN/ws/ws_bbr_api.c

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,20 +197,41 @@ static void ws_bbr_rpl_version_increase(protocol_interface_info_entry_t *cur)
197197
ws_bbr_rpl_version_timer_start(cur, rpl_control_increment_dodag_version(protocol_6lowpan_rpl_root_dodag));
198198
}
199199

200-
void ws_bbr_rpl_config(protocol_interface_info_entry_t *cur, uint8_t imin, uint8_t doubling, uint8_t redundancy, uint16_t dag_max_rank_increase, uint16_t min_hop_rank_increase)
200+
void ws_bbr_rpl_config(protocol_interface_info_entry_t *cur, uint8_t imin, uint8_t doubling, uint8_t redundancy, uint16_t dag_max_rank_increase, uint16_t min_hop_rank_increase, uint32_t lifetime)
201201
{
202202
if (imin == 0 || doubling == 0) {
203203
// use default values
204204
imin = WS_RPL_DIO_IMIN_SMALL;
205205
doubling = WS_RPL_DIO_DOUBLING_SMALL;
206206
redundancy = WS_RPL_DIO_REDUNDANCY_SMALL;
207207
}
208+
uint8_t lifetime_unit = 60;
209+
uint8_t default_lifetime;
210+
211+
if (lifetime == 0) {
212+
// 2 hours default lifetime
213+
lifetime = 120 * 60;
214+
} else if (lifetime <= 250 * 60) {
215+
// Lifetime unit of 60 is ok up to 4 hours
216+
} else if (lifetime <= 250 * 120) {
217+
//more than 4 hours needs larger lifetime unit
218+
lifetime_unit = 120;
219+
} else if (lifetime <= 250 * 240) {
220+
lifetime_unit = 240;
221+
} else {
222+
// Maximum lifetime is 16 hours 40 minutes
223+
lifetime = 250 * 240;
224+
lifetime_unit = 240;
225+
}
226+
default_lifetime = lifetime / lifetime_unit;
208227

209228
if (rpl_conf.dio_interval_min == imin &&
210229
rpl_conf.dio_interval_doublings == doubling &&
211230
rpl_conf.dio_redundancy_constant == redundancy &&
212231
rpl_conf.dag_max_rank_increase == dag_max_rank_increase &&
213-
rpl_conf.min_hop_rank_increase == min_hop_rank_increase) {
232+
rpl_conf.min_hop_rank_increase == min_hop_rank_increase &&
233+
rpl_conf.default_lifetime == default_lifetime &&
234+
rpl_conf.lifetime_unit == lifetime_unit) {
214235
// Same values no update needed
215236
return;
216237
}
@@ -220,6 +241,8 @@ void ws_bbr_rpl_config(protocol_interface_info_entry_t *cur, uint8_t imin, uint8
220241
rpl_conf.dio_redundancy_constant = redundancy;
221242
rpl_conf.dag_max_rank_increase = dag_max_rank_increase;
222243
rpl_conf.min_hop_rank_increase = min_hop_rank_increase;
244+
rpl_conf.default_lifetime = default_lifetime;
245+
rpl_conf.lifetime_unit = lifetime_unit;
223246

224247
if (protocol_6lowpan_rpl_root_dodag) {
225248
rpl_control_update_dodag_config(protocol_6lowpan_rpl_root_dodag, &rpl_conf);

source/6LoWPAN/ws/ws_bbr_api_internal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ void ws_bbr_pan_version_increase(protocol_interface_info_entry_t *cur);
2929

3030
uint16_t ws_bbr_pan_size(protocol_interface_info_entry_t *cur);
3131

32-
void ws_bbr_rpl_config(protocol_interface_info_entry_t *cur, uint8_t imin, uint8_t doubling, uint8_t redundancy, uint16_t dag_max_rank_increase, uint16_t min_hop_rank_increase);
32+
void ws_bbr_rpl_config(protocol_interface_info_entry_t *cur, uint8_t imin, uint8_t doubling, uint8_t redundancy, uint16_t dag_max_rank_increase, uint16_t min_hop_rank_increase, uint32_t lifetime);
3333

3434
void ws_bbr_dhcp_address_lifetime_set(protocol_interface_info_entry_t *cur, uint32_t dhcp_address_lifetime);
3535

@@ -45,7 +45,7 @@ void ws_bbr_init(protocol_interface_info_entry_t *interface);
4545
#define ws_bbr_seconds_timer( cur, seconds)
4646
#define ws_bbr_pan_version_increase(cur)
4747
#define ws_bbr_pan_size(cur) 0
48-
#define ws_bbr_rpl_config( cur, imin, doubling, redundancy, dag_max_rank_increase, min_hop_rank_increase)
48+
#define ws_bbr_rpl_config( cur, imin, doubling, redundancy, dag_max_rank_increase, min_hop_rank_increase, lifetime)
4949
#define ws_bbr_dhcp_address_lifetime_set(cur, dhcp_address_lifetime)
5050
#define ws_bbr_ready_to_start(cur) true
5151
#define ws_bbr_backbone_address_get(address) 0

source/6LoWPAN/ws/ws_cfg_settings.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ static void ws_cfg_network_size_config_set_small(ws_cfg_nw_size_t *cfg)
448448
cfg->bbr.dio_redundancy_constant = WS_RPL_DIO_REDUNDANCY_SMALL; // Disabled
449449
cfg->bbr.dag_max_rank_increase = WS_RPL_MAX_HOP_RANK_INCREASE;
450450
cfg->bbr.min_hop_rank_increase = WS_RPL_MIN_HOP_RANK_INCREASE;
451+
cfg->bbr.rpl_default_lifetime = WS_RPL_DEFAULT_LIFETIME;
451452
cfg->bbr.dhcp_address_lifetime = WS_DHCP_ADDRESS_LIFETIME_SMALL;
452453

453454
// EAPOL configuration
@@ -492,6 +493,7 @@ static void ws_cfg_network_size_config_set_medium(ws_cfg_nw_size_t *cfg)
492493
cfg->bbr.dio_redundancy_constant = WS_RPL_DIO_REDUNDANCY_MEDIUM; // 10
493494
cfg->bbr.dag_max_rank_increase = WS_RPL_MAX_HOP_RANK_INCREASE;
494495
cfg->bbr.min_hop_rank_increase = WS_RPL_MIN_HOP_RANK_INCREASE;
496+
cfg->bbr.rpl_default_lifetime = WS_RPL_DEFAULT_LIFETIME_MEDIUM;
495497
cfg->bbr.dhcp_address_lifetime = WS_DHCP_ADDRESS_LIFETIME_MEDIUM;
496498

497499
// EAPOL configuration
@@ -535,6 +537,7 @@ static void ws_cfg_network_size_config_set_large(ws_cfg_nw_size_t *cfg)
535537
cfg->bbr.dio_redundancy_constant = WS_RPL_DIO_REDUNDANCY_LARGE; // 10
536538
cfg->bbr.dag_max_rank_increase = WS_RPL_MAX_HOP_RANK_INCREASE;
537539
cfg->bbr.min_hop_rank_increase = WS_RPL_MIN_HOP_RANK_INCREASE;
540+
cfg->bbr.rpl_default_lifetime = WS_RPL_DEFAULT_LIFETIME_LARGE;
538541
cfg->bbr.dhcp_address_lifetime = WS_DHCP_ADDRESS_LIFETIME_LARGE;
539542

540543
// EAPOL configuration
@@ -579,6 +582,7 @@ static void ws_cfg_network_size_config_set_xlarge(ws_cfg_nw_size_t *cfg)
579582
cfg->bbr.dio_redundancy_constant = WS_RPL_DIO_REDUNDANCY_XLARGE; // 10
580583
cfg->bbr.dag_max_rank_increase = WS_RPL_MAX_HOP_RANK_INCREASE;
581584
cfg->bbr.min_hop_rank_increase = WS_RPL_MIN_HOP_RANK_INCREASE;
585+
cfg->bbr.rpl_default_lifetime = WS_RPL_DEFAULT_LIFETIME_XLARGE;
582586
cfg->bbr.dhcp_address_lifetime = WS_DHCP_ADDRESS_LIFETIME_LARGE;
583587

584588
// EAPOL configuration
@@ -622,6 +626,7 @@ static void ws_cfg_network_size_config_set_certificate(ws_cfg_nw_size_t *cfg)
622626
cfg->bbr.dio_redundancy_constant = WS_RPL_DIO_REDUNDANCY_SMALL; // Disabled
623627
cfg->bbr.dag_max_rank_increase = WS_CERTIFICATE_RPL_MAX_HOP_RANK_INCREASE;
624628
cfg->bbr.min_hop_rank_increase = WS_CERTIFICATE_RPL_MIN_HOP_RANK_INCREASE;
629+
cfg->bbr.rpl_default_lifetime = WS_RPL_DEFAULT_LIFETIME;
625630
cfg->bbr.dhcp_address_lifetime = WS_DHCP_ADDRESS_LIFETIME_SMALL;
626631

627632
// EAPOL configuration
@@ -909,6 +914,7 @@ static int8_t ws_cfg_bbr_default_set(ws_bbr_cfg_t *cfg)
909914
cfg->dio_redundancy_constant = 10;
910915
cfg->dag_max_rank_increase = WS_RPL_MAX_HOP_RANK_INCREASE;
911916
cfg->min_hop_rank_increase = WS_RPL_MIN_HOP_RANK_INCREASE;
917+
cfg->rpl_default_lifetime = WS_RPL_DEFAULT_LIFETIME_MEDIUM;
912918
cfg->dhcp_address_lifetime = WS_DHCP_ADDRESS_LIFETIME_MEDIUM;
913919

914920
return CFG_SETTINGS_OK;
@@ -932,7 +938,8 @@ int8_t ws_cfg_bbr_validate(ws_bbr_cfg_t *cfg, ws_bbr_cfg_t *new_cfg)
932938
cfg->dio_redundancy_constant != new_cfg->dio_redundancy_constant ||
933939
cfg->dag_max_rank_increase != new_cfg->dag_max_rank_increase ||
934940
cfg->min_hop_rank_increase != new_cfg->min_hop_rank_increase ||
935-
cfg->dhcp_address_lifetime != new_cfg->dhcp_address_lifetime) {
941+
cfg->dhcp_address_lifetime != new_cfg->dhcp_address_lifetime ||
942+
cfg->rpl_default_lifetime != new_cfg->rpl_default_lifetime) {
936943
return CFG_SETTINGS_CHANGED;
937944
}
938945

@@ -954,7 +961,7 @@ int8_t ws_cfg_bbr_set(protocol_interface_info_entry_t *cur, ws_bbr_cfg_t *cfg, w
954961
// cur is optional, default values are for Wi-SUN small network parameters,
955962
ws_bbr_rpl_config(cur, new_cfg->dio_interval_min, new_cfg->dio_interval_doublings,
956963
new_cfg->dio_redundancy_constant, new_cfg->dag_max_rank_increase,
957-
new_cfg->min_hop_rank_increase);
964+
new_cfg->min_hop_rank_increase, new_cfg->rpl_default_lifetime);
958965
ws_bbr_dhcp_address_lifetime_set(cur, new_cfg->dhcp_address_lifetime);
959966
}
960967

source/6LoWPAN/ws/ws_cfg_settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ typedef struct ws_bbr_cfg_s {
6464
uint16_t dag_max_rank_increase;
6565
uint16_t min_hop_rank_increase;
6666
uint32_t dhcp_address_lifetime; /**< DHCP address lifetime in seconds minimum 2 hours and maximum as days hours*/
67+
uint32_t rpl_default_lifetime; /**< RPL default lifetime value minimum from 30 minutes to 16 hours*/
6768
} ws_bbr_cfg_t;
6869

6970
/**

source/6LoWPAN/ws/ws_config.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
#define WS_RPL_MIN_HOP_RANK_INCREASE 196
5151
#define WS_RPL_MAX_HOP_RANK_INCREASE 2048
5252

53+
#define WS_RPL_DEFAULT_LIFETIME (3600*2) // 2 hours
54+
#define WS_RPL_DEFAULT_LIFETIME_MEDIUM (3600*4) // 4 hours
55+
#define WS_RPL_DEFAULT_LIFETIME_LARGE (3600*8) // 8 hours
56+
#define WS_RPL_DEFAULT_LIFETIME_XLARGE (3600*12) // 12 hours
57+
5358
#define WS_DHCP_ADDRESS_LIFETIME_SMALL 2*3600 // small networks less than devices 100
5459
#define WS_DHCP_ADDRESS_LIFETIME_MEDIUM 12*3600 // Medium size networks from 100 - 1000 device networks
5560
#define WS_DHCP_ADDRESS_LIFETIME_LARGE 24*3600 // Large size networks 1000 + device networks
@@ -60,7 +65,7 @@
6065
/*
6166
* RPL DAO timeout maximum value. This will force DAO timeout to happen before this time
6267
*/
63-
#define WS_RPL_DAO_MAX_TIMOUT (3600*2)
68+
#define WS_RPL_DAO_MAX_TIMOUT (3600*12)
6469

6570
/* Border router version change interval
6671
*

test/nanostack/unittest/6LoWPAN/ws_cfg_settings/test_ws_cfg_settings.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ static const ws_cfg_t ws_cfg_defaults_medium = {
108108
.bbr.dio_redundancy_constant = 10, // network size affects
109109
.bbr.dag_max_rank_increase = 2048, // network size affects
110110
.bbr.min_hop_rank_increase = 196, // network size affects
111+
.bbr.rpl_default_lifetime = 4 * 3600,
111112
.bbr.dhcp_address_lifetime = 12 * 3600,
112113

113114
.fhss.fhss_uc_dwell_interval = 255,
@@ -179,6 +180,7 @@ static const ws_cfg_t ws_cfg_defaults_small = {
179180
.bbr.dio_redundancy_constant = 0, // network size affects
180181
.bbr.dag_max_rank_increase = 2048, // network size affects
181182
.bbr.min_hop_rank_increase = 196, // network size affects
183+
.bbr.rpl_default_lifetime = 2 * 3600,
182184
.bbr.dhcp_address_lifetime = 2 * 3600,
183185

184186
.fhss.fhss_uc_dwell_interval = 255,
@@ -250,6 +252,7 @@ static const ws_cfg_t ws_cfg_defaults_large = {
250252
.bbr.dio_redundancy_constant = 10, // network size affects
251253
.bbr.dag_max_rank_increase = 2048, // network size affects
252254
.bbr.min_hop_rank_increase = 196, // network size affects
255+
.bbr.rpl_default_lifetime = 8 * 3600,
253256
.bbr.dhcp_address_lifetime = 24 * 3600,
254257

255258
.fhss.fhss_uc_dwell_interval = 255,
@@ -321,6 +324,7 @@ static const ws_cfg_t ws_cfg_defaults_xlarge = {
321324
.bbr.dio_redundancy_constant = 10, // network size affects
322325
.bbr.dag_max_rank_increase = 2048, // network size affects
323326
.bbr.min_hop_rank_increase = 196, // network size affects
327+
.bbr.rpl_default_lifetime = 12 * 3600,
324328
.bbr.dhcp_address_lifetime = 24 * 3600,
325329

326330
.fhss.fhss_uc_dwell_interval = 255,
@@ -392,6 +396,7 @@ static const ws_cfg_t ws_cfg_defaults_certification = {
392396
.bbr.dio_redundancy_constant = 0, // network size affects
393397
.bbr.dag_max_rank_increase = 0, // network size affects
394398
.bbr.min_hop_rank_increase = 128, // network size affects
399+
.bbr.rpl_default_lifetime = 2 * 3600,
395400
.bbr.dhcp_address_lifetime = 2 * 3600,
396401

397402
.fhss.fhss_uc_dwell_interval = 255,
@@ -1354,9 +1359,9 @@ bool test_ws_cfg_rpl_functions_1()
13541359
if (ws_cfg_bbr_get(&cfg, NULL) < 0) {
13551360
return false;
13561361
}
1357-
if (memcmp(&cfg, &ws_cfg_defaults_medium.bbr, sizeof(ws_bbr_cfg_t)) != 0) {
1358-
return false;
1359-
}
1362+
CHECK_START
1363+
CHECK_BUFFER(&cfg, &ws_cfg_defaults_medium.bbr, sizeof(ws_bbr_cfg_t))
1364+
CHECK_STOP
13601365

13611366
ws_common_stub.int8_value[0] = 0;
13621367

0 commit comments

Comments
 (0)