|
| 1 | +# |
| 2 | +# SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | +# |
| 4 | +include $(TOPDIR)/rules.mk |
| 5 | +PKG_NAME:=nss-switch |
| 6 | +PKG_VERSION:=1.0.0 |
| 7 | +PKG_RELEASE:=1 |
| 8 | +PKG_MAINTAINER:=Alexander Gomez <alexandrglm@proton.me> |
| 9 | +PKG_LICENSE:=GPL-2.0-or-later |
| 10 | +include $(INCLUDE_DIR)/package.mk |
| 11 | +define Package/nss-switch |
| 12 | + SECTION:=net |
| 13 | + CATEGORY:=Network |
| 14 | + TITLE:=Qualcomm NSS Bypass tool |
| 15 | + DEPENDS:=+conntrack |
| 16 | +endef |
| 17 | +define Package/nss-switch/description |
| 18 | + A tool designed to manage Hardware Offload for qualcommax NSS platforms. |
| 19 | + While optimised for NSS-enabled firmware to allow deep packet inspection, |
| 20 | + it remains compatible with any platform using Software Offloading (SFE). |
| 21 | +endef |
| 22 | +define Package/nss-switch/conffiles |
| 23 | +/etc/config/nss-switch-conf |
| 24 | +/etc/nss-switch/rules.conf |
| 25 | +endef |
| 26 | +define Build/Prepare |
| 27 | + mkdir -p $(PKG_BUILD_DIR) |
| 28 | + $(CP) ./src/* $(PKG_BUILD_DIR)/ |
| 29 | +endef |
| 30 | +define Build/Compile |
| 31 | + $(MAKE) -C $(PKG_BUILD_DIR) \ |
| 32 | + CC="$(TARGET_CC)" \ |
| 33 | + CFLAGS="$(TARGET_CFLAGS)" \ |
| 34 | + LDFLAGS="$(TARGET_LDFLAGS)" |
| 35 | +endef |
| 36 | +define Package/nss-switch/install |
| 37 | + $(INSTALL_DIR) $(1)/usr/lib/nss-switch/bin |
| 38 | + $(INSTALL_DIR) $(1)/usr/lib/nss-switch/lib |
| 39 | + $(INSTALL_DIR) $(1)/etc/config |
| 40 | + $(INSTALL_DIR) $(1)/etc/nss-switch |
| 41 | + $(INSTALL_DIR) $(1)/etc/firewall.d |
| 42 | + $(INSTALL_DIR) $(1)/usr/bin |
| 43 | + $(INSTALL_BIN) $(PKG_BUILD_DIR)/nss-ct-dump $(1)/usr/lib/nss-switch/bin/nss-ct-dump |
| 44 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/nss-switch.sh $(1)/usr/lib/nss-switch/nss-switch.sh |
| 45 | + $(INSTALL_BIN) ./files/etc/firewall.d/nss-bypass-rules $(1)/etc/firewall.d/nss-bypass-rules |
| 46 | + $(INSTALL_DATA) ./files/etc/config/nss-switch-conf $(1)/etc/config/nss-switch-conf |
| 47 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/chandler.sh $(1)/usr/lib/nss-switch/lib/chandler.sh |
| 48 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/conntrack.sh $(1)/usr/lib/nss-switch/lib/conntrack.sh |
| 49 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/debug.sh $(1)/usr/lib/nss-switch/lib/debug.sh |
| 50 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/detect.sh $(1)/usr/lib/nss-switch/lib/detect.sh |
| 51 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/ecm.sh $(1)/usr/lib/nss-switch/lib/ecm.sh |
| 52 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/nft.sh $(1)/usr/lib/nss-switch/lib/nft.sh |
| 53 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/rules.sh $(1)/usr/lib/nss-switch/lib/rules.sh |
| 54 | + $(INSTALL_BIN) ./files/usr/lib/nss-switch/lib/ui.sh $(1)/usr/lib/nss-switch/lib/ui.sh |
| 55 | + $(INSTALL_DATA) ./files/etc/nss-switch/rules.conf $(1)/etc/nss-switch/rules.conf |
| 56 | + ln -sf /usr/lib/nss-switch/nss-switch.sh $(1)/usr/bin/nss-switch |
| 57 | +endef |
| 58 | +define Package/nss-switch/preinst |
| 59 | +#!/bin/sh |
| 60 | +if [ -z "$${IPKG_INSTROOT}" ]; then |
| 61 | + echo "Checking platform compatibility..." |
| 62 | + if lsmod 2>/dev/null | grep -q "qca_nss_drv"; then |
| 63 | + echo "[OK] Qualcomm NSS (Hardware offload)" |
| 64 | + elif [ -d /sys/kernel/debug/ecm/ecm_sfe_ipv4 ] || \ |
| 65 | + lsmod 2>/dev/null | grep -q "^shortcut_fe"; then |
| 66 | + echo "[OK] Qualcomm SFE (Software offload)" |
| 67 | + elif [ -d /sys/kernel/debug/ppe0 ]; then |
| 68 | + echo "[OK] MediaTek PPE/HNAT (Hardware offload)" |
| 69 | + elif lsmod 2>/dev/null | grep -q "^nf_flow_table"; then |
| 70 | + echo "[OK] Linux flow offload (Software offload)" |
| 71 | + else |
| 72 | + echo "[NOTICE] No offload engine detected, tool will run in fallback mode" |
| 73 | + fi |
| 74 | + echo "Starting NSS-Switch installation..." |
| 75 | +fi |
| 76 | +exit 0 |
| 77 | +endef |
| 78 | +define Package/nss-switch/postinst |
| 79 | +#!/bin/sh |
| 80 | +if [ -z "$${IPKG_INSTROOT}" ]; then |
| 81 | + if [ -x /etc/init.d/firewall ]; then |
| 82 | + /etc/init.d/firewall reload 2>/dev/null |
| 83 | + echo "[NSS-Switch] Firewall reloaded to apply post-install hooks" >&2 |
| 84 | + fi |
| 85 | +fi |
| 86 | +exit 0 |
| 87 | +endef |
| 88 | +define Package/nss-switch/prerm |
| 89 | +#!/bin/sh |
| 90 | +if [ -z "$${IPKG_INSTROOT}" ]; then |
| 91 | + NSS_MARK=0x00010000 |
| 92 | + echo "Preparing a proper clean-up before package removal..." |
| 93 | + if command -v nft >/dev/null 2>&1; then |
| 94 | + for chain in mangle_prerouting mangle_postrouting; do |
| 95 | + handles=$$(nft -a list chain inet fw4 "$$chain" 2>/dev/null | grep -E "jump nss_bypass_pre|jump nss_bypass_post" | grep -oE 'handle [0-9]+' | awk '{print $$2}') |
| 96 | + for h in $$handles; do |
| 97 | + nft delete rule inet fw4 "$$chain" handle "$$h" 2>/dev/null |
| 98 | + done |
| 99 | + done |
| 100 | + nft delete chain inet fw4 nss_bypass_pre 2>/dev/null |
| 101 | + nft delete chain inet fw4 nss_bypass_post 2>/dev/null |
| 102 | + fi |
| 103 | + if [ -f /proc/net/nf_conntrack ] && command -v conntrack >/dev/null 2>&1; then |
| 104 | + conntrack -L 2>/dev/null | grep "mark=$$NSS_MARK" | while read -r line; do |
| 105 | + proto=$$(echo "$$line" | awk '{print $$1}') |
| 106 | + src=$$(echo "$$line" | grep -oE 'src=[^ ]+' | head -1 | cut -d= -f2) |
| 107 | + dst=$$(echo "$$line" | grep -oE 'dst=[^ ]+' | head -1 | cut -d= -f2) |
| 108 | + [ -n "$$proto" ] && [ -n "$$src" ] && [ -n "$$dst" ] && \ |
| 109 | + conntrack -D -p "$$proto" -s "$$src" -d "$$dst" 2>/dev/null |
| 110 | + done |
| 111 | + fi |
| 112 | + if [ -f /sys/kernel/debug/ecm/ecm_db/defunct_all ]; then |
| 113 | + echo 1 > /sys/kernel/debug/ecm/ecm_db/defunct_all 2>/dev/null |
| 114 | + fi |
| 115 | + if uci -q get firewall.nss_bypass_include.type >/dev/null 2>&1; then |
| 116 | + uci delete firewall.nss_bypass_include |
| 117 | + uci commit firewall |
| 118 | + fi |
| 119 | +fi |
| 120 | +exit 0 |
| 121 | +endef |
| 122 | +define Package/nss-switch/postrm |
| 123 | +#!/bin/sh |
| 124 | +if [ -z "$${IPKG_INSTROOT}" ]; then |
| 125 | + rm -rf /usr/lib/nss-switch 2>/dev/null || true |
| 126 | + rm -f /etc/config/nss-switch-conf 2>/dev/null || true |
| 127 | + rm -rf /etc/nss-switch 2>/dev/null || true |
| 128 | + rm -f /etc/firewall.d/nss-bypass-rules 2>/dev/null || true |
| 129 | + if [ -x /etc/init.d/firewall ]; then |
| 130 | + /etc/init.d/firewall reload 2>/dev/null |
| 131 | + fi |
| 132 | +fi |
| 133 | +exit 0 |
| 134 | +endef |
| 135 | +$(eval $(call BuildPackage,nss-switch)) |
0 commit comments