mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 10:39:04 +00:00
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>
31 lines
945 B
Diff
31 lines
945 B
Diff
From 0663ebde114a6fb2c28c622ba5212b302d4d2581 Mon Sep 17 00:00:00 2001
|
|
From: Tobias Waldekranz <tobias@waldekranz.com>
|
|
Date: Sat, 16 Jan 2021 02:25:13 +0100
|
|
Subject: [PATCH] net: dsa: Include bridge addresses in assisted CPU port
|
|
learning
|
|
|
|
Now that notifications are sent out for addresses added to the bridge
|
|
itself, extend DSA to include those addresses in the hardware FDB when
|
|
assisted CPU port learning is enabled.
|
|
|
|
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
|
---
|
|
net/dsa/slave.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
--- a/net/dsa/slave.c
|
|
+++ b/net/dsa/slave.c
|
|
@@ -2158,7 +2158,11 @@ static int dsa_slave_switchdev_event(str
|
|
struct net_device *br_dev;
|
|
struct dsa_slave_priv *p;
|
|
|
|
- br_dev = netdev_master_upper_dev_get_rcu(dev);
|
|
+ if (netif_is_bridge_master(dev))
|
|
+ br_dev = dev;
|
|
+ else
|
|
+ br_dev = netdev_master_upper_dev_get_rcu(dev);
|
|
+
|
|
if (!br_dev)
|
|
return NOTIFY_DONE;
|
|
|