Skip to content

Commit adcca3d

Browse files
author
Juha Heiskanen
committed
RPL dio config advertisment update
Added API for set minium advertisment count for RPL config option by DIO multicast message. RPL DIO multicast will advertisment also RPL config in first configured number Multicast DIO. Advertiment will be started again if config is updated by Dodag Root. Wi-sun bootstrap set 10 to config multicast advertisment. Change-Id: Ia4d8e021e7efd6d49845912e2c305084eaa1ee0f
1 parent 6db1f31 commit adcca3d

File tree

10 files changed

+49
-1
lines changed

10 files changed

+49
-1
lines changed

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2062,6 +2062,7 @@ static void ws_bootstrap_rpl_activate(protocol_interface_info_entry_t *cur)
20622062
// If i am router I Do this
20632063
rpl_control_force_leaf(protocol_6lowpan_rpl_domain, leaf);
20642064
rpl_control_request_parent_link_confirmation(true);
2065+
rpl_control_set_dio_multicast_min_config_advertisment_count(WS_MIN_DIO_MULTICAST_CONFIG_ADVERTISMENT_COUNT);
20652066
rpl_control_set_dao_retry_count(WS_MAX_DAO_RETRIES);
20662067
rpl_control_set_initial_dao_ack_wait(WS_MAX_DAO_INITIAL_TIMEOUT);
20672068

source/6LoWPAN/ws/ws_config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,5 +139,6 @@ extern uint8_t DEVICE_MIN_SENS;
139139
*/
140140
#define WS_MAX_DAO_RETRIES 3 // With 40s, 80s, 160s, 320s, 640s
141141
#define WS_MAX_DAO_INITIAL_TIMEOUT 400 // With 40s initial value exponentially increasing
142+
#define WS_MIN_DIO_MULTICAST_CONFIG_ADVERTISMENT_COUNT 10 // Define 10 multicast advertisment when learn config or learn config update
142143

143144
#endif /* WS_CONFIG_H_ */

source/RPL/rpl_control.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@ void rpl_control_request_parent_link_confirmation(bool requested)
176176
rpl_policy_set_parent_confirmation_request(requested);
177177
}
178178

