[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