Commit cab2e8ca authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Add explicit seqno argument to send_request, use it when forwarding.

parent 3bf64b13
...@@ -369,14 +369,14 @@ main(int argc, char **argv) ...@@ -369,14 +369,14 @@ main(int argc, char **argv)
/* Make some noise so others notice us */ /* Make some noise so others notice us */
for(i = 0; i < numnets; i++) { for(i = 0; i < numnets; i++) {
send_hello(&nets[i]); send_hello(&nets[i]);
send_request(&nets[i], NULL, 0); send_request(&nets[i], NULL, 0, -1);
} }
for(i = 0; i < numnets; i++) { for(i = 0; i < numnets; i++) {
usleep(50000 + random() % 100000); usleep(50000 + random() % 100000);
flushbuf(&nets[i]); flushbuf(&nets[i]);
send_hello(&nets[i]); send_hello(&nets[i]);
send_self_update(&nets[i], 0); send_self_update(&nets[i], 0);
send_request(&nets[i], NULL, 0); send_request(&nets[i], NULL, 0, -1);
} }
debugf("Entering main loop.\n"); debugf("Entering main loop.\n");
...@@ -742,7 +742,7 @@ expire_routes(void) ...@@ -742,7 +742,7 @@ expire_routes(void)
if(route->installed && route->refmetric < INFINITY) { if(route->installed && route->refmetric < INFINITY) {
if(route->time < now.tv_sec - MAX(5, route_timeout_delay - 25)) if(route->time < now.tv_sec - MAX(5, route_timeout_delay - 25))
send_unicast_request(route->nexthop, route->dest, 0); send_unicast_request(route->nexthop, route->dest, 0, -1);
} }
i++; i++;
} }
......
...@@ -141,7 +141,8 @@ parse_packet(const unsigned char *from, struct network *net, ...@@ -141,7 +141,8 @@ parse_packet(const unsigned char *from, struct network *net,
else if(hopcount >= 2) { else if(hopcount >= 2) {
send_unicast_request(installed->nexthop, send_unicast_request(installed->nexthop,
dest, dest,
hopcount - 1); hopcount - 1,
theirseqno);
/* For now, let's hope the new seqno /* For now, let's hope the new seqno
arrives before the update is flushed. */ arrives before the update is flushed. */
send_update(dest, neigh->network); send_update(dest, neigh->network);
...@@ -324,13 +325,14 @@ send_hello(struct network *net) ...@@ -324,13 +325,14 @@ send_hello(struct network *net)
} }
void void
send_request(struct network *net, struct destination *dest, int hopcount) send_request(struct network *net, struct destination *dest,
int hopcount, int seqno)
{ {
int i; int i;
if(net == NULL) { if(net == NULL) {
for(i = 0; i < numnets; i++) for(i = 0; i < numnets; i++)
send_request(&nets[i], dest, hopcount); send_request(&nets[i], dest, hopcount, seqno);
return; return;
} }
...@@ -339,7 +341,10 @@ send_request(struct network *net, struct destination *dest, int hopcount) ...@@ -339,7 +341,10 @@ send_request(struct network *net, struct destination *dest, int hopcount)
start_message(net, 20); start_message(net, 20);
accumulate_byte(net, 1); accumulate_byte(net, 1);
if(hopcount > 0 && dest) { if(hopcount > 0 && dest) {
accumulate_byte(net, dest->seqno); if(seqno >= 0)
accumulate_byte(net, seqno);
else
accumulate_byte(net, dest->seqno);
accumulate_byte(net, hopcount); accumulate_byte(net, hopcount);
} else { } else {
accumulate_byte(net, 0); accumulate_byte(net, 0);
...@@ -377,7 +382,7 @@ send_unicast_packet(struct neighbour *neigh, unsigned char *buf, int buflen) ...@@ -377,7 +382,7 @@ send_unicast_packet(struct neighbour *neigh, unsigned char *buf, int buflen)
void void
send_unicast_request(struct neighbour *neigh, struct destination *dest, send_unicast_request(struct neighbour *neigh, struct destination *dest,
int hopcount) int hopcount, int seqno)
{ {
unsigned char buf[20]; unsigned char buf[20];
...@@ -388,7 +393,10 @@ send_unicast_request(struct neighbour *neigh, struct destination *dest, ...@@ -388,7 +393,10 @@ send_unicast_request(struct neighbour *neigh, struct destination *dest,
buf[0] = 1; buf[0] = 1;
if(hopcount > 0 && dest) { if(hopcount > 0 && dest) {
buf[1] = dest->seqno; if(seqno >= 0)
buf[1] = seqno;
else
buf[1] = dest->seqno;
buf[2] = hopcount; buf[2] = hopcount;
} else { } else {
buf[1] = 0; buf[1] = 0;
......
...@@ -40,9 +40,9 @@ void parse_packet(const unsigned char *from, struct network *net, ...@@ -40,9 +40,9 @@ void parse_packet(const unsigned char *from, struct network *net,
void flushbuf(struct network *net); void flushbuf(struct network *net);
void send_hello(struct network *net); void send_hello(struct network *net);
void send_request(struct network *net, struct destination *dest, void send_request(struct network *net, struct destination *dest,
int hopcount); int hopcount, int seqno);
void send_unicast_request(struct neighbour *neigh, struct destination *dest, void send_unicast_request(struct neighbour *neigh, struct destination *dest,
int hopcount); int hopcount, int seqno);
void send_update(struct destination *dest, struct network *net); void send_update(struct destination *dest, struct network *net);
void send_self_update(struct network *net, int force_seqno); void send_self_update(struct network *net, int force_seqno);
void send_self_retract(struct network *net); void send_self_retract(struct network *net);
......
...@@ -174,7 +174,7 @@ update_neighbour(struct neighbour *neigh, int hello, int hello_interval) ...@@ -174,7 +174,7 @@ update_neighbour(struct neighbour *neigh, int hello, int hello_interval)
if(dest) if(dest)
route = find_best_route(dest); route = find_best_route(dest);
if(!route || route->nexthop == neigh) if(!route || route->nexthop == neigh)
send_unicast_request(neigh, NULL, 0); send_unicast_request(neigh, NULL, 0, -1);
} }
} }
......
...@@ -100,7 +100,7 @@ flush_route(struct route *route) ...@@ -100,7 +100,7 @@ flush_route(struct route *route)
dest->seqno = (dest->seqno + 1) & 0xFF; dest->seqno = (dest->seqno + 1) & 0xFF;
} }
send_update(route->dest, NULL); send_update(route->dest, NULL);
send_request(NULL, route->dest, max_hopcount); send_request(NULL, route->dest, max_hopcount, -1);
} }
} }
} }
...@@ -431,6 +431,6 @@ send_triggered_update(struct route *route, int oldmetric) ...@@ -431,6 +431,6 @@ send_triggered_update(struct route *route, int oldmetric)
if(route->metric - oldmetric >= 384) { if(route->metric - oldmetric >= 384) {
/* This route's metric has increased a lot -- let's hope we find /* This route's metric has increased a lot -- let's hope we find
something better */ something better */
send_request(NULL, route->dest, 1); send_request(NULL, route->dest, 1, -1);
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment