[PATCH] netifd: refactor packet steering

Rafał Miłecki zajec5 at gmail.com
Mon Feb 13 00:26:51 PST 2023


From: Rafał Miłecki <rafal at milecki.pl>

1. Move setup code to independent script file
2. Add init.d script to allow reload_config
3. Support platform specific /lib/platform/packet-steering.sh

Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
 package/network/config/netifd/Makefile        |  2 +-
 .../etc/hotplug.d/net/20-smp-packet-steering  | 67 +-----------------
 .../netifd/files/etc/init.d/packet_steering   | 17 +++++
 .../files/lib/network/packet-steering.sh      | 70 +++++++++++++++++++
 4 files changed, 89 insertions(+), 67 deletions(-)
 create mode 100644 package/network/config/netifd/files/etc/init.d/packet_steering
 create mode 100755 package/network/config/netifd/files/lib/network/packet-steering.sh

diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile
index 500daaa152..f40a990b42 100644
--- a/package/network/config/netifd/Makefile
+++ b/package/network/config/netifd/Makefile
@@ -1,7 +1,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=netifd
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
diff --git a/package/network/config/netifd/files/etc/hotplug.d/net/20-smp-packet-steering b/package/network/config/netifd/files/etc/hotplug.d/net/20-smp-packet-steering
index 8a86bf75f6..576f244945 100644
--- a/package/network/config/netifd/files/etc/hotplug.d/net/20-smp-packet-steering
+++ b/package/network/config/netifd/files/etc/hotplug.d/net/20-smp-packet-steering
@@ -1,67 +1,2 @@
 #!/bin/sh
-[ "$ACTION" = add ] || exit
-
-NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)"
-[ "$NPROCS" -gt 1 ] || exit
-
-PROC_MASK="$(( (1 << $NPROCS) - 1 ))"
-
-find_irq_cpu() {
-	local dev="$1"
-	local match="$(grep -m 1 "$dev\$" /proc/interrupts)"
-	local cpu=0
-
-	[ -n "$match" ] && {
-		set -- $match
-		shift
-		for cur in $(seq 1 $NPROCS); do
-			[ "$1" -gt 0 ] && {
-				cpu=$(($cur - 1))
-				break
-			}
-			shift
-		done
-	}
-
-	echo "$cpu"
-}
-
-set_hex_val() {
-	local file="$1"
-	local val="$2"
-	val="$(printf %x "$val")"
-	[ -n "$DEBUG" ] && echo "$file = $val"
-	echo "$val" > "$file"
-}
-
-packet_steering="$(uci get "network. at globals[0].packet_steering")"
-[ "$packet_steering" != 1 ] && exit 0
-
-exec 512>/var/lock/smp_tune.lock
-flock 512 || exit 1
-
-for dev in /sys/class/net/*; do
-	[ -d "$dev" ] || continue
-
-	# ignore virtual interfaces
-	[ -n "$(ls "${dev}/" | grep '^lower_')" ] && continue
-	[ -d "${dev}/device" ] || continue
-
-	device="$(readlink "${dev}/device")"
-	device="$(basename "$device")"
-	irq_cpu="$(find_irq_cpu "$device")"
-	irq_cpu_mask="$((1 << $irq_cpu))"
-
-	for q in ${dev}/queues/tx-*; do
-		set_hex_val "$q/xps_cpus" "$PROC_MASK"
-	done
-
-	# ignore dsa slave ports for RPS
-	subsys="$(readlink "${dev}/device/subsystem")"
-	subsys="$(basename "$subsys")"
-	[ "$subsys" = "mdio_bus" ] && continue
-
-	for q in ${dev}/queues/rx-*; do
-		set_hex_val "$q/rps_cpus" "$PROC_MASK"
-	done
-done
+[ "$ACTION" = add ] && /lib/network/packet-steering.sh
diff --git a/package/network/config/netifd/files/etc/init.d/packet_steering b/package/network/config/netifd/files/etc/init.d/packet_steering
new file mode 100644
index 0000000000..94229998fd
--- /dev/null
+++ b/package/network/config/netifd/files/etc/init.d/packet_steering
@@ -0,0 +1,17 @@
+#!/bin/sh /etc/rc.common
+
+START=25
+USE_PROCD=1
+
+start_service() {
+	reload_service
+}
+
+service_triggers() {
+	procd_add_reload_trigger "network"
+	procd_add_reload_trigger "firewall"
+}
+
+reload_service() {
+	/lib/network/packet-steering.sh
+}
diff --git a/package/network/config/netifd/files/lib/network/packet-steering.sh b/package/network/config/netifd/files/lib/network/packet-steering.sh
new file mode 100755
index 0000000000..088c631046
--- /dev/null
+++ b/package/network/config/netifd/files/lib/network/packet-steering.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)"
+[ "$NPROCS" -gt 1 ] || exit
+
+PROC_MASK="$(( (1 << $NPROCS) - 1 ))"
+
+find_irq_cpu() {
+	local dev="$1"
+	local match="$(grep -m 1 "$dev\$" /proc/interrupts)"
+	local cpu=0
+
+	[ -n "$match" ] && {
+		set -- $match
+		shift
+		for cur in $(seq 1 $NPROCS); do
+			[ "$1" -gt 0 ] && {
+				cpu=$(($cur - 1))
+				break
+			}
+			shift
+		done
+	}
+
+	echo "$cpu"
+}
+
+set_hex_val() {
+	local file="$1"
+	local val="$2"
+	val="$(printf %x "$val")"
+	[ -n "$DEBUG" ] && echo "$file = $val"
+	echo "$val" > "$file"
+}
+
+packet_steering="$(uci get "network. at globals[0].packet_steering")"
+[ "$packet_steering" != 1 ] && exit 0
+
+[ -e "/lib/platform/packet-steering.sh" ] && {
+	/lib/platform/packet-steering.sh
+	exit 0
+}
+
+exec 512>/var/lock/smp_tune.lock
+flock 512 || exit 1
+
+for dev in /sys/class/net/*; do
+	[ -d "$dev" ] || continue
+
+	# ignore virtual interfaces
+	[ -n "$(ls "${dev}/" | grep '^lower_')" ] && continue
+	[ -d "${dev}/device" ] || continue
+
+	device="$(readlink "${dev}/device")"
+	device="$(basename "$device")"
+	irq_cpu="$(find_irq_cpu "$device")"
+	irq_cpu_mask="$((1 << $irq_cpu))"
+
+	for q in ${dev}/queues/tx-*; do
+		set_hex_val "$q/xps_cpus" "$PROC_MASK"
+	done
+
+	# ignore dsa slave ports for RPS
+	subsys="$(readlink "${dev}/device/subsystem")"
+	subsys="$(basename "$subsys")"
+	[ "$subsys" = "mdio_bus" ] && continue
+
+	for q in ${dev}/queues/rx-*; do
+		set_hex_val "$q/rps_cpus" "$PROC_MASK"
+	done
+done
-- 
2.34.1




More information about the openwrt-devel mailing list