new_state = true;
case DEV_EVENT_REMOVE:
interface_set_available(iface, new_state);
- if (!new_state && dep->dev->external)
+ if (!new_state && dep->dev && dep->dev->external)
interface_set_main_dev(iface, NULL);
break;
case DEV_EVENT_UP:
break;
case DEV_EVENT_LINK_UP:
new_state = true;
- case DEV_EVENT_LINK_DOWN:
+ case DEV_EVENT_LINK_DOWN:
interface_set_link_state(iface, new_state);
break;
case DEV_EVENT_TOPO_CHANGE:
device_add_user(&iface->l3_dev, dev);
if (dev) {
- if (claimed)
- device_claim(&iface->l3_dev);
+ if (claimed) {
+ if (device_claim(&iface->l3_dev) < 0)
+ return;
+ }
interface_ip_set_enabled(&iface->config_ip, enabled);
}
}
if (iface->main_dev.dev == dev)
return;
+ interface_set_available(iface, false);
device_add_user(&iface->main_dev, dev);
if (!dev) {
interface_set_link_state(iface, false);
return;
}
- if (claimed)
- device_claim(&iface->l3_dev);
+ if (claimed) {
+ if (device_claim(&iface->l3_dev) < 0)
+ return;
+ }
if (!iface->l3_dev.dev)
interface_set_l3_dev(iface, dev);
}
interface_write_resolv_conf();
- interface_check_state(if_old);
+ if (if_old->main_dev.dev)
+ interface_check_state(if_old);
out:
if_new->config = NULL;