derive ipv6 static lease from ipv4 if no hostid is given
[project/odhcpd.git] / src / config.c
index 98a826f..65b3551 100644 (file)
@@ -32,7 +32,6 @@ enum {
        IFACE_ATTR_NDP,
        IFACE_ATTR_DNS,
        IFACE_ATTR_DOMAIN,
-       IFACE_ATTR_ULA_COMPAT,
        IFACE_ATTR_RA_DEFAULT,
        IFACE_ATTR_RA_MANAGEMENT,
        IFACE_ATTR_RA_OFFLINK,
@@ -60,7 +59,6 @@ static const struct blobmsg_policy iface_attrs[IFACE_ATTR_MAX] = {
        [IFACE_ATTR_NDP] = { .name = "ndp", .type = BLOBMSG_TYPE_STRING },
        [IFACE_ATTR_DNS] = { .name = "dns", .type = BLOBMSG_TYPE_ARRAY },
        [IFACE_ATTR_DOMAIN] = { .name = "domain", .type = BLOBMSG_TYPE_ARRAY },
-       [IFACE_ATTR_ULA_COMPAT] = { .name = "ula_compat", .type = BLOBMSG_TYPE_BOOL },
        [IFACE_ATTR_RA_DEFAULT] = { .name = "ra_default", .type = BLOBMSG_TYPE_INT32 },
        [IFACE_ATTR_RA_MANAGEMENT] = { .name = "ra_management", .type = BLOBMSG_TYPE_INT32 },
        [IFACE_ATTR_RA_OFFLINK] = { .name = "ra_offlink", .type = BLOBMSG_TYPE_BOOL },
@@ -89,7 +87,7 @@ enum {
        LEASE_ATTR_MAC,
        LEASE_ATTR_DUID,
        LEASE_ATTR_HOSTID,
-       LEASE_ATTR_HOSTNAME,
+       LEASE_ATTR_NAME,
        LEASE_ATTR_MAX
 };
 
@@ -99,7 +97,7 @@ static const struct blobmsg_policy lease_attrs[LEASE_ATTR_MAX] = {
        [LEASE_ATTR_MAC] = { .name = "mac", .type = BLOBMSG_TYPE_STRING },
        [LEASE_ATTR_DUID] = { .name = "duid", .type = BLOBMSG_TYPE_STRING },
        [LEASE_ATTR_HOSTID] = { .name = "hostid", .type = BLOBMSG_TYPE_STRING },
-       [LEASE_ATTR_HOSTNAME] = { .name = "hostname", .type = BLOBMSG_TYPE_STRING },
+       [LEASE_ATTR_NAME] = { .name = "name", .type = BLOBMSG_TYPE_STRING },
 };
 
 
@@ -214,7 +212,7 @@ static int set_lease(struct uci_section *s)
        blobmsg_parse(lease_attrs, LEASE_ATTR_MAX, tb, blob_data(b.head), blob_len(b.head));
 
        size_t hostlen = 1;
-       if ((c = tb[LEASE_ATTR_HOSTNAME]))
+       if ((c = tb[LEASE_ATTR_NAME]))
                hostlen = blobmsg_data_len(c);
 
        struct lease *lease = calloc(1, sizeof(*lease) + hostlen);
@@ -448,9 +446,6 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                }
        }
 
-       if ((c = tb[IFACE_ATTR_ULA_COMPAT]))
-               iface->deprecate_ula_if_public_avail = blobmsg_get_bool(c);
-
        if ((c = tb[IFACE_ATTR_RA_DEFAULT]))
                iface->default_router = blobmsg_get_u32(c);
 
@@ -475,6 +470,8 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
 
        if ((c = tb[IFACE_ATTR_NDPROXY_ROUTING]))
                iface->learn_routes = blobmsg_get_bool(c);
+       else
+               iface->learn_routes = true;
 
        if ((c = tb[IFACE_ATTR_NDPROXY_SLAVE]))
                iface->external = blobmsg_get_bool(c);
@@ -497,7 +494,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                }
        }
 
-       iface->ignore = (iface->ifindex = if_nametoindex(iface->ifname)) < 0;
+       iface->ignore = (iface->ifindex = if_nametoindex(iface->ifname)) <= 0;
        return 0;
 
 err:
@@ -536,7 +533,7 @@ void odhcpd_reload(void)
                struct uci_element *e;
                uci_foreach_element(&dhcp->sections, e) {
                        struct uci_section *s = uci_to_section(e);
-                       if (!strcmp(s->type, "lease"))
+                       if (!strcmp(s->type, "host"))
                                set_lease(s);
                        else if (!strcmp(s->type, "odhcpd"))
                                set_config(s);