summaryrefslogtreecommitdiffhomepage
path: root/src/dhcpv6-ia.c
diff options
context:
space:
mode:
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));