Commit 429805db authored by Simon Kelley's avatar Simon Kelley

Allow constructed ranges from interface address at end of range.

Also make man page on this clearer, as it's been confusing many.
parent 0da5e897
...@@ -649,7 +649,16 @@ This forms a template which describes how to create ranges, based on the address ...@@ -649,7 +649,16 @@ This forms a template which describes how to create ranges, based on the address
.B --dhcp-range=::1,::400,constructor:eth0 .B --dhcp-range=::1,::400,constructor:eth0
will look for addresses of the form <network>::1 on eth0 and then create a range from <network>::1 to <network>::400. If the interface is assigned more than one network, then the corresponding ranges will be automatically created, and then deprecated and finally removed again as the address is deprecated and then deleted. The interface name may have a final "*" wildcard. will look for addresses of the form <network>::1 or <network>:400 on
eth0 and then create a range from <network>::1 to <network>::400. If
the interface is assigned more than one network, then the
corresponding ranges will be automatically created, and then
deprecated and finally removed again as the address is deprecated and
then deleted. The interface name may have a final "*" wildcard. Note
that just any address on eth0 will not do: the non-prefix part must be
equal either the start or end address given in the dhcp-range. This is
to prevent prefixes becoming perpetual if the interface
gains a SLAAC address for the prefix when it is advertised by dnsmasq.
The optional The optional
.B set:<tag> .B set:<tag>
......
...@@ -538,7 +538,9 @@ static int construct_worker(struct in6_addr *local, int prefix, ...@@ -538,7 +538,9 @@ static int construct_worker(struct in6_addr *local, int prefix,
} }
} }
else if (addr6part(local) == addr6part(&template->start6) && wildcard_match(template->template_interface, ifrn_name)) else if ((addr6part(local) == addr6part(&template->start6) ||
addr6part(local) == addr6part(&template->end6)) &&
wildcard_match(template->template_interface, ifrn_name))
{ {
start6 = *local; start6 = *local;
setaddr6part(&start6, addr6part(&template->start6)); setaddr6part(&start6, addr6part(&template->start6));
......
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