[][Kernel][hnat][map-e fragment issue]
[Description]
Fix mape issue
In some cases, mape testing may fail due to fragmented packets.
Therefore, hnat driver returns such packets to the kernel.
[Release-log]
N/A
Change-Id: I658da54215d89371670fb44e080f8dded6febab5
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7648935
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 b63e45c..05f4955 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
@@ -1456,6 +1456,11 @@
break;
case NEXTHDR_IPIP:
+ iph = (struct iphdr *)skb_inner_network_header(skb);
+ /* don't process inner fragment packets */
+ if (ip_is_fragment(iph))
+ return 0;
+
if ((!mape_toggle &&
entry.bfib1.pkt_type == IPV4_DSLITE) ||
(mape_toggle &&
@@ -2535,7 +2540,7 @@
entry->ipv4_hnapt.m_timestamp = foe_timestamp(hnat_priv);
if (entry_hnat_is_bound(entry)) {
- memset(skb_hnat_info(skb), 0, FOE_INFO_LEN);
+ memset(skb_hnat_info(skb), 0, sizeof(struct hnat_desc));
return -1;
}
@@ -2595,6 +2600,9 @@
sizeof(_ports), &_ports);
if (unlikely(!pptr))
return NF_ACCEPT;
+ /* don't process inner fragment packets */
+ if (ip_is_fragment(iph))
+ return NF_ACCEPT;
entry->bfib1.udp = udp;