From c35027e03deb38af50b6ac5ce26d7c808b7594d5 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 26 Aug 2018 22:25:35 +0200 Subject: ip/ipconfig: check for recvra 0 on timeout --- sys/src/cmd/ip/ipconfig/ipv6.c | 22 +++++++++++----------- 1 file 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; - } } } -- cgit v1.2.3