switch (iface->state) {
case IFS_UP:
+ case IFS_SETUP:
if (!iface->enabled || !link_state) {
interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, false);
mark_interface_down(iface);
} else if (iface->ifname &&
!(iface->proto_handler->flags & PROTO_FLAG_NODEV)) {
dev = device_get(iface->ifname, true);
+ if (dev && dev->default_config && iface->device_config)
+ device_set_config(dev, dev->type, iface->config);
} else {
dev = iface->ext_dev.dev;
}
if (add) {
device_set_present(dev, true);
- if (iface->device_config)
- device_set_config(dev, &simple_device_type, iface->config);
+ if (iface->device_config && dev->default_config)
+ device_set_config(dev, dev->type, iface->config);
system_if_apply_settings(dev, &dev->settings, dev->settings.flags);
ret = interface_add_link(iface, dev, link_ext);
})
if_old->config = if_new->config;
- if (!if_old->config_autostart && if_new->config_autostart)
- if_old->autostart = true;
+ if (if_old->config_autostart != if_new->config_autostart) {
+ if (if_old->config_autostart)
+ reload = true;
+
+ if_old->autostart = if_new->config_autostart;
+ }
if_old->device_config = if_new->device_config;
if_old->config_autostart = if_new->config_autostart;
}
if (reload_ip) {
+ bool config_ip_enabled = if_old->config_ip.enabled;
+ bool proto_ip_enabled = if_old->proto_ip.enabled;
+
interface_ip_set_enabled(&if_old->config_ip, false);
interface_ip_set_enabled(&if_old->proto_ip, false);
- interface_ip_set_enabled(&if_old->proto_ip, if_new->proto_ip.enabled);
- interface_ip_set_enabled(&if_old->config_ip, if_new->config_ip.enabled);
+ interface_ip_set_enabled(&if_old->proto_ip, proto_ip_enabled);
+ interface_ip_set_enabled(&if_old->config_ip, config_ip_enabled);
}
interface_write_resolv_conf();