Fix e7bfd556c0 to actually work.

This commit is contained in:
Simon Kelley
2019-01-09 17:57:56 +00:00
parent 2896e2485e
commit 9c0d445ef4
2 changed files with 26 additions and 30 deletions

View File

@@ -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
@@ -777,6 +764,14 @@ int address_allocate(struct dhcp_context *context,
!config_find_by_address(daemon->dhcp_conf, addr) && !config_find_by_address(daemon->dhcp_conf, addr) &&
(!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))))
{
/* 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) && c->addr_epoch)
c->addr_epoch--;
else
{ {
struct ping_result *r; struct ping_result *r;
@@ -798,6 +793,7 @@ int address_allocate(struct dhcp_context *context,
c->addr_epoch++; c->addr_epoch++;
} }
} }
}
addr.s_addr = htonl(ntohl(addr.s_addr) + 1); addr.s_addr = htonl(ntohl(addr.s_addr) + 1);

View File

@@ -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--;
} }