* Add attribute to track bad routes and necessary support for this.
This commit is contained in:
parent
7ec3d191a2
commit
67e23ee564
2 changed files with 19 additions and 14 deletions
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: uaodv-rt.c,v 1.3 2007/04/04 11:50:54 bg- Exp $
|
* $Id: uaodv-rt.c,v 1.4 2007/05/08 08:30:49 bg- Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,6 +82,7 @@ uaodv_rt_add(uip_ipaddr_t *dest, uip_ipaddr_t *nexthop,
|
||||||
uip_ipaddr_copy(&e->nexthop, nexthop);
|
uip_ipaddr_copy(&e->nexthop, nexthop);
|
||||||
e->hop_count = hop_count;
|
e->hop_count = hop_count;
|
||||||
e->seqno = seqno;
|
e->seqno = seqno;
|
||||||
|
e->is_bad = 0;
|
||||||
|
|
||||||
/* New entry goes first. */
|
/* New entry goes first. */
|
||||||
list_push(route_table, e);
|
list_push(route_table, e);
|
||||||
|
@ -90,34 +91,37 @@ uaodv_rt_add(uip_ipaddr_t *dest, uip_ipaddr_t *nexthop,
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
struct uaodv_rt_entry *
|
struct uaodv_rt_entry *
|
||||||
uaodv_rt_lookup(uip_ipaddr_t *dest)
|
uaodv_rt_lookup_any(uip_ipaddr_t *dest)
|
||||||
{
|
{
|
||||||
struct uaodv_rt_entry *e;
|
struct uaodv_rt_entry *e;
|
||||||
|
|
||||||
for(e = list_head(route_table); e != NULL; e = e->next) {
|
for(e = list_head(route_table); e != NULL; e = e->next) {
|
||||||
/* printf("uaodv_rt_lookup: comparing %d.%d.%d.%d with %d.%d.%d.%d\n",
|
|
||||||
uip_ipaddr1(dest),
|
|
||||||
uip_ipaddr2(dest),
|
|
||||||
uip_ipaddr3(dest),
|
|
||||||
uip_ipaddr4(dest),
|
|
||||||
uip_ipaddr1(&e->dest),
|
|
||||||
uip_ipaddr2(&e->dest),
|
|
||||||
uip_ipaddr3(&e->dest),
|
|
||||||
uip_ipaddr4(&e->dest));*/
|
|
||||||
|
|
||||||
if(uip_ipaddr_cmp(dest, &e->dest)) {
|
if(uip_ipaddr_cmp(dest, &e->dest)) {
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct uaodv_rt_entry *
|
||||||
|
uaodv_rt_lookup(uip_ipaddr_t *dest)
|
||||||
|
{
|
||||||
|
struct uaodv_rt_entry *e;
|
||||||
|
|
||||||
|
e = uaodv_rt_lookup_any(dest);
|
||||||
|
if(e->is_bad)
|
||||||
|
return NULL;
|
||||||
|
return e;
|
||||||
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
#if 0
|
||||||
void
|
void
|
||||||
uaodv_rt_remove(struct uaodv_rt_entry *e)
|
uaodv_rt_remove(struct uaodv_rt_entry *e)
|
||||||
{
|
{
|
||||||
list_remove(route_table, e);
|
list_remove(route_table, e);
|
||||||
memb_free(&route_mem, e);
|
memb_free(&route_mem, e);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
uaodv_rt_lru(struct uaodv_rt_entry *e)
|
uaodv_rt_lru(struct uaodv_rt_entry *e)
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: uaodv-rt.h,v 1.2 2007/04/04 11:52:29 bg- Exp $
|
* $Id: uaodv-rt.h,v 1.3 2007/05/08 08:31:09 bg- Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,12 +49,13 @@ struct uaodv_rt_entry {
|
||||||
uip_ipaddr_t nexthop;
|
uip_ipaddr_t nexthop;
|
||||||
u32_t seqno;
|
u32_t seqno;
|
||||||
u8_t hop_count;
|
u8_t hop_count;
|
||||||
u8_t unused;
|
u8_t is_bad; /* one bit used */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uaodv_rt_entry *
|
struct uaodv_rt_entry *
|
||||||
uaodv_rt_add(uip_ipaddr_t *dest, uip_ipaddr_t *nexthop,
|
uaodv_rt_add(uip_ipaddr_t *dest, uip_ipaddr_t *nexthop,
|
||||||
unsigned hop_count, u32_t seqno);
|
unsigned hop_count, u32_t seqno);
|
||||||
|
struct uaodv_rt_entry *uaodv_rt_lookup_any(uip_ipaddr_t *dest);
|
||||||
struct uaodv_rt_entry *uaodv_rt_lookup(uip_ipaddr_t *dest);
|
struct uaodv_rt_entry *uaodv_rt_lookup(uip_ipaddr_t *dest);
|
||||||
void uaodv_rt_remove(struct uaodv_rt_entry *e);
|
void uaodv_rt_remove(struct uaodv_rt_entry *e);
|
||||||
void uaodv_rt_lru(struct uaodv_rt_entry *e);
|
void uaodv_rt_lru(struct uaodv_rt_entry *e);
|
||||||
|
|
Loading…
Reference in a new issue