From: Roy Marples Date: Fri, 29 Jan 2016 12:01:21 +0000 (+0000) Subject: Allow a suffix of 0 to mean a slaac style PD address. X-Git-Tag: v6.10.2~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9f15d95159a749b94527dc1e062dce77436c6dc;p=thirdparty%2Fdhcpcd.git Allow a suffix of 0 to mean a slaac style PD address. --- diff --git a/dhcp6.c b/dhcp6.c index 88fe4f6f..0e6b958b 100644 --- a/dhcp6.c +++ b/dhcp6.c @@ -2379,10 +2379,22 @@ dhcp6_ifdelegateaddr(struct interface *ifp, struct ipv6_addr *prefix, a->prefix_len = (uint8_t)pfxlen; /* Add our suffix */ - a->addr = addr; - vl = be64dec(addr.s6_addr + 8); - vl |= sla->suffix; - be64enc(a->addr.s6_addr + 8, vl); + if (sla->suffix) { + a->addr = addr; + vl = be64dec(addr.s6_addr + 8); + vl |= sla->suffix; + be64enc(a->addr.s6_addr + 8, vl); + } else { + a->dadcounter = ipv6_makeaddr(&a->addr, ifp, + &a->prefix, a->prefix_len); + if (a->dadcounter == -1) { + logger(ifp->ctx, LOG_ERR, + "%s: error adding slaac to prefix_len %d", + ifp->name, a->prefix_len); + free(a); + return NULL; + } + } state = D6_STATE(ifp); /* Remove any exiting address */ diff --git a/dhcpcd.conf.5.in b/dhcpcd.conf.5.in index 35dd8069..024a2a82 100644 --- a/dhcpcd.conf.5.in +++ b/dhcpcd.conf.5.in @@ -276,6 +276,9 @@ and Each assigned address will have a .Ar suffix , defaulting to 1. +If the +.Ar suffix +is 0 then a slaac address is assigned. You cannot assign a prefix to the requesting interface unless the DHCPv6 server supports .Li RFC6603