Added detection of loops in DAO forwarding.
This commit is contained in:
parent
cb1f206c4f
commit
19d7543267
1 changed files with 14 additions and 2 deletions
|
@ -33,7 +33,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: rpl-icmp6.c,v 1.23 2010/09/15 13:22:23 nvt-se Exp $
|
* $Id: rpl-icmp6.c,v 1.24 2010/10/25 19:49:12 nvt-se Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
|
@ -400,6 +400,7 @@ dao_input(void)
|
||||||
int len;
|
int len;
|
||||||
int i;
|
int i;
|
||||||
int learned_from;
|
int learned_from;
|
||||||
|
rpl_parent_t *p;
|
||||||
|
|
||||||
lifetime = 0;
|
lifetime = 0;
|
||||||
prefixlen = 0;
|
prefixlen = 0;
|
||||||
|
@ -483,6 +484,17 @@ dao_input(void)
|
||||||
learned_from = uip_is_addr_mcast(&dao_sender_addr) ?
|
learned_from = uip_is_addr_mcast(&dao_sender_addr) ?
|
||||||
RPL_ROUTE_FROM_MULTICAST_DAO : RPL_ROUTE_FROM_UNICAST_DAO;
|
RPL_ROUTE_FROM_MULTICAST_DAO : RPL_ROUTE_FROM_UNICAST_DAO;
|
||||||
|
|
||||||
|
if(learned_from == RPL_ROUTE_FROM_UNICAST_DAO) {
|
||||||
|
/* Check if this is a DAO forwarding loop. */
|
||||||
|
p = rpl_find_parent(dag, &dao_sender_addr);
|
||||||
|
if(p != NULL && p->rank < dag->rank) {
|
||||||
|
printf("RPL: Loop detected when receiving a unicast DAO from a node with a lower rank!\n");
|
||||||
|
dag->rank = INFINITE_RANK;
|
||||||
|
rpl_reset_dio_timer(dag, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rep = rpl_add_route(dag, &prefix, prefixlen, &dao_sender_addr);
|
rep = rpl_add_route(dag, &prefix, prefixlen, &dao_sender_addr);
|
||||||
if(rep == NULL) {
|
if(rep == NULL) {
|
||||||
PRINTF("RPL: Could not add a route after receiving a DAO\n");
|
PRINTF("RPL: Could not add a route after receiving a DAO\n");
|
||||||
|
|
Loading…
Reference in a new issue