Alter DHCP address selection after DECLINE in consec-addr mode.

Avoid offering the same address after a recieving a DECLINE message
to stop an infinite protocol loop. This has long been done in
default address allocation mode: this adds similar behaviour
when allocaing addresses consecutively.
This commit is contained in:
Simon Kelley
2018-12-31 20:51:15 +00:00
parent b683cf37f9
commit e7bfd556c0
2 changed files with 22 additions and 2 deletions

View File

@@ -431,8 +431,15 @@ struct dhcp_context *address6_allocate(struct dhcp_context *context, unsigned c
else
{
if (!temp_addr && option_bool(OPT_CONSEC_ADDR))
/* seed is largest extant lease addr in this context */
start = lease_find_max_addr6(c) + serial;
{
/* seed is largest extant lease addr in this context,
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. */
start = lease_find_max_addr6(c) + serial + c->addr_epoch;
if (c->addr_epoch)
c->addr_epoch--;
}
else
{
u64 range = 1 + addr6part(&c->end6) - addr6part(&c->start6);