mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Fix e7bfd556c0 to actually work.
This commit is contained in:
54
src/dhcp.c
54
src/dhcp.c
@@ -754,19 +754,6 @@ int address_allocate(struct dhcp_context *context,
|
|||||||
if (addr.s_addr == d->router.s_addr)
|
if (addr.s_addr == d->router.s_addr)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* in consec-ip mode, skip addresses equal to
|
|
||||||
the number of addresses rejected by clients. This
|
|
||||||
should avoid the same client being offered the same
|
|
||||||
address after it has rjected it. */
|
|
||||||
if (option_bool(OPT_CONSEC_ADDR))
|
|
||||||
{
|
|
||||||
if (c->addr_epoch)
|
|
||||||
{
|
|
||||||
c->addr_epoch--;
|
|
||||||
d = context; /* d non-NULL skips the address. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Addresses which end in .255 and .0 are broken in Windows even when using
|
/* Addresses which end in .255 and .0 are broken in Windows even when using
|
||||||
supernetting. ie dhcp-range=192.168.0.1,192.168.1.254,255,255,254.0
|
supernetting. ie dhcp-range=192.168.0.1,192.168.1.254,255,255,254.0
|
||||||
then 192.168.0.255 is a valid IP address, but not for Windows as it's
|
then 192.168.0.255 is a valid IP address, but not for Windows as it's
|
||||||
@@ -778,24 +765,33 @@ int address_allocate(struct dhcp_context *context,
|
|||||||
(!IN_CLASSC(ntohl(addr.s_addr)) ||
|
(!IN_CLASSC(ntohl(addr.s_addr)) ||
|
||||||
((ntohl(addr.s_addr) & 0xff) != 0xff && ((ntohl(addr.s_addr) & 0xff) != 0x0))))
|
((ntohl(addr.s_addr) & 0xff) != 0xff && ((ntohl(addr.s_addr) & 0xff) != 0x0))))
|
||||||
{
|
{
|
||||||
struct ping_result *r;
|
/* in consec-ip mode, skip addresses equal to
|
||||||
|
the number of addresses rejected by clients. This
|
||||||
if ((r = do_icmp_ping(now, addr, j, loopback)))
|
should avoid the same client being offered the same
|
||||||
{
|
address after it has rjected it. */
|
||||||
/* consec-ip mode: we offered this address for another client
|
if (option_bool(OPT_CONSEC_ADDR) && c->addr_epoch)
|
||||||
(different hash) recently, don't offer it to this one. */
|
c->addr_epoch--;
|
||||||
if (!option_bool(OPT_CONSEC_ADDR) || r->hash == j)
|
|
||||||
{
|
|
||||||
*addrp = addr;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* address in use: perturb address selection so that we are
|
struct ping_result *r;
|
||||||
less likely to try this address again. */
|
|
||||||
if (!option_bool(OPT_CONSEC_ADDR))
|
if ((r = do_icmp_ping(now, addr, j, loopback)))
|
||||||
c->addr_epoch++;
|
{
|
||||||
|
/* consec-ip mode: we offered this address for another client
|
||||||
|
(different hash) recently, don't offer it to this one. */
|
||||||
|
if (!option_bool(OPT_CONSEC_ADDR) || r->hash == j)
|
||||||
|
{
|
||||||
|
*addrp = addr;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* address in use: perturb address selection so that we are
|
||||||
|
less likely to try this address again. */
|
||||||
|
if (!option_bool(OPT_CONSEC_ADDR))
|
||||||
|
c->addr_epoch++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -436,7 +436,7 @@ struct dhcp_context *address6_allocate(struct dhcp_context *context, unsigned c
|
|||||||
skip addresses equal to the number of addresses rejected
|
skip addresses equal to the number of addresses rejected
|
||||||
by clients. This should avoid the same client being offered the same
|
by clients. This should avoid the same client being offered the same
|
||||||
address after it has rjected it. */
|
address after it has rjected it. */
|
||||||
start = lease_find_max_addr6(c) + serial + c->addr_epoch;
|
start = lease_find_max_addr6(c) + 1 + serial + c->addr_epoch;
|
||||||
if (c->addr_epoch)
|
if (c->addr_epoch)
|
||||||
c->addr_epoch--;
|
c->addr_epoch--;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user