case IFEV_UP:
interface_error_flush(iface);
adev = iface->l3_dev.dev;
- /* fall through */
+ fallthrough;
case IFEV_DOWN:
case IFEV_UP_FAILED:
alias_notify_device(iface->name, adev);
case IFS_DOWN:
if (iface->main_dev.dev)
device_release(&iface->main_dev);
+ break;
case IFS_TEARDOWN:
default:
break;
}
static int
-interface_add_link(struct interface *iface, struct device *dev, bool link_ext)
+interface_add_link(struct interface *iface, struct device *dev,
+ struct blob_attr *vlan, bool link_ext)
{
struct device *mdev = iface->main_dev.dev;
if (mdev) {
if (mdev->hotplug_ops)
- return mdev->hotplug_ops->add(mdev, dev);
+ return mdev->hotplug_ops->add(mdev, dev, vlan);
else
return UBUS_STATUS_NOT_SUPPORTED;
}
}
int
-interface_handle_link(struct interface *iface, const char *name, bool add, bool link_ext)
+interface_handle_link(struct interface *iface, const char *name,
+ struct blob_attr *vlan, bool add, bool link_ext)
{
struct device *dev;
int ret;
if (add) {
interface_set_device_config(iface, dev);
- device_set_present(dev, true);
+ if (!link_ext)
+ device_set_present(dev, true);
- ret = interface_add_link(iface, dev, link_ext);
+ ret = interface_add_link(iface, dev, vlan, link_ext);
} else {
ret = interface_remove_link(iface, dev);
}
if (!iface->jail || strcmp(iface->jail, jail))
continue;
- system_link_netns_move(iface->ifname, netns_fd, iface->jail_ifname);
+ system_link_netns_move(iface->main_dev.dev, netns_fd, iface->jail_ifname);
}
close(netns_fd);
interface_do_reload(iface);
interface_set_down(iface);
- system_link_netns_move(iface->ifname, root_netns, orig_ifname);
+ system_link_netns_move(iface->main_dev.dev, root_netns, orig_ifname);
}
close(root_netns);