derive ipv6 static lease from ipv4 if no hostid is given
authorSteven Barth <steven@midlink.org>
Fri, 3 Jan 2014 11:51:49 +0000 (12:51 +0100)
committerSteven Barth <steven@midlink.org>
Fri, 3 Jan 2014 11:51:49 +0000 (12:51 +0100)
src/dhcpv6-ia.c

index 3d6b7868433870a1c7260efd9eba090bf7f51512..e5a7c0bfff4708b6a7acc3136c315ae76f229dc9 100644 (file)
@@ -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));