commit - 9eec023b8012162a4dfd78adcb94dea9d5439395
commit + 417b681c0d94026da0ad0e79e8e50fe1613f9d65
blob - 414d85b9567d16387f971655d81c8e009f7412e6
blob + f4b48552e3b14f4fe0dcf3f73092b52c1651a8a6
--- src/cmd/ip/dhcpd/db.c
+++ src/cmd/ip/dhcpd/db.c
fd = open(file, OLOCK|ORDWR);
if(fd >= 0)
return fd;
-print("open %s: %r\n", file);
errstr(err, sizeof err);
if(strstr(err, "lock")){
/* wait for other process to let go of lock */
return b;
}
}
-
-print("looking for old for %I\n", iip->ipnet);
/*
* look for oldest binding that we think is unused
oldest = nil;
oldesttime = 0;
for(b = bcache; b; b = b->next){
-print("tried %d now %d lease %d exp %d %I\n", b->tried, now, b->lease, b->expoffer, b->ip);
if(b->tried != now)
if(b->lease < now && b->expoffer < now && samenet(b->ip, iip))
if(oldest == nil || b->lasttouched < oldesttime){
if(b->lease < now && b->expoffer < now && samenet(b->ip, iip))
if(oldest == nil || b->lasttouched < oldesttime){
oldest = b;
-print("have oldest\n");
oldesttime = b->lasttouched;
}
}
/* make sure noone is still using it */
oldest->tried = now;
-print("return oldest\n");
if(ping == 0 || icmpecho(oldest->ip) == 0)
return oldest;
/* look for an offer to this id */
for(b = bcache; b; b = b->next){
-print("%I %I ? offeredto %s id %s\n", b->ip, iip->ipnet, b->offeredto, id);
if(b->offeredto && strcmp(b->offeredto, id) == 0 && samenet(b->ip, iip)){
/* make sure some other system hasn't stolen it */
syncbinding(b, 0);
-print("b->lease %d now %d boundto %s offered %s\n", b->lease, now, b->boundto, b->offeredto);
if(b->lease < now
|| (b->boundto && strcmp(b->boundto, b->offeredto) == 0))
return b;
blob - ae4bd22332917e6207286d93900397b16b0eb023
blob + e28bf3cb6ea283382ab5f2c10d2a516d4aa8eb21
--- src/cmd/ip/dhcpd/dhcpd.c
+++ src/cmd/ip/dhcpd/dhcpd.c
fd = openlisten(net);
wfd = fd;
bwfd = fd;
+#ifdef SO_BINDTODEVICE
if(setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, "eth0", 5) < 0)
print("setsockopt: %r\n");
+#endif
for(;;){
memset(&r, 0, sizeof(r));
* send
*/
n = rp->p - rp->buf;
-print("OFFER: %I %I %d %d\n", rp->up->laddr, rp->up->raddr, nhgets(rp->up->lport), nhgets(rp->up->rport));
if(!mute && udpwrite(fd, rp->up, rp->buf, n) != n)
warning(0, "offer: write failed: %r");
}