X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface.c;h=4a3a725ce35aa9557ac75fee622a951af85e01ef;hp=f0fd43f36772c6a0cb06c87adcafa58c4bab4755;hb=559df99f259e88edaa7e45826a0ff436f2a07d1a;hpb=f35b76c61baf68dc5dd8440fc06d860f8dfacc44 diff --git a/interface.c b/interface.c index f0fd43f..4a3a725 100644 --- a/interface.c +++ b/interface.c @@ -222,11 +222,14 @@ mark_interface_down(struct interface *iface) void __interface_set_down(struct interface *iface, bool force) { - switch (iface->state) { + enum interface_state state = iface->state; + switch (state) { case IFS_UP: - interface_event(iface, IFEV_DOWN); case IFS_SETUP: iface->state = IFS_TEARDOWN; + if (state == IFS_UP) + interface_event(iface, IFEV_DOWN); + interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, force); if (force) interface_flush_state(iface); @@ -270,7 +273,7 @@ interface_check_state(struct interface *iface) } break; case IFS_DOWN: - if (iface->enabled && iface->link_state && !config_init) + if (iface->autostart && iface->enabled && iface->link_state && !config_init) __interface_set_up(iface); break; default: @@ -839,7 +842,7 @@ interface_handle_link(struct interface *iface, const char *name, bool add) if (iface->device_config) device_set_config(dev, &simple_device_type, iface->config); - system_if_apply_settings(dev, &dev->settings); + system_if_apply_settings(dev, &dev->settings, dev->settings.flags); ret = interface_add_link(iface, dev); } else { ret = interface_remove_link(iface, dev);