From 0008754a82193a1e94cd72550cb01cd2229ba744 Mon Sep 17 00:00:00 2001 From: tishipp Date: Fri, 12 Aug 2022 21:38:49 +0900 Subject: [PATCH] add DS-Lite offloading --- package/qca/qca-nss-ecm/Makefile | 16 ++++ ...07e-qca-nss-clients-iptunnel-support.patch | 77 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 target/linux/ipq806x/patches-5.10/999-07e-qca-nss-clients-iptunnel-support.patch diff --git a/package/qca/qca-nss-ecm/Makefile b/package/qca/qca-nss-ecm/Makefile index 8234b30ef5..4f424ec0ce 100644 --- a/package/qca/qca-nss-ecm/Makefile +++ b/package/qca/qca-nss-ecm/Makefile @@ -211,6 +211,22 @@ ECM_MAKE_OPTS+=ECM_INTERFACE_OVS_BRIDGE_ENABLE=y \ EXTRA_CFLAGS+= -I$(STAGING_DIR)/usr/include/qca-ovsmgr endif +ifneq ($(CONFIG_PACKAGE_kmod-ipsec),) +ECM_MAKE_OPTS+=ECM_INTERFACE_IPSEC_ENABLE=y +endif + +ifneq ($(CONFIG_PACKAGE_kmod-pppol2tp),) +ECM_MAKE_OPTS+=ECM_INTERFACE_L2TPV2_ENABLE=y +endif + +ifneq ($(CONFIG_PACKAGE_kmod-sit),) +ECM_MAKE_OPTS+=ECM_INTERFACE_SIT_ENABLE=y +endif + +ifneq ($(CONFIG_PACKAGE_kmod-ip6-tunnel),) +ECM_MAKE_OPTS+=ECM_INTERFACE_TUNIPIP6_ENABLE=y +endif + # Keeping default as ipq806x for branches that does not have subtarget framework ifeq ($(CONFIG_TARGET_ipq),y) subtarget:=$(SUBTARGET) diff --git a/target/linux/ipq806x/patches-5.10/999-07e-qca-nss-clients-iptunnel-support.patch b/target/linux/ipq806x/patches-5.10/999-07e-qca-nss-clients-iptunnel-support.patch new file mode 100644 index 0000000000..7422ba4193 --- /dev/null +++ b/target/linux/ipq806x/patches-5.10/999-07e-qca-nss-clients-iptunnel-support.patch @@ -0,0 +1,77 @@ +--- a/include/net/ip6_tunnel.h ++++ b/include/net/ip6_tunnel.h +@@ -36,6 +36,7 @@ struct __ip6_tnl_parm { + __u8 proto; /* tunnel protocol */ + __u8 encap_limit; /* encapsulation limit for tunnel */ + __u8 hop_limit; /* hop limit for tunnel */ ++ __u8 draft03; /* FMR using draft03 of map-e - QCA NSS Clients Support */ + bool collect_md; + __be32 flowinfo; /* traffic class and flowlabel for tunnel */ + __u32 flags; /* tunnel flags */ +--- a/include/net/ip_tunnels.h ++++ b/include/net/ip_tunnels.h +@@ -525,4 +525,9 @@ static inline void ip_tunnel_info_opts_s + + #endif /* CONFIG_INET */ + ++/* QCA NSS Clients Support - Start */ ++void ipip6_update_offload_stats(struct net_device *dev, void *ptr); ++void ip6_update_offload_stats(struct net_device *dev, void *ptr); ++/* QCA NSS Clients Support - End */ ++ + #endif /* __NET_IP_TUNNELS_H */ +--- a/net/ipv6/ip6_tunnel.c ++++ b/net/ipv6/ip6_tunnel.c +@@ -2392,6 +2392,26 @@ nla_put_failure: + return -EMSGSIZE; + } + ++/* QCA NSS Client Support - Start */ ++/* ++ * Update offload stats ++ */ ++void ip6_update_offload_stats(struct net_device *dev, void *ptr) ++{ ++ struct pcpu_sw_netstats *tstats = per_cpu_ptr(dev->tstats, 0); ++ const struct pcpu_sw_netstats *offload_stats = ++ (struct pcpu_sw_netstats *)ptr; ++ ++ u64_stats_update_begin(&tstats->syncp); ++ tstats->tx_packets += offload_stats->tx_packets; ++ tstats->tx_bytes += offload_stats->tx_bytes; ++ tstats->rx_packets += offload_stats->rx_packets; ++ tstats->rx_bytes += offload_stats->rx_bytes; ++ u64_stats_update_end(&tstats->syncp); ++} ++EXPORT_SYMBOL(ip6_update_offload_stats); ++/* QCA NSS Client Support - End */ ++ + struct net *ip6_tnl_get_link_net(const struct net_device *dev) + { + struct ip6_tnl *tunnel = netdev_priv(dev); +--- a/net/ipv6/sit.c ++++ b/net/ipv6/sit.c +@@ -1741,6 +1741,23 @@ nla_put_failure: + return -EMSGSIZE; + } + ++/* QCA NSS Clients Support - Start */ ++void ipip6_update_offload_stats(struct net_device *dev, void *ptr) ++{ ++ struct pcpu_sw_netstats *tstats = per_cpu_ptr(dev->tstats, 0); ++ const struct pcpu_sw_netstats *offload_stats = ++ (struct pcpu_sw_netstats *)ptr; ++ ++ u64_stats_update_begin(&tstats->syncp); ++ tstats->tx_packets += offload_stats->tx_packets; ++ tstats->tx_bytes += offload_stats->tx_bytes; ++ tstats->rx_packets += offload_stats->rx_packets; ++ tstats->rx_bytes += offload_stats->rx_bytes; ++ u64_stats_update_end(&tstats->syncp); ++} ++EXPORT_SYMBOL(ipip6_update_offload_stats); ++/* QCA NSS Clients Support - End */ ++ + static const struct nla_policy ipip6_policy[IFLA_IPTUN_MAX + 1] = { + [IFLA_IPTUN_LINK] = { .type = NLA_U32 }, + [IFLA_IPTUN_LOCAL] = { .type = NLA_U32 },