summaryrefslogtreecommitdiffhomepage
path: root/src/dhcpv6-ia.c
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2014-01-03 12:51:49 +0100
committerSteven Barth <steven@midlink.org>2014-01-03 12:51:49 +0100
commit3fcc0814db3773e1295a372ea7a4194e19c62e52 (patch)
tree36ffef66bec7187dc948fd1e497e282101e4126e /src/dhcpv6-ia.c
parent3ebfad09209efc88d21bc4ede6d88516dc584ea3 (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.c7
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));