| From 81e39fd78db82fb51b05fff309b9c521f1a0bc5a Mon Sep 17 00:00:00 2001 |
| From: Tobias Waldekranz <tobias@waldekranz.com> |
| Date: Sat, 16 Jan 2021 02:25:14 +0100 |
| Subject: [PATCH] net: dsa: Sync static FDB entries on foreign interfaces to |
| hardware |
| |
| Reuse the "assisted_learning_on_cpu_port" functionality to always add |
| entries for user-configured entries on foreign interfaces, even if |
| assisted_learning_on_cpu_port is not enabled. E.g. in this situation: |
| |
| br0 |
| / \ |
| swp0 dummy0 |
| |
| $ bridge fdb add 02:00:de:ad:00:01 dev dummy0 vlan 1 master |
| |
| Results in DSA adding an entry in the hardware FDB, pointing this |
| address towards the CPU port. |
| |
| The same is true for entries added to the bridge itself, e.g: |
| |
| $ bridge fdb add 02:00:de:ad:00:01 dev br0 vlan 1 self |
| |
| Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> |
| --- |
| net/dsa/slave.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- a/net/dsa/slave.c |
| +++ b/net/dsa/slave.c |
| @@ -1703,9 +1703,12 @@ static int dsa_slave_switchdev_event(str |
| else if (!fdb_info->added_by_user) |
| return NOTIFY_OK; |
| } else { |
| - /* Snoop addresses learnt on foreign interfaces |
| - * bridged with us, for switches that don't |
| - * automatically learn SA from CPU-injected traffic |
| + /* Snoop addresses added to foreign interfaces |
| + * bridged with us, or the bridge |
| + * itself. Dynamically learned addresses can |
| + * also be added for switches that don't |
| + * automatically learn SA from CPU-injected |
| + * traffic. |
| */ |
| struct net_device *br_dev; |
| struct dsa_slave_priv *p; |
| @@ -1727,7 +1730,8 @@ static int dsa_slave_switchdev_event(str |
| |
| dp = p->dp->cpu_dp; |
| |
| - if (!dp->ds->assisted_learning_on_cpu_port) |
| + if (!fdb_info->added_by_user && |
| + !dp->ds->assisted_learning_on_cpu_port) |
| return NOTIFY_DONE; |
| } |
| |