- dev = device_get(blobmsg_data(tb[DEV_NAME]), add);
- if (!dev)
- return UBUS_STATUS_NOT_FOUND;
+ if (iface->main_dev.hotplug) {
+ dev = iface->main_dev.dev;
+
+ if (dev) {
+ if (!add && strcmp(dev->ifname, devname) != 0) {
+ ret = UBUS_STATUS_INVALID_ARGUMENT;
+ goto out;
+ }
+
+ interface_set_available(iface, false);
+ device_remove_user(&iface->main_dev);
+ }
+ } else
+ main_dev = iface->main_dev.dev;
+
+ dev = device_get(blobmsg_data(tb[DEV_NAME]), add ? 2 : 0);
+ if (!dev && (main_dev || add)) {
+ ret = UBUS_STATUS_NOT_FOUND;
+ goto out;
+ }
+
+ if (!main_dev) {
+ if (add) {
+ device_add_user(&iface->main_dev, dev);
+ iface->main_dev.hotplug = true;
+ }
+ ret = 0;
+ goto out;
+ }
+
+ if (!main_dev->hotplug_ops) {
+ ret = UBUS_STATUS_NOT_SUPPORTED;
+ goto out;
+ }