summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2018-08-26 22:25:35 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2018-08-26 22:25:35 +0200
commitc35027e03deb38af50b6ac5ce26d7c808b7594d5 (patch)
treed0b9245939c9d41210b4c5e29a12c494988ffd0d
parent52b773d635aa7ffefac5f1e64ed97c3d67d34e5f (diff)
downloadplan9front-c35027e03deb38af50b6ac5ce26d7c808b7594d5.tar.xz
ip/ipconfig: check for recvra 0 on timeout
-rw-r--r--sys/src/cmd/ip/ipconfig/ipv6.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/sys/src/cmd/ip/ipconfig/ipv6.c b/sys/src/cmd/ip/ipconfig/ipv6.c
index f9c7b9bd4..439985454 100644
--- a/sys/src/cmd/ip/ipconfig/ipv6.c
+++ b/sys/src/cmd/ip/ipconfig/ipv6.c
@@ -824,9 +824,11 @@ recvra6(void)
sleepfor = alarm(0);
/* wait for alarm to expire */
- if(sendrscnt < 0 && sleepfor > 100)
+ if(recvracnt == 0 && sleepfor > 100)
continue;
+ sleepfor = Maxv6radelay;
+
ifc = readipifc(conf.mpoint, ifc, myifc);
if(ifc == nil) {
warning("recvra6: can't read router params on %s, quitting on %s",
@@ -836,6 +838,13 @@ recvra6(void)
exits(nil);
}
+ if(recvra6on(ifc) == IsHostNoRecv){
+ warning("recvra6: recvra off, quitting on %s", conf.dev);
+ if(sendrscnt >= 0)
+ rendezvous(recvra6, (void*)-1);
+ exits(nil);
+ }
+
if(n <= 0) {
if(sendrscnt > 0) {
sendrscnt--;
@@ -847,7 +856,6 @@ recvra6(void)
warning("recvra6: no router advs after %d sols on %s",
Maxv6rss, conf.dev);
rendezvous(recvra6, (void*)0);
- sleepfor = 0;
}
continue;
}
@@ -859,25 +867,17 @@ recvra6(void)
case IsHostRecv:
recvrahost(buf, n);
break;
- case IsHostNoRecv:
- warning("recvra6: recvra off, quitting on %s", conf.dev);
- if(sendrscnt >= 0)
- rendezvous(recvra6, (void*)-1);
- exits(nil);
}
/* got at least initial ra; no whining */
if(sendrscnt >= 0)
rendezvous(recvra6, (void*)1);
sendrscnt = -1;
- sleepfor = 0;
if(recvracnt > 0)
recvracnt--;
- else {
+ else
recvracnt = Maxv6initras;
- sleepfor = Maxv6radelay;
- }
}
}