Improved DAO management.
This commit is contained in:
parent
79329573a0
commit
8f76c82433
|
@ -32,7 +32,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: rpl-dag.c,v 1.41 2010/12/13 10:59:37 joxe Exp $
|
* $Id: rpl-dag.c,v 1.42 2010/12/17 15:24:25 nvt-se Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
|
@ -117,8 +117,7 @@ remove_parents(rpl_dag_t *dag, rpl_rank_t minimum_rank)
|
||||||
static int
|
static int
|
||||||
should_send_dao(rpl_dag_t *dag, rpl_dio_t *dio, rpl_parent_t *p)
|
should_send_dao(rpl_dag_t *dag, rpl_dio_t *dio, rpl_parent_t *p)
|
||||||
{
|
{
|
||||||
return 1;
|
return dio->dtsn > p->dtsn && p == dag->preferred_parent;
|
||||||
/* return dio->dtsn > p->dtsn && p == dag->preferred_parent;*/
|
|
||||||
}
|
}
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
static int
|
static int
|
||||||
|
@ -237,6 +236,8 @@ rpl_alloc_dag(uint8_t instance_id)
|
||||||
return dag;
|
return dag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RPL_STAT(rpl_stats.mem_overflows++);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
@ -372,6 +373,7 @@ rpl_dag_t *
|
||||||
rpl_get_dag(int instance_id)
|
rpl_get_dag(int instance_id)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i = 0; i < RPL_MAX_DAG_ENTRIES; i++) {
|
for(i = 0; i < RPL_MAX_DAG_ENTRIES; i++) {
|
||||||
if(dag_table[i].joined && (instance_id == RPL_ANY_INSTANCE ||
|
if(dag_table[i].joined && (instance_id == RPL_ANY_INSTANCE ||
|
||||||
dag_table[i].instance_id == instance_id)) {
|
dag_table[i].instance_id == instance_id)) {
|
||||||
|
|
|
@ -32,7 +32,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.33 2010/12/15 19:57:40 nvt-se Exp $
|
* $Id: rpl-icmp6.c,v 1.34 2010/12/17 15:24:25 nvt-se Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
|
@ -484,7 +484,7 @@ dao_input(void)
|
||||||
PRINTF("\n");
|
PRINTF("\n");
|
||||||
|
|
||||||
if(lifetime == ZERO_LIFETIME) {
|
if(lifetime == ZERO_LIFETIME) {
|
||||||
/* No-DAO received; invoke the route purging routine. */
|
/* No-Path DAO received; invoke the route purging routine. */
|
||||||
rep = uip_ds6_route_lookup(&prefix);
|
rep = uip_ds6_route_lookup(&prefix);
|
||||||
if(rep != NULL && rep->state.saved_lifetime == 0) {
|
if(rep != NULL && rep->state.saved_lifetime == 0) {
|
||||||
PRINTF("RPL: Setting expiration timer for prefix ");
|
PRINTF("RPL: Setting expiration timer for prefix ");
|
||||||
|
@ -515,6 +515,7 @@ dao_input(void)
|
||||||
|
|
||||||
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) {
|
||||||
|
RPL_STAT(rpl_stats.memory_overflows++);
|
||||||
PRINTF("RPL: Could not add a route after receiving a DAO\n");
|
PRINTF("RPL: Could not add a route after receiving a DAO\n");
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: rpl-timers.c,v 1.15 2010/12/15 12:12:27 nvt-se Exp $
|
* $Id: rpl-timers.c,v 1.16 2010/12/17 15:24:25 nvt-se Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
|
@ -224,10 +224,11 @@ rpl_schedule_dao(rpl_dag_t *dag)
|
||||||
if(!etimer_expired(&dag->dao_timer.etimer)) {
|
if(!etimer_expired(&dag->dao_timer.etimer)) {
|
||||||
PRINTF("RPL: DAO timer already scheduled\n");
|
PRINTF("RPL: DAO timer already scheduled\n");
|
||||||
} else {
|
} else {
|
||||||
PRINTF("RPL: Scheduling DAO timer %u ticks in the future (%u %u)\n",
|
expiration_time = DEFAULT_DAO_LATENCY / 2 +
|
||||||
(unsigned)DEFAULT_DAO_LATENCY / dag->rank,
|
(random_rand() % (DEFAULT_DAO_LATENCY));
|
||||||
(unsigned)DEFAULT_DAO_LATENCY, (unsigned)dag->rank);
|
PRINTF("RPL: Scheduling DAO timer %u ticks in the future\n",
|
||||||
ctimer_set(&dag->dao_timer, DEFAULT_DAO_LATENCY,
|
(unsigned)expiration_time);
|
||||||
|
ctimer_set(&dag->dao_timer, expiration_time,
|
||||||
handle_dao_timer, dag);
|
handle_dao_timer, dag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Joakim Eriksson, Nicolas Tsiftes
|
* Author: Joakim Eriksson, Nicolas Tsiftes
|
||||||
*
|
*
|
||||||
* $Id: rpl.h,v 1.27 2010/12/15 13:37:34 nvt-se Exp $
|
* $Id: rpl.h,v 1.28 2010/12/17 15:24:25 nvt-se Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef RPL_H
|
#ifndef RPL_H
|
||||||
|
@ -85,7 +85,8 @@
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Default values for RPL constants and variables. */
|
/* Default values for RPL constants and variables. */
|
||||||
|
|
||||||
#define DEFAULT_DAO_LATENCY (CLOCK_SECOND * (1 + (random_rand() & 0xf)))
|
/* The default value for the DAO timer. */
|
||||||
|
#define DEFAULT_DAO_LATENCY (CLOCK_SECOND * 8)
|
||||||
|
|
||||||
/* Special value indicating immediate removal. */
|
/* Special value indicating immediate removal. */
|
||||||
#define ZERO_LIFETIME 0
|
#define ZERO_LIFETIME 0
|
||||||
|
|
Loading…
Reference in a new issue