Mercurial > hg > dhcpcd
changeset 4291:cedfddd21034 draft
ip6: use vlanid if present in working out stable private addresses
dhcpcd doesn't allow address sharing currently, so this is a
needed change for vlan users.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Sat, 23 Jun 2018 21:06:40 +0100 |
| parents | 1d16a683814f |
| children | 3d4667e8f9c9 |
| files | src/ipv6.c |
| diffstat | 1 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ipv6.c Thu Jun 21 12:35:46 2018 +0100 +++ b/src/ipv6.c Sat Jun 23 21:06:40 2018 +0100 @@ -253,6 +253,7 @@ const struct in6_addr *prefix, int prefix_len, const unsigned char *netiface, size_t netiface_len, const unsigned char *netid, size_t netid_len, + unsigned short vlanid, uint32_t *dad_counter, const unsigned char *secret, size_t secret_len) { @@ -267,6 +268,8 @@ l = (size_t)(ROUNDUP8(prefix_len) / NBBY); len = l + netiface_len + netid_len + sizeof(*dad_counter) + secret_len; + if (vlanid != 0) + len += sizeof(vlanid); if (len > sizeof(buf)) { errno = ENOBUFS; return -1; @@ -281,6 +284,12 @@ p += netiface_len; memcpy(p, netid, netid_len); p += netid_len; + /* Don't use a vlanid if not set. + * This ensures prior versions have the same unique address. */ + if (vlanid != 0) { + memcpy(p, &vlanid, sizeof(vlanid)); + p += sizeof(vlanid); + } memcpy(p, dad_counter, sizeof(*dad_counter)); p += sizeof(*dad_counter); memcpy(p, secret, secret_len); @@ -333,7 +342,7 @@ r = ipv6_makestableprivate1(addr, prefix, prefix_len, ifp->hwaddr, ifp->hwlen, ifp->ssid, ifp->ssid_len, - &dad, + ifp->vlanid, &dad, ifp->ctx->secret, ifp->ctx->secret_len); if (r == 0)
