mirror of
https://github.com/oliverschmidt/contiki.git
synced 2025-01-03 11:30:53 +00:00
* Optional AODV BAD_HOP extension.
This commit is contained in:
parent
ceb423c007
commit
67d94fd579
@ -28,7 +28,7 @@
|
|||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: uaodv-def.h,v 1.4 2007/05/21 15:24:44 bg- Exp $
|
* $Id: uaodv-def.h,v 1.5 2007/05/28 16:33:19 bg- Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -127,4 +127,20 @@ struct uaodv_msg_rrep_ack {
|
|||||||
u8_t reserved;
|
u8_t reserved;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define RREP_HELLO_INTERVAL_EXT 1 /* Per RFC 3561. */
|
||||||
|
#define RREQ_BAD_HOP_EXT 101 /* Non standard extension /bg */
|
||||||
|
|
||||||
|
struct uaodv_extension {
|
||||||
|
u8_t type;
|
||||||
|
u8_t length;
|
||||||
|
/* u8_t value[length]; */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct uaodv_bad_hop_ext {
|
||||||
|
u8_t type;
|
||||||
|
u8_t length;
|
||||||
|
u8_t unused1, unused2;
|
||||||
|
uip_ipaddr_t addrs[1];
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* __UAODV_DEF_H__ */
|
#endif /* __UAODV_DEF_H__ */
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: uaodv.c,v 1.22 2007/05/21 15:26:57 bg- Exp $
|
* $Id: uaodv.c,v 1.23 2007/05/28 16:32:43 bg- Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -348,6 +348,30 @@ handle_incoming_rrep(void)
|
|||||||
rm->hop_count,
|
rm->hop_count,
|
||||||
uip_ipaddr_to_quad(&rm->orig_addr));
|
uip_ipaddr_to_quad(&rm->orig_addr));
|
||||||
|
|
||||||
|
#ifdef AODV_BAD_HOP_EXTENSION
|
||||||
|
if(uip_len > (sizeof(*rm) + 2)) {
|
||||||
|
struct uaodv_bad_hop_ext *ext = (void *)(uip_appdata + sizeof(*rm));
|
||||||
|
u8_t *end = uip_appdata + uip_len;
|
||||||
|
for(;
|
||||||
|
(u8_t *)ext < end;
|
||||||
|
ext = (void *)((u8_t *)ext + ext->length + 2)) {
|
||||||
|
u8_t *eend = (u8_t *)ext + ext->length;
|
||||||
|
if(eend > end)
|
||||||
|
eend = end;
|
||||||
|
|
||||||
|
if(ext->type == RREQ_BAD_HOP_EXT) {
|
||||||
|
uip_ipaddr_t *a;
|
||||||
|
for(a = ext->addrs; (u8_t *)a < eend; a++) {
|
||||||
|
if(uip_ipaddr_cmp(a, &uip_hostaddr)) {
|
||||||
|
print_debug("BAD_HOP drop\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* AODV_BAD_HOP_EXTENSION */
|
||||||
|
|
||||||
rt = uaodv_rt_lookup(&rm->dest_addr);
|
rt = uaodv_rt_lookup(&rm->dest_addr);
|
||||||
|
|
||||||
/* New forward route? */
|
/* New forward route? */
|
||||||
|
Loading…
Reference in New Issue
Block a user