From c1e2e56576b6d9b4e0db0a21955685b328ea2b27 Mon Sep 17 00:00:00 2001
From: bol-van <none@none.none>
Date: Sun, 20 Apr 2025 11:24:55 +0300
Subject: [PATCH] hardware offload: be closer to fw4 in interface names

---
 common/linux_iphelper.sh |  8 ++++++++
 common/nft.sh            | 11 +++++++----
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/common/linux_iphelper.sh b/common/linux_iphelper.sh
index b7dc0db..8338799 100644
--- a/common/linux_iphelper.sh
+++ b/common/linux_iphelper.sh
@@ -111,6 +111,14 @@ unprepare_route_localnet()
 	set_route_localnet 0 "$@"
 }
 
+get_uevent_devtype()
+{
+	local DEVTYPE INTERFACE IFINDEX OF_NAME OF_FULLNAME OF_COMPATIBLE_N
+	[ -f "/sys/class/net/$1/uevent" ] && {
+		. "/sys/class/net/$1/uevent"
+		echo -n $DEVTYPE
+	}
+}
 resolve_lower_devices()
 {
 	# $1 - bridge interface name
diff --git a/common/nft.sh b/common/nft.sh
index 6d791a4..8907bd6 100644
--- a/common/nft.sh
+++ b/common/nft.sh
@@ -320,7 +320,7 @@ nft_fill_ifsets()
 	# $5 - space separated wan physical interface names (optional)
 	# $6 - space separated wan6 physical interface names (optional)
 
-	local script i j ALLDEVS devs
+	local script i j ALLDEVS devs devtype b
 
 	# if large sets exist nft works very ineffectively
 	# looks like it analyzes the whole table blob to find required data pieces
@@ -348,15 +348,18 @@ flush set inet $ZAPRET_NFT_TABLE lanif"
 			nft_create_or_update_flowtable 'offload' 2>/dev/null
 			# then add elements. some of them can cause error because unsupported
 			for i in $ALLDEVS; do
-				# first try to add interface itself
-				nft_create_or_update_flowtable 'offload' $i 2>/dev/null
 				# bridge members must be added instead of the bridge itself
 				# some members may not support hw offload. example : lan1 lan2 lan3 support, wlan0 wlan1 - not
+				b=
 				devs=$(resolve_lower_devices $i)
 				for j in $devs; do
 					# do not display error if addition failed
-					nft_create_or_update_flowtable 'offload' $j 2>/dev/null
+					nft_create_or_update_flowtable 'offload' $j && b=1 2>/dev/null
 				done
+				[ -n "$b" ] || {
+					# no lower devices added ? try to add interface itself
+					nft_create_or_update_flowtable 'offload' $i 2>/dev/null
+				}
 			done
 			;;
 	esac