From 02071ca8260fd4e2b1b86ec52007d7fa0757a117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Fri, 21 Aug 2015 13:36:37 +0200 Subject: [PATCH] rpl: reset trickle if INFINITE_RANK DIO from child recvd --- .../gnrc/routing/rpl/gnrc_rpl_control_messages.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sys/net/gnrc/routing/rpl/gnrc_rpl_control_messages.c b/sys/net/gnrc/routing/rpl/gnrc_rpl_control_messages.c index 7b22b4ddcf..d913033f25 100644 --- a/sys/net/gnrc/routing/rpl/gnrc_rpl_control_messages.c +++ b/sys/net/gnrc/routing/rpl/gnrc_rpl_control_messages.c @@ -432,6 +432,9 @@ void gnrc_rpl_recv_DIO(gnrc_rpl_dio_t *dio, ipv6_addr_t *src, uint16_t len) if (byteorder_ntohs(dio->rank) != GNRC_RPL_INFINITE_RANK) { trickle_increment_counter(&dodag->trickle); } + else { + trickle_reset_timer(&dodag->trickle); + } return; } @@ -456,8 +459,17 @@ void gnrc_rpl_recv_DIO(gnrc_rpl_dio_t *dio, ipv6_addr_t *src, uint16_t len) gnrc_rpl_parent_update(dodag, parent); + /* sender of incoming DIO is not a parent of mine (anymore) and has an INFINITE rank + and I have a rank != INFINITE_RANK */ + if (parent->state == 0) { + if ((byteorder_ntohs(dio->rank) == GNRC_RPL_INFINITE_RANK) + && (dodag->my_rank != GNRC_RPL_INFINITE_RANK)) { + trickle_reset_timer(&dodag->trickle); + return; + } + } /* incoming DIO is from pref. parent */ - if (dodag->parents && (parent == dodag->parents) && (parent->state != 0)) { + else if (parent == dodag->parents) { if (parent->dtsn != dio->dtsn) { gnrc_rpl_delay_dao(dodag); }