fixed loop detection bug in RPL
This commit is contained in:
parent
8ee68b4345
commit
6ee05f4a2d
1 changed files with 6 additions and 4 deletions
|
@ -66,8 +66,8 @@ int
|
||||||
rpl_verify_header(int uip_ext_opt_offset)
|
rpl_verify_header(int uip_ext_opt_offset)
|
||||||
{
|
{
|
||||||
rpl_instance_t *instance;
|
rpl_instance_t *instance;
|
||||||
long diff;
|
|
||||||
int down;
|
int down;
|
||||||
|
uint8_t sender_closer;
|
||||||
|
|
||||||
if(UIP_EXT_HDR_OPT_RPL_BUF->opt_len != RPL_HDR_OPT_LEN) {
|
if(UIP_EXT_HDR_OPT_RPL_BUF->opt_len != RPL_HDR_OPT_LEN) {
|
||||||
PRINTF("RPL: Bad header option! (wrong length)\n");
|
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");
|
PRINTF("RPL: Packet going %s\n", down == 1 ? "down" : "up");
|
||||||
|
|
||||||
diff = UIP_EXT_HDR_OPT_RPL_BUF->senderrank - instance->current_dag->rank;
|
sender_closer = UIP_EXT_HDR_OPT_RPL_BUF->senderrank < instance->current_dag->rank;
|
||||||
if((down && diff > 0) || (!down && diff < 0)) {
|
if((down && !sender_closer) || (!down && sender_closer)) {
|
||||||
PRINTF("RPL: Loop detected\n");
|
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) {
|
if(UIP_EXT_HDR_OPT_RPL_BUF->flags & RPL_HDR_OPT_RANK_ERR) {
|
||||||
PRINTF("RPL: Rank error signalled in RPL option!\n");
|
PRINTF("RPL: Rank error signalled in RPL option!\n");
|
||||||
/* We should try to repair it, not implemented for the moment */
|
/* We should try to repair it, not implemented for the moment */
|
||||||
|
|
Loading…
Reference in a new issue