treewide: reflect managed mode is related to RA
[project/odhcpd.git] / src / config.c
index 9ce20ef..8670efc 100644 (file)
@@ -205,7 +205,7 @@ static struct interface* get_interface(const char *name)
 
 static void set_interface_defaults(struct interface *iface)
 {
-       iface->managed = 1;
+       iface->ra_managed = RA_MANAGED_MFLAG;
        iface->learn_routes = 1;
        iface->dhcpv4_leasetime = 43200;
        iface->ra_maxinterval = 600;
@@ -237,6 +237,7 @@ static void close_interface(struct interface *iface)
        setup_dhcpv4_interface(iface, false);
 
        clean_interface(iface);
+       free(iface->ia_addr);
        free(iface->ifname);
        free(iface);
 }
@@ -387,6 +388,8 @@ err:
 int config_parse_interface(void *data, size_t len, const char *name, bool overwrite)
 {
        struct blob_attr *tb[IFACE_ATTR_MAX], *c;
+       bool get_addrs = false;
+
        blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb, data, len);
 
        if (tb[IFACE_ATTR_INTERFACE])
@@ -408,7 +411,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                set_interface_defaults(iface);
 
                list_add(&iface->head, &interfaces);
-               overwrite = true;
+               get_addrs = overwrite = true;
        }
 
        const char *ifname = NULL;
@@ -438,6 +441,14 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
        if ((iface->ifindex = if_nametoindex(iface->ifname)) <= 0)
                goto err;
 
+       if (get_addrs) {
+               ssize_t len = odhcpd_get_interface_addresses(iface->ifindex,
+                                               true, &iface->ia_addr);
+
+               if (len > 0)
+                       iface->ia_addr_len = len;
+       }
+
        iface->inuse = true;
 
        if ((c = tb[IFACE_ATTR_DYNAMICDHCP]))
@@ -610,7 +621,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                iface->default_router = blobmsg_get_u32(c);
 
        if ((c = tb[IFACE_ATTR_RA_MANAGEMENT]))
-               iface->managed = blobmsg_get_u32(c);
+               iface->ra_managed = blobmsg_get_u32(c);
 
        if ((c = tb[IFACE_ATTR_RA_REACHABLETIME])) {
                uint32_t ra_reachabletime = blobmsg_get_u32(c);
@@ -822,7 +833,6 @@ void odhcpd_reload(void)
                        close_interface(i);
        }
 
-       ndp_handle_addr6_dump();
        uci_unload(uci, dhcp);
        uci_free_context(uci);
 }