Message ID | 20230418155902.898627-1-vladimir.oltean@nxp.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 927cdea5d2095287ddd5246e5aa68eb5d68db2be |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2,net] net: bridge: switchdev: don't notify FDB entries with "master dynamic" | expand |
On Tue, Apr 18, 2023 at 06:59:02PM +0300, Vladimir Oltean wrote: > diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c > index de18e9c1d7a7..ba95c4d74a60 100644 > --- a/net/bridge/br_switchdev.c > +++ b/net/bridge/br_switchdev.c > @@ -148,6 +148,17 @@ br_switchdev_fdb_notify(struct net_bridge *br, > if (test_bit(BR_FDB_LOCKED, &fdb->flags)) > return; Thanks for the patch. Ran a few tests and looks fine. Will report full results tomorrow morning. > > + /* Entries with these flags were created using ndm_state == NUD_REACHABLE, > + * ndm_flags == NTF_MASTER( | NTF_STICKY), ext_flags == 0 by something > + * equivalent to 'bridge fdb add ... master dynamic (sticky)'. > + * Drivers don't know how to deal with these, so don't notify them to > + * avoid confusing them. > + */ > + if (test_bit(BR_FDB_ADDED_BY_USER, &fdb->flags) && > + !test_bit(BR_FDB_STATIC, &fdb->flags) && > + !test_bit(BR_FDB_ADDED_BY_EXT_LEARN, &fdb->flags)) > + return; > + > br_switchdev_fdb_populate(br, &item, fdb, NULL); > > switch (type) { > -- > 2.34.1 >
On Tue, Apr 18, 2023 at 06:59:02PM +0300, Vladimir Oltean wrote: > There is a structural problem in switchdev, where the flag bits in > struct switchdev_notifier_fdb_info (added_by_user, is_local etc) only > represent a simplified / denatured view of what's in struct > net_bridge_fdb_entry :: flags (BR_FDB_ADDED_BY_USER, BR_FDB_LOCAL etc). > Each time we want to pass more information about struct > net_bridge_fdb_entry :: flags to struct switchdev_notifier_fdb_info > (here, BR_FDB_STATIC), we find that FDB entries were already notified to > switchdev with no regard to this flag, and thus, switchdev drivers had > no indication whether the notified entries were static or not. [...] > Fixes: 6b26b51b1d13 ("net: bridge: Add support for notifying devices about FDB add/del") > Link: https://lore.kernel.org/netdev/20230327115206.jk5q5l753aoelwus@skbuf/ > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > Reviewed-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Tested-by: Ido Schimmel <idosch@nvidia.com>
Hello: This patch was applied to netdev/net.git (main) by Paolo Abeni <pabeni@redhat.com>: On Tue, 18 Apr 2023 18:59:02 +0300 you wrote: > There is a structural problem in switchdev, where the flag bits in > struct switchdev_notifier_fdb_info (added_by_user, is_local etc) only > represent a simplified / denatured view of what's in struct > net_bridge_fdb_entry :: flags (BR_FDB_ADDED_BY_USER, BR_FDB_LOCAL etc). > Each time we want to pass more information about struct > net_bridge_fdb_entry :: flags to struct switchdev_notifier_fdb_info > (here, BR_FDB_STATIC), we find that FDB entries were already notified to > switchdev with no regard to this flag, and thus, switchdev drivers had > no indication whether the notified entries were static or not. > > [...] Here is the summary with links: - [v2,net] net: bridge: switchdev: don't notify FDB entries with "master dynamic" https://git.kernel.org/netdev/net/c/927cdea5d209 You are awesome, thank you!
On Tue, Apr 18, 2023 at 18:59, Vladimir Oltean <vladimir.oltean@nxp.com> wrote: > diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c > index de18e9c1d7a7..ba95c4d74a60 100644 > --- a/net/bridge/br_switchdev.c > +++ b/net/bridge/br_switchdev.c > @@ -148,6 +148,17 @@ br_switchdev_fdb_notify(struct net_bridge *br, > if (test_bit(BR_FDB_LOCKED, &fdb->flags)) > return; > > + /* Entries with these flags were created using ndm_state == NUD_REACHABLE, > + * ndm_flags == NTF_MASTER( | NTF_STICKY), ext_flags == 0 by something > + * equivalent to 'bridge fdb add ... master dynamic (sticky)'. > + * Drivers don't know how to deal with these, so don't notify them to > + * avoid confusing them. > + */ > + if (test_bit(BR_FDB_ADDED_BY_USER, &fdb->flags) && > + !test_bit(BR_FDB_STATIC, &fdb->flags) && > + !test_bit(BR_FDB_ADDED_BY_EXT_LEARN, &fdb->flags)) > + return; > + I do not understand this patch. It seems to me that it basically blocks any future use of dynamic fdb entries from userspace towards drivers. I would have expected that something would be done in the DSA layer, where (switchcore) drivers would be able to set some flags to indicate which features are supported by the driver, including non-static fdb entries. But as the placement here is earlier in the datapath from userspace towards drivers it's not possible to do any such thing in the DSA layer wrt non-static fdb entries.
On Sun, Apr 23, 2023 at 10:47:15AM +0200, Hans Schultz wrote: > I do not understand this patch. It seems to me that it basically blocks > any future use of dynamic fdb entries from userspace towards drivers. > > I would have expected that something would be done in the DSA layer, > where (switchcore) drivers would be able to set some flags to indicate > which features are supported by the driver, including non-static > fdb entries. But as the placement here is earlier in the datapath from > userspace towards drivers it's not possible to do any such thing in the > DSA layer wrt non-static fdb entries. As explained too many times already in the thread here: https://patchwork.kernel.org/project/netdevbpf/patch/20230318141010.513424-3-netdev@kapio-technology.com/ the plan is: | Just like commit 6ab4c3117aec ("net: bridge: don't notify switchdev for | local FDB addresses"), we could deny that for stable kernels, and add | the correct interpretation of the flag in net-next. Obviously we have not reached the end of that plan, and net-next is closed now.
On Mon, Apr 24, 2023 at 15:26, Vladimir Oltean <vladimir.oltean@nxp.com> wrote: > On Sun, Apr 23, 2023 at 10:47:15AM +0200, Hans Schultz wrote: >> I do not understand this patch. It seems to me that it basically blocks >> any future use of dynamic fdb entries from userspace towards drivers. >> >> I would have expected that something would be done in the DSA layer, >> where (switchcore) drivers would be able to set some flags to indicate >> which features are supported by the driver, including non-static >> fdb entries. But as the placement here is earlier in the datapath from >> userspace towards drivers it's not possible to do any such thing in the >> DSA layer wrt non-static fdb entries. > > As explained too many times already in the thread here: > https://patchwork.kernel.org/project/netdevbpf/patch/20230318141010.513424-3-netdev@kapio-technology.com/ > the plan is: Ahh yes thanks, I see the comment you wrote on march the 27th.
On Mon, Apr 24, 2023 at 15:26, Vladimir Oltean <vladimir.oltean@nxp.com> wrote: > > Obviously we have not reached the end of that plan, and net-next is closed now. Seems to me that net-next is open. Maybe it will close soon.
diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c index de18e9c1d7a7..ba95c4d74a60 100644 --- a/net/bridge/br_switchdev.c +++ b/net/bridge/br_switchdev.c @@ -148,6 +148,17 @@ br_switchdev_fdb_notify(struct net_bridge *br, if (test_bit(BR_FDB_LOCKED, &fdb->flags)) return; + /* Entries with these flags were created using ndm_state == NUD_REACHABLE, + * ndm_flags == NTF_MASTER( | NTF_STICKY), ext_flags == 0 by something + * equivalent to 'bridge fdb add ... master dynamic (sticky)'. + * Drivers don't know how to deal with these, so don't notify them to + * avoid confusing them. + */ + if (test_bit(BR_FDB_ADDED_BY_USER, &fdb->flags) && + !test_bit(BR_FDB_STATIC, &fdb->flags) && + !test_bit(BR_FDB_ADDED_BY_EXT_LEARN, &fdb->flags)) + return; + br_switchdev_fdb_populate(br, &item, fdb, NULL); switch (type) {