179+
void rpl_control_set_dio_multicast_min_config_advertisment_count(uint8_t min_count)
180+
{
181+
rpl_policy_set_dio_multicast_config_advertisment_min_count(min_count);
182+
}
183+
179184
void rpl_control_set_dao_retry_count(uint8_t count)
180185
{
181186
rpl_policy_set_dao_retry_count(count);

source/RPL/rpl_control.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ uint16_t rpl_control_parent_candidate_list_size(struct protocol_interface_info_e
157157
void rpl_control_neighbor_delete(struct protocol_interface_info_entry *interface, const uint8_t ll_addr[16]);
158158
/* Parent link confirmation API extension */
159159
void rpl_control_request_parent_link_confirmation(bool requested);
160+
void rpl_control_set_dio_multicast_min_config_advertisment_count(uint8_t min_count);
160161
void rpl_control_set_dao_retry_count(uint8_t count);
161162
void rpl_control_set_initial_dao_ack_wait(uint16_t timeout_in_ms);
162163
void rpl_control_register_address(struct protocol_interface_info_entry *interface, const uint8_t addr[16]);

source/RPL/rpl_policy.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ static bool rpl_policy_parent_confirmation_req = false;
3838
static int8_t rpl_policy_dao_retry_count_conf = 0;
3939
static int16_t rpl_policy_dao_initial_timeout_conf = 20; // Default is 2 seconds 100ms ticks
4040
static uint16_t rpl_policy_dio_validity_period_hysteresis = 0x0180; //Fixed Point 1.5
41+
static uint8_t rpl_policy_multicast_config_min_advertisment_count = 0;
42+
4143

4244
/* TODO - application API to control when to join new instances / DODAGs
4345
*
@@ -364,6 +366,16 @@ bool rpl_policy_parent_confirmation_requested(void)
364366
return rpl_policy_parent_confirmation_req;
365367
}
366368

369+
uint8_t rpl_policy_dio_multicast_config_advertisment_min_count(void)
370+
{
371+
return rpl_policy_multicast_config_min_advertisment_count;
372+
}
373+
374+
void rpl_policy_set_dio_multicast_config_advertisment_min_count(uint8_t min_count)
375+
{
376+
rpl_policy_multicast_config_min_advertisment_count = min_count;
377+
}
378+
367379

368380
#ifdef RPL_STRUCTURES_H_
369381
#error "rpl_structures.h should not be included by rpl_policy.c"

source/RPL/rpl_policy.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,7 @@ uint16_t rpl_policy_mrhof_parent_switch_threshold(const rpl_domain_t *domain);
6565
uint16_t rpl_policy_mrhof_max_rank_stretch_for_extra_parents(const rpl_domain_t *domain);
6666
bool rpl_policy_parent_confirmation_requested(void);
6767
void rpl_policy_set_parent_confirmation_request(bool confirmation_requested);
68+
uint8_t rpl_policy_dio_multicast_config_advertisment_min_count(void);
69+
void rpl_policy_set_dio_multicast_config_advertisment_min_count(uint8_t min_count);
6870

6971
#endif /* RPL_POLICY_H_ */

source/RPL/rpl_structures.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ struct rpl_dodag {
9090
bool leaf: 1; /* We are a leaf in this DODAG (by policy) */
9191
bool have_config: 1; /* We have the config */
9292
bool used: 1; /* We have ever been a member of this DODAG? */
93+
uint8_t new_config_advertisment_count; /* We have advertiment new config at multicasti DIO */
9394
NS_LIST_HEAD(rpl_dodag_version_t, link) versions; /* List of DODAG versions (newest first) */
9495
prefix_list_t prefixes; /* Prefixes advertised in DIO PIOs */
9596
rpl_dio_route_list_t routes; /* Routes advertised in DIO RIOs*/

source/RPL/rpl_upward.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,7 @@ rpl_dodag_t *rpl_create_dodag(rpl_instance_t *instance, const uint8_t *dodagid,
635635
dodag->have_config = false;
636636
dodag->used = false;
637637
dodag->g_mop_prf = g_mop_prf;
638+
dodag->new_config_advertisment_count = 0;
638639
// Default timer parameters and trickle start should never normally
639640
// be used - we would set the parameters from the DODAG Config and start
640641
// as we join a version. But initialising here catches odd cases where
@@ -728,6 +729,7 @@ bool rpl_dodag_update_config(rpl_dodag_t *dodag, const rpl_dodag_conf_t *conf, c
728729
/* They've changed the timing parameters for our currently-in-use trickle timer! */
729730
tr_warn("Trickle parameters changed");
730731
trickle_start(&dodag->instance->dio_timer, &dodag->dio_timer_params);
732+
dodag->new_config_advertisment_count = 0;
731733
}
732734
dodag->instance->of = rpl_objective_lookup(conf->objective_code_point);
733735
/* We could be a leaf of an unknown OCP. Still need an OF to choose parents */
@@ -1547,7 +1549,15 @@ void rpl_instance_dio_trigger(rpl_instance_t *instance, protocol_interface_info_
15471549
}
15481550

15491551
// Always send config in unicasts (as required), never in multicasts (optional)
1550-
rpl_dodag_conf_t *conf = addr ? &dodag->config : NULL;
1552+
rpl_dodag_conf_t *conf;
1553+
if (addr) {
1554+
conf = &dodag->config;
1555+
} else if (dodag->new_config_advertisment_count < rpl_policy_dio_multicast_config_advertisment_min_count()) {
1556+
conf = &dodag->config;
1557+
dodag->new_config_advertisment_count++;
1558+
} else {
1559+
conf = NULL;
1560+
}
15511561

15521562
rpl_control_transmit_dio(instance->domain, cur, instance->id, dodag_version->number, rank, dodag->g_mop_prf, instance->dtsn, dodag, dodag->id, conf, addr);
15531563

test/nanostack/unittest/stub/rpl_control_stub.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,11 @@ void rpl_control_request_parent_link_confirmation(bool requested)
249249

250250
}
251251

252+
void rpl_control_set_dio_multicast_min_config_advertisment_count(uint8_t min_count)
253+
{
254+
255+
}
256+
252257
void rpl_control_set_dao_retry_count(uint8_t count)
253258
{
254259

test/nanostack/unittest/stub/rpl_policy_stub.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,14 @@ int8_t rpl_policy_dao_retry_count()
197197
return 0;
198198
}
199199

200+
void rpl_policy_set_dio_multicast_config_advertisment_min_count(uint8_t min_count)
201+
{
202+
203+
}
204+
205+
uint8_t rpl_policy_dio_multicast_config_advertisment_min_count(void)
206+
{
207+
return 0;
208+
}
209+
200210
#endif /* HAVE_RPL */

0 commit comments

Comments
 (0)