Ido Schimmel
2022-Nov-01 18:57 UTC
[Bridge] [PATCH net] bridge: Fix flushing of dynamic FDB entries
The following commands should result in all the dynamic FDB entries being flushed, but instead all the non-local (non-permanent) entries are flushed: # bridge fdb add 00:aa:bb:cc:dd:ee dev dummy1 master static # bridge fdb add 00:11:22:33:44:55 dev dummy1 master dynamic # ip link set dev br0 type bridge fdb_flush # bridge fdb show brport dummy1 00:00:00:00:00:01 master br0 permanent 33:33:00:00:00:01 self permanent 01:00:5e:00:00:01 self permanent This is because br_fdb_flush() works with FDB flags and not the corresponding enumerator values. Fix by passing the FDB flag instead. After the fix: # bridge fdb add 00:aa:bb:cc:dd:ee dev dummy1 master static # bridge fdb add 00:11:22:33:44:55 dev dummy1 master dynamic # ip link set dev br0 type bridge fdb_flush # bridge fdb show brport dummy1 00:aa:bb:cc:dd:ee master br0 static 00:00:00:00:00:01 master br0 permanent 33:33:00:00:00:01 self permanent 01:00:5e:00:00:01 self permanent Fixes: 1f78ee14eeac ("net: bridge: fdb: add support for fine-grained flushing") Signed-off-by: Ido Schimmel <idosch at nvidia.com> --- net/bridge/br_netlink.c | 2 +- net/bridge/br_sysfs_br.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index 5aeb3646e74c..d087fd4c784a 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c @@ -1332,7 +1332,7 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[], if (data[IFLA_BR_FDB_FLUSH]) { struct net_bridge_fdb_flush_desc desc = { - .flags_mask = BR_FDB_STATIC + .flags_mask = BIT(BR_FDB_STATIC) }; br_fdb_flush(br, &desc); diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c index 612e367fff20..ea733542244c 100644 --- a/net/bridge/br_sysfs_br.c +++ b/net/bridge/br_sysfs_br.c @@ -345,7 +345,7 @@ static int set_flush(struct net_bridge *br, unsigned long val, struct netlink_ext_ack *extack) { struct net_bridge_fdb_flush_desc desc = { - .flags_mask = BR_FDB_STATIC + .flags_mask = BIT(BR_FDB_STATIC) }; br_fdb_flush(br, &desc); -- 2.37.3
Nikolay Aleksandrov
2022-Nov-01 19:04 UTC
[Bridge] [PATCH net] bridge: Fix flushing of dynamic FDB entries
On 1 November 2022 20:57:53 EET, Ido Schimmel <idosch at nvidia.com> wrote:>The following commands should result in all the dynamic FDB entries >being flushed, but instead all the non-local (non-permanent) entries are >flushed: > > # bridge fdb add 00:aa:bb:cc:dd:ee dev dummy1 master static > # bridge fdb add 00:11:22:33:44:55 dev dummy1 master dynamic > # ip link set dev br0 type bridge fdb_flush > # bridge fdb show brport dummy1 > 00:00:00:00:00:01 master br0 permanent > 33:33:00:00:00:01 self permanent > 01:00:5e:00:00:01 self permanent > >This is because br_fdb_flush() works with FDB flags and not the >corresponding enumerator values. Fix by passing the FDB flag instead. > >After the fix: > > # bridge fdb add 00:aa:bb:cc:dd:ee dev dummy1 master static > # bridge fdb add 00:11:22:33:44:55 dev dummy1 master dynamic > # ip link set dev br0 type bridge fdb_flush > # bridge fdb show brport dummy1 > 00:aa:bb:cc:dd:ee master br0 static > 00:00:00:00:00:01 master br0 permanent > 33:33:00:00:00:01 self permanent > 01:00:5e:00:00:01 self permanent > >Fixes: 1f78ee14eeac ("net: bridge: fdb: add support for fine-grained flushing") >Signed-off-by: Ido Schimmel <idosch at nvidia.com> >--- > net/bridge/br_netlink.c | 2 +- > net/bridge/br_sysfs_br.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > >diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c >index 5aeb3646e74c..d087fd4c784a 100644 >--- a/net/bridge/br_netlink.c >+++ b/net/bridge/br_netlink.c >@@ -1332,7 +1332,7 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[], > > if (data[IFLA_BR_FDB_FLUSH]) { > struct net_bridge_fdb_flush_desc desc = { >- .flags_mask = BR_FDB_STATIC >+ .flags_mask = BIT(BR_FDB_STATIC) > }; > > br_fdb_flush(br, &desc); >diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c >index 612e367fff20..ea733542244c 100644 >--- a/net/bridge/br_sysfs_br.c >+++ b/net/bridge/br_sysfs_br.c >@@ -345,7 +345,7 @@ static int set_flush(struct net_bridge *br, unsigned long val, > struct netlink_ext_ack *extack) > { > struct net_bridge_fdb_flush_desc desc = { >- .flags_mask = BR_FDB_STATIC >+ .flags_mask = BIT(BR_FDB_STATIC) > }; > > br_fdb_flush(br, &desc);Oops. :) Acked-by: Nikolay Aleksandrov <razor at blackwall.org>
patchwork-bot+netdevbpf at kernel.org
2022-Nov-03 04:00 UTC
[Bridge] [PATCH net] bridge: Fix flushing of dynamic FDB entries
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba at kernel.org>: On Tue, 1 Nov 2022 20:57:53 +0200 you wrote:> The following commands should result in all the dynamic FDB entries > being flushed, but instead all the non-local (non-permanent) entries are > flushed: > > # bridge fdb add 00:aa:bb:cc:dd:ee dev dummy1 master static > # bridge fdb add 00:11:22:33:44:55 dev dummy1 master dynamic > # ip link set dev br0 type bridge fdb_flush > # bridge fdb show brport dummy1 > 00:00:00:00:00:01 master br0 permanent > 33:33:00:00:00:01 self permanent > 01:00:5e:00:00:01 self permanent > > [...]Here is the summary with links: - [net] bridge: Fix flushing of dynamic FDB entries https://git.kernel.org/netdev/net/c/628ac04a75ed You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html