- switch (iface->state) {
- case IFS_UP:
- interface_event(iface, IFEV_DOWN);
- case IFS_SETUP:
- iface->state = IFS_TEARDOWN;
- interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, force);
- if (force)
- interface_flush_state(iface);
-
- if (iface->dynamic)
- vlist_delete(&interfaces, &iface->node);
- break;
-
- case IFS_DOWN:
- if (iface->main_dev.dev)
- device_release(&iface->main_dev);
- case IFS_TEARDOWN:
- default:
- break;
- }
-}
-
-static int
-__interface_set_up(struct interface *iface)
-{
- int ret;
-
- netifd_log_message(L_NOTICE, "Interface '%s' is setting up now\n", iface->name);
-
- iface->state = IFS_SETUP;
- ret = interface_proto_event(iface->proto, PROTO_CMD_SETUP, false);
- if (ret)
- mark_interface_down(iface);
-
- return ret;
-}
-
-static void
-interface_check_state(struct interface *iface)
-{
- switch (iface->state) {
- case IFS_UP:
- if (!iface->enabled || !iface->link_state) {
- mark_interface_down(iface);
- interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, false);
- }
- break;
- case IFS_DOWN:
- if (iface->enabled && iface->link_state && !config_init)
- __interface_set_up(iface);
- break;
- default:
- break;
- }
-}
-
-static void
-interface_set_enabled(struct interface *iface, bool new_state)
-{
- if (iface->enabled == new_state)