Merge pull request #1406 from simonduq/pr/fix-rpl-multi-dag
RPL multiple DAG bugfix
This commit is contained in:
commit
35fb0614de
|
@ -95,10 +95,11 @@ rpl_print_neighbor_list()
|
||||||
printf("RPL: rank %u dioint %u, %u nbr(s)\n", curr_rank, curr_dio_interval, uip_ds6_nbr_num());
|
printf("RPL: rank %u dioint %u, %u nbr(s)\n", curr_rank, curr_dio_interval, uip_ds6_nbr_num());
|
||||||
while(p != NULL) {
|
while(p != NULL) {
|
||||||
uip_ds6_nbr_t *nbr = rpl_get_nbr(p);
|
uip_ds6_nbr_t *nbr = rpl_get_nbr(p);
|
||||||
printf("RPL: nbr %3u %5u, %5u => %5u %c (last tx %u min ago)\n",
|
printf("RPL: nbr %3u %5u, %5u => %5u %c%c (last tx %u min ago)\n",
|
||||||
nbr_table_get_lladdr(rpl_parents, p)->u8[7],
|
nbr_table_get_lladdr(rpl_parents, p)->u8[7],
|
||||||
p->rank, nbr ? nbr->link_metric : 0,
|
p->rank, nbr ? nbr->link_metric : 0,
|
||||||
default_instance->of->calculate_rank(p, 0),
|
default_instance->of->calculate_rank(p, 0),
|
||||||
|
default_instance->current_dag == p->dag ? 'd' : ' ',
|
||||||
p == default_instance->current_dag->preferred_parent ? '*' : ' ',
|
p == default_instance->current_dag->preferred_parent ? '*' : ' ',
|
||||||
(unsigned)((now - p->last_tx_time) / (60 * CLOCK_SECOND)));
|
(unsigned)((now - p->last_tx_time) / (60 * CLOCK_SECOND)));
|
||||||
p = nbr_table_next(rpl_parents, p);
|
p = nbr_table_next(rpl_parents, p);
|
||||||
|
@ -1026,7 +1027,7 @@ rpl_join_instance(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
|
|
||||||
#if RPL_MAX_DAG_PER_INSTANCE > 1
|
#if RPL_MAX_DAG_PER_INSTANCE > 1
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void
|
rpl_dag_t *
|
||||||
rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
|
rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
{
|
{
|
||||||
rpl_instance_t *instance;
|
rpl_instance_t *instance;
|
||||||
|
@ -1037,7 +1038,7 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
dag = rpl_alloc_dag(dio->instance_id, &dio->dag_id);
|
dag = rpl_alloc_dag(dio->instance_id, &dio->dag_id);
|
||||||
if(dag == NULL) {
|
if(dag == NULL) {
|
||||||
PRINTF("RPL: Failed to allocate a DAG object!\n");
|
PRINTF("RPL: Failed to allocate a DAG object!\n");
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
instance = dag->instance;
|
instance = dag->instance;
|
||||||
|
@ -1051,7 +1052,7 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
if(p == NULL) {
|
if(p == NULL) {
|
||||||
PRINTF("failed\n");
|
PRINTF("failed\n");
|
||||||
dag->used = 0;
|
dag->used = 0;
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
PRINTF("succeeded\n");
|
PRINTF("succeeded\n");
|
||||||
} else {
|
} else {
|
||||||
|
@ -1078,7 +1079,7 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
dio->instance_id);
|
dio->instance_id);
|
||||||
rpl_remove_parent(p);
|
rpl_remove_parent(p);
|
||||||
dag->used = 0;
|
dag->used = 0;
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
dag->used = 1;
|
dag->used = 1;
|
||||||
|
@ -1104,6 +1105,8 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
|
|
||||||
rpl_process_parent_event(instance, p);
|
rpl_process_parent_event(instance, p);
|
||||||
p->dtsn = dio->dtsn;
|
p->dtsn = dio->dtsn;
|
||||||
|
|
||||||
|
return dag;
|
||||||
}
|
}
|
||||||
#endif /* RPL_MAX_DAG_PER_INSTANCE > 1 */
|
#endif /* RPL_MAX_DAG_PER_INSTANCE > 1 */
|
||||||
|
|
||||||
|
@ -1303,8 +1306,11 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio)
|
||||||
if(dag == NULL) {
|
if(dag == NULL) {
|
||||||
#if RPL_MAX_DAG_PER_INSTANCE > 1
|
#if RPL_MAX_DAG_PER_INSTANCE > 1
|
||||||
PRINTF("RPL: Adding new DAG to known instance.\n");
|
PRINTF("RPL: Adding new DAG to known instance.\n");
|
||||||
rpl_add_dag(from, dio);
|
dag = rpl_add_dag(from, dio);
|
||||||
|
if(dag == NULL) {
|
||||||
|
PRINTF("RPL: Failed to add DAG.\n");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
#else /* RPL_MAX_DAG_PER_INSTANCE > 1 */
|
#else /* RPL_MAX_DAG_PER_INSTANCE > 1 */
|
||||||
PRINTF("RPL: Only one instance supported.\n");
|
PRINTF("RPL: Only one instance supported.\n");
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue