Skip to content

Commit ea15b0e

Browse files
author
Juha Heiskanen
committed
Remove all instances when domain is disbaled and clear EAPOL relay.
Change-Id: I727f653389f4113fbe6f0595c7c9d524f0c683da
1 parent dce25d3 commit ea15b0e

File tree

4 files changed

+29
-3
lines changed

4 files changed

+29
-3
lines changed

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2116,7 +2116,9 @@ static void ws_bootstrap_start_discovery(protocol_interface_info_entry_t *cur)
21162116
ws_bootstrap_neighbor_list_clean(cur);
21172117

21182118
// Clear RPL information
2119-
rpl_control_remove_domain_from_interface(cur);
2119+
rpl_control_free_domain_instances_from_interface(cur);
2120+
// Clear EAPOL relay address
2121+
ws_eapol_relay_delete(cur);
21202122

21212123
// Clear ip stack from old information
21222124
ws_bootstrap_ip_stack_reset(cur);

source/RPL/rpl_control.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,16 +350,24 @@ void rpl_control_delete_domain(rpl_domain_t *domain)
350350
rpl_free(domain, sizeof * domain);
351351
}
352352

353-
static void rpl_control_remove_interface_from_domain(protocol_interface_info_entry_t *cur, rpl_domain_t *domain)
353+
static void rpl_control_remove_interface_from_domain(protocol_interface_info_entry_t *cur, rpl_domain_t *domain, bool free_instances)
354354
{
355355
ns_list_foreach(rpl_instance_t, instance, &domain->instances) {
356356
rpl_instance_remove_interface(instance, cur->id);
357357
}
358+
358359
ns_list_foreach(if_address_entry_t, addr, &cur->ip_addresses) {
359360
if (!addr_is_ipv6_link_local(addr->address)) {
360361
rpl_control_unpublish_address(domain, addr->address);
361362
}
362363
}
364+
365+
if (free_instances) {
366+
ns_list_foreach_safe(rpl_instance_t, instance, &domain->instances) {
367+
rpl_delete_instance(instance);
368+
}
369+
}
370+
363371
if (domain->non_storing_downstream_interface == cur->id) {
364372
domain->non_storing_downstream_interface = -1;
365373
}
@@ -384,7 +392,16 @@ void rpl_control_set_domain_on_interface(protocol_interface_info_entry_t *cur, r
384392
void rpl_control_remove_domain_from_interface(protocol_interface_info_entry_t *cur)
385393
{
386394
if (cur->rpl_domain) {
387-
rpl_control_remove_interface_from_domain(cur, cur->rpl_domain);
395+
rpl_control_remove_interface_from_domain(cur, cur->rpl_domain, false);
396+
addr_delete_group(cur, ADDR_LINK_LOCAL_ALL_RPL_NODES);
397+
cur->rpl_domain = NULL;
398+
}
399+
}
400+
401+
void rpl_control_free_domain_instances_from_interface(protocol_interface_info_entry_t *cur)
402+
{
403+
if (cur->rpl_domain) {
404+
rpl_control_remove_interface_from_domain(cur, cur->rpl_domain, true);
388405
addr_delete_group(cur, ADDR_LINK_LOCAL_ALL_RPL_NODES);
389406
cur->rpl_domain = NULL;
390407
}

source/RPL/rpl_control.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ rpl_domain_t *rpl_control_create_domain(void);
145145
void rpl_control_delete_domain(rpl_domain_t *domain);
146146
void rpl_control_set_domain_on_interface(struct protocol_interface_info_entry *cur, rpl_domain_t *domain, bool downstream);
147147
void rpl_control_remove_domain_from_interface(struct protocol_interface_info_entry *cur);
148+
void rpl_control_free_domain_instances_from_interface(struct protocol_interface_info_entry *cur);
148149
void rpl_control_set_callback(rpl_domain_t *domain, rpl_domain_callback_t callback, rpl_prefix_callback_t prefix_learn_cb, rpl_new_parent_callback_t new_parent_add, void *cb_handle);
149150

150151
/* Target publishing */
@@ -180,6 +181,7 @@ uint16_t rpl_control_current_rank(const struct rpl_instance *instance);
180181
#define rpl_control_fast_timer(ticks) ((void) 0)
181182
#define rpl_control_slow_timer(seconds) ((void) 0)
182183
#define rpl_control_remove_domain_from_interface(cur) ((void) 0)
184+
#define rpl_control_free_domain_instances_from_interface(cur) ((void) 0)
183185
#define rpl_control_register_address(interface, addr) ((void) 0)
184186
#define rpl_control_address_register_done(interface, ll_addr, status) ((void) 0)
185187

test/nanostack/unittest/stub/rpl_control_stub.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ void rpl_control_remove_domain_from_interface(protocol_interface_info_entry_t *c
9999

100100
}
101101

102+
void rpl_control_free_domain_instances_from_interface(protocol_interface_info_entry_t *cur)
103+
{
104+
105+
}
106+
102107
void rpl_control_set_callback(rpl_domain_t *domain, rpl_domain_callback_t callback, rpl_prefix_callback_t prefix_learn_cb, rpl_new_parent_callback_t new_parent_add, void *cb_handle)
103108
{
104109

0 commit comments

Comments
 (0)