diff options
| author | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-08-26 22:25:35 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-08-26 22:25:35 +0200 |
| commit | c35027e03deb38af50b6ac5ce26d7c808b7594d5 (patch) | |
| tree | d0b9245939c9d41210b4c5e29a12c494988ffd0d | |
| parent | 52b773d635aa7ffefac5f1e64ed97c3d67d34e5f (diff) | |
| download | plan9front-c35027e03deb38af50b6ac5ce26d7c808b7594d5.tar.xz | |
ip/ipconfig: check for recvra 0 on timeout
| -rw-r--r-- | sys/src/cmd/ip/ipconfig/ipv6.c | 22 |
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; - } } } |
