X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface.c;h=4a3a725ce35aa9557ac75fee622a951af85e01ef;hp=43ba773a3a93677f8e49cd89f0c1f535704bab15;hb=559df99f259e88edaa7e45826a0ff436f2a07d1a;hpb=02021e2069d0ee315b0ff263b6c010bef63b879c diff --git a/interface.c b/interface.c index 43ba773..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: