iface = calloc(1, sizeof(*iface));
strncpy(iface->name, name, sizeof(iface->name) - 1);
list_add(&iface->head, &interfaces);
- } else if (overwrite) {
- clean_interface(iface);
}
const char *ifname = NULL;
if (overwrite || !iface->ifname[0])
ifname = ubus_get_ifname(name);
#endif
- if ((c = tb[IFACE_ATTR_IFNAME]))
- ifname = blobmsg_get_string(c);
- else if ((c = tb[IFACE_ATTR_NETWORKID]))
- ifname = blobmsg_get_string(c);
+
+ if (overwrite) {
+ if ((c = tb[IFACE_ATTR_IFNAME]))
+ ifname = blobmsg_get_string(c);
+ else if ((c = tb[IFACE_ATTR_NETWORKID]))
+ ifname = blobmsg_get_string(c);
+ }
if (!iface->ifname[0] && !ifname)
return -1;
iface->inuse = true;
- if (overwrite)
- clean_interface(iface);
-
if ((c = tb[IFACE_ATTR_DYNAMICDHCP]))
iface->no_dynamic_dhcp = !blobmsg_get_bool(c);
- if ((c = tb[IFACE_ATTR_IGNORE]))
+ if (overwrite && (c = tb[IFACE_ATTR_IGNORE]))
iface->ignore = blobmsg_get_bool(c);
if ((c = tb[IFACE_ATTR_LEASETIME])) {
if ((c = tb[IFACE_ATTR_MASTER]))
iface->master = blobmsg_get_bool(c);
- if ((c = tb[IFACE_ATTR_UPSTREAM])) {
+ if (overwrite && (c = tb[IFACE_ATTR_UPSTREAM])) {
struct blob_attr *cur;
unsigned rem;
free(l);
}
+ struct interface *master = NULL, *i, *n;
+ list_for_each_entry(i, &interfaces, head)
+ clean_interface(i);
+
struct uci_package *dhcp = NULL;
if (!uci_load(uci, "dhcp", &dhcp)) {
struct uci_element *e;
}
}
+
#ifdef WITH_UBUS
ubus_apply_network();
#endif
// Evaluate hybrid mode for master
- struct interface *master = NULL, *i, *n;
list_for_each_entry(i, &interfaces, head) {
if (!i->master)
continue;
setup_dhcpv6_interface(i, true);
setup_ndp_interface(i, true);
setup_dhcpv4_interface(i, true);
- i->inuse = false;
} else {
close_interface(i);
}
signal(SIGHUP, handle_signal);
#ifdef WITH_UBUS
- init_ubus();
+ while (init_ubus())
+ sleep(1);
#endif
odhcpd_reload();