[][Add wifi to wifi offload for NF_HNAT]
[Description]
Add wifi to wifi offload for NF_HNAT, which is supported
after warp-2.0 generation.
[Release-log]
N/A
Change-Id: I5825dab8a3514828912d3dd6aebeb6c6571bbeec
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/4698006
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 c3cf539..ec5e469 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
@@ -565,13 +565,16 @@
skb_hnat_iface(skb) = FOE_MAGIC_EXT;
} else if (IS_WAN(state->in)) {
skb_hnat_iface(skb) = FOE_MAGIC_GE_WAN;
- } else if (state->in->netdev_ops->ndo_flow_offload_check) {
- skb_hnat_iface(skb) = FOE_MAGIC_GE_VIRTUAL;
} else if (!IS_BR(state->in)) {
- skb_hnat_iface(skb) = FOE_INVALID;
+ if (state->in->netdev_ops->ndo_flow_offload_check) {
+ skb_hnat_iface(skb) = FOE_MAGIC_GE_VIRTUAL;
+ } else {
+ skb_hnat_iface(skb) = FOE_INVALID;
- if (is_magic_tag_valid(skb) && IS_SPACE_AVAILABLE_HEAD(skb))
- memset(skb_hnat_info(skb), 0, FOE_INFO_LEN);
+ if (is_magic_tag_valid(skb) &&
+ IS_SPACE_AVAILABLE_HEAD(skb))
+ memset(skb_hnat_info(skb), 0, FOE_INFO_LEN);
+ }
}
}
@@ -1435,7 +1438,7 @@
gmac = (IS_GMAC1_MODE) ? NR_GMAC1_PORT : NR_GMAC2_PORT;
}
} else if (IS_EXT(dev) && (FROM_GE_PPD(skb) || FROM_GE_LAN(skb) ||
- FROM_GE_WAN(skb) || FROM_GE_VIRTUAL(skb))) {
+ FROM_GE_WAN(skb) || FROM_GE_VIRTUAL(skb) || FROM_WED(skb))) {
if (!hnat_priv->data->whnat && IS_GMAC1_MODE) {
entry.bfib1.vpm = 1;
entry.bfib1.vlan_layer = 1;
@@ -1561,6 +1564,10 @@
skb_hnat_wdma_id(skb), skb_hnat_bss_id(skb),
skb_hnat_wc_id(skb), skb_hnat_rx_id(skb));
+ if ((gmac_no != NR_WDMA0_PORT) && (gmac_no != NR_WDMA1_PORT) &&
+ (gmac_no != NR_WHNAT_WDMA_PORT))
+ return NF_ACCEPT;
+
if (!skb_hnat_is_hashed(skb))
return NF_ACCEPT;
@@ -1686,8 +1693,10 @@
int mtk_sw_nat_hook_rx(struct sk_buff *skb)
{
- if (!IS_SPACE_AVAILABLE_HEAD(skb))
+ if (!IS_SPACE_AVAILABLE_HEAD(skb) || !FROM_WED(skb)) {
+ skb_hnat_magic_tag(skb) = 0;
return NF_ACCEPT;
+ }
skb_hnat_alg(skb) = 0;
skb_hnat_magic_tag(skb) = HNAT_MAGIC_TAG;
@@ -2059,7 +2068,8 @@
struct sk_buff *skb,
const struct nf_hook_state *state)
{
- if (unlikely(IS_EXT(state->in) && IS_EXT(state->out)))
+ if ((hnat_priv->data->version == MTK_HNAT_V2) &&
+ unlikely(IS_EXT(state->in) && IS_EXT(state->out)))
hnat_set_head_frags(state, skb, 1, hnat_set_alg);
return NF_ACCEPT;