Skip to content

Commit a2019f4

Browse files
author
Juha Heiskanen
committed
RPL target address publish update
RPL slow timer check automatically if RPL learn new instances or Interface got new address. Earlier Address Callback was handling this and DIO message handler. Now functionality is centralised to one place. Change-Id: I822980153502f3581df922a3005c3da3540871b9
1 parent cea03d6 commit a2019f4

File tree

2 files changed

+4
-25
lines changed

2 files changed

+4
-25
lines changed

source/RPL/rpl_control.c

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,6 @@ static void rpl_control_publish_own_addresses(rpl_domain_t *domain, rpl_instance
151151
}
152152
}
153153

154-
static void rpl_control_publish_own_address(rpl_domain_t *domain, const if_address_entry_t *addr)
155-
{
156-
ns_list_foreach(rpl_instance_t, instance, &domain->instances) {
157-
if (!rpl_instance_am_root(instance)) {
158-
uint32_t descriptor = 0;
159-
bool want_descriptor = rpl_policy_target_descriptor_for_own_address(domain, addr->address, addr->source, addr->data, &descriptor);
160-
rpl_instance_publish_dao_target(instance, addr->address, 128, addr->valid_lifetime, true, want_descriptor, descriptor);
161-
}
162-
}
163-
}
164-
165154
void rpl_control_publish_host_address(rpl_domain_t *domain, const uint8_t addr[16], uint32_t lifetime)
166155
{
167156
ns_list_foreach(rpl_instance_t, instance, &domain->instances) {
@@ -260,10 +249,6 @@ static void rpl_control_addr_notifier(struct protocol_interface_info_entry *inte
260249
}
261250

262251
switch (reason) {
263-
case ADDR_CALLBACK_DAD_COMPLETE:
264-
case ADDR_CALLBACK_REFRESHED:
265-
rpl_control_publish_own_address(interface->rpl_domain, addr);
266-
break;
267252
case ADDR_CALLBACK_DELETED:
268253
rpl_control_unpublish_address(interface->rpl_domain, addr->address);
269254
break;
@@ -345,11 +330,7 @@ void rpl_control_set_domain_on_interface(protocol_interface_info_entry_t *cur, r
345330
cur->rpl_domain = domain;
346331
addr_add_group(cur, ADDR_LINK_LOCAL_ALL_RPL_NODES);
347332
}
348-
ns_list_foreach(if_address_entry_t, addr, &cur->ip_addresses) {
349-
if (!addr_is_ipv6_link_local(addr->address)) {
350-
rpl_control_publish_own_address(domain, addr);
351-
}
352-
}
333+
353334
if (downstream) {
354335
domain->non_storing_downstream_interface = cur->id;
355336
}
@@ -898,10 +879,6 @@ static buffer_t *rpl_control_dio_handler(protocol_interface_info_entry_t *cur, r
898879
if (!instance) {
899880
return buffer_free(buf);
900881
}
901-
902-
if ((g_mop_prf & RPL_MODE_MASK) != RPL_MODE_NO_DOWNWARD) {
903-
rpl_control_publish_own_addresses(domain, instance);
904-
}
905882
}
906883

907884
/* Lookup any existing neighbour entry */
@@ -1628,6 +1605,7 @@ void rpl_control_slow_timer(uint16_t seconds)
16281605

16291606
ns_list_foreach(rpl_domain_t, domain, &rpl_domains) {
16301607
ns_list_foreach_safe(rpl_instance_t, instance, &domain->instances) {
1608+
rpl_control_publish_own_addresses(domain, instance);
16311609
rpl_instance_slow_timer(instance, seconds);
16321610
rpl_downward_dao_slow_timer(instance, seconds);
16331611
/* We purge one item from each instance, so as not to favour one domain or instance */

source/RPL/rpl_downward.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,9 @@ void rpl_instance_publish_dao_target(rpl_instance_t *instance, const uint8_t *pr
345345
{
346346
rpl_dao_target_t *target = rpl_instance_lookup_published_dao_target(instance, prefix, prefix_len);
347347
if (target) {
348+
int diff = target->lifetime > valid_lifetime ? target->lifetime - valid_lifetime : valid_lifetime - target->lifetime;
348349
target->lifetime = valid_lifetime;
349-
if (!own) {
350+
if (!own && diff > 60) {
350351
/* For non-owned targets, publish triggers a refresh */
351352
rpl_downward_target_refresh(target);
352353
rpl_instance_dao_trigger(instance, 0);

0 commit comments

Comments
 (0)