interface: use interface_set_main_dev() from interface_remove_link
[project/netifd.git] / interface.c
index c861b7d..65bc37d 100644 (file)
@@ -581,6 +581,9 @@ interface_proto_cb(struct interface_proto_state *state, enum interface_proto_eve
                        return;
                }
 
+               if (!iface->l3_dev.dev)
+                       interface_set_l3_dev(iface, iface->main_dev.dev);
+
                interface_ip_set_enabled(&iface->config_ip, true);
                system_flush_routes();
                iface->state = IFS_UP;
@@ -772,15 +775,11 @@ interface_set_l3_dev(struct interface *iface, struct device *dev)
 void
 interface_set_main_dev(struct interface *iface, struct device *dev)
 {
-       bool set_l3 = (!dev || iface->main_dev.dev == iface->l3_dev.dev);
        bool claimed = iface->l3_dev.claimed;
 
        if (iface->main_dev.dev == dev)
                return;
 
-       if (set_l3)
-               interface_set_l3_dev(iface, dev);
-
        device_add_user(&iface->main_dev, dev);
        if (!dev) {
                interface_set_link_state(iface, false);
@@ -808,7 +807,7 @@ interface_remove_link(struct interface *iface, struct device *dev)
        if (dev != iface->main_dev.dev)
                return UBUS_STATUS_INVALID_ARGUMENT;
 
-       device_remove_user(&iface->main_dev);
+       interface_set_main_dev(iface, NULL);
        return 0;
 }