From 6ee05f4a2d6bee3384878b524590fc7630cdd283 Mon Sep 17 00:00:00 2001 From: Joakim Eriksson Date: Fri, 13 Jan 2012 05:37:30 -0800 Subject: [PATCH] fixed loop detection bug in RPL --- core/net/rpl/rpl-ext-header.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/net/rpl/rpl-ext-header.c b/core/net/rpl/rpl-ext-header.c index cf8313938..f94a00c3c 100644 --- a/core/net/rpl/rpl-ext-header.c +++ b/core/net/rpl/rpl-ext-header.c @@ -66,8 +66,8 @@ int rpl_verify_header(int uip_ext_opt_offset) { rpl_instance_t *instance; - long diff; int down; + uint8_t sender_closer; if(UIP_EXT_HDR_OPT_RPL_BUF->opt_len != RPL_HDR_OPT_LEN) { PRINTF("RPL: Bad header option! (wrong length)\n"); @@ -99,9 +99,11 @@ rpl_verify_header(int uip_ext_opt_offset) PRINTF("RPL: Packet going %s\n", down == 1 ? "down" : "up"); - diff = UIP_EXT_HDR_OPT_RPL_BUF->senderrank - instance->current_dag->rank; - if((down && diff > 0) || (!down && diff < 0)) { - PRINTF("RPL: Loop detected\n"); + sender_closer = UIP_EXT_HDR_OPT_RPL_BUF->senderrank < instance->current_dag->rank; + if((down && !sender_closer) || (!down && sender_closer)) { + PRINTF("RPL: Loop detected - senderrank: %d my-rank: %d sender_closer: %d\n", + UIP_EXT_HDR_OPT_RPL_BUF->senderrank, instance->current_dag->rank, + sender_closer); if(UIP_EXT_HDR_OPT_RPL_BUF->flags & RPL_HDR_OPT_RANK_ERR) { PRINTF("RPL: Rank error signalled in RPL option!\n"); /* We should try to repair it, not implemented for the moment */