Commit 819ff4dd authored by Simon Kelley's avatar Simon Kelley

Wildcard IPv6 dhcp-range.

parent de604c18
...@@ -41,6 +41,10 @@ version 2.64 ...@@ -41,6 +41,10 @@ version 2.64
configured with --listen-address. Thanks to configured with --listen-address. Thanks to
Gene Czarcinski for sorting this out. Gene Czarcinski for sorting this out.
Add a "wildcard" dhcp-range which works for any IPv6
subnet, --dhcp-range=::,static Useful for Stateless
DHCPv6. Thanks to Vladislav Grishenko for the patch.
version 2.63 version 2.63
Do duplicate dhcp-host address check in --test mode. Do duplicate dhcp-host address check in --test mode.
......
...@@ -126,18 +126,25 @@ void dhcp6_packet(time_t now) ...@@ -126,18 +126,25 @@ void dhcp6_packet(time_t now)
if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0)) if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0))
return; return;
/* unlinked contexts are marked by context->current == context */ parm.current = NULL;
parm.ind = if_index;
parm.addr_match = 0;
memset(&parm.fallback, 0, IN6ADDRSZ);
for (context = daemon->dhcp6; context; context = context->next) for (context = daemon->dhcp6; context; context = context->next)
if (IN6_IS_ADDR_UNSPECIFIED(&context->start6) && context->prefix == 0)
{ {
/* wildcard context for DHCP-stateless only */
parm.current = context;
context->current = NULL;
}
else
{
/* unlinked contexts are marked by context->current == context */
context->current = context; context->current = context;
memset(&context->local6, 0, IN6ADDRSZ); memset(&context->local6, 0, IN6ADDRSZ);
} }
parm.current = NULL;
parm.ind = if_index;
parm.addr_match = 0;
memset(&parm.fallback, 0, IN6ADDRSZ);
if (!iface_enumerate(AF_INET6, &parm, complete_context6)) if (!iface_enumerate(AF_INET6, &parm, complete_context6))
return; return;
......
...@@ -2116,6 +2116,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -2116,6 +2116,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
new->prefix = 64; /* default */ new->prefix = 64; /* default */
new->end6 = new->start6; new->end6 = new->start6;
/* dhcp-range=:: enables DHCP stateless on any interface */
if (IN6_IS_ADDR_UNSPECIFIED(&new->start6))
new->prefix = 0;
for (leasepos = 1; leasepos < k; leasepos++) for (leasepos = 1; leasepos < k; leasepos++)
{ {
if (strcmp(a[leasepos], "static") == 0) if (strcmp(a[leasepos], "static") == 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment