From 466a71a2b97c575ebc0cab4e2af94b00e83c2218 Mon Sep 17 00:00:00 2001
From: Siva Eluri <eluris@google.com>
Date: Fri, 3 Nov 2023 12:05:09 -0700
Subject: [PATCH] Revert SFE ESP changes

Change-Id: Ib5816fc4cc80ac8d1b6219d35871298c7bd5b409
---
 qca-nss-sfe/Makefile       |   4 +-
 qca-nss-sfe/sfe.c          |   6 -
 qca-nss-sfe/sfe_ipv4.c     |  31 +---
 qca-nss-sfe/sfe_ipv4.h     |   4 -
 qca-nss-sfe/sfe_ipv4_esp.c | 295 -------------------------------------
 qca-nss-sfe/sfe_ipv4_esp.h |  21 ---
 qca-nss-sfe/sfe_ipv6.c     |  29 +---
 qca-nss-sfe/sfe_ipv6.h     |   4 -
 qca-nss-sfe/sfe_ipv6_esp.c | 275 ----------------------------------
 qca-nss-sfe/sfe_ipv6_esp.h |  21 ---
 10 files changed, 5 insertions(+), 685 deletions(-)
 delete mode 100644 qca-nss-sfe/sfe_ipv4_esp.c
 delete mode 100644 qca-nss-sfe/sfe_ipv4_esp.h
 delete mode 100644 qca-nss-sfe/sfe_ipv6_esp.c
 delete mode 100644 qca-nss-sfe/sfe_ipv6_esp.h

diff --git a/qca-nss-sfe/Makefile b/qca-nss-sfe/Makefile
index 6ac42d3..d52146c 100644
--- a/qca-nss-sfe/Makefile
+++ b/qca-nss-sfe/Makefile
@@ -5,8 +5,8 @@
 KERNELVERSION := $(word 1, $(subst ., ,$(KERNELVERSION))).$(word 2, $(subst ., ,$(KERNELVERSION)))
 
 SFE_BASE_OBJS := sfe.o sfe_init.o
-SFE_IPV4_OBJS := sfe_ipv4.o sfe_ipv4_udp.o sfe_ipv4_tcp.o sfe_ipv4_icmp.o sfe_ipv4_esp.o
-SFE_IPV6_OBJS := sfe_ipv6.o sfe_ipv6_udp.o sfe_ipv6_tcp.o sfe_ipv6_icmp.o sfe_ipv6_tunipip6.o sfe_ipv6_esp.o
+SFE_IPV4_OBJS := sfe_ipv4.o sfe_ipv4_udp.o sfe_ipv4_tcp.o sfe_ipv4_icmp.o
+SFE_IPV6_OBJS := sfe_ipv6.o sfe_ipv6_udp.o sfe_ipv6_tcp.o sfe_ipv6_icmp.o sfe_ipv6_tunipip6.o
 SFE_PPPOE_OBJS := sfe_pppoe.o
 
 
diff --git a/qca-nss-sfe/sfe.c b/qca-nss-sfe/sfe.c
index 8bc387c..b352e9a 100644
--- a/qca-nss-sfe/sfe.c
+++ b/qca-nss-sfe/sfe.c
@@ -680,9 +680,6 @@ sfe_tx_status_t sfe_create_ipv4_rule_msg(struct sfe_ctx_instance_internal *sfe_c
 	case IPPROTO_GRE:
 		break;
 
-	case IPPROTO_ESP:
-		break;
-
 	default:
 		ret = SFE_CMN_RESPONSE_EMSG;
 		sfe_incr_exceptions(SFE_EXCEPTION_PROTOCOL_NOT_SUPPORT);
@@ -1051,9 +1048,6 @@ sfe_tx_status_t sfe_create_ipv6_rule_msg(struct sfe_ctx_instance_internal *sfe_c
 	case IPPROTO_GRE:
 		break;
 
-	case IPPROTO_ESP:
-		break;
-
 	default:
 		ret = SFE_CMN_RESPONSE_EMSG;
 		sfe_incr_exceptions(SFE_EXCEPTION_PROTOCOL_NOT_SUPPORT);
diff --git a/qca-nss-sfe/sfe_ipv4.c b/qca-nss-sfe/sfe_ipv4.c
index 48eec72..aeb9a42 100644
--- a/qca-nss-sfe/sfe_ipv4.c
+++ b/qca-nss-sfe/sfe_ipv4.c
@@ -45,7 +45,6 @@
 #include "sfe_ipv4_icmp.h"
 #include "sfe_pppoe.h"
 #include "sfe_ipv4_gre.h"
-#include "sfe_ipv4_esp.h"
 
 static char *sfe_ipv4_exception_events_string[SFE_IPV4_EXCEPTION_EVENT_LAST] = {
 	"UDP_HEADER_INCOMPLETE",
@@ -96,10 +95,6 @@ static char *sfe_ipv4_exception_events_string[SFE_IPV4_EXCEPTION_EVENT_LAST] = {
 	"GRE_IP_OPTIONS_OR_INITIAL_FRAGMENT",
 	"GRE_SMALL_TTL",
 	"GRE_NEEDS_FRAGMENTATION",
-	"ESP_NO_CONNECTION",
-	"ESP_IP_OPTIONS_OR_INITIAL_FRAGMENT",
-	"ESP_NEEDS_FRAGMENTATION",
-	"ESP_SMALL_TTL"
 };
 
 static struct sfe_ipv4 __si;
@@ -876,10 +871,6 @@ int sfe_ipv4_recv(struct net_device *dev, struct sk_buff *skb, struct sfe_l2_inf
 		return sfe_ipv4_recv_tcp(si, skb, dev, len, iph, ihl, sync_on_find, l2_info);
 	}
 
-	if (IPPROTO_ESP == protocol) {
-		return sfe_ipv4_recv_esp(si, skb, dev, len, iph, ihl, sync_on_find, tun_outer);
-	}
-
 	if (IPPROTO_ICMP == protocol) {
 		return sfe_ipv4_recv_icmp(si, skb, dev, len, iph, ihl);
 	}
@@ -1279,8 +1270,7 @@ int sfe_ipv4_create_rule(struct sfe_ipv4_rule_create_msg *msg)
 		}
 	}
 
-	if (((IPPROTO_GRE == tuple->protocol) || (IPPROTO_ESP == tuple->protocol)) &&
-					!sfe_ipv4_is_local_ip(si, original_cm->match_dest_ip)) {
+	if ((IPPROTO_GRE == tuple->protocol) && !sfe_ipv4_is_local_ip(si, original_cm->match_dest_ip)) {
 		original_cm->flags |= SFE_IPV4_CONNECTION_MATCH_FLAG_PASSTHROUGH;
 	}
 
@@ -1460,8 +1450,7 @@ int sfe_ipv4_create_rule(struct sfe_ipv4_rule_create_msg *msg)
 		reply_cm->flags |= SFE_IPV4_CONNECTION_MATCH_FLAG_FAST_XMIT_DEV_ADMISSION;
 	}
 
-	if (((IPPROTO_GRE == tuple->protocol) || (IPPROTO_ESP == tuple->protocol)) &&
-					!sfe_ipv4_is_local_ip(si, reply_cm->match_dest_ip)) {
+	if ((IPPROTO_GRE == tuple->protocol) && !sfe_ipv4_is_local_ip(si, reply_cm->match_dest_ip)) {
 		reply_cm->flags |= SFE_IPV4_CONNECTION_MATCH_FLAG_PASSTHROUGH;
 	}
 
@@ -1571,22 +1560,6 @@ int sfe_ipv4_create_rule(struct sfe_ipv4_rule_create_msg *msg)
 	}
 #endif
 
-	if ((IPPROTO_ESP == tuple->protocol) && !(reply_cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_PASSTHROUGH)) {
-		rcu_read_lock();
-		reply_cm->proto = rcu_dereference(inet_protos[IPPROTO_ESP]);
-		rcu_read_unlock();
-
-		if (unlikely(!reply_cm->proto)) {
-			kfree(reply_cm);
-			kfree(original_cm);
-			kfree(c);
-			dev_put(src_dev);
-			dev_put(dest_dev);
-			DEBUG_WARN("sfe: ESP proto handler is not registered\n");
-			return -EPERM;
-		}
-	}
-
 #ifdef CONFIG_NF_FLOW_COOKIE
 	reply_cm->flow_cookie = 0;
 #endif
diff --git a/qca-nss-sfe/sfe_ipv4.h b/qca-nss-sfe/sfe_ipv4.h
index fcbc09b..4e8169b 100644
--- a/qca-nss-sfe/sfe_ipv4.h
+++ b/qca-nss-sfe/sfe_ipv4.h
@@ -288,10 +288,6 @@ enum sfe_ipv4_exception_events {
 	SFE_IPV4_EXCEPTION_EVENT_GRE_IP_OPTIONS_OR_INITIAL_FRAGMENT,
 	SFE_IPV4_EXCEPTION_EVENT_GRE_SMALL_TTL,
 	SFE_IPV4_EXCEPTION_EVENT_GRE_NEEDS_FRAGMENTATION,
-	SFE_IPV4_EXCEPTION_EVENT_ESP_NO_CONNECTION,
-	SFE_IPV4_EXCEPTION_EVENT_ESP_IP_OPTIONS_OR_INITIAL_FRAGMENT,
-	SFE_IPV4_EXCEPTION_EVENT_ESP_NEEDS_FRAGMENTATION,
-	SFE_IPV4_EXCEPTION_EVENT_ESP_SMALL_TTL,
 	SFE_IPV4_EXCEPTION_EVENT_LAST
 };
 
diff --git a/qca-nss-sfe/sfe_ipv4_esp.c b/qca-nss-sfe/sfe_ipv4_esp.c
deleted file mode 100644
index f0b4941..0000000
--- a/qca-nss-sfe/sfe_ipv4_esp.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * sfe_ipv4_esp.c
- *	Shortcut forwarding engine - IPv4 ESP implementation
- *
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <linux/skbuff.h>
-#include <net/protocol.h>
-#include <net/ip.h>
-#include <linux/etherdevice.h>
-#include <linux/lockdep.h>
-
-#include "sfe_debug.h"
-#include "sfe_api.h"
-#include "sfe.h"
-#include "sfe_flow_cookie.h"
-#include "sfe_ipv4.h"
-#include "sfe_ipv4_esp.h"
-
-/*
- * sfe_ipv4_recv_esp()
- *	Handle ESP packet receives and forwarding
- */
-int sfe_ipv4_recv_esp(struct sfe_ipv4 *si, struct sk_buff *skb, struct net_device *dev,
-				unsigned int len, struct iphdr *iph, unsigned int ihl,
-				bool sync_on_find, bool tun_outer)
-{
-	struct sfe_ipv4_connection_match *cm;
-	struct net_device *xmit_dev;
-	struct net_protocol *ipprot;
-	netdev_features_t features;
-	bool passthrough;
-	bool bridge_flow;
-	bool fast_xmit;
-	bool hw_csum;
-	__be32 src_ip;
-	__be32 dest_ip;
-	bool ret;
-	u8 ttl;
-
-	/*
-	 * Read the IP address from the iphdr, and set the src/dst ports to 0.
-	 */
-	src_ip = iph->saddr;
-	dest_ip = iph->daddr;
-	rcu_read_lock();
-
-	/*
-	 * Look for a connection match.
-	 */
-#ifdef CONFIG_NF_FLOW_COOKIE
-	cm = si->sfe_flow_cookie_table[skb->flow_cookie & SFE_FLOW_COOKIE_MASK].match;
-	if (unlikely(!cm)) {
-		cm = sfe_ipv4_find_ipv4_connection_match_rcu(si, dev, IPPROTO_ESP, src_ip, 0, dest_ip, 0);
-	}
-#else
-	cm = sfe_ipv4_find_connection_match_rcu(si, dev, IPPROTO_ESP, src_ip, 0, dest_ip, 0);
-#endif
-	if (unlikely(!cm)) {
-		rcu_read_unlock();
-		sfe_ipv4_exception_stats_inc(si, SFE_IPV4_EXCEPTION_EVENT_ESP_NO_CONNECTION);
-		DEBUG_TRACE("no connection found for esp packet\n");
-		return 0;
-	}
-
-	/*
-	 * Source interface validate.
-	 */
-	if (unlikely((cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_SRC_INTERFACE_CHECK) && (cm->match_dev != dev))) {
-		struct sfe_ipv4_connection *c = cm->connection;
-		int ret;
-
-		spin_lock_bh(&si->lock);
-		ret = sfe_ipv4_remove_connection(si, c);
-		spin_unlock_bh(&si->lock);
-
-		if (ret) {
-			sfe_ipv4_flush_connection(si, c, SFE_SYNC_REASON_FLUSH);
-		}
-		rcu_read_unlock();
-		sfe_ipv4_exception_stats_inc(si, SFE_IPV4_EXCEPTION_EVENT_INVALID_SRC_IFACE);
-		DEBUG_TRACE("flush on wrong source interface check failure\n");
-		return 0;
-	}
-
-	passthrough = cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_PASSTHROUGH;
-	bridge_flow = !!(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_BRIDGE_FLOW);
-
-	/*
-	 * If our packet has been marked as "sync on find" we can't actually
-	 * forward it in the fast path, but now that we've found an associated
-	 * connection we need sync its status before exception it to slow path unless
-	 * it is passthrough (packets not directed to DUT) packet.
-	 * TODO: revisit to ensure that pass through traffic is not bypassing firewall for fragmented cases
-	 */
-	if (unlikely(sync_on_find) && !passthrough) {
-		sfe_ipv4_sync_status(si, cm->connection, SFE_SYNC_REASON_STATS);
-		rcu_read_unlock();
-		sfe_ipv4_exception_stats_inc(si, SFE_IPV4_EXCEPTION_EVENT_ESP_IP_OPTIONS_OR_INITIAL_FRAGMENT);
-		DEBUG_TRACE("%px: sfe: sync on find\n", cm);
-		return 0;
-	}
-
-	/*
-	 * Check if skb was cloned. If it was, unshare it.
-	 */
-	if (unlikely(skb_cloned(skb))) {
-		DEBUG_TRACE("%px: skb is a cloned skb\n", skb);
-		skb = skb_unshare(skb, GFP_ATOMIC);
-		if (!skb) {
-			DEBUG_WARN("Failed to unshare the cloned skb\n");
-			rcu_read_unlock();
-			return 0;
-		}
-
-		/*
-		 * Update the iphdr pointer with the unshared skb's data area.
-		 */
-		iph = (struct iphdr *)skb->data;
-	}
-
-	/*
-	 * Enable HW csum if rx checksum is verified and xmit interface is CSUM offload capable.
-	 */
-	hw_csum = !!(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_CSUM_OFFLOAD) && (skb->ip_summed == CHECKSUM_UNNECESSARY);
-
-	/*
-	 * proto decap packet.
-	 *	Invoke the inet_protocol handler for delivery of the packet.
-	 */
-	ipprot = rcu_dereference(cm->proto);
-	if (likely(ipprot)) {
-		skb_reset_network_header(skb);
-		skb_pull(skb, ihl);
-		skb_reset_transport_header(skb);
-		xmit_dev = cm->xmit_dev;
-		skb->dev = xmit_dev;
-
-		ret = ipprot->handler(skb);
-		if (ret) {
-			rcu_read_unlock();
-			this_cpu_inc(si->stats_pcpu->packets_not_forwarded64);
-			DEBUG_TRACE("ESP handler returned error %u\n", ret);
-			return 0;
-		}
-
-		/*
-		 * Update traffic stats.
-		 */
-		atomic_inc(&cm->rx_packet_count);
-		atomic_add(len, &cm->rx_byte_count);
-
-		rcu_read_unlock();
-		this_cpu_inc(si->stats_pcpu->packets_forwarded64);
-		return 1;
-	}
-
-	/*
-	 * esp passthrough / ip local out scenarios.
-	 */
-	/*
-	 * If our packet is larger than the MTU of the transmit interface then
-	 * we can't forward it easily.
-	 */
-	if (unlikely(len > cm->xmit_dev_mtu)) {
-		sfe_ipv4_sync_status(si, cm->connection, SFE_SYNC_REASON_STATS);
-		rcu_read_unlock();
-		sfe_ipv4_exception_stats_inc(si, SFE_IPV4_EXCEPTION_EVENT_ESP_NEEDS_FRAGMENTATION);
-		DEBUG_TRACE("%px: sfe: larger than MTU\n", cm);
-		return 0;
-	}
-
-	/*
-	 * need to ensure that TTL is >=2.
-	 */
-	ttl = iph->ttl;
-	if (!bridge_flow && (ttl < 2) && passthrough) {
-		sfe_ipv4_sync_status(si, cm->connection, SFE_SYNC_REASON_STATS);
-		rcu_read_unlock();
-
-		DEBUG_TRACE("%px: sfe: TTL too low\n", skb);
-		sfe_ipv4_exception_stats_inc(si, SFE_IPV4_EXCEPTION_EVENT_ESP_SMALL_TTL);
-		return 0;
-	}
-
-	/*
-	 * decrement TTL by 1.
-	 */
-	iph->ttl = (ttl - (u8)(!bridge_flow && !tun_outer));
-
-	/*
-	 * Update DSCP
-	 */
-	if (unlikely(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_DSCP_REMARK)) {
-		iph->tos = (iph->tos & SFE_IPV4_DSCP_MASK) | cm->dscp;
-	}
-
-	/*
-	 * Replace the IP checksum.
-	 */
-	if (likely(hw_csum)) {
-		skb->ip_summed = CHECKSUM_PARTIAL;
-	} else {
-		iph->check = sfe_ipv4_gen_ip_csum(iph);
-	}
-
-	/*
-	 * Update traffic stats.
-	 */
-	atomic_inc(&cm->rx_packet_count);
-	atomic_add(len, &cm->rx_byte_count);
-
-	xmit_dev = cm->xmit_dev;
-	skb->dev = xmit_dev;
-
-	/*
-	 * write the layer - 2 header.
-	 */
-	if (likely(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_WRITE_L2_HDR)) {
-		if (unlikely(!(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_WRITE_FAST_ETH_HDR))) {
-			dev_hard_header(skb, xmit_dev, ETH_P_IP, cm->xmit_dest_mac, cm->xmit_src_mac, len);
-		} else {
-			/*
-			 * For the simple case we write this really fast.
-			 */
-			struct ethhdr *eth = (struct ethhdr *)__skb_push(skb, ETH_HLEN);
-			eth->h_proto = htons(ETH_P_IP);
-			ether_addr_copy((u8 *)eth->h_dest, (u8 *)cm->xmit_dest_mac);
-			ether_addr_copy((u8 *)eth->h_source, (u8 *)cm->xmit_src_mac);
-		}
-	}
-
-	/*
-	 * Update priority of skb
-	 */
-	if (unlikely(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_PRIORITY_REMARK)) {
-		skb->priority = cm->priority;
-	}
-
-	/*
-	 * Mark outgoing packet.
-	 */
-	if (unlikely(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_MARK)) {
-		skb->mark = cm->mark;
-	}
-
-	/*
-	 * For the first packets, check if it could got fast xmit.
-	 */
-	if (unlikely(!(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_FAST_XMIT_FLOW_CHECKED)
-				&& (cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_FAST_XMIT_DEV_ADMISSION))){
-		cm->features = netif_skb_features(skb);
-		if (likely(sfe_fast_xmit_check(skb, cm->features))) {
-			cm->flags |= SFE_IPV4_CONNECTION_MATCH_FLAG_FAST_XMIT;
-		}
-		cm->flags |= SFE_IPV4_CONNECTION_MATCH_FLAG_FAST_XMIT_FLOW_CHECKED;
-	}
-
-	features = cm->features;
-	fast_xmit = !!(cm->flags & SFE_IPV4_CONNECTION_MATCH_FLAG_FAST_XMIT);
-
-	rcu_read_unlock();
-	this_cpu_inc(si->stats_pcpu->packets_forwarded64);
-	prefetch(skb_shinfo(skb));
-
-	/*
-	 * We do per packet condition check before we could fast xmit the
-	 * packet.
-	 */
-	if (likely(fast_xmit && dev_fast_xmit(skb, xmit_dev, features))) {
-		this_cpu_inc(si->stats_pcpu->packets_fast_xmited64);
-		return 1;
-	}
-
-	/*
-	 * Mark that this packet has been fast forwarded.
-	 */
-	skb->fast_forwarded = 1;
-
-	dev_queue_xmit(skb);
-	return 1;
-}
diff --git a/qca-nss-sfe/sfe_ipv4_esp.h b/qca-nss-sfe/sfe_ipv4_esp.h
deleted file mode 100644
index f889605..0000000
--- a/qca-nss-sfe/sfe_ipv4_esp.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * sfe_ipv4_esp.h
- *	Shortcut forwarding engine - IPv4 ESP header file
- *
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-int sfe_ipv4_recv_esp(struct sfe_ipv4 *si, struct sk_buff *skb, struct net_device *dev, unsigned int len,
-			struct iphdr *iph, unsigned int ihl, bool sync_on_find, bool tun_outer);
diff --git a/qca-nss-sfe/sfe_ipv6.c b/qca-nss-sfe/sfe_ipv6.c
index 9b9539f..372d9fb 100644
--- a/qca-nss-sfe/sfe_ipv6.c
+++ b/qca-nss-sfe/sfe_ipv6.c
@@ -46,7 +46,6 @@
 #include "sfe_pppoe.h"
 #include "sfe_ipv6_tunipip6.h"
 #include "sfe_ipv6_gre.h"
-#include "sfe_ipv6_esp.h"
 
 #define sfe_ipv6_addr_copy(src, dest) memcpy((void *)(dest), (void *)(src), 16)
 
@@ -105,10 +104,6 @@ static char *sfe_ipv6_exception_events_string[SFE_IPV6_EXCEPTION_EVENT_LAST] = {
 	"GRE_IP_OPTIONS_OR_INITIAL_FRAGMENT",
 	"GRE_SMALL_TTL",
 	"GRE_NEEDS_FRAGMENTATION",
-	"ESP_NO_CONNECTION",
-	"ESP_IP_OPTIONS_OR_INITIAL_FRAGMENT",
-	"ESP_NEEDS_FRAGMENTATION",
-	"ESP_SMALL_TTL"
 };
 
 static struct sfe_ipv6 __si6;
@@ -868,10 +863,6 @@ int sfe_ipv6_recv(struct net_device *dev, struct sk_buff *skb, struct sfe_l2_inf
 		return sfe_ipv6_recv_tcp(si, skb, dev, len, iph, ihl, sync_on_find, l2_info);
 	}
 
-	if (IPPROTO_ESP == next_hdr) {
-		return sfe_ipv6_recv_esp(si, skb, dev, len, iph, ihl, sync_on_find, tun_outer);
-	}
-
 	if (IPPROTO_ICMPV6 == next_hdr) {
 		return sfe_ipv6_recv_icmp(si, skb, dev, len, iph, ihl);
 	}
@@ -1547,7 +1538,7 @@ int sfe_ipv6_create_rule(struct sfe_ipv6_rule_create_msg *msg)
 #ifdef SFE_GRE_TUN_ENABLE
 	if ((IPPROTO_GRE == tuple->protocol) && !(reply_cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_PASSTHROUGH)) {
 		rcu_read_lock();
-		reply_cm->proto = rcu_dereference(inet6_protos[IPPROTO_GRE]);
+		reply_cm->proto = rcu_dereference(inet6_protos[tuple->protocol]);
 		rcu_read_unlock();
 
 		if (unlikely(!reply_cm->proto)) {
@@ -1564,24 +1555,6 @@ int sfe_ipv6_create_rule(struct sfe_ipv6_rule_create_msg *msg)
 	}
 #endif
 
-	if ((IPPROTO_ESP == tuple->protocol) && !(reply_cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_PASSTHROUGH)) {
-		rcu_read_lock();
-		reply_cm->proto = rcu_dereference(inet6_protos[IPPROTO_ESP]);
-		rcu_read_unlock();
-
-		if (unlikely(!reply_cm->proto)) {
-			this_cpu_inc(si->stats_pcpu->connection_create_failures64);
-			spin_unlock_bh(&si->lock);
-			kfree(reply_cm);
-			kfree(original_cm);
-			kfree(c);
-			dev_put(src_dev);
-			dev_put(dest_dev);
-			DEBUG_WARN("sfe: ESP proto handler is not registered\n");
-			return -EPERM;
-		}
-	}
-
 	/*
 	 * Decapsulation path have proto set.
 	 * This is used to differentiate de/encap, and call protocol specific handler.
diff --git a/qca-nss-sfe/sfe_ipv6.h b/qca-nss-sfe/sfe_ipv6.h
index f9a33f8..9c78f1c 100644
--- a/qca-nss-sfe/sfe_ipv6.h
+++ b/qca-nss-sfe/sfe_ipv6.h
@@ -307,10 +307,6 @@ enum sfe_ipv6_exception_events {
 	SFE_IPV6_EXCEPTION_EVENT_GRE_IP_OPTIONS_OR_INITIAL_FRAGMENT,
 	SFE_IPV6_EXCEPTION_EVENT_GRE_SMALL_TTL,
 	SFE_IPV6_EXCEPTION_EVENT_GRE_NEEDS_FRAGMENTATION,
-	SFE_IPV6_EXCEPTION_EVENT_ESP_NO_CONNECTION,
-	SFE_IPV6_EXCEPTION_EVENT_ESP_IP_OPTIONS_OR_INITIAL_FRAGMENT,
-	SFE_IPV6_EXCEPTION_EVENT_ESP_NEEDS_FRAGMENTATION,
-	SFE_IPV6_EXCEPTION_EVENT_ESP_SMALL_TTL,
 	SFE_IPV6_EXCEPTION_EVENT_LAST
 };
 
diff --git a/qca-nss-sfe/sfe_ipv6_esp.c b/qca-nss-sfe/sfe_ipv6_esp.c
deleted file mode 100644
index 7a152e8..0000000
--- a/qca-nss-sfe/sfe_ipv6_esp.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * sfe_ipv6_esp.c
- *	Shortcut forwarding engine - IPv6 ESP implementation
- *
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <linux/skbuff.h>
-#include <net/protocol.h>
-#include <net/ip6_checksum.h>
-#include <linux/etherdevice.h>
-#include <linux/version.h>
-
-#include "sfe_debug.h"
-#include "sfe_api.h"
-#include "sfe.h"
-#include "sfe_flow_cookie.h"
-#include "sfe_ipv6.h"
-#include "sfe_ipv6_esp.h"
-
-/*
- * sfe_ipv6_recv_esp()
- *	Handle ESP packet receives and forwarding
- */
-int sfe_ipv6_recv_esp(struct sfe_ipv6 *si, struct sk_buff *skb, struct net_device *dev,
-				unsigned int len, struct ipv6hdr *iph, unsigned int ihl,
-				bool sync_on_find, bool tun_outer)
-{
-	struct sfe_ipv6_connection_match *cm;
-	struct sfe_ipv6_addr *src_ip;
-	struct sfe_ipv6_addr *dest_ip;
-	struct net_device *xmit_dev;
-	struct inet6_protocol *ipprot;
-	netdev_features_t features;
-	bool bridge_flow;
-	bool passthrough;
-	bool fast_xmit;
-	bool ret;
-
-	/*
-	 * Read the IP address from the iphdr, and set the src/dst ports to 0.
-	 */
-	src_ip = (struct sfe_ipv6_addr *)iph->saddr.s6_addr32;
-	dest_ip = (struct sfe_ipv6_addr *)iph->daddr.s6_addr32;
-	rcu_read_lock();
-
-	/*
-	 * Look for a connection match.
-	 */
-#ifdef CONFIG_NF_FLOW_COOKIE
-	cm = si->sfe_flow_cookie_table[skb->flow_cookie & SFE_FLOW_COOKIE_MASK].match;
-	if (unlikely(!cm)) {
-		cm = sfe_ipv6_find_connection_match_rcu(si, dev, IPPROTO_ESP, src_ip, 0, dest_ip, 0);
-	}
-#else
-	cm = sfe_ipv6_find_connection_match_rcu(si, dev, IPPROTO_ESP, src_ip, 0, dest_ip, 0);
-#endif
-	if (unlikely(!cm)) {
-		rcu_read_unlock();
-		sfe_ipv6_exception_stats_inc(si, SFE_IPV6_EXCEPTION_EVENT_ESP_NO_CONNECTION);
-
-		DEBUG_TRACE("no connection found for esp packet\n");
-		return 0;
-	}
-
-	/*
-	 * Source interface validate.
-	 */
-	if (unlikely((cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_SRC_INTERFACE_CHECK) && (cm->match_dev != dev))) {
-		struct sfe_ipv6_connection *c = cm->connection;
-		int ret;
-
-		spin_lock_bh(&si->lock);
-		ret = sfe_ipv6_remove_connection(si, c);
-		spin_unlock_bh(&si->lock);
-
-		if (ret) {
-			sfe_ipv6_flush_connection(si, c, SFE_SYNC_REASON_FLUSH);
-		}
-		rcu_read_unlock();
-		sfe_ipv6_exception_stats_inc(si, SFE_IPV6_EXCEPTION_EVENT_INVALID_SRC_IFACE);
-		DEBUG_TRACE("flush on wrong source interface check failure\n");
-		return 0;
-	}
-
-	passthrough = cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_PASSTHROUGH;
-	bridge_flow = !!(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_BRIDGE_FLOW);
-
-	/*
-	 * If our packet has beern marked as "sync on find" we can't actually
-	 * forward it in the fast path, but now that we've found an associated
-	 * connection we need sync its status before exception it to slow path. unless
-	 * it is passthrough packet.
-	 * TODO: revisit to ensure that pass through traffic is not bypassing firewall for fragmented cases
-	 */
-	if (unlikely(sync_on_find) && !passthrough) {
-		sfe_ipv6_sync_status(si, cm->connection, SFE_SYNC_REASON_STATS);
-		rcu_read_unlock();
-
-		sfe_ipv6_exception_stats_inc(si, SFE_IPV6_EXCEPTION_EVENT_ESP_IP_OPTIONS_OR_INITIAL_FRAGMENT);
-		DEBUG_TRACE("Sync on find\n");
-		return 0;
-	}
-
-	/*
-	 * Check if skb was cloned. If it was, unshare it.
-	 */
-	if (unlikely(skb_cloned(skb))) {
-		DEBUG_TRACE("%px: skb is a cloned skb\n", skb);
-		skb = skb_unshare(skb, GFP_ATOMIC);
-		if (!skb) {
-			DEBUG_WARN("Failed to unshare the cloned skb\n");
-			rcu_read_unlock();
-			return 0;
-		}
-
-		/*
-		 * Update the iphdr pointer with the unshared skb's data area.
-		 */
-		iph = (struct ipv6hdr *)skb->data;
-	}
-
-	/*
-	 * proto decap packet.
-	 *	Invoke the inet_protocol handler for delivery of the packet.
-	 */
-	ipprot = rcu_dereference(cm->proto);
-	if (likely(ipprot)) {
-		skb_reset_network_header(skb);
-		skb_pull(skb, ihl);
-		skb_reset_transport_header(skb);
-		xmit_dev = cm->xmit_dev;
-		skb->dev = xmit_dev;
-
-		ret = ipprot->handler(skb);
-		if (ret) {
-			rcu_read_unlock();
-			this_cpu_inc(si->stats_pcpu->packets_not_forwarded64);
-			DEBUG_TRACE("ESP handler returned error %u\n", ret);
-			return 0;
-		}
-
-		rcu_read_unlock();
-		this_cpu_inc(si->stats_pcpu->packets_forwarded64);
-		return 1;
-	}
-
-	/*
-	 * esp passthrough / ip local out scenarios
-	 */
-	/*
-	 * If our packet is larger than the MTU of the transmit interface then
-	 * we can't forward it easily.
-	 */
-	if (unlikely(len > cm->xmit_dev_mtu)) {
-		sfe_ipv6_sync_status(si, cm->connection, SFE_SYNC_REASON_STATS);
-		rcu_read_unlock();
-
-		sfe_ipv6_exception_stats_inc(si, SFE_IPV6_EXCEPTION_EVENT_ESP_NEEDS_FRAGMENTATION);
-		DEBUG_TRACE("Larger than MTU\n");
-		return 0;
-	}
-
-	/*
-	 * need to ensure that TTL is >=2.
-	 */
-	if (!bridge_flow && (iph->hop_limit < 2) && passthrough) {
-		sfe_ipv6_sync_status(si, cm->connection, SFE_SYNC_REASON_STATS);
-		rcu_read_unlock();
-
-		sfe_ipv6_exception_stats_inc(si, SFE_IPV6_EXCEPTION_EVENT_ESP_SMALL_TTL);
-		DEBUG_TRACE("hop_limit too low\n");
-		return 0;
-	}
-
-	/*
-	 * decrement TTL by 1.
-	 */
-	iph->hop_limit = iph->hop_limit - (u8)(!bridge_flow && !tun_outer);
-
-	/*
-	 * Update DSCP
-	 */
-	if (unlikely(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_DSCP_REMARK)) {
-		sfe_ipv6_change_dsfield(iph, cm->dscp);
-	}
-
-	/*
-	 * Update traffic stats.
-	 */
-	atomic_inc(&cm->rx_packet_count);
-	atomic_add(len, &cm->rx_byte_count);
-
-	xmit_dev = cm->xmit_dev;
-	skb->dev = xmit_dev;
-
-	/*
-	 * write the layer - 2 header.
-	 */
-	if (likely(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_WRITE_L2_HDR)) {
-		if (unlikely(!(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_WRITE_FAST_ETH_HDR))) {
-			dev_hard_header(skb, xmit_dev, ETH_P_IPV6, cm->xmit_dest_mac, cm->xmit_src_mac, len);
-		} else {
-			/*
-			 * For the simple case we write this really fast.
-			 */
-			struct ethhdr *eth = (struct ethhdr *)__skb_push(skb, ETH_HLEN);
-			eth->h_proto = htons(ETH_P_IPV6);
-			ether_addr_copy((u8 *)eth->h_dest, (u8 *)cm->xmit_dest_mac);
-			ether_addr_copy((u8 *)eth->h_source, (u8 *)cm->xmit_src_mac);
-		}
-	}
-
-	/*
-	 * Update priority of skb.
-	 */
-	if (unlikely(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_PRIORITY_REMARK)) {
-		skb->priority = cm->priority;
-	}
-
-	/*
-	 * Mark outgoing packet.
-	 */
-	if (unlikely(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_MARK)) {
-		skb->mark = cm->mark;
-	}
-
-	/*
-	 * For the first packets, check if it could got fast xmit.
-	 */
-	if (unlikely(!(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_FAST_XMIT_FLOW_CHECKED)
-				&& (cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_FAST_XMIT_DEV_ADMISSION))){
-		cm->features = netif_skb_features(skb);
-		if (likely(sfe_fast_xmit_check(skb, cm->features))) {
-			cm->flags |= SFE_IPV6_CONNECTION_MATCH_FLAG_FAST_XMIT;
-		}
-		cm->flags |= SFE_IPV6_CONNECTION_MATCH_FLAG_FAST_XMIT_FLOW_CHECKED;
-	}
-
-	features = cm->features;
-	fast_xmit = !!(cm->flags & SFE_IPV6_CONNECTION_MATCH_FLAG_FAST_XMIT);
-
-	rcu_read_unlock();
-	this_cpu_inc(si->stats_pcpu->packets_forwarded64);
-	prefetch(skb_shinfo(skb));
-
-	/*
-	 * We do per packet condition check before we could fast xmit the
-	 * packet.
-	 */
-	if (likely(fast_xmit && dev_fast_xmit(skb, xmit_dev, features))) {
-		this_cpu_inc(si->stats_pcpu->packets_fast_xmited64);
-		return 1;
-	}
-
-	/*
-	 * Mark that this packet has been fast forwarded.
-	 */
-	skb->fast_forwarded = 1;
-
-	dev_queue_xmit(skb);
-	return 1;
-}
diff --git a/qca-nss-sfe/sfe_ipv6_esp.h b/qca-nss-sfe/sfe_ipv6_esp.h
deleted file mode 100644
index 2870670..0000000
--- a/qca-nss-sfe/sfe_ipv6_esp.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * sfe_ipv6_esp.h
- *	Shortcut forwarding engine - IPv6 ESP header file
- *
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-int sfe_ipv6_recv_esp(struct sfe_ipv6 *si, struct sk_buff *skb, struct net_device *dev, unsigned int len,
-			struct ipv6hdr *iph, unsigned int ihl, bool sync_on_find, bool tun_outer);
-- 
2.42.0.869.gea05f2083d-goog

