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;
setup_dhcpv4_interface(iface, false);
clean_interface(iface);
+ free(iface->ia_addr);
free(iface->ifname);
free(iface);
}
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])
set_interface_defaults(iface);
list_add(&iface->head, &interfaces);
- overwrite = true;
+ get_addrs = overwrite = true;
}
const char *ifname = NULL;
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]))
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);
close_interface(i);
}
- ndp_handle_addr6_dump();
uci_unload(uci, dhcp);
uci_free_context(uci);
}