920eaab1d8
Marvell mv88e6xxx switch series cannot perform MAC learning from CPU-injected (FROM_CPU) DSA frames, which results in 2 issues. - excessive flooding, due to the fact that DSA treats those addresses as unknown - the risk of stale routes, which can lead to temporary packet loss Backport those patch series from netdev mailing list, which solve these issues by adding and clearing static entries to the switch's FDB. Add a hack patch to set default VID to 1 in port_fdb_{add,del}. Otherwise the static entries will be added to the switch's private FDB if VLAN filtering disabled, which will not work. The switch may generate an "ATU violation" warning when a client moves from the CPU port to a switch port because the static ATU entry added by DSA core still points to the CPU port. DSA core will then clear the static entry so it is not fatal. Disable the warning so it will not confuse users. Link: https://lore.kernel.org/netdev/20210106095136.224739-1-olteanv@gmail.com/ Link: https://lore.kernel.org/netdev/20210116012515.3152-1-tobias@waldekranz.com/ Ref: https://gitlab.nic.cz/turris/turris-build/-/issues/165 Signed-off-by: DENG Qingfang <dqfext@gmail.com>
43 lines
1.5 KiB
Diff
43 lines
1.5 KiB
Diff
From 5fb4a451a87d8ed3363d28b63a3295399373d6c4 Mon Sep 17 00:00:00 2001
|
|
From: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
Date: Wed, 6 Jan 2021 11:51:34 +0200
|
|
Subject: [PATCH] net: dsa: exit early in dsa_slave_switchdev_event if we can't
|
|
program the FDB
|
|
|
|
Right now, the following would happen for a switch driver that does not
|
|
implement .port_fdb_add or .port_fdb_del.
|
|
|
|
dsa_slave_switchdev_event returns NOTIFY_OK and schedules:
|
|
-> dsa_slave_switchdev_event_work
|
|
-> dsa_port_fdb_add
|
|
-> dsa_port_notify(DSA_NOTIFIER_FDB_ADD)
|
|
-> dsa_switch_fdb_add
|
|
-> if (!ds->ops->port_fdb_add) return -EOPNOTSUPP;
|
|
-> an error is printed with dev_dbg, and
|
|
dsa_fdb_offload_notify(switchdev_work) is not called.
|
|
|
|
We can avoid scheduling the worker for nothing and say NOTIFY_DONE.
|
|
Because we don't call dsa_fdb_offload_notify, the static FDB entry will
|
|
remain just in the software bridge.
|
|
|
|
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
net/dsa/slave.c | 3 +++
|
|
1 file changed, 3 insertions(+)
|
|
|
|
--- a/net/dsa/slave.c
|
|
+++ b/net/dsa/slave.c
|
|
@@ -2090,6 +2090,9 @@ static int dsa_slave_switchdev_event(str
|
|
|
|
dp = dsa_slave_to_port(dev);
|
|
|
|
+ if (!dp->ds->ops->port_fdb_add || !dp->ds->ops->port_fdb_del)
|
|
+ return NOTIFY_DONE;
|
|
+
|
|
switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
|
|
if (!switchdev_work)
|
|
return NOTIFY_BAD;
|