The function set_state disable is not called for external devices in device_release
which means for external vlan/macvlan devices they won't be deleted.
As a result of this the set_state enable call for external devices by device_claim fails
as vlan/macvlan devices cannot be created since the device already exists in the kernel.
Therefore move the external device check from device_set_state to device_claim so
external vlan/macvlan devices are not created again and can also be external.
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
return -1;
}
- if (dev->external)
- return 0;
-
if (state)
system_if_up(dev);
else
int device_claim(struct device_user *dep)
{
struct device *dev = dep->dev;
- int ret;
+ int ret = 0;
if (dep->claimed)
return 0;
return 0;
device_broadcast_event(dev, DEV_EVENT_SETUP);
- ret = dev->set_state(dev, true);
+ if (!dev->external)
+ ret = dev->set_state(dev, true);
+
if (ret == 0)
device_broadcast_event(dev, DEV_EVENT_UP);
else {