X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface.c;h=10a91742d1ee0a073aca3ef16c08af573e55b699;hp=0aa5c5aa71d7ddf794d926c4d7f565639be54fd4;hb=46d52638f04c471a0e86d07ccae6a188f1a05ef5;hpb=b32cffd4f0a2b904a1e3c38e5141100970f89a65 diff --git a/interface.c b/interface.c index 0aa5c5a..10a9174 100644 --- a/interface.c +++ b/interface.c @@ -142,7 +142,10 @@ mark_interface_down(struct interface *iface) { if (iface->state == IFS_UP) interface_event(iface, IFEV_DOWN); + interface_ip_set_enabled(&iface->config_ip, false); + interface_ip_flush(&iface->proto_ip); interface_flush_state(iface); + system_flush_routes(); iface->state = IFS_DOWN; } @@ -158,8 +161,6 @@ __interface_set_down(struct interface *iface, bool force) if (iface->state == IFS_UP) interface_event(iface, IFEV_DOWN); iface->state = IFS_TEARDOWN; - interface_ip_flush(&iface->config_ip); - interface_ip_flush(&iface->proto_ip); interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, force); if (force) interface_flush_state(iface); @@ -310,8 +311,6 @@ interface_proto_cb(struct interface_proto_state *state, enum interface_proto_eve return; netifd_log_message(L_NOTICE, "Interface '%s' is now down\n", iface->name); - interface_ip_set_enabled(&iface->config_ip, false); - system_flush_routes(); mark_interface_down(iface); interface_handle_config_change(iface); break; @@ -320,8 +319,7 @@ interface_proto_cb(struct interface_proto_state *state, enum interface_proto_eve return; netifd_log_message(L_NOTICE, "Interface '%s' has lost the connection\n", iface->name); - if (iface->state == IFS_UP) - interface_event(iface, IFEV_DOWN); + mark_interface_down(iface); iface->state = IFS_SETUP; break; } @@ -549,15 +547,7 @@ interface_update_start(struct interface *iface) void interface_update_complete(struct interface *iface) { - struct device_route *route; - interface_ip_update_complete(&iface->proto_ip); - vlist_for_each_element(&iface->config_ip.route, route, node) { - if (iface->l3_dev.dev) { - system_add_route(iface->l3_dev.dev, route); - route->enabled = true; - } - } } static void