diff options
author | Hans Dedecker <dedeckeh@gmail.com> | 2015-09-01 14:43:58 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2015-09-02 17:30:12 +0200 |
commit | 3224b809c359107b04c067cc00e652729030c735 (patch) | |
tree | 5d88e318682098ee26203064055648c246375d6a | |
parent | d1c9d4bc6a6925fc3b39c1c4062c2b9082a4e161 (diff) |
device: Don't call set_state for external device in device_claim
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>
-rw-r--r-- | device.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -81,9 +81,6 @@ static int set_device_state(struct device *dev, bool state) return -1; } - if (dev->external) - return 0; - if (state) system_if_up(dev); else @@ -324,7 +321,7 @@ void device_broadcast_event(struct device *dev, enum device_event ev) int device_claim(struct device_user *dep) { struct device *dev = dep->dev; - int ret; + int ret = 0; if (dep->claimed) return 0; @@ -335,7 +332,9 @@ int device_claim(struct device_user *dep) 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 { |