[][kernel][mt7988][hnat][Fix issue with HNAT BIND during LAN WAN role swap]
[Description]
Fix issue with HNAT BIND during LAN WAN role swap
Without this change, the HNAT forward port may not be
correct when the roles of LAN and WAN are swapped.
[Release-log]
N/A
Change-Id: I14a03a108ed6e135761f4a91fd6515fc582d8ff8
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/8204984
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
index ae0e9e9..77d2638 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
@@ -211,11 +211,13 @@
static void gmac_ppe_fwd_enable(struct net_device *dev)
{
+ struct mtk_mac *mac = netdev_priv(dev);
+
if (IS_LAN(dev) || IS_GMAC1_MODE)
set_gmac_ppe_fwd(NR_GMAC1_PORT, 1);
- else if (IS_WAN(dev))
+ else if (mac->id == MTK_GMAC2_ID)
set_gmac_ppe_fwd(NR_GMAC2_PORT, 1);
- else if (IS_LAN2(dev))
+ else if (mac->id == MTK_GMAC3_ID)
set_gmac_ppe_fwd(NR_GMAC3_PORT, 1);
}
@@ -1220,6 +1222,7 @@
u32 qid = 0;
u32 port_id = 0;
int mape = 0;
+ struct mtk_mac *mac = netdev_priv(dev);
ct = nf_ct_get(skb, &ctinfo);
@@ -1694,7 +1697,7 @@
else
gmac = NR_GMAC1_PORT;
} else if (IS_LAN2(dev)) {
- gmac = NR_GMAC3_PORT;
+ gmac = (mac->id == MTK_GMAC2_ID) ? NR_GMAC2_PORT : NR_GMAC3_PORT;
} else if (IS_WAN(dev)) {
if (IS_DSA_WAN(dev))
port_id = hnat_dsa_fill_stag(dev,&entry, hw_path,
@@ -1706,7 +1709,10 @@
entry.ipv4_hnapt.act_dp &= ~UDF_PINGPONG_IFIDX;
entry.ipv4_hnapt.act_dp |= dev->ifindex & UDF_PINGPONG_IFIDX;
} else {
- gmac = (IS_GMAC1_MODE) ? NR_GMAC1_PORT : NR_GMAC2_PORT;
+ if (IS_GMAC1_MODE)
+ gmac = NR_GMAC1_PORT;
+ else
+ gmac = (mac->id == MTK_GMAC2_ID) ? NR_GMAC2_PORT : NR_GMAC3_PORT;
}
} else if (IS_EXT(dev) && (FROM_GE_PPD(skb) || FROM_GE_LAN_GRP(skb) ||
FROM_GE_WAN(skb) || FROM_GE_VIRTUAL(skb) || FROM_WED(skb))) {