mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-20 14:13:16 +00:00
ee6ba216d8
Fix FDB learning bugs when VLAN filtering is enabled. Signed-off-by: DENG Qingfang <dqfext@gmail.com> Tested-by: Arınç ÜNAL <arinc.unal@arinc9.com> Tested-by: Stijn Tintel <stijn@linux-ipv6.be>
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
From 138c126a33f7564edb66b1da5b847e4a60740bfc Mon Sep 17 00:00:00 2001
|
|
From: DENG Qingfang <dqfext@gmail.com>
|
|
Date: Wed, 4 Aug 2021 00:04:04 +0800
|
|
Subject: [PATCH] net: dsa: mt7530: always install FDB entries with IVL and FID
|
|
1
|
|
|
|
This reverts commit 7e777021780e ("mt7530 mt7530_fdb_write only set ivl
|
|
bit vid larger than 1").
|
|
|
|
Before this series, the default value of all ports' PVID is 1, which is
|
|
copied into the FDB entry, even if the ports are VLAN unaware. So
|
|
`bridge fdb show` will show entries like `dev swp0 vlan 1 self` even on
|
|
a VLAN-unaware bridge.
|
|
|
|
The blamed commit does not solve that issue completely, instead it may
|
|
cause a new issue that FDB is inaccessible in a VLAN-aware bridge with
|
|
PVID 1.
|
|
|
|
This series sets PVID to 0 on VLAN-unaware ports, so `bridge fdb show`
|
|
will no longer print `vlan 1` on VLAN-unaware bridges, and that special
|
|
case in fdb_write is not required anymore.
|
|
|
|
Set FDB entries' filter ID to 1 to match the VLAN table.
|
|
|
|
Signed-off-by: DENG Qingfang <dqfext@gmail.com>
|
|
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/dsa/mt7530.c | 2 ++
|
|
drivers/net/dsa/mt7530.h | 2 ++
|
|
2 files changed, 4 insertions(+)
|
|
|
|
--- a/drivers/net/dsa/mt7530.c
|
|
+++ b/drivers/net/dsa/mt7530.c
|
|
@@ -361,6 +361,8 @@ mt7530_fdb_write(struct mt7530_priv *pri
|
|
int i;
|
|
|
|
reg[1] |= vid & CVID_MASK;
|
|
+ reg[1] |= ATA2_IVL;
|
|
+ reg[1] |= ATA2_FID(FID_BRIDGED);
|
|
reg[2] |= (aging & AGE_TIMER_MASK) << AGE_TIMER;
|
|
reg[2] |= (port_mask & PORT_MAP_MASK) << PORT_MAP;
|
|
/* STATIC_ENT indicate that entry is static wouldn't
|
|
--- a/drivers/net/dsa/mt7530.h
|
|
+++ b/drivers/net/dsa/mt7530.h
|
|
@@ -77,6 +77,8 @@ enum mt753x_bpdu_port_fw {
|
|
#define STATIC_EMP 0
|
|
#define STATIC_ENT 3
|
|
#define MT7530_ATA2 0x78
|
|
+#define ATA2_IVL BIT(15)
|
|
+#define ATA2_FID(x) (((x) & 0x7) << 12)
|
|
|
|
/* Register for address table write data */
|
|
#define MT7530_ATWD 0x7c
|