diff --git a/drivers/net/ethernet/lantiq/ppa/ppa_hook.c b/drivers/net/ethernet/lantiq/ppa/ppa_hook.c index 483a5edb0798665b433ef0b2095b37f436ac0a04..7287c7d07115ef896fd1a36dcea0bf7bfcf233f7 100644 --- a/drivers/net/ethernet/lantiq/ppa/ppa_hook.c +++ b/drivers/net/ethernet/lantiq/ppa/ppa_hook.c @@ -787,25 +787,40 @@ static unsigned int ppa_postrt_hook_fn(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) { -#if defined(CONFIG_PPA_MPE_IP97) +#if IS_ENABLED(CONFIG_PPA_MPE_IP97) struct iphdr *hdr = ip_hdr(skb); - if (hdr->protocol != IPPROTO_ESP) { /* exclude the encrypted ipsec tunnel packets */ -#endif - if (ppa_hook_session_add_fn != NULL) { - struct nf_conn *ct = NULL; - enum ip_conntrack_info ctinfo; - uint32_t flags; + /* exclude the encrypted ipsec tunnel packets */ + if (hdr->protocol != IPPROTO_ESP) { +#endif /* CONFIG_PPA_MPE_IP97*/ + if (!ppa_hook_session_add_fn) + return NF_ACCEPT; + +#if IS_ENABLED(CONFIG_INTEL_IPQOS_ACCEL_DISABLE) + /* check for 13th bit in NFMARK set by IPQOS classifier */ + /* If this bit is set, dont call PPA session add fn*/ + bool accel_st = 0; +#if IS_ENABLED(CONFIG_NETWORK_EXTMARK) + GET_DATA_FROM_MARK_OPT(skb->extmark, ACCELSEL_MASK, + ACCELSEL_START_BIT_POS, accel_st); +#endif /* CONFIG_NETWORK_EXTMARK*/ + if (accel_st != 0) + return NF_ACCEPT; +#endif /* CONFIG_INTEL_IPQOS_ACCEL_DISABLE*/ - ct = nf_ct_get(skb, &ctinfo); + struct nf_conn *ct = NULL; + enum ip_conntrack_info ctinfo; + uint32_t flags; - flags = 0; /* post routing */ - flags |= CTINFO2DIR(ctinfo) == IP_CT_DIR_ORIGINAL ? PPA_F_SESSION_ORG_DIR : PPA_F_SESSION_REPLY_DIR; + ct = nf_ct_get(skb, &ctinfo); - ppa_hook_session_add_fn(skb, ct, flags); - } -#if defined(CONFIG_PPA_MPE_IP97) + flags = 0; /* post routing */ + flags |= CTINFO2DIR(ctinfo) == IP_CT_DIR_ORIGINAL ? + PPA_F_SESSION_ORG_DIR : PPA_F_SESSION_REPLY_DIR; + + ppa_hook_session_add_fn(skb, ct, flags); +#if IS_ENABLED(CONFIG_PPA_MPE_IP97) } -#endif +#endif /* CONFIG_PPA_MPE_IP97*/ return NF_ACCEPT; } diff --git a/net/Kconfig b/net/Kconfig index 4b2f0fd3e55417fbc36001acc524208bc005f574..6c054c9a7844b6157f70316d8d306123c1d4332d 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -102,6 +102,14 @@ config INTEL_IPQOS_MARK_SKBPRIO If unsure, say N. +config INTEL_IPQOS_ACCEL_DISABLE + bool "IPQOS Accelration Disable Support" + depends on INTEL_IPQOS + help + Enable/Disable 'PPA session learning' using bit 13 in EXTMARK + + If unsure say N + if INET source "net/ipv4/Kconfig" source "net/ipv6/Kconfig"