ip/ipconfig: handle noconfig flag for router advertisement, add debug prints, cleanup
This commit is contained in:
parent
ef17043327
commit
2f076f946f
3 changed files with 27 additions and 7 deletions
|
@ -243,6 +243,7 @@ dhcpwatch(int needconfig)
|
||||||
t = secs;
|
t = secs;
|
||||||
if(t >= conf.lease){
|
if(t >= conf.lease){
|
||||||
conf.lease = 0;
|
conf.lease = 0;
|
||||||
|
DEBUG("couldn't renew IP lease");
|
||||||
if(!noconfig){
|
if(!noconfig){
|
||||||
ipunconfig();
|
ipunconfig();
|
||||||
needconfig = 1;
|
needconfig = 1;
|
||||||
|
|
|
@ -415,7 +415,7 @@ recvra6on(Ipifc *ifc)
|
||||||
return 0;
|
return 0;
|
||||||
else if(ifc->sendra6 > 0)
|
else if(ifc->sendra6 > 0)
|
||||||
return IsRouter;
|
return IsRouter;
|
||||||
else if(ifc->recvra6 > 0)
|
else if(ifc->recvra6 > 0 || noconfig)
|
||||||
return IsHostRecv;
|
return IsHostRecv;
|
||||||
else
|
else
|
||||||
return IsHostNoRecv;
|
return IsHostNoRecv;
|
||||||
|
@ -712,6 +712,7 @@ recvrahost(uchar buf[], int pktlen)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
issuebasera6(&conf);
|
issuebasera6(&conf);
|
||||||
|
|
||||||
/* remove expired default routes */
|
/* remove expired default routes */
|
||||||
|
@ -722,10 +723,11 @@ recvrahost(uchar buf[], int pktlen)
|
||||||
|| r->prefixlt != ~0UL && r->prefixlt < now-r->time
|
|| r->prefixlt != ~0UL && r->prefixlt < now-r->time
|
||||||
|| r->routerlt != ~0UL && r->routerlt < now-r->time
|
|| r->routerlt != ~0UL && r->routerlt < now-r->time
|
||||||
|| ipcmp(r->src, ra->src) == 0 && r->routerlt != 0 && conf.routerlt == 0){
|
|| ipcmp(r->src, ra->src) == 0 && r->routerlt != 0 && conf.routerlt == 0){
|
||||||
|
DEBUG("purging RA from %I on %s; pfx %I %M",
|
||||||
|
r->src, conf.dev, r->laddr, r->mask);
|
||||||
if(validip(r->gaddr))
|
if(validip(r->gaddr))
|
||||||
removedefroute(r->gaddr, conf.lladdr, r->laddr, r->mask);
|
removedefroute(r->gaddr, conf.lladdr, r->laddr, r->mask);
|
||||||
*rr = r->next;
|
*rr = r->next;
|
||||||
r->next = nil;
|
|
||||||
free(r);
|
free(r);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -774,7 +776,6 @@ recvrahost(uchar buf[], int pktlen)
|
||||||
&& ipcmp(r->laddr, conf.laddr) == 0){
|
&& ipcmp(r->laddr, conf.laddr) == 0){
|
||||||
seen = memcmp(r->hash, hash, SHA1dlen) == 0;
|
seen = memcmp(r->hash, hash, SHA1dlen) == 0;
|
||||||
*rr = r->next;
|
*rr = r->next;
|
||||||
r->next = nil;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -805,6 +806,9 @@ recvrahost(uchar buf[], int pktlen)
|
||||||
if(!seen)
|
if(!seen)
|
||||||
warning("igoring bogus prefix from %I on %s; pfx %I %M",
|
warning("igoring bogus prefix from %I on %s; pfx %I %M",
|
||||||
ra->src, conf.dev, conf.v6pref, conf.mask);
|
ra->src, conf.dev, conf.v6pref, conf.mask);
|
||||||
|
|
||||||
|
/* keep it arround so we wont comlain again */
|
||||||
|
r->prefixlt = r->routerlt = ~0UL;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -821,6 +825,9 @@ recvrahost(uchar buf[], int pktlen)
|
||||||
if(validip(conf.gaddr))
|
if(validip(conf.gaddr))
|
||||||
adddefroute(conf.gaddr, conf.lladdr, conf.laddr, conf.mask);
|
adddefroute(conf.gaddr, conf.lladdr, conf.laddr, conf.mask);
|
||||||
|
|
||||||
|
if(noconfig)
|
||||||
|
continue;
|
||||||
|
|
||||||
if(beprimary)
|
if(beprimary)
|
||||||
putndb();
|
putndb();
|
||||||
refresh();
|
refresh();
|
||||||
|
@ -892,7 +899,7 @@ recvra6(void)
|
||||||
exits(nil);
|
exits(nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(recvra6on(ifc) == IsHostNoRecv){
|
if(recvra6on(ifc) == IsHostNoRecv || noconfig && sendrscnt < 0){
|
||||||
warning("recvra6: recvra off, quitting on %s", conf.dev);
|
warning("recvra6: recvra off, quitting on %s", conf.dev);
|
||||||
if(sendrscnt >= 0)
|
if(sendrscnt >= 0)
|
||||||
rendezvous(recvra6, (void*)-1);
|
rendezvous(recvra6, (void*)-1);
|
||||||
|
|
|
@ -404,7 +404,7 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
if(myifc < 0)
|
if(myifc < 0)
|
||||||
sysfatal("interface not found for: %s", conf.dev);
|
sysfatal("interface not found for: %s", conf.dev);
|
||||||
} else {
|
} else if(!noconfig) {
|
||||||
/* open old interface */
|
/* open old interface */
|
||||||
binddevice();
|
binddevice();
|
||||||
}
|
}
|
||||||
|
@ -484,6 +484,11 @@ doremove(void)
|
||||||
{
|
{
|
||||||
if(!validip(conf.laddr))
|
if(!validip(conf.laddr))
|
||||||
sysfatal("remove requires an address");
|
sysfatal("remove requires an address");
|
||||||
|
|
||||||
|
DEBUG("removing address %I %M on %s", conf.laddr, conf.mask, conf.dev);
|
||||||
|
if(conf.cfd < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if(fprint(conf.cfd, "remove %I %M", conf.laddr, conf.mask) < 0)
|
if(fprint(conf.cfd, "remove %I %M", conf.laddr, conf.mask) < 0)
|
||||||
warning("can't remove %I %M: %r", conf.laddr, conf.mask);
|
warning("can't remove %I %M: %r", conf.laddr, conf.mask);
|
||||||
}
|
}
|
||||||
|
@ -491,6 +496,9 @@ doremove(void)
|
||||||
static void
|
static void
|
||||||
dounbind(void)
|
dounbind(void)
|
||||||
{
|
{
|
||||||
|
if(conf.cfd < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if(fprint(conf.cfd, "unbind") < 0)
|
if(fprint(conf.cfd, "unbind") < 0)
|
||||||
warning("can't unbind %s: %r", conf.dev);
|
warning("can't unbind %s: %r", conf.dev);
|
||||||
}
|
}
|
||||||
|
@ -589,11 +597,12 @@ ipunconfig(void)
|
||||||
if(!validip(conf.laddr))
|
if(!validip(conf.laddr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DEBUG("couldn't renew IP lease, releasing %I", conf.laddr);
|
|
||||||
|
|
||||||
if(!validip(conf.mask))
|
if(!validip(conf.mask))
|
||||||
ipmove(conf.mask, defmask(conf.laddr));
|
ipmove(conf.mask, defmask(conf.laddr));
|
||||||
|
|
||||||
|
if(validip(conf.gaddr))
|
||||||
|
removedefroute(conf.gaddr, conf.laddr, conf.laddr, conf.mask);
|
||||||
|
|
||||||
doremove();
|
doremove();
|
||||||
|
|
||||||
ipmove(conf.laddr, IPnoaddr);
|
ipmove(conf.laddr, IPnoaddr);
|
||||||
|
@ -713,6 +722,9 @@ routectl(char *cmd, uchar *dst, uchar *mask, uchar *gate, uchar *ia, uchar *src,
|
||||||
ctl = "%s %I %M %I %I %I %M";
|
ctl = "%s %I %M %I %I %I %M";
|
||||||
else
|
else
|
||||||
ctl = "%s %I %M %I %I";
|
ctl = "%s %I %M %I %I";
|
||||||
|
DEBUG(ctl, cmd, dst, mask, gate, ia, src, smask);
|
||||||
|
if(conf.rfd < 0)
|
||||||
|
return;
|
||||||
fprint(conf.rfd, ctl, cmd, dst, mask, gate, ia, src, smask);
|
fprint(conf.rfd, ctl, cmd, dst, mask, gate, ia, src, smask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue