From 37c86b73122616c91637d41dde0a36a033ef494d Mon Sep 17 00:00:00 2001 From: "Rastogi, Deepansh" <deepansh.rastogi@intel.com> Date: Thu, 15 Feb 2018 09:44:30 +0100 Subject: [PATCH] Merge pull request #246 in SW_PON/linux from feature/UGW_SW-20799-session-based-accel-disable-porting to xrx500 * commit '219936d5dd9f28a75a3c2a621aabeea446226d87': UGW_SW-20799: Session Based Acceleration Disable --- drivers/net/ethernet/lantiq/ppa/ppa_hook.c | 43 +++++++++++++++------- net/Kconfig | 8 ++++ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/lantiq/ppa/ppa_hook.c b/drivers/net/ethernet/lantiq/ppa/ppa_hook.c index 483a5edb0..7287c7d07 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 4b2f0fd3e..6c054c9a7 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" -- GitLab