ref: 56fa98c3016e2af24d886a27e2bc3d55bb9d4c76
parent: 4ed81607fe0230af4ba39951e82bcd80d6533ee1
	author: cinap_lenrek <cinap_lenrek@felloff.net>
	date: Sun Aug 26 18:25:35 EDT 2018
	
ip/ipconfig: check for recvra 0 on timeout
--- a/sys/src/cmd/ip/ipconfig/ipv6.c
+++ b/sys/src/cmd/ip/ipconfig/ipv6.c
@@ -824,9 +824,11 @@
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 @@
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 @@
 				warning("recvra6: no router advs after %d sols on %s",Maxv6rss, conf.dev);
rendezvous(recvra6, (void*)0);
- sleepfor = 0;
}
continue;
}
@@ -859,11 +867,6 @@
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 */
@@ -870,14 +873,11 @@
if(sendrscnt >= 0)
rendezvous(recvra6, (void*)1);
sendrscnt = -1;
- sleepfor = 0;
if(recvracnt > 0)
recvracnt--;
-		else {+ else
recvracnt = Maxv6initras;
- sleepfor = Maxv6radelay;
- }
}
}
--
⑨