X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=interface.c;h=6b95a6db39ff66a5cae465bc4a8d8cd168d2ed09;hb=bc214ca470015b12a4f905f57ba6f2352c60f5a5;hp=c5addeab346be1b6caee3e42eb49aead648b9186;hpb=76d5b041afff56375bb88a18eff33e50acceb1d8;p=project%2Fnetifd.git diff --git a/interface.c b/interface.c index c5addea..6b95a6d 100644 --- a/interface.c +++ b/interface.c @@ -142,6 +142,8 @@ mark_interface_down(struct interface *iface) { if (iface->state == IFS_UP) interface_event(iface, IFEV_DOWN); + interface_ip_flush(&iface->config_ip); + interface_ip_flush(&iface->proto_ip); interface_flush_state(iface); iface->state = IFS_DOWN; } @@ -158,8 +160,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); @@ -242,6 +242,7 @@ interface_cleanup(struct interface *iface, bool reload) list_for_each_entry_safe(dep, tmp, &iface->users, list) interface_remove_user(dep); + interface_dequeue_event(iface); interface_ip_flush(&iface->config_ip); interface_flush_state(iface); interface_clear_errors(iface); @@ -420,10 +421,10 @@ interface_set_main_dev(struct interface *iface, struct device *dev) if (iface->main_dev.dev == dev) return; - device_add_user(&iface->main_dev, dev); if (set_l3) interface_set_l3_dev(iface, dev); + device_add_user(&iface->main_dev, dev); if (claimed) device_claim(&iface->l3_dev);