mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 18:19:02 +00:00
ramips: prevent packet forwarding on mt7620 between switch ports during init (FS#103)
By default, forwarding between all ports is allowed on init. This is problematic in cases where some ports are supposed to be isolated from each other, most commonly LAN/WAN separation. REG_ESW_PORT_PCR(port) has a destination mask for a particular port, controlling what other ports it is allowed to send packets to. Instead of initializing all to 0xff (all ports), allow each physical port to send to the CPU port, and the CPU port to send to all other ports. Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
81b5e8e5d2
commit
566de813c3
@ -61,7 +61,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
GSW_ATTR_ENABLE_VLAN,
|
GSW_ATTR_ENABLE_VLAN,
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/net/ethernet/mediatek/mt7530.c
|
+++ b/drivers/net/ethernet/mediatek/mt7530.c
|
||||||
@@ -0,0 +1,884 @@
|
@@ -0,0 +1,886 @@
|
||||||
+/*
|
+/*
|
||||||
+ * This program is free software; you can redistribute it and/or
|
+ * This program is free software; you can redistribute it and/or
|
||||||
+ * modify it under the terms of the GNU General Public License
|
+ * modify it under the terms of the GNU General Public License
|
||||||
@ -555,7 +555,9 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
+
|
+
|
||||||
+ if (!priv->global_vlan_enable) {
|
+ if (!priv->global_vlan_enable) {
|
||||||
+ for (i = 0; i < MT7530_NUM_PORTS; i++)
|
+ for (i = 0; i < MT7530_NUM_PORTS; i++)
|
||||||
+ mt7530_w32(priv, REG_ESW_PORT_PCR(i), 0x00ff0000);
|
+ mt7530_w32(priv, REG_ESW_PORT_PCR(i), 0x00400000);
|
||||||
|
+
|
||||||
|
+ mt7530_w32(priv, REG_ESW_PORT_PCR(MT7530_CPU_PORT), 0x00ff0000);
|
||||||
+
|
+
|
||||||
+ for (i = 0; i < MT7530_NUM_PORTS; i++)
|
+ for (i = 0; i < MT7530_NUM_PORTS; i++)
|
||||||
+ mt7530_w32(priv, REG_ESW_PORT_PVC(i), 0x810000c0);
|
+ mt7530_w32(priv, REG_ESW_PORT_PVC(i), 0x810000c0);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/ethernet/mediatek/mt7530.c
|
--- a/drivers/net/ethernet/mediatek/mt7530.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mt7530.c
|
+++ b/drivers/net/ethernet/mediatek/mt7530.c
|
||||||
@@ -541,6 +541,7 @@ mt7530_apply_config(struct switch_dev *d
|
@@ -543,6 +543,7 @@ mt7530_apply_config(struct switch_dev *d
|
||||||
u8 etags = priv->vlan_entries[i].etags;
|
u8 etags = priv->vlan_entries[i].etags;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
@ -8,7 +8,7 @@
|
|||||||
/* vid of vlan */
|
/* vid of vlan */
|
||||||
val = mt7530_r32(priv, REG_ESW_VLAN_VTIM(i));
|
val = mt7530_r32(priv, REG_ESW_VLAN_VTIM(i));
|
||||||
if (i % 2 == 0) {
|
if (i % 2 == 0) {
|
||||||
@@ -551,7 +552,7 @@ mt7530_apply_config(struct switch_dev *d
|
@@ -553,7 +554,7 @@ mt7530_apply_config(struct switch_dev *d
|
||||||
val |= (vid << 12);
|
val |= (vid << 12);
|
||||||
}
|
}
|
||||||
mt7530_w32(priv, REG_ESW_VLAN_VTIM(i), val);
|
mt7530_w32(priv, REG_ESW_VLAN_VTIM(i), val);
|
||||||
@ -17,7 +17,7 @@
|
|||||||
/* vlan port membership */
|
/* vlan port membership */
|
||||||
if (member)
|
if (member)
|
||||||
mt7530_w32(priv, REG_ESW_VLAN_VAWD1, REG_ESW_VLAN_VAWD1_IVL_MAC |
|
mt7530_w32(priv, REG_ESW_VLAN_VAWD1, REG_ESW_VLAN_VAWD1_IVL_MAC |
|
||||||
@@ -571,7 +572,11 @@ mt7530_apply_config(struct switch_dev *d
|
@@ -573,7 +574,11 @@ mt7530_apply_config(struct switch_dev *d
|
||||||
mt7530_w32(priv, REG_ESW_VLAN_VAWD2, val);
|
mt7530_w32(priv, REG_ESW_VLAN_VAWD2, val);
|
||||||
|
|
||||||
/* write to vlan table */
|
/* write to vlan table */
|
||||||
|
Loading…
Reference in New Issue
Block a user