[OpenWrt-Devel] [PATCH 2/2] netifd: Don't call set_state for external device in device_claim
Felix Fietkau
nbd at openwrt.org
Wed Sep 2 11:29:38 EDT 2015
On 2015-09-02 13:27, Hans Dedecker wrote:
>
>
> On Wed, Sep 2, 2015 at 10:31 AM, Felix Fietkau <nbd at openwrt.org
> <mailto:nbd at openwrt.org>> wrote:
>
> On 2015-09-01 15:53, Hans Dedecker wrote:
> >
> >
> > On Tue, Sep 1, 2015 at 2:49 PM, Felix Fietkau <nbd at openwrt.org
> <mailto:nbd at openwrt.org>
> > <mailto:nbd at openwrt.org <mailto:nbd at openwrt.org>>> wrote:
> >
> > On 2015-09-01 14:43, Hans Dedecker wrote:
> > > 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.
> > Why/how do vlan/macvlan devices become external?
> >
> > This use case is driven by an external application which is adding a
> > vlan device to the bridge.
> > Initially the vlan device is created as an internal device but not
> added
> > to the bridge; later added by an external application via ubus to the
> > bridge. In this scenario we hit the issue when doing network
> reload the
> > vlan device is not anymore an active member of the bridge as vlan
> > set_state enable was called which failed.
> > This is a bit similar to a wireless device which has uci device
> config;
> > initially it's considered as an internal device by netifd when loading
> > the config but becomes an external device when the wireless logic adds
> > it to the bridge.
> The main point of dev->external is to declare that a device is fully
> managed externally, and netifd is not supposed to bring it up or down.
> Maybe a better fix would be to allow devices to be added dynamically
> without forcing dev->external on them (or just prevent that flag from
> being added for vlan devices).
>
> Devices can be added dynamically without being forced external via the
> function interface_handle_link; so that is covered.
> Regarding the external flag being set for vlan devices; would it be
> acceptable the external flag can only be set for simple devices in
> device_get ? This is the only place where non simple devices can be set
> external.
> My intention with this patch was also to line up the external flag check
> when the state is altered; in device_release the external flag is
> checked although the same check is done in set_device_state (which would
> eventually be called by the set_state callback function). So I thought
> to add the same external flag check in device_claim to line up both
> functions.
Okay, seems I didn't look at the context closely enough. I think this
patch makes sense after all, and I will apply it.
- Felix
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list