diff options
author | Steven Barth <steven@midlink.org> | 2014-01-03 12:51:49 +0100 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2014-01-03 12:51:49 +0100 |
commit | 3fcc0814db3773e1295a372ea7a4194e19c62e52 (patch) | |
tree | 36ffef66bec7187dc948fd1e497e282101e4126e /src/dhcpv6-ia.c | |
parent | 3ebfad09209efc88d21bc4ede6d88516dc584ea3 (diff) |
derive ipv6 static lease from ipv4 if no hostid is given
Diffstat (limited to 'src/dhcpv6-ia.c')
-rw-r--r-- | src/dhcpv6-ia.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c index 3d6b786..e5a7c0b 100644 --- a/src/dhcpv6-ia.c +++ b/src/dhcpv6-ia.c @@ -87,7 +87,12 @@ int setup_dhcpv6_ia_interface(struct interface *iface, bool enable) a->clid_len = lease->duid_len; a->length = 128; - a->assigned = lease->hostid; + if (lease->hostid) { + a->assigned = lease->hostid; + } else { + uint32_t i4a = ntohl(lease->ipaddr.s_addr) & 0xff; + a->assigned = ((i4a / 100) << 8) | (((i4a % 100) / 10) << 4) | (i4a % 10); + } odhcpd_urandom(a->key, sizeof(a->key)); memcpy(a->clid_data, lease->duid, a->clid_len); memcpy(a->mac, lease->mac.ether_addr_octet, sizeof(a->mac)); |