mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 08:21:14 +00:00
f1158fbcf6
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>
(cherry picked from commit 920eaab1d8
)
43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
From ec5be4f79026282925ae383caa431a8d41e3456a Mon Sep 17 00:00:00 2001
|
|
From: Tobias Waldekranz <tobias@waldekranz.com>
|
|
Date: Sat, 16 Jan 2021 02:25:10 +0100
|
|
Subject: [PATCH] net: bridge: switchdev: Include local flag in FDB
|
|
notifications
|
|
|
|
Some switchdev drivers, notably DSA, ignore all dynamically learned
|
|
address notifications (!added_by_user) as these are autonomously added
|
|
by the switch. Previously, such a notification was indistinguishable
|
|
from a local address notification. Include a local bit in the
|
|
notification so that the two classes can be discriminated.
|
|
|
|
This allows DSA-like devices to add local addresses to the hardware
|
|
FDB (with the CPU as the destination), thereby avoiding flows towards
|
|
the CPU being flooded by the switch as unknown unicast.
|
|
|
|
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
|
---
|
|
include/net/switchdev.h | 1 +
|
|
net/bridge/br_switchdev.c | 1 +
|
|
2 files changed, 2 insertions(+)
|
|
|
|
--- a/include/net/switchdev.h
|
|
+++ b/include/net/switchdev.h
|
|
@@ -124,6 +124,7 @@ struct switchdev_notifier_fdb_info {
|
|
const unsigned char *addr;
|
|
u16 vid;
|
|
u8 added_by_user:1,
|
|
+ local:1,
|
|
offloaded:1;
|
|
};
|
|
|
|
--- a/net/bridge/br_switchdev.c
|
|
+++ b/net/bridge/br_switchdev.c
|
|
@@ -109,6 +109,7 @@ br_switchdev_fdb_notify(const struct net
|
|
.addr = fdb->key.addr.addr,
|
|
.vid = fdb->key.vlan_id,
|
|
.added_by_user = fdb->added_by_user,
|
|
+ .local = fdb->is_local,
|
|
.offloaded = fdb->offloaded,
|
|
};
|
|
|