From 95a28f99b5831b6e0d94b26be6512eb089537aa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Mon, 16 Mar 2015 10:26:39 +0100 Subject: [PATCH] rpl: update routing table information for all dodags --- sys/net/routing/rpl/rpl.c | 43 ++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/sys/net/routing/rpl/rpl.c b/sys/net/routing/rpl/rpl.c index 65b81913c49f..212ebddc1aaa 100644 --- a/sys/net/routing/rpl/rpl.c +++ b/sys/net/routing/rpl/rpl.c @@ -278,34 +278,35 @@ void *rpl_process(void *arg) void _rpl_update_routing_table(void) { - rpl_dodag_t *my_dodag = rpl_get_my_dodag(); - rpl_routing_entry_t *rt; + rpl_dodag_t *my_dodag; + rpl_dodag_t *end; + rpl_routing_entry_t *rt = rpl_get_routing_table(); - if (my_dodag != NULL) { - rt = rpl_get_routing_table(); + for (uint8_t i = 0; i < rpl_max_routing_entries; i++) { + if (rt[i].used) { + if (rt[i].lifetime <= 1) { + memset(&rt[i], 0, sizeof(rt[i])); + } + else { + rt[i].lifetime = rt[i].lifetime - RPL_LIFETIME_STEP; + } + } + } - for (uint8_t i = 0; i < rpl_max_routing_entries; i++) { - if (rt[i].used) { - if (rt[i].lifetime <= 1) { - memset(&rt[i], 0, sizeof(rt[i])); + for (my_dodag = rpl_dodags, end = my_dodag + RPL_MAX_DODAGS; my_dodag < end; my_dodag++) { + if (my_dodag->used) { + /* Parent is NULL for root too */ + if (my_dodag->my_preferred_parent != NULL) { + if (my_dodag->my_preferred_parent->lifetime <= 1) { + DEBUGF("parent lifetime timeout\n"); + rpl_parent_update(NULL); } else { - rt[i].lifetime = rt[i].lifetime - RPL_LIFETIME_STEP; + my_dodag->my_preferred_parent->lifetime = + my_dodag->my_preferred_parent->lifetime - RPL_LIFETIME_STEP; } } } - - /* Parent is NULL for root too */ - if (my_dodag->my_preferred_parent != NULL) { - if (my_dodag->my_preferred_parent->lifetime <= 1) { - DEBUGF("parent lifetime timeout\n"); - rpl_parent_update(NULL); - } - else { - my_dodag->my_preferred_parent->lifetime = - my_dodag->my_preferred_parent->lifetime - RPL_LIFETIME_STEP; - } - } } vtimer_remove(&rt_timer);