* Make it explicit that some seqno:s are in host byte order by naming
them hseqno. * Change uaodv_rt_add to take argument in (standard) network byte order (and change it to be a pointer).
This commit is contained in:
parent
1b3c2da7ab
commit
34490eeecb
|
@ -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.16 2007/05/09 13:07:55 bg- Exp $
|
* $Id: uaodv.c,v 1.17 2007/05/09 13:54:41 bg- Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,7 +78,7 @@ last_known_seqno(uip_ipaddr_t *host)
|
||||||
struct uaodv_rt_entry *route = uaodv_rt_lookup_any(host);
|
struct uaodv_rt_entry *route = uaodv_rt_lookup_any(host);
|
||||||
|
|
||||||
if(route != NULL)
|
if(route != NULL)
|
||||||
return route->seqno;
|
return htonl(route->hseqno);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ last_known_seqno(uip_ipaddr_t *host)
|
||||||
#else /* __GNUC__ */
|
#else /* __GNUC__ */
|
||||||
#define NOINIT
|
#define NOINIT
|
||||||
#endif /* __GNUC__ */
|
#endif /* __GNUC__ */
|
||||||
NOINIT static u32_t rreq_id, rreq_seqno;
|
NOINIT static u32_t rreq_id, my_hseqno; /* In host byte order! */
|
||||||
|
|
||||||
#define NFWCACHE 16
|
#define NFWCACHE 16
|
||||||
|
|
||||||
|
@ -174,8 +174,8 @@ send_rreq(uip_ipaddr_t *addr)
|
||||||
rm->rreq_id = htonl(rreq_id++);
|
rm->rreq_id = htonl(rreq_id++);
|
||||||
uip_ipaddr_copy(&rm->dest_addr, addr);
|
uip_ipaddr_copy(&rm->dest_addr, addr);
|
||||||
uip_gethostaddr(&rm->orig_addr);
|
uip_gethostaddr(&rm->orig_addr);
|
||||||
rreq_seqno++; /* Always */
|
my_hseqno++; /* Always */
|
||||||
rm->orig_seqno = htonl(rreq_seqno);
|
rm->orig_seqno = htonl(my_hseqno);
|
||||||
uip_udp_packet_send(bcastconn, rm, sizeof(struct uaodv_msg_rreq));
|
uip_udp_packet_send(bcastconn, rm, sizeof(struct uaodv_msg_rreq));
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
@ -259,12 +259,12 @@ handle_incoming_rreq(void)
|
||||||
/* New reverse route? */
|
/* New reverse route? */
|
||||||
rt = uaodv_rt_lookup(&rm->orig_addr);
|
rt = uaodv_rt_lookup(&rm->orig_addr);
|
||||||
if(rt == NULL
|
if(rt == NULL
|
||||||
|| (SCMP32(ntohl(rm->orig_seqno), rt->seqno) > 0) /* New route. */
|
|| (SCMP32(ntohl(rm->orig_seqno), rt->hseqno) > 0) /* New route. */
|
||||||
|| (SCMP32(ntohl(rm->orig_seqno), rt->seqno) == 0
|
|| (SCMP32(ntohl(rm->orig_seqno), rt->hseqno) == 0
|
||||||
&& rm->hop_count < rt->hop_count)) { /* Better route. */
|
&& rm->hop_count < rt->hop_count)) { /* Better route. */
|
||||||
print_debug("Inserting1\n");
|
print_debug("Inserting1\n");
|
||||||
rt = uaodv_rt_add(&rm->orig_addr, uip_udp_sender(),
|
rt = uaodv_rt_add(&rm->orig_addr, uip_udp_sender(),
|
||||||
rm->hop_count, ntohl(rm->orig_seqno));
|
rm->hop_count, &rm->orig_seqno);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if it is for our address or a fresh route. */
|
/* Check if it is for our address or a fresh route. */
|
||||||
|
@ -274,7 +274,7 @@ handle_incoming_rreq(void)
|
||||||
fw = uaodv_rt_lookup(&rm->dest_addr);
|
fw = uaodv_rt_lookup(&rm->dest_addr);
|
||||||
if(!(rm->flags & UAODV_RREQ_UNKSEQNO)
|
if(!(rm->flags & UAODV_RREQ_UNKSEQNO)
|
||||||
&& fw != NULL
|
&& fw != NULL
|
||||||
&& SCMP32(ntohl(rm->dest_seqno), fw->seqno) >= 0) {
|
&& SCMP32(ntohl(rm->dest_seqno), fw->hseqno) >= 0) {
|
||||||
fw = NULL;
|
fw = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,7 +285,7 @@ handle_incoming_rreq(void)
|
||||||
print_debug("RREQ for known route\n");
|
print_debug("RREQ for known route\n");
|
||||||
uip_ipaddr_copy(&dest_addr, &rm->dest_addr);
|
uip_ipaddr_copy(&dest_addr, &rm->dest_addr);
|
||||||
uip_ipaddr_copy(&orig_addr, &rm->orig_addr);
|
uip_ipaddr_copy(&orig_addr, &rm->orig_addr);
|
||||||
net_seqno = htonl(fw->seqno);
|
net_seqno = htonl(fw->hseqno);
|
||||||
send_rrep(&dest_addr, &rt->nexthop, &orig_addr, &net_seqno,
|
send_rrep(&dest_addr, &rt->nexthop, &orig_addr, &net_seqno,
|
||||||
fw->hop_count + 1);
|
fw->hop_count + 1);
|
||||||
} else if(uip_ipaddr_cmp(&rm->dest_addr, &uip_hostaddr)) {
|
} else if(uip_ipaddr_cmp(&rm->dest_addr, &uip_hostaddr)) {
|
||||||
|
@ -296,13 +296,13 @@ handle_incoming_rreq(void)
|
||||||
uip_ipaddr_copy(&orig_addr, &rm->orig_addr);
|
uip_ipaddr_copy(&orig_addr, &rm->orig_addr);
|
||||||
|
|
||||||
if(!(rm->flags & UAODV_RREQ_UNKSEQNO)
|
if(!(rm->flags & UAODV_RREQ_UNKSEQNO)
|
||||||
&& SCMP32(rreq_seqno, ntohl(rm->dest_seqno)) < 0) {
|
&& SCMP32(my_hseqno, ntohl(rm->dest_seqno)) < 0) {
|
||||||
print_debug("New rreq_seqno\n"); /* We must have rebooted. */
|
print_debug("New my_hseqno %lu\n", my_hseqno); /* We have rebooted. */
|
||||||
rreq_seqno = ntohl(rm->dest_seqno) + 1;
|
my_hseqno = ntohl(rm->dest_seqno) + 1;
|
||||||
} else {
|
} else {
|
||||||
rreq_seqno++;
|
my_hseqno++;
|
||||||
}
|
}
|
||||||
net_seqno = htonl(rreq_seqno);
|
net_seqno = htonl(my_hseqno);
|
||||||
send_rrep(&dest_addr, &rt->nexthop, &orig_addr, &net_seqno, 0);
|
send_rrep(&dest_addr, &rt->nexthop, &orig_addr, &net_seqno, 0);
|
||||||
} else {
|
} else {
|
||||||
/* Have we seen this RREQ before? */
|
/* Have we seen this RREQ before? */
|
||||||
|
@ -338,10 +338,10 @@ handle_incoming_rrep(void)
|
||||||
uip_ipaddr_to_quad(&rm->dest_addr), rt);
|
uip_ipaddr_to_quad(&rm->dest_addr), rt);
|
||||||
|
|
||||||
/* New forward route? */
|
/* New forward route? */
|
||||||
if(rt == NULL || (SCMP32(ntohl(rm->dest_seqno), rt->seqno) > 0)) {
|
if(rt == NULL || (SCMP32(ntohl(rm->dest_seqno), rt->hseqno) > 0)) {
|
||||||
print_debug("Inserting3\n");
|
print_debug("Inserting3\n");
|
||||||
rt = uaodv_rt_add(&rm->dest_addr, uip_udp_sender(),
|
rt = uaodv_rt_add(&rm->dest_addr, uip_udp_sender(),
|
||||||
rm->hop_count, ntohl(rm->dest_seqno));
|
rm->hop_count, &rm->dest_seqno);
|
||||||
#ifdef CC2420_RADIO
|
#ifdef CC2420_RADIO
|
||||||
/* This link is ok since he is unicasting back to us! */
|
/* This link is ok since he is unicasting back to us! */
|
||||||
cc2420_recv_ok(uip_udp_sender());
|
cc2420_recv_ok(uip_udp_sender());
|
||||||
|
@ -395,7 +395,7 @@ handle_incoming_rerr(void)
|
||||||
rt = uaodv_rt_lookup(&rm->unreach[0].addr);
|
rt = uaodv_rt_lookup(&rm->unreach[0].addr);
|
||||||
if(rt != NULL && uip_ipaddr_cmp(&rt->nexthop, uip_udp_sender())) {
|
if(rt != NULL && uip_ipaddr_cmp(&rt->nexthop, uip_udp_sender())) {
|
||||||
if(rm->flags & UAODV_RERR_UNKNOWN || rm->unreach[0].seqno == 0
|
if(rm->flags & UAODV_RERR_UNKNOWN || rm->unreach[0].seqno == 0
|
||||||
|| SCMP32(rt->seqno, ntohl(rm->unreach[0].seqno)) <= 0) {
|
|| SCMP32(rt->hseqno, ntohl(rm->unreach[0].seqno)) <= 0) {
|
||||||
rt->is_bad = 1;
|
rt->is_bad = 1;
|
||||||
print_debug("RERR rebroadcast\n");
|
print_debug("RERR rebroadcast\n");
|
||||||
uip_udp_packet_send(bcastconn, rm, sizeof(struct uaodv_msg_rerr));
|
uip_udp_packet_send(bcastconn, rm, sizeof(struct uaodv_msg_rerr));
|
||||||
|
@ -443,7 +443,7 @@ uaodv_bad_dest(uip_ipaddr_t *dest)
|
||||||
bad_seqno = 0; /* Or flag this in RERR? */
|
bad_seqno = 0; /* Or flag this in RERR? */
|
||||||
else {
|
else {
|
||||||
rt->is_bad = 1;
|
rt->is_bad = 1;
|
||||||
bad_seqno = htonl(rt->seqno);
|
bad_seqno = htonl(rt->hseqno);
|
||||||
}
|
}
|
||||||
|
|
||||||
uip_ipaddr_copy(&bad_dest, dest);
|
uip_ipaddr_copy(&bad_dest, dest);
|
||||||
|
@ -488,7 +488,7 @@ PROCESS_THREAD(uaodv_process, ev, data)
|
||||||
|
|
||||||
PROCESS_BEGIN();
|
PROCESS_BEGIN();
|
||||||
|
|
||||||
printf("uaodv_process starting\n");
|
printf("uaodv_process starting %lu\n", my_hseqno);
|
||||||
|
|
||||||
bcastconn = udp_broadcast_new(HTONS(UAODV_UDPPORT), NULL);
|
bcastconn = udp_broadcast_new(HTONS(UAODV_UDPPORT), NULL);
|
||||||
#ifdef AODV_COMPLIANCE
|
#ifdef AODV_COMPLIANCE
|
||||||
|
|
Loading…
Reference in a new issue