Bugfix: DIOs with infinite ranks should not be ignored as they are used by RPL as a signal by nodes that have lost their routes. Instead of ignoring them, we should send out our latest information to let the node with infinite rank find their way into the network again.

This commit is contained in:
Adam Dunkels 2013-07-26 12:38:25 +02:00
parent 10f64c0ce8
commit 512a339c50

View file

@ -630,7 +630,7 @@ rpl_select_dag(rpl_instance_t *instance, rpl_parent_t *p)
instance->of->update_metric_container(instance); instance->of->update_metric_container(instance);
/* Update the DAG rank. */ /* Update the DAG rank. */
best_dag->rank = instance->of->calculate_rank(best_dag->preferred_parent, 0); best_dag->rank = instance->of->calculate_rank(best_dag->preferred_parent, 0);
if(best_dag->rank < best_dag->min_rank) { if(last_parent == NULL || best_dag->rank < best_dag->min_rank) {
best_dag->min_rank = best_dag->rank; best_dag->min_rank = best_dag->rank;
} else if(!acceptable_rank(best_dag, best_dag->rank)) { } else if(!acceptable_rank(best_dag, best_dag->rank)) {
PRINTF("RPL: New rank unacceptable!\n"); PRINTF("RPL: New rank unacceptable!\n");
@ -1143,13 +1143,6 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
} }
} }
if(dio->rank == INFINITE_RANK) {
PRINTF("RPL: Ignoring DIO from node with infinite rank: ");
PRINT6ADDR(from);
PRINTF("\n");
return;
}
if(instance == NULL) { if(instance == NULL) {
PRINTF("RPL: New instance detected: Joining...\n"); PRINTF("RPL: New instance detected: Joining...\n");
rpl_join_instance(from, dio); rpl_join_instance(from, dio);