From 525219d244feef00d80234acd579d5e17db06918 Mon Sep 17 00:00:00 2001 From: suyuan <175338101@qq.com> Date: Tue, 13 Sep 2022 17:27:35 +0800 Subject: [PATCH] fix qsc --- qca/nss-firmware/Makefile | 73 +++++++ qca/qca-nss-cfi/Makefile | 71 ++++++ .../patches/100-remove-noise-logs.patch | 30 +++ qca/qca-nss-clients/Makefile | 115 ++++++++++ qca/qca-nss-clients/files/qca-nss-ipsec | 92 ++++++++ qca/qca-nss-clients/files/qca-nss-mirred.init | 28 +++ qca/qca-nss-clients/files/qca-nss-ovpn.init | 69 ++++++ qca/qca-nss-crypto/Makefile | 62 ++++++ qca/qca-nss-dp/Makefile | 54 +++++ qca/qca-nss-drv/Makefile | 109 +++++++++ qca/qca-nss-drv/files/qca-nss-drv.conf | 6 + qca/qca-nss-drv/files/qca-nss-drv.debug | 26 +++ qca/qca-nss-drv/files/qca-nss-drv.hotplug | 70 ++++++ qca/qca-nss-drv/files/qca-nss-drv.init | 50 +++++ qca/qca-nss-drv/files/qca-nss-drv.sysctl | 3 + qca/qca-nss-ecm/Makefile | 90 ++++++++ qca/qca-nss-ecm/files/ecm_dump.sh | 95 ++++++++ qca/qca-nss-ecm/files/on-demand-down | 6 + qca/qca-nss-ecm/files/qca-nss-ecm.defaults | 28 +++ qca/qca-nss-ecm/files/qca-nss-ecm.firewall | 18 ++ qca/qca-nss-ecm/files/qca-nss-ecm.init | 139 ++++++++++++ qca/qca-nss-ecm/files/qca-nss-ecm.sysctl | 2 + qca/qca-nss-ecm/files/qca-nss-ecm.uci | 2 + .../patches/200-resolve-high-load.patch | 61 ++++++ qca/qca-nss-fw-eip/Makefile | 25 +++ qca/qca-nss-fw-eip/files/ipq60xx/ifpp.bin | Bin 0 -> 12272 bytes qca/qca-nss-fw-eip/files/ipq60xx/ipue.bin | Bin 0 -> 6116 bytes qca/qca-nss-fw-eip/files/ipq60xx/ofpp.bin | Bin 0 -> 6128 bytes qca/qca-nss-fw-eip/files/ipq60xx/opue.bin | Bin 0 -> 4068 bytes qca/qca-nss-fw-eip/files/ipq807x/ifpp.bin | Bin 0 -> 12272 bytes qca/qca-nss-fw-eip/files/ipq807x/ipue.bin | Bin 0 -> 6116 bytes qca/qca-nss-fw-eip/files/ipq807x/ofpp.bin | Bin 0 -> 6128 bytes qca/qca-nss-fw-eip/files/ipq807x/opue.bin | Bin 0 -> 4068 bytes qca/qca-ssdk-shell/Makefile | 48 ++++ qca/qca-ssdk/Makefile | 98 +++++++++ qca/qca-ssdk/files/qca-ssdk | 206 ++++++++++++++++++ 36 files changed, 1676 insertions(+) create mode 100644 qca/nss-firmware/Makefile create mode 100644 qca/qca-nss-cfi/Makefile create mode 100644 qca/qca-nss-cfi/patches/100-remove-noise-logs.patch create mode 100644 qca/qca-nss-clients/Makefile create mode 100644 qca/qca-nss-clients/files/qca-nss-ipsec create mode 100644 qca/qca-nss-clients/files/qca-nss-mirred.init create mode 100644 qca/qca-nss-clients/files/qca-nss-ovpn.init create mode 100644 qca/qca-nss-crypto/Makefile create mode 100644 qca/qca-nss-dp/Makefile create mode 100644 qca/qca-nss-drv/Makefile create mode 100644 qca/qca-nss-drv/files/qca-nss-drv.conf create mode 100644 qca/qca-nss-drv/files/qca-nss-drv.debug create mode 100644 qca/qca-nss-drv/files/qca-nss-drv.hotplug create mode 100644 qca/qca-nss-drv/files/qca-nss-drv.init create mode 100644 qca/qca-nss-drv/files/qca-nss-drv.sysctl create mode 100644 qca/qca-nss-ecm/Makefile create mode 100644 qca/qca-nss-ecm/files/ecm_dump.sh create mode 100644 qca/qca-nss-ecm/files/on-demand-down create mode 100644 qca/qca-nss-ecm/files/qca-nss-ecm.defaults create mode 100644 qca/qca-nss-ecm/files/qca-nss-ecm.firewall create mode 100644 qca/qca-nss-ecm/files/qca-nss-ecm.init create mode 100644 qca/qca-nss-ecm/files/qca-nss-ecm.sysctl create mode 100644 qca/qca-nss-ecm/files/qca-nss-ecm.uci create mode 100644 qca/qca-nss-ecm/patches/200-resolve-high-load.patch create mode 100644 qca/qca-nss-fw-eip/Makefile create mode 100644 qca/qca-nss-fw-eip/files/ipq60xx/ifpp.bin create mode 100644 qca/qca-nss-fw-eip/files/ipq60xx/ipue.bin create mode 100644 qca/qca-nss-fw-eip/files/ipq60xx/ofpp.bin create mode 100644 qca/qca-nss-fw-eip/files/ipq60xx/opue.bin create mode 100644 qca/qca-nss-fw-eip/files/ipq807x/ifpp.bin create mode 100644 qca/qca-nss-fw-eip/files/ipq807x/ipue.bin create mode 100644 qca/qca-nss-fw-eip/files/ipq807x/ofpp.bin create mode 100644 qca/qca-nss-fw-eip/files/ipq807x/opue.bin create mode 100644 qca/qca-ssdk-shell/Makefile create mode 100644 qca/qca-ssdk/Makefile create mode 100644 qca/qca-ssdk/files/qca-ssdk diff --git a/qca/nss-firmware/Makefile b/qca/nss-firmware/Makefile new file mode 100644 index 000000000..b56a3652f --- /dev/null +++ b/qca/nss-firmware/Makefile @@ -0,0 +1,73 @@ +# +# Copyright (C) 2021 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=nss-firmware +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2021-09-14 +PKG_SOURCE_URL:=https://github.com/quic/qca-sdk-nss-fw.git +PKG_SOURCE_VERSION:=b06171cb0d14360c90a4b8f9f835dc1c4647ea07 +PKG_MIRROR_HASH:=e851d4f6af8aaccbc34a05bc007991a88287913f17c5d9f0172a00745aed6e48 + +PKG_LICENSE_FILES:=LICENSE.md + +PKG_MAINTAINER:=Robert Marko + +include $(INCLUDE_DIR)/package.mk + +VERSION_PATH=$(PKG_BUILD_DIR)/QCA_Networking_2021.SPF_11.4/CS + +define Package/nss-firmware-default + SECTION:=firmware + CATEGORY:=Firmware + URL:=$(PKG_SOURCE_URL) +endef + +define Package/nss-firmware-ipq6018 +$(Package/nss-firmware-default) + DEPENDS:=@TARGET_ipq60xx + TITLE:=NSS firmware for IPQ6018 devices + NSS_ARCHIVE:=$(VERSION_PATH)/IPQ6018.ATH.11.4/BIN-NSS.CP.11.4.0.5-5-R.tar.bz2 +endef + +define Package/nss-firmware-ipq8074 +$(Package/nss-firmware-default) + DEPENDS:=@TARGET_ipq807x + TITLE:=NSS firmware for IPQ8074 devices + NSS_ARCHIVE:=$(VERSION_PATH)/IPQ8074.ATH.11.4/BIN-NSS.HK.11.4.0.5-5-R.tar.bz2 +endef + +define Build/Compile + true +endef + +define Package/nss-firmware-ipq6018/install + mkdir -p $(PKG_BUILD_DIR)/IPQ6018 + $(TAR) -C $(PKG_BUILD_DIR)/IPQ6018 -xf $(NSS_ARCHIVE) --strip-components=1 + $(INSTALL_DIR) $(1)/lib/firmware/ + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/IPQ6018/retail_router0.bin \ + $(1)/lib/firmware/qca-nss0.bin +endef + +define Package/nss-firmware-ipq8074/install + mkdir -p $(PKG_BUILD_DIR)/IPQ8074 + $(TAR) -C $(PKG_BUILD_DIR)/IPQ8074 -xf $(NSS_ARCHIVE) --strip-components=1 + $(INSTALL_DIR) $(1)/lib/firmware/ + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/IPQ8074/retail_router0.bin \ + $(1)/lib/firmware/qca-nss0.bin + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/IPQ8074/retail_router1.bin \ + $(1)/lib/firmware/qca-nss1.bin +endef + +$(eval $(call BuildPackage,nss-firmware-ipq6018)) +$(eval $(call BuildPackage,nss-firmware-ipq8074)) diff --git a/qca/qca-nss-cfi/Makefile b/qca/qca-nss-cfi/Makefile new file mode 100644 index 000000000..64f7bd7ab --- /dev/null +++ b/qca/qca-nss-cfi/Makefile @@ -0,0 +1,71 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=qca-nss-cfi +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2021-03-22 +PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/nss-cfi +PKG_SOURCE_VERSION:=73f2e5f5bf93cc244036ce5641faf9f859692cdf +PKG_MIRROR_HASH:=8c8edc9b8d8c68fdd14640152245013a93c123957b6b338c06f266f6c9db8cbd + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +# v1.0 is for Akronite +# v2.0 is for Hawkeye/Cypress/Maple +ifneq (, $(findstring $(BOARD), ipq50xx ipq60xx ipq807x)) + CFI_OCF_DIR:=ocf/v2.0 + CFI_CRYPTOAPI_DIR:=cryptoapi/v2.0 +else + CFI_CRYPTOAPI_DIR:=cryptoapi/v1.1 + CFI_OCF_DIR:=ocf/v1.0 + CFI_IPSEC_DIR:=ipsec/v1.0 +endif + +define KernelPackage/qca-nss-cfi-cryptoapi + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + DEPENDS:=@TARGET_ipq60xx +kmod-crypto-authenc +kmod-qca-nss-crypto + TITLE:=Kernel driver for NSS cfi + FILES:=$(PKG_BUILD_DIR)/$(CFI_CRYPTOAPI_DIR)/qca-nss-cfi-cryptoapi.ko + AUTOLOAD:=$(call AutoLoad,59,qca-nss-cfi-cryptoapi) +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include/qca-nss-cfi + $(CP) $(PKG_BUILD_DIR)/$(CFI_CRYPTOAPI_DIR)/../exports/* $(1)/usr/include/qca-nss-cfi + $(CP) $(PKG_BUILD_DIR)/include/* $(1)/usr/include/qca-nss-cfi +endef + +define KernelPackage/qca-nss-cfi/Description +This package contains a NSS cfi driver for QCA chipset +endef + +EXTRA_CFLAGS+= \ + -DCONFIG_NSS_DEBUG_LEVEL=4 \ + -I$(LINUX_DIR)/crypto/ocf \ + -I$(STAGING_DIR)/usr/include/qca-nss-crypto \ + -I$(STAGING_DIR)/usr/include/crypto \ + -I$(STAGING_DIR)/usr/include/qca-nss-drv + +ifneq (, $(findstring $(BOARD), ipq50xx ipq60xx ipq807x)) +EXTRA_CFLAGS+= -I$(STAGING_DIR)/usr/include/qca-nss-clients +endif + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + CFI_CRYPTOAPI_DIR=$(CFI_CRYPTOAPI_DIR) \ + CFI_IPSEC_DIR=$(CFI_IPSEC_DIR) \ + CFI_OCF_DIR=$(CFI_OCF_DIR) \ + $(KERNEL_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)" \ + SoC="$(BOARD)_64" \ + "cryptoapi=y" \ + modules +endef + +$(eval $(call KernelPackage,qca-nss-cfi-cryptoapi)) diff --git a/qca/qca-nss-cfi/patches/100-remove-noise-logs.patch b/qca/qca-nss-cfi/patches/100-remove-noise-logs.patch new file mode 100644 index 000000000..085aeaf24 --- /dev/null +++ b/qca/qca-nss-cfi/patches/100-remove-noise-logs.patch @@ -0,0 +1,30 @@ +--- a/cryptoapi/v2.0/nss_cryptoapi_ahash.c ++++ b/cryptoapi/v2.0/nss_cryptoapi_ahash.c +@@ -449,9 +449,12 @@ int nss_cryptoapi_ahash_digest(struct ahash_request *req) + int nss_cryptoapi_ahash_export(struct ahash_request *req, void *out) + { + struct nss_cryptoapi_ctx *ctx __attribute__((unused)) = crypto_tfm_ctx(req->base.tfm); ++ struct nss_cryptoapi_req_ctx *rctx = ahash_request_ctx(req); ++ struct nss_cryptoapi_req_ctx *state = out; ++ ++ *state = *rctx; + +- nss_cfi_warn("%px: ahash .export is not supported", ctx); +- return -ENOSYS; ++ return 0; + }; + + /* +@@ -464,7 +467,10 @@ int nss_cryptoapi_ahash_export(struct ahash_request *req, void *out) + int nss_cryptoapi_ahash_import(struct ahash_request *req, const void *in) + { + struct nss_cryptoapi_ctx *ctx __attribute__((unused)) = crypto_tfm_ctx(req->base.tfm); ++ struct nss_cryptoapi_req_ctx *rctx = ahash_request_ctx(req); ++ const struct nss_cryptoapi_req_ctx *state = in; ++ ++ *rctx = *state; + +- nss_cfi_warn("%px: ahash .import is not supported", ctx); +- return -ENOSYS; ++ return 0; + } diff --git a/qca/qca-nss-clients/Makefile b/qca/qca-nss-clients/Makefile new file mode 100644 index 000000000..2d9b82644 --- /dev/null +++ b/qca/qca-nss-clients/Makefile @@ -0,0 +1,115 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=qca-nss-clients +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2021-12-01 +PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/nss-clients +PKG_SOURCE_VERSION:=24fdeb3357cf4135f43add427e2b318139b6a1b9 +PKG_MIRROR_HASH:=c46b9cdf4bbd394507a92dc39f9183735a61c7ccdfed38832c525ed6d2381eb6 + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/qca-nss-drv-pppoe + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + TITLE:=Kernel driver for NSS PPPoE connection manager + DEPENDS:=@TARGET_ipq60xx +kmod-bonding +kmod-pppoe +kmod-qca-nss-drv + FILES:=$(PKG_BUILD_DIR)/pppoe/qca-nss-pppoe.ko + AUTOLOAD:=$(call AutoLoad,51,qca-nss-pppoe) +endef + +define KernelPackage/qca-nss-drv-pppoe/Description +Kernel modules for NSS connection manager - Support for PPPoE +endef + +define KernelPackage/qca-nss-drv-bridge-mgr + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + TITLE:=Kernel driver for NSS bridge manager + DEPENDS:=@TARGET_ipq60xx +kmod-bonding +kmod-qca-nss-drv-vlan-mgr + FILES:=$(PKG_BUILD_DIR)/bridge/qca-nss-bridge-mgr.ko + AUTOLOAD:=$(call AutoLoad,51,qca-nss-bridge-mgr) +endef + +define KernelPackage/qca-nss-drv-bridge-mgr/Description +Kernel modules for NSS bridge manager +endef + +define KernelPackage/qca-nss-drv-vlan-mgr + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + TITLE:=Kernel driver for NSS vlan manager + DEPENDS:=@TARGET_ipq60xx +kmod-bonding +kmod-qca-nss-drv + FILES:=$(PKG_BUILD_DIR)/vlan/qca-nss-vlan.ko + AUTOLOAD:=$(call AutoLoad,51,qca-nss-vlan) +endef + +define KernelPackage/qca-nss-drv-vlan-mgr/Description +Kernel modules for NSS vlan manager +endef + +define KernelPackage/qca-nss-drv-wifi-meshmgr + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + DEPENDS:=@TARGET_ipq60xx +kmod-qca-nss-drv + TITLE:=NSS WiFi-Mesh Manager for QCA NSS driver + FILES:=$(PKG_BUILD_DIR)/wifi_meshmgr/qca-nss-wifi-meshmgr.ko + AUTOLOAD:=$(call AutoLoad,51,qca-nss-wifi-meshmgr) +endef + +define KernelPackage/qca-nss-drv-wifi-meshmgr/Description +Kernel module for NSS WiFi Mesh manager +endef + +EXTRA_CFLAGS+= \ + -I$(STAGING_DIR)/usr/include/qca-nss-cfi \ + -I$(STAGING_DIR)/usr/include/qca-nss-crypto \ + -I$(STAGING_DIR)/usr/include/qca-nss-drv \ + -I$(STAGING_DIR)/usr/include/qca-nss-gmac \ + -I$(STAGING_DIR)/usr/include/qca-ssdk \ + -I$(STAGING_DIR)/usr/include/qca-ssdk/fal \ + -I$(STAGING_DIR)/usr/include/nat46 + +ifneq ($(CONFIG_PACKAGE_kmod-qca-nss-drv-pppoe),) +MAKE_OPTS+=pppoe=y +endif + +ifneq ($(CONFIG_PACKAGE_kmod-qca-nss-drv-vlan-mgr),) +MAKE_OPTS+=vlan-mgr=y +endif + +ifneq ($(CONFIG_PACKAGE_kmod-qca-nss-drv-bridge-mgr),) +MAKE_OPTS+=bridge-mgr=y +endif + +ifneq ($(CONFIG_PACKAGE_kmod-qca-nss-drv-wifi-meshmgr),) +MAKE_OPTS+=wifi-meshmgr=y +endif + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include/qca-nss-clients + $(CP) $(PKG_BUILD_DIR)/netlink/include/* $(1)/usr/include/qca-nss-clients/ + $(CP) $(PKG_BUILD_DIR)/exports/* $(1)/usr/include/qca-nss-clients/ +endef + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" $(strip $(MAKE_OPTS)) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + $(KERNEL_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)" \ + SoC="$(BOARD)_64" \ + modules +endef + +$(eval $(call KernelPackage,qca-nss-drv-pppoe)) +$(eval $(call KernelPackage,qca-nss-drv-vlan-mgr)) +$(eval $(call KernelPackage,qca-nss-drv-bridge-mgr)) +$(eval $(call KernelPackage,qca-nss-drv-wifi-meshmgr)) diff --git a/qca/qca-nss-clients/files/qca-nss-ipsec b/qca/qca-nss-clients/files/qca-nss-ipsec new file mode 100644 index 000000000..bb202e8e7 --- /dev/null +++ b/qca/qca-nss-clients/files/qca-nss-ipsec @@ -0,0 +1,92 @@ +#!/bin/sh /etc/rc.common +# +# Copyright (c) 2018-2019 The Linux Foundation. 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. + +NSS_IPSEC_LOG_FILE=/tmp/.nss_ipsec_log +NSS_IPSEC_LOG_STR_ECM="ECM_Loaded" + +ecm_load () { + if [ ! -d /sys/module/ecm ]; then + /etc/init.d/qca-nss-ecm start + if [ -d /sys/module/ecm ]; then + echo ${NSS_IPSEC_LOG_STR_ECM} >> ${NSS_IPSEC_LOG_FILE} + fi + fi +} + +ecm_unload () { + if [ -f /tmp/.nss_ipsec_log ]; then + str=`grep ${NSS_IPSEC_LOG_STR_ECM} ${NSS_IPSEC_LOG_FILE}` + if [[ $str == ${NSS_IPSEC_LOG_STR_ECM} ]]; then + /etc/init.d/qca-nss-ecm stop + `sed 's/${NSS_IPSEC_LOG_STR_ECM}/ /g' $NSS_IPSEC_LOG_FILE > $NSS_IPSEC_LOG_FILE` + fi + fi +} + +ecm_disable() { + + if [ ! -d /sys/module/ecm ]; then + return; + fi + + echo 1 > /sys/kernel/debug/ecm/front_end_ipv4_stop + echo 1 > /sys/kernel/debug/ecm/front_end_ipv6_stop + echo 1 > /sys/kernel/debug/ecm/ecm_db/defunct_all + sleep 2 +} + +ecm_enable() { + if [ ! -d /sys/module/ecm ]; then + return; + fi + + echo 0 > /sys/kernel/debug/ecm/ecm_db/defunct_all + echo 0 > /sys/kernel/debug/ecm/front_end_ipv4_stop + echo 0 > /sys/kernel/debug/ecm/front_end_ipv6_stop +} + +start() { + ecm_load + + local kernel_version=$(uname -r) + + insmod /lib/modules/${kernel_version}/qca-nss-ipsec-klips.ko + if [ "$?" -gt 0 ]; then + echo "Failed to load plugin. Please start ecm if not done already" + ecm_enable + return + fi + + /etc/init.d/ipsec start + sleep 2 + ipsec eroute + + ecm_enable +} + +stop() { + ecm_disable + + /etc/init.d/ipsec stop + rmmod qca-nss-ipsec-klips + + ecm_unload +} + +restart() { + stop + start +} diff --git a/qca/qca-nss-clients/files/qca-nss-mirred.init b/qca/qca-nss-clients/files/qca-nss-mirred.init new file mode 100644 index 000000000..1f931f090 --- /dev/null +++ b/qca/qca-nss-clients/files/qca-nss-mirred.init @@ -0,0 +1,28 @@ +#!/bin/sh /etc/rc.common + +########################################################################### +# Copyright (c) 2019, The Linux Foundation. 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. +########################################################################### + +restart() { + rmmod act_nssmirred.ko + insmod act_nssmirred.ko +} + +start() { + insmod act_nssmirred.ko +} + +stop() { + rmmod act_nssmirred.ko +} diff --git a/qca/qca-nss-clients/files/qca-nss-ovpn.init b/qca/qca-nss-clients/files/qca-nss-ovpn.init new file mode 100644 index 000000000..622e295ee --- /dev/null +++ b/qca/qca-nss-clients/files/qca-nss-ovpn.init @@ -0,0 +1,69 @@ +#!/bin/sh /etc/rc.common + +########################################################################### +# Copyright (c) 2019, The Linux Foundation. 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. +########################################################################### + +ecm_disable() { + if [ ! -d /sys/module/ecm ]; then + return + fi + + echo 1 > /sys/kernel/debug/ecm/front_end_ipv4_stop + echo 1 > /sys/kernel/debug/ecm/front_end_ipv6_stop + echo 1 > /sys/kernel/debug/ecm/ecm_db/defunct_all + sleep 2 +} + +ecm_enable() { + if [ ! -d /sys/module/ecm ]; then + return + fi + + echo 0 > /sys/kernel/debug/ecm/ecm_db/defunct_all + echo 0 > /sys/kernel/debug/ecm/front_end_ipv4_stop + echo 0 > /sys/kernel/debug/ecm/front_end_ipv6_stop +} + +restart() { + ecm_disable + + /etc/init.d/openvpn stop + rmmod qca-nss-ovpn-link + rmmod qca-nss-ovpn-mgr + + insmod qca-nss-ovpn-mgr + insmod qca-nss-ovpn-link + + if [ "$?" -gt 0 ]; then + echo "Failed to load plugin. Please start ecm if not done already" + ecm_enable + return + fi + + ecm_enable +} + +start() { + restart +} + +stop() { + ecm_disable + + /etc/init.d/openvpn stop + rmmod qca-nss-ovpn-link + rmmod qca-nss-ovpn-mgr + + ecm_enable +} diff --git a/qca/qca-nss-crypto/Makefile b/qca/qca-nss-crypto/Makefile new file mode 100644 index 000000000..7b4baec25 --- /dev/null +++ b/qca/qca-nss-crypto/Makefile @@ -0,0 +1,62 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=qca-nss-crypto +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2021-03-22 +PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/nss-crypto +PKG_SOURCE_VERSION:=2271a3a66f7e8284d42a9e787ddec6f24a1d2e15 +PKG_MIRROR_HASH:=7e70ffa2cbddc3830376f25047575db8867f2027b2ae3a7276d87ead3e95eb80 + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +# v1.0 is for Akronite +# v2.0 is for Hawkeye/Cypress/Maple +ifneq (, $(findstring $(BOARD), ipq50xx ipq60xx ipq807x)) +NSS_CRYPTO_DIR:=v2.0 +else +NSS_CRYPTO_DIR:=v1.0 +endif + +define KernelPackage/qca-nss-crypto + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + TITLE:=Kernel driver for NSS crypto driver + FILES:= \ + $(PKG_BUILD_DIR)/$(NSS_CRYPTO_DIR)/src/qca-nss-crypto.ko \ + $(PKG_BUILD_DIR)/$(NSS_CRYPTO_DIR)/tool/qca-nss-crypto-tool.ko + DEPENDS:=@TARGET_ipq60xx +kmod-qca-nss-drv + AUTOLOAD:=$(call AutoLoad,52,qca-nss-crypto) +endef + +define KernelPackage/qca-nss-crypto/Description +This package contains a NSS crypto driver for QCA chipset +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include/qca-nss-crypto + $(CP) $(PKG_BUILD_DIR)/$(NSS_CRYPTO_DIR)/include/* $(1)/usr/include/qca-nss-crypto +endef + +EXTRA_CFLAGS+= \ + -DCONFIG_NSS_DEBUG_LEVEL=4 \ + -I$(STAGING_DIR)/usr/include/qca-nss-crypto \ + -I$(STAGING_DIR)/usr/include/qca-nss-drv \ + -I$(PKG_BUILD_DIR)/$(NSS_CRYPTO_DIR)/include \ + -I$(PKG_BUILD_DIR)/$(NSS_CRYPTO_DIR)/src + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" \ + NSS_CRYPTO_DIR=$(NSS_CRYPTO_DIR) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + $(KERNEL_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)" \ + SoC="$(BOARD)_64" \ + modules +endef + +$(eval $(call KernelPackage,qca-nss-crypto)) diff --git a/qca/qca-nss-dp/Makefile b/qca/qca-nss-dp/Makefile new file mode 100644 index 000000000..4f85a43d1 --- /dev/null +++ b/qca/qca-nss-dp/Makefile @@ -0,0 +1,54 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=qca-nss-dp +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2021-03-26 +PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/nss-dp +PKG_SOURCE_VERSION:=e0c89348d5ad99559ce2fbe15d37b3b5bc66aa03 +PKG_MIRROR_HASH:=f369f0c3b33b5f4ad6d0a6ad6ac5495f63c9ecaf94e4e7fa345169f3e44fcf45 + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/qca-nss-dp + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + DEPENDS:=@TARGET_ipq60xx +kmod-qca-ssdk + TITLE:=Kernel driver for NSS data plane + FILES:=$(PKG_BUILD_DIR)/qca-nss-dp.ko + AUTOLOAD:=$(call AutoLoad,31,qca-nss-dp) +endef + +define KernelPackage/qca-nss-dp/Description +This package contains a NSS data plane driver for QCA chipset +endef + +define Build/InstallDev + mkdir -p $(1)/usr/include/qca-nss-dp + $(CP) $(PKG_BUILD_DIR)/exports/* $(1)/usr/include/qca-nss-dp/ +endef + +EXTRA_CFLAGS+= \ + -I$(STAGING_DIR)/usr/include/qca-ssdk + +NSS_DP_HAL_DIR:=$(PKG_BUILD_DIR)/hal + +define Build/Configure + $(LN) $(NSS_DP_HAL_DIR)/arch/$(BOARD)/nss_$(BOARD).h \ + $(PKG_BUILD_DIR)/exports/nss_dp_arch.h +endef + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + $(KERNEL_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)" \ + SoC="$(BOARD)_64" \ + modules +endef + +$(eval $(call KernelPackage,qca-nss-dp)) diff --git a/qca/qca-nss-drv/Makefile b/qca/qca-nss-drv/Makefile new file mode 100644 index 000000000..4fce341e5 --- /dev/null +++ b/qca/qca-nss-drv/Makefile @@ -0,0 +1,109 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=qca-nss-drv +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2021-11-12 +PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/nss-drv +PKG_SOURCE_VERSION:=5d47e4261bae9bc343ce50402011ee64729684f9 +PKG_MIRROR_HASH:=832a6f3af2d37f3e38231a3df41d5d7d9c7abc4975c0445f962146e8950a9433 + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/qca-nss-drv + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Devices + DEPENDS:=@TARGET_ipq60xx +kmod-qca-nss-dp + TITLE:=Kernel driver for NSS (core driver) + FILES:=$(PKG_BUILD_DIR)/qca-nss-drv.ko + AUTOLOAD:=$(call AutoLoad,32,qca-nss-drv) +endef + +define KernelPackage/qca-nss-drv/install + $(INSTALL_DIR) $(1)/lib/debug + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_DIR) $(1)/etc/sysctl.d + $(INSTALL_DIR) $(1)/etc/config + + $(INSTALL_BIN) ./files/qca-nss-drv.debug $(1)/lib/debug/qca-nss-drv + $(INSTALL_BIN) ./files/qca-nss-drv.init $(1)/etc/init.d/qca-nss-drv + $(INSTALL_BIN) ./files/qca-nss-drv.sysctl $(1)/etc/sysctl.d/qca-nss-drv.conf + $(INSTALL_BIN) ./files/qca-nss-drv.conf $(1)/etc/config/nss +endef + +define KernelPackage/qca-nss-drv/Description +This package contains a NSS driver for QCA chipset +endef + +define Build/InstallDev + mkdir -p $(1)/usr/include/qca-nss-drv + $(CP) $(PKG_BUILD_DIR)/exports/* $(1)/usr/include/qca-nss-drv/ +endef + +EXTRA_CFLAGS+= -Wno-unused-variable \ + -I$(STAGING_DIR)/usr/include/qca-nss-dp \ + -I$(STAGING_DIR)/usr/include/qca-ssdk + +ifeq ($(CONFIG_KERNEL_IPQ_MEM_PROFILE),256) +EXTRA_CFLAGS+= -DNSS_MEM_PROFILE_LOW +endif + +ifeq ($(CONFIG_KERNEL_IPQ_MEM_PROFILE),512) +EXTRA_CFLAGS+= -DNSS_MEM_PROFILE_MEDIUM +endif + +ifeq ($(CONFIG_KERNEL_SKB_FIXED_SIZE_2K),y) +EXTRA_CFLAGS+= -DNSS_SKB_FIXED_SIZE_2K +endif + +DRV_MAKE_OPTS:= +ifeq ($(CONFIG_KERNEL_IPQ_MEM_PROFILE),256) +DRV_MAKE_OPTS+= \ + NSS_DRV_C2C_ENABLE=n \ + NSS_DRV_CAPWAP_ENABLE=n \ + NSS_DRV_CLMAP_ENABLE=n \ + NSS_DRV_CRYPTO_ENABLE=n \ + NSS_DRV_DTLS_ENABLE=n \ + NSS_DRV_GRE_ENABLE=n \ + NSS_DRV_GRE_REDIR_ENABLE=n \ + NSS_DRV_GRE_TUNNEL_ENABLE=n \ + NSS_DRV_IGS_ENABLE=n \ + NSS_DRV_IPSEC_ENABLE=n \ + NSS_DRV_LAG_ENABLE=n \ + NSS_DRV_L2TP_ENABLE=n \ + NSS_DRV_MAPT_ENABLE=n \ + NSS_DRV_OAM_ENABLE=n \ + NSS_DRV_PPTP_ENABLE=n \ + NSS_DRV_PORTID_ENABLE=n \ + NSS_DRV_PVXLAN_ENABLE=n \ + NSS_DRV_QRFS_ENABLE=n \ + NSS_DRV_QVPN_ENABLE=n \ + NSS_DRV_RMNET_ENABLE=n \ + NSS_DRV_SHAPER_ENABLE=n \ + NSS_DRV_SJACK_ENABLE=n \ + NSS_DRV_TLS_ENABLE=n \ + NSS_DRV_TRUSTSEC_ENABLE=n \ + NSS_DRV_TSTAMP_ENABLE=n \ + NSS_DRV_TUN6RD_ENABLE=n \ + NSS_DRV_TUNIPIP6_ENABLE=n \ + NSS_DRV_VXLAN_ENABLE=n +endif + +define Build/Configure + $(LN) arch/nss_$(BOARD)_64.h $(PKG_BUILD_DIR)/exports/nss_arch.h +endef + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" $(strip $(DRV_MAKE_OPTS)) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + $(KERNEL_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)" \ + SoC="$(BOARD)_64" \ + modules +endef + +$(eval $(call KernelPackage,qca-nss-drv)) diff --git a/qca/qca-nss-drv/files/qca-nss-drv.conf b/qca/qca-nss-drv/files/qca-nss-drv.conf new file mode 100644 index 000000000..a8a1fbf40 --- /dev/null +++ b/qca/qca-nss-drv/files/qca-nss-drv.conf @@ -0,0 +1,6 @@ +config nss_firmware 'qca_nss_0' + +config nss_firmware 'qca_nss_1' + +config general + option enable_rps '1' diff --git a/qca/qca-nss-drv/files/qca-nss-drv.debug b/qca/qca-nss-drv/files/qca-nss-drv.debug new file mode 100644 index 000000000..5d435c3a7 --- /dev/null +++ b/qca/qca-nss-drv/files/qca-nss-drv.debug @@ -0,0 +1,26 @@ +#!/bin/sh /sbin/sysdebug +# +# Copyright (c) 2015-2016, The Linux Foundation. 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. +# + +log cat /sys/kernel/debug/qca-nss-drv/stats/pppoe +log cat /sys/kernel/debug/qca-nss-drv/stats/n2h +log cat /sys/kernel/debug/qca-nss-drv/stats/ipv6 +log cat /sys/kernel/debug/qca-nss-drv/stats/ipv4 +log cat /sys/kernel/debug/qca-nss-drv/stats/gmac +log cat /sys/kernel/debug/qca-nss-drv/stats/drv +log cat /sys/kernel/debug/qca-nss-drv/stats/wifi +log cat /sys/kernel/debug/qca-nss-drv/stats/wifi_if +log cat /sys/kernel/debug/qca-nss-drv/stats/eth_rx diff --git a/qca/qca-nss-drv/files/qca-nss-drv.hotplug b/qca/qca-nss-drv/files/qca-nss-drv.hotplug new file mode 100644 index 000000000..1e4813838 --- /dev/null +++ b/qca/qca-nss-drv/files/qca-nss-drv.hotplug @@ -0,0 +1,70 @@ +#!/bin/sh +# +# Copyright (c) 2015-2016, The Linux Foundation. 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. +# + +KERNEL=`uname -r` +case "${KERNEL}" in + 3.4*) + select_or_load=load_nss_fw + ;; + *) + select_or_load=select_nss_fw + ;; +esac + +load_nss_fw () { + ls -l $1 | awk ' { print $9,$5 } '> /dev/console + echo 1 > /sys/class/firmware/$DEVICENAME/loading + cat $1 > /sys/class/firmware/$DEVICENAME/data + echo 0 > /sys/class/firmware/$DEVICENAME/loading +} + +select_nss_fw () { + rm -f /lib/firmware/$DEVICENAME + ln -s $1 /lib/firmware/$DEVICENAME + ls -l /lib/firmware/$DEVICENAME | awk ' { print $9,$5 } '> /dev/console +} + +[ "$ACTION" != "add" ] && exit + +# dev name for UCI, since it doesn't let you use . or - +SDEVNAME=$(echo ${DEVICENAME} | sed s/[.-]/_/g) + +SELECTED_FW=$(uci get nss.${SDEVNAME}.firmware 2>/dev/null) +[ -e "${SELECTED_FW}" ] && { + $select_or_load ${SELECTED_FW} + exit +} + +case $DEVICENAME in + qca-nss0* | qca-nss.0*) + if [ -e /lib/firmware/qca-nss0-enterprise.bin ] ; then + $select_or_load /lib/firmware/qca-nss0-enterprise.bin + else + $select_or_load /lib/firmware/qca-nss0-retail.bin + fi + exit + ;; + qca-nss1* | qca-nss.1*) + if [ -e /lib/firmware/qca-nss1-enterprise.bin ] ; then + $select_or_load /lib/firmware/qca-nss1-enterprise.bin + else + $select_or_load /lib/firmware/qca-nss1-retail.bin + fi + exit + ;; +esac + diff --git a/qca/qca-nss-drv/files/qca-nss-drv.init b/qca/qca-nss-drv/files/qca-nss-drv.init new file mode 100644 index 000000000..de12cb6d1 --- /dev/null +++ b/qca/qca-nss-drv/files/qca-nss-drv.init @@ -0,0 +1,50 @@ +#!/bin/sh /etc/rc.common +# +# Copyright (c) 2015-2017, The Linux Foundation. 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. +# + +START=70 + +enable_rps() { + irq_nss_rps=`grep nss_queue1 /proc/interrupts | cut -d ':' -f 1 | tr -d ' '` + for entry in $irq_nss_rps + do + echo 2 > /proc/irq/$entry/smp_affinity + done + + irq_nss_rps=`grep nss_queue2 /proc/interrupts | cut -d ':' -f 1 | tr -d ' '` + for entry in $irq_nss_rps + do + echo 4 > /proc/irq/$entry/smp_affinity + done + + irq_nss_rps=`grep nss_queue3 /proc/interrupts | cut -d ':' -f 1 | tr -d ' '` + for entry in $irq_nss_rps + do + echo 8 > /proc/irq/$entry/smp_affinity + done + + # Enable NSS RPS + sysctl -w dev.nss.rps.enable=1 >/dev/null 2>/dev/null + +} + + +start() { + local rps_enabled="$(uci_get nss @general[0] enable_rps)" + if [ "$rps_enabled" -eq 1 ]; then + enable_rps + fi +} diff --git a/qca/qca-nss-drv/files/qca-nss-drv.sysctl b/qca/qca-nss-drv/files/qca-nss-drv.sysctl new file mode 100644 index 000000000..0276bba12 --- /dev/null +++ b/qca/qca-nss-drv/files/qca-nss-drv.sysctl @@ -0,0 +1,3 @@ +# Default Number of connection configuration +dev.nss.ipv4cfg.ipv4_conn=4096 +dev.nss.ipv6cfg.ipv6_conn=4096 diff --git a/qca/qca-nss-ecm/Makefile b/qca/qca-nss-ecm/Makefile new file mode 100644 index 000000000..a32cc87c5 --- /dev/null +++ b/qca/qca-nss-ecm/Makefile @@ -0,0 +1,90 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=qca-nss-ecm +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2021-11-09 +PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/qca-nss-ecm +PKG_SOURCE_VERSION:=33122aebdd54803b5817065060289d6af5dfd3ba +PKG_MIRROR_HASH:=a857db70804e19a20efef2d1ad519fe26bce3a45decd6ae3bb4a26d53f464a8d + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/qca-nss-ecm + SECTION:=kernel + CATEGORY:=Kernel modules + SUBMENU:=Network Support + DEPENDS:=@TARGET_ipq60xx +iptables-mod-extra +iptables-mod-physdev \ + +kmod-ipt-conntrack +kmod-ipt-physdev +kmod-pppoe +kmod-qca-nss-drv + TITLE:=QCA NSS Enhanced Connection Manager (ECM) + FILES:=$(PKG_BUILD_DIR)/*.ko + KCONFIG:= \ + CONFIG_BRIDGE_NETFILTER=y \ + CONFIG_NF_CONNTRACK_EVENTS=y \ + CONFIG_NF_CONNTRACK_CHAIN_EVENTS=y \ + CONFIG_NF_CONNTRACK_DSCPREMARK_EXT=n +endef + +define KernelPackage/qca-nss-ecm/Description +This package contains the QCA NSS Enhanced Connection Manager +endef + +define KernelPackage/qca-nss-ecm/install + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DATA) ./files/qca-nss-ecm.uci $(1)/etc/config/ecm + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/qca-nss-ecm.init $(1)/etc/init.d/qca-nss-ecm + $(INSTALL_DIR) $(1)/etc/firewall.d + $(INSTALL_DATA) ./files/qca-nss-ecm.firewall $(1)/etc/firewall.d/qca-nss-ecm + $(INSTALL_DIR) $(1)/etc/sysctl.d + $(INSTALL_BIN) ./files/qca-nss-ecm.sysctl $(1)/etc/sysctl.d/qca-nss-ecm.conf + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_DATA) ./files/qca-nss-ecm.defaults $(1)/etc/uci-defaults/99-qca-nss-ecm + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) ./files/ecm_dump.sh $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/lib/netifd/offload + $(INSTALL_BIN) ./files/on-demand-down $(1)/lib/netifd/offload/on-demand-down +endef + +EXTRA_CFLAGS+=-I$(STAGING_DIR)/usr/include/qca-nss-drv + +ifneq (, $(findstring $(BOARD), ipq60xx ipq807x)) +ECM_MAKE_OPTS+= \ + ECM_BAND_STEERING_ENABLE=n \ + ECM_CLASSIFIER_DSCP_ENABLE=n \ + ECM_CLASSIFIER_HYFI_ENABLE=n \ + ECM_CLASSIFIER_MARK_ENABLE=n \ + ECM_CLASSIFIER_PCC_ENABLE=n \ + ECM_FRONT_END_NSS_ENABLE=y \ + ECM_INTERFACE_BOND_ENABLE=n \ + ECM_INTERFACE_GRE_TAP_ENABLE=n \ + ECM_INTERFACE_GRE_TUN_ENABLE=n \ + ECM_INTERFACE_IPSEC_ENABLE=n \ + ECM_INTERFACE_L2TPV2_ENABLE=n \ + ECM_INTERFACE_PPPOE_ENABLE=y \ + ECM_INTERFACE_PPTP_ENABLE=n \ + ECM_INTERFACE_RAWIP_ENABLE=n \ + ECM_INTERFACE_SIT_ENABLE=n \ + ECM_INTERFACE_TUNIPIP6_ENABLE=n \ + ECM_INTERFACE_VLAN_ENABLE=n \ + ECM_MULTICAST_ENABLE=n +endif + +define Build/InstallDev + mkdir -p $(1)/usr/include/qca-nss-ecm + $(CP) $(PKG_BUILD_DIR)/exports/* $(1)/usr/include/qca-nss-ecm +endef + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" $(strip $(ECM_MAKE_OPTS)) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + $(KERNEL_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)" \ + SoC="$(BOARD)_64" \ + modules +endef + +$(eval $(call KernelPackage,qca-nss-ecm)) diff --git a/qca/qca-nss-ecm/files/ecm_dump.sh b/qca/qca-nss-ecm/files/ecm_dump.sh new file mode 100644 index 000000000..dbf7de753 --- /dev/null +++ b/qca/qca-nss-ecm/files/ecm_dump.sh @@ -0,0 +1,95 @@ +#!/bin/sh +# +# Copyright (c) 2015-2016, The Linux Foundation. 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. +# + +ECM_MODULE=${1:-ecm_state} +MOUNT_ROOT=/dev/ecm + +# +# usage: ecm_dump.sh [module=ecm_db] +# +# with no parameters, ecm_dump.sh will attempt to mount the +# ecm_db state file and cat its contents. +# +# example with a parameter: ecm_dump.sh ecm_classifier_default +# +# this will cause ecm_dump to attempt to find and mount the state +# file for the ecm_classifier_default module, and if successful +# cat the contents. +# + +# this is one of the state files, which happens to be the +# last module started in ecm +ECM_STATE=/sys/kernel/debug/ecm/ecm_state/state_dev_major + +# tests to see if ECM is up and ready to receive commands. +# returns 0 if ECM is fully up and ready, else 1 +ecm_is_ready() { + if [ ! -e "${ECM_STATE}" ] + then + return 1 + fi + return 0 +} + +# +# module_state_mount(module_name) +# Mounts the state file of the module, if supported +# +module_state_mount() { + local module_name=$1 + local mount_dir=$2 + local state_file="/sys/kernel/debug/ecm/${module_name}/state_dev_major" + + if [ -e "${mount_dir}/${module_name}" ] + then + # already mounted + return 0 + fi + + #echo "Mount state file for $module_name ..." + if [ ! -e "$state_file" ] + then + #echo "... $module_name does not support state" + return 1 + fi + + local major="`cat $state_file`" + #echo "... Mounting state $state_file with major: $major" + mknod "${mount_dir}/${module_name}" c $major 0 +} + +# +# main +# +ecm_is_ready || { + #echo "ECM is not running" + exit 1 +} + +# all state files are mounted under MOUNT_ROOT, so make sure it exists +mkdir -p ${MOUNT_ROOT} + +# +# attempt to mount state files for the requested module and cat it +# if the mount succeeded +# +module_state_mount ${ECM_MODULE} ${MOUNT_ROOT} && { + cat ${MOUNT_ROOT}/${ECM_MODULE} + exit 0 +} + +exit 2 diff --git a/qca/qca-nss-ecm/files/on-demand-down b/qca/qca-nss-ecm/files/on-demand-down new file mode 100644 index 000000000..02d708e03 --- /dev/null +++ b/qca/qca-nss-ecm/files/on-demand-down @@ -0,0 +1,6 @@ +#!/bin/sh +# Copyright (c) 2016 The Linux Foundation. All rights reserved. + +[ -e "/sys/kernel/debug/ecm/ecm_db/defunct_all" ] && { + echo 1 > /sys/kernel/debug/ecm/ecm_db/defunct_all +} diff --git a/qca/qca-nss-ecm/files/qca-nss-ecm.defaults b/qca/qca-nss-ecm/files/qca-nss-ecm.defaults new file mode 100644 index 000000000..308e265c9 --- /dev/null +++ b/qca/qca-nss-ecm/files/qca-nss-ecm.defaults @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (c) 2015-2016, The Linux Foundation. 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. +# + +uci -q batch << EOF + delete firewall.qcanssecm + set firewall.qcanssecm=include + set firewall.qcanssecm.type=script + set firewall.qcanssecm.path=/etc/firewall.d/qca-nss-ecm + set firewall.qcanssecm.family=any + set firewall.qcanssecm.reload=1 + commit firewall +EOF + +exit 0 diff --git a/qca/qca-nss-ecm/files/qca-nss-ecm.firewall b/qca/qca-nss-ecm/files/qca-nss-ecm.firewall new file mode 100644 index 000000000..24c64def2 --- /dev/null +++ b/qca/qca-nss-ecm/files/qca-nss-ecm.firewall @@ -0,0 +1,18 @@ +#!/bin/sh +# +# Copyright (c) 2015-2016, The Linux Foundation. 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. +# + +iptables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT diff --git a/qca/qca-nss-ecm/files/qca-nss-ecm.init b/qca/qca-nss-ecm/files/qca-nss-ecm.init new file mode 100644 index 000000000..48862dfbd --- /dev/null +++ b/qca/qca-nss-ecm/files/qca-nss-ecm.init @@ -0,0 +1,139 @@ +#!/bin/sh /etc/rc.common +# +# Copyright (c) 2014, 2019-2020 The Linux Foundation. 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. + +# The shebang above has an extra space intentially to avoid having +# openwrt build scripts automatically enable this package starting +# at boot. + +START=19 + +get_front_end_mode() { + config_load "ecm" + config_get front_end global acceleration_engine "auto" + + case $front_end in + auto) + echo '0' + ;; + nss) + echo '1' + ;; + sfe) + echo '2' + ;; + *) + echo 'uci_option_acceleration_engine is invalid' + esac +} + +support_bridge() { + #NSS support bridge acceleration + [ -d /sys/kernel/debug/ecm/ecm_nss_ipv4 ] && return 0 + #SFE doesn't support bridge acceleration + [ -d /sys/kernel/debug/ecm/ecm_sfe_ipv4 ] && return 1 +} + +load_sfe() { + local kernel_version=$(uname -r) + + [ -e "/lib/modules/$kernel_version/shortcut-fe.ko" ] && { + [ -d /sys/module/shortcut_fe ] || insmod shortcut-fe + } + + [ -e "/lib/modules/$kernel_version/shortcut-fe-ipv6.ko" ] && { + [ -d /sys/module/shortcut_fe_ipv6 ] || insmod shortcut-fe-ipv6 + } + + [ -e "/lib/modules/$kernel_version/shortcut-fe-drv.ko" ] && { + [ -d /sys/module/shortcut_fe_drv ] || insmod shortcut-fe-drv + } +} + +load_ecm() { + [ -d /sys/module/ecm ] || { + [ ! -e /proc/device-tree/MP_256 ] && load_sfe + insmod ecm front_end_selection=$(get_front_end_mode) + } + + support_bridge && { + sysctl -w net.bridge.bridge-nf-call-ip6tables=1 + sysctl -w net.bridge.bridge-nf-call-iptables=1 + } +} + +unload_ecm() { + sysctl -w net.bridge.bridge-nf-call-ip6tables=0 + sysctl -w net.bridge.bridge-nf-call-iptables=0 + + if [ -d /sys/module/ecm ]; then + # + # Stop ECM frontends + # + echo 1 > /sys/kernel/debug/ecm/front_end_ipv4_stop + echo 1 > /sys/kernel/debug/ecm/front_end_ipv6_stop + + # + # Defunct the connections + # + echo 1 > /sys/kernel/debug/ecm/ecm_db/defunct_all + sleep 5; + + rmmod ecm + sleep 1 + fi +} + +start() { + # If SFE CM is loaded, return. + if [ -d /sys/module/shortcut_fe_cm ]; then + echo "shortcut_fe CM is loaded, unload it first" + echo "cmd: /etc/init.d/shortcut_fe stop" + return + fi + + load_ecm + + # If the acceleration engine is NSS, enable wifi redirect. + [ -d /sys/kernel/debug/ecm/ecm_nss_ipv4 ] && sysctl -w dev.nss.general.redirect=1 + + support_bridge && { + echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.d/qca-nss-ecm.conf + echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.d/qca-nss-ecm.conf + } + + if [ -d /sys/module/qca_ovsmgr ]; then + insmod ecm_ovs + fi +} + +stop() { + # If ECM is already not loaded, just return. + if [ ! -d /sys/module/ecm ]; then + return + fi + + # If the acceleration engine is NSS, disable wifi redirect. + [ -d /sys/kernel/debug/ecm/ecm_nss_ipv4 ] && sysctl -w dev.nss.general.redirect=0 + + sed '/net.bridge.bridge-nf-call-ip6tables=1/d' -i /etc/sysctl.d/qca-nss-ecm.conf + sed '/net.bridge.bridge-nf-call-iptables=1/d' -i /etc/sysctl.d/qca-nss-ecm.conf + + if [ -d /sys/module/ecm_ovs ]; then + rmmod ecm_ovs + fi + + unload_ecm +} diff --git a/qca/qca-nss-ecm/files/qca-nss-ecm.sysctl b/qca/qca-nss-ecm/files/qca-nss-ecm.sysctl new file mode 100644 index 000000000..1a3d76b18 --- /dev/null +++ b/qca/qca-nss-ecm/files/qca-nss-ecm.sysctl @@ -0,0 +1,2 @@ +# nf_conntrack_tcp_no_window_check is 0 by default, set it to 1 +net.netfilter.nf_conntrack_tcp_no_window_check=1 diff --git a/qca/qca-nss-ecm/files/qca-nss-ecm.uci b/qca/qca-nss-ecm/files/qca-nss-ecm.uci new file mode 100644 index 000000000..4f2de6877 --- /dev/null +++ b/qca/qca-nss-ecm/files/qca-nss-ecm.uci @@ -0,0 +1,2 @@ +config ecm 'global' + option acceleration_engine 'auto' diff --git a/qca/qca-nss-ecm/patches/200-resolve-high-load.patch b/qca/qca-nss-ecm/patches/200-resolve-high-load.patch new file mode 100644 index 000000000..253b450a5 --- /dev/null +++ b/qca/qca-nss-ecm/patches/200-resolve-high-load.patch @@ -0,0 +1,61 @@ +From 6924b71ed809b37fffd74d6428a8ca83e5919746 Mon Sep 17 00:00:00 2001 +From: Dirk Buchwalder +Date: Sun, 27 Jun 2021 16:52:39 +0200 +Subject: [PATCH] qca-nss-ecm: resolve the cpu high load regarding ecm + +If using ECM, cpu load goes up (around 1.0) and stucks there. +This is due to using uninterruptible sleep function, +the patch changes this to interruptible sleep function. + +Signed-off-by: Dirk Buchwalder +--- + frontends/nss/ecm_nss_ipv4.c | 4 ++-- + frontends/nss/ecm_nss_ipv6.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/frontends/nss/ecm_nss_ipv4.c b/frontends/nss/ecm_nss_ipv4.c +index e00553c..94b39cd 100644 +--- a/frontends/nss/ecm_nss_ipv4.c ++++ b/frontends/nss/ecm_nss_ipv4.c +@@ -2471,7 +2471,7 @@ static void ecm_nss_ipv4_stats_sync_req_work(struct work_struct *work) + } + spin_unlock_bh(&ecm_nss_ipv4_lock); + +- usleep_range(ECM_NSS_IPV4_STATS_SYNC_UDELAY - 100, ECM_NSS_IPV4_STATS_SYNC_UDELAY); ++ msleep_interruptible(ECM_NSS_IPV4_STATS_SYNC_UDELAY / 1000); + + /* + * If index is 0, we are starting a new round, but if we still have time remain +@@ -2485,7 +2485,7 @@ static void ecm_nss_ipv4_stats_sync_req_work(struct work_struct *work) + } + + if (time_after(ecm_nss_ipv4_next_req_time, current_jiffies)) { +- msleep(jiffies_to_msecs(ecm_nss_ipv4_next_req_time - current_jiffies)); ++ msleep_interruptible(jiffies_to_msecs(ecm_nss_ipv4_next_req_time - current_jiffies)); + } + ecm_nss_ipv4_roll_check_jiffies = jiffies; + ecm_nss_ipv4_next_req_time = ecm_nss_ipv4_roll_check_jiffies + ECM_NSS_IPV4_STATS_SYNC_PERIOD; +diff --git a/frontends/nss/ecm_nss_ipv6.c b/frontends/nss/ecm_nss_ipv6.c +index 82e739f..30af050 100644 +--- a/frontends/nss/ecm_nss_ipv6.c ++++ b/frontends/nss/ecm_nss_ipv6.c +@@ -2210,7 +2210,7 @@ static void ecm_nss_ipv6_stats_sync_req_work(struct work_struct *work) + } + spin_unlock_bh(&ecm_nss_ipv6_lock); + +- usleep_range(ECM_NSS_IPV6_STATS_SYNC_UDELAY - 100, ECM_NSS_IPV6_STATS_SYNC_UDELAY); ++ msleep_interruptible(ECM_NSS_IPV6_STATS_SYNC_UDELAY / 1000); + + /* + * If index is 0, we are starting a new round, but if we still have time remain +@@ -2224,7 +2224,7 @@ static void ecm_nss_ipv6_stats_sync_req_work(struct work_struct *work) + } + + if (time_after(ecm_nss_ipv6_next_req_time, current_jiffies)) { +- msleep(jiffies_to_msecs(ecm_nss_ipv6_next_req_time - current_jiffies)); ++ msleep_interruptible(jiffies_to_msecs(ecm_nss_ipv6_next_req_time - current_jiffies)); + } + ecm_nss_ipv6_roll_check_jiffies = jiffies; + ecm_nss_ipv6_next_req_time = ecm_nss_ipv6_roll_check_jiffies + ECM_NSS_IPV6_STATS_SYNC_PERIOD; +-- +2.31.1 diff --git a/qca/qca-nss-fw-eip/Makefile b/qca/qca-nss-fw-eip/Makefile new file mode 100644 index 000000000..104fe5c14 --- /dev/null +++ b/qca/qca-nss-fw-eip/Makefile @@ -0,0 +1,25 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=nss-eip-firmware +PKG_VERSION=2.5.7 +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/nss-eip-firmware + SECTION:=firmware + CATEGORY:=Firmware + TITLE:=NSS EIP-197 firmware + DEPENDS:=@(TARGET_ipq60xx||TARGET_ipq807x) +endef + +define Build/Compile + true +endef + +define Package/nss-eip-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/ + $(CP) ./files/$(BOARD)/* $(1)/lib/firmware/ +endef + +$(eval $(call BuildPackage,nss-eip-firmware)) diff --git a/qca/qca-nss-fw-eip/files/ipq60xx/ifpp.bin b/qca/qca-nss-fw-eip/files/ipq60xx/ifpp.bin new file mode 100644 index 0000000000000000000000000000000000000000..033ad555266d6ddd9bd39a3af4fe9c6c5f631ce7 GIT binary patch literal 12272 zcmeHNe{dAnegE#>-rcTrpxx7*PLgrh`-O##;{#)SPz;L%SfXZpmW6|CoGu;PmEAU3 z;s#8ovEOkAx{L7m5|{)^;|g$X;>k?G;Pgj4ld~hYBq2pfnihL#dc}%OTiX@3GsH8F z>G%8g_H=iWFr;?>Xo1<;)7$sHKR@3e@9hGEu*6tIW$c=n<5$CH!DY&f#e9s##X^s| z6f!2r`iu{@tkVJd7MV#-akwPqId{=y~MBBKw^% zTXR$M2usEHxU4T0^SfXd+XVycY4##3=JCIBu?y0*bDpeQv#0LwO#Tn@>HMP=ng>}? zIc*K=kp5RLhm;U=MgCxrg)cO>3vi}gdjJFzAa~D37{WU%;PZRv?ke=a zpD7s=4AuoD7knNXO$%vsK!Z#d(V+3oXm_Hug@M^&wrg||-9Lder@IB$JqBRH+n-V& z0~d}d_xRBFz##J8;AkAI7n1mUoOEA@x?h-m!%IXLtc6Li=Hqo3FPsA)(eHQiLmT;+ z;f5T^hq7vg_tj^WM$;&a4};(`Ka`ny8{#Tm*b3iZ8S{ssU(X&He81_mb&WpNTpFWw z&nnCeAf6hmw;BeFXWN14^Pw=`^_OU07>=UMg8J9=8-2J8#y1^fe@kdkxIguki4UGx zqXTon8|C?L07Lmk7ID8Sf~i_XJvMwo7XaYfXp^aU{h*51Pr=1wfOwr`KP&UXc+me5 zdA&LXuRhLe9r7Z){R`TDWcW1a_hXbr+P|Ulo8txT{5tXAHa?teC12YZkb%Ksyp{lC zzlHauc)ta&Wnif|C(;R1{_~*U%Kj|VbZA5Bh%Q;r=_SNaEB=PWEiRJLlWsI~R#f+< z!5oH$86{}An&!#YF&%Ld>tLfd&ts_t(BNzSoQX`!I8mYDssu|dI?cWn^;ySaFNfN+ zaqo(NQ0Rx>%{QV>3-w~K_k7dHm$XyX0bTCX+AXoP<;Jurd?)=M>F_oq{YrY7c*C}R z(!T7M(!WYS>N=SDiR*mk(TsiHmp!>{U-stA2J!s1yIiX?`?CA8JH*D!oa_zRwb_l? z!R+U<`w){ylS>iL2Iew&$nRxdE0mKgDK`)Z9JgY+qko5StL9PEBL}mH3B>h6#=`S( zje&V=DO18sDtO_cc!<^`tr*g1&J8p-AGZ$b8uVzi<~SRU%PSxBx2~Mye?ooi-vpz7 zmY_c66U?V(iN^P5f$_2%j5~s0^af8@aeaYs*M3@uv;?2orfHa0{x|s(-)f$uZvt)A zit)AwbDP2P5s*}`A*pV7=&K>JiBfF9ZPzpm1(@Tp8N$0DIIS>7?pmevYZW}_|-qH+KGKuC-6K%(?v$xrH z{|c->M>dwt#Txm=u{o_Fzfs&x_^nw3BT(@z#u4|6tsBJQfnW%{%CvDubWTBFzY{wX zaf`Y=5WlRold#Y+mt)~=#r3gaK}Ia-h=mhXSg6i7Oj3EQ!9ZLDj~y#I+b&2F7RbI;IU)>FA!JB}APj{4 zl{7%Ah`(Nz;#kB}{@G413EibLBz zqc?%|eDVYvj>$$3_Efbts>P7(g;}3`J~__x*kt+isBA2r>I0N80}yXCaC_|@y0NZguO(YYD7KF>N;7SPqfnA5X(%?C#u=bbHS4#``aSL}X(^2)_zojSLmt`FF{Uheu@Y+$WPeDe9_a@|&W{5!Jf0SL!XE} zDZltUN=?3Ua*I>{={fF8=HuA|`B=;i^aeq~Z9Cp6SIKAZ_{9OmWgbwlj=UKLqWKi| zyNNLo3`sCoNz5#cMaQ33@;KHDPvd?~wyqDJMx0MohaJ8|n`p@+cLmwmp!%n{U*`3D zWJ^#e^#>u<-<}?5o2B3P_m!CVD0;0U54d?wt)ll)Yh=j`wvODz*SSXe-PN+xuf24< z_f+;K6+MwpHErC>x#hlf?ZfwleCo=-tLP};-lv`~)fmTaq#r(?v_CtPr}`4p_Xwpe zN2H_DN$Ka=_od|a_3lU9Uv)pZ{jc2bxK+=mJ@wbhk<7eXb(X)+O&ep&-)�{}%SggMK=Gpp}q8+qQ5F_yiFtF=fI&VzvPgYsU` z8P}WqM`+y61C$rmM7kwYdtLDF=e%-ut*Y=7a6aZUhhGq|7p9)L%xBIFn@{yx@`ntC zs0@dq&N@fVx2BQvy{yC6mj6=aB>D#SdYH2#(EXBsXM-N3nveM|!q0cOEQcZ<{G0MU z<#w{y%uP7jj8!J*I_HtNLZboe+8pr;0XD2d)dBZ7uvJQW{c2jwrFCLy8rRA zjq9JyhPKJE0D&Xbc&_H-#6mTF&kVIDcFOqgMErM>T+h0(E>9uTbN>UG3^sZrVg7dY z^XF*Kg4Y?uzEtLI*!Vxn&lpG!!av0W$`Ne#j`xMOXRt3 zeHiJ6MUEB34(g1*!#q!79wQxxsUDzzH|%hsY?zNxRGX1gpku z{p>ssrNyw%<1)pj#F1}Qbf?OGc>@Oaz%Vm!2XUJce1L|c*e%F<87ohx7E&G4&z!)W5*z0O!$930M zud9~biQj73>vIhGk?c?Oxy|chsDq^_KZX-#yT2F;H`_hJF!jiVvvQ-P1`v$U8oO;ZA2g zloqOALq8DTDQTfT2L^%T+3}S#x5igx{lVg9Co_icHAByI{Ljhg?>JxX97>P*6`FN9gW|x^ zBbckzqcw-PLm6x7+VYFuiCR8g-J^9PzPBNp5FL_VsOnK4xo8e&F%i~WcJ5a3U1YEP zOfDxsBh$4(-kaNt_h;ls<=@9~{8e*JH!pyDTM*>e43F9ju$=oOhVM-2d_to4rm$zl zVceru&okU=3*}`IYsxJ%+wEKctzA>CpK2}c&+#mHZGdP%=51DA0;;~HptUsjO{7^nUJO_MHU#y{c)kVrtw6_dL!VbF>dCV&=}Sw7{@!3Q zoUpodJ~!_&7g{Uvch!8f8DtG`;rALo$u-ttNjl(|Wc37QsXge^+m8Vxbhi6!NyGI3 z(1AMOI*UXd@iPp@(JKH^0YC}2R8#Lm;+|Y(+Y)z69pyxDC#dC2~-K7}wr_HV6xvq9hP zKx0$l4>f6Jo6uniI=!fY|aBdqkXfvl6QzV72b>_*S zXbp8^3Mhi}ya9jv>Yg{^8s|BFzoDJBzNKT|1n5gHFFhl9ePudB_&pAdB@yd%7mABr zyYh;e#CJkV>3gTt;^w9J?MO9tym+PuutNGK(h(%3neL5}@Gjlml8fIx<-1pMy+-45 z`L2}58}QzUV;xpTCm%T9${aJ)~=T8TBN(u5AT;Q^pM2h`M^syccnz91d|hW#ksbAi{+$YYT+Pa^-vv0plbXUyBj zHkJ-4iut3l2Z8>6vHUm9$GjI|!8?ALdU;)tuHInW&w{=DZ&p}e`UPSu<&OJzwp=f= z-F@S4qK?>u-jr#X>mUE#x*%PLJ@}rOsRK!C8{$MAkR-)RcSRD<+xSEI0Mskj6&qZ^ wz!eN!!N3&^T*1KqZ46-l*8pmvlVL-Hy&V5-00^zn&`#sn!_Ys57w-%H8{to-P5=M^ literal 0 HcmV?d00001 diff --git a/qca/qca-nss-fw-eip/files/ipq60xx/ipue.bin b/qca/qca-nss-fw-eip/files/ipq60xx/ipue.bin new file mode 100644 index 0000000000000000000000000000000000000000..153a7b4e8a3dd67accb063d33bff7e82d3b5f834 GIT binary patch literal 6116 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 literal 0 HcmV?d00001 diff --git a/qca/qca-nss-fw-eip/files/ipq60xx/opue.bin b/qca/qca-nss-fw-eip/files/ipq60xx/opue.bin new file mode 100644 index 0000000000000000000000000000000000000000..80fb1a211d58e4e08230a354e644b2c46817ef13 GIT binary patch literal 4068 zcmeHKU279j5IsrOG)dFuCWhG5er%c;TcKrJMUrYEh=LTs;%j|arHBQEtx!cooVG#> z1zo6`>Wjq}AEfL`1ff{m;s^TF{)ABT1M0_noSQ~$i}(w6VK{g0&YU}Q=e%5aLoFcW z*#^%UnhK*o2V)>tc-+02g-_RMDWlR-7DOjN;geI3#-Z~5$2a4Cr#O^wDpy1tjk+^C zPKV*1H=!Wp|RRLtugXwn}nwxfgQb&o&jhuJLzI&1ms#k|j%J-)wc4hLbBa&4P* zD29!REDZq0u^hH2Rb6OVlQmQqTBCiK(ShJ7%liijVwiJcb&NA+*>7Py!&n0JJFst*P@-+KP=W=`)a(n) zBm0*aAp7uo@pgkVd-FiRc&iF;;g$u9q}{_9-DSL1_ZK<;&%d4cuedPTX=p>fsu=VE zT0n8Azxw>(#tPSFf%Km8Gcn2ME9IwRg70L7>*Zckia!{gBVHS?Rmm}eP~%P>Ipbv_ zUCvj=MZA%UYQWWis{vO7t_EBUxEgRZz;CTq W2=f&2izJRvZS7%U@JDR5cf)U5t5W*_ literal 0 HcmV?d00001 diff --git a/qca/qca-nss-fw-eip/files/ipq807x/ifpp.bin b/qca/qca-nss-fw-eip/files/ipq807x/ifpp.bin new file mode 100644 index 0000000000000000000000000000000000000000..6e5cbcada3dfd0ff2d12198a73a3766d1982a8b1 GIT binary patch literal 12272 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 H=!5?k+&#gi literal 0 HcmV?d00001 diff --git a/qca/qca-nss-fw-eip/files/ipq807x/ipue.bin b/qca/qca-nss-fw-eip/files/ipq807x/ipue.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a75f9789455ca5f39b137647192b877e3b34c6e GIT binary patch literal 6116 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 literal 0 HcmV?d00001 diff --git a/qca/qca-nss-fw-eip/files/ipq807x/ofpp.bin b/qca/qca-nss-fw-eip/files/ipq807x/ofpp.bin new file mode 100644 index 0000000000000000000000000000000000000000..6863d1068942d2eaeb9354a88ff886b53d1d6397 GIT binary patch literal 6128 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