[openwrt/openwrt] netifd: add flow steering mode to the packet steering script

LEDE Commits lede-commits at lists.infradead.org
Thu Apr 25 21:38:07 PDT 2024


nbd pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/7ebcf2fb9c5db8b75666761f5e767c91abb1f437

commit 7ebcf2fb9c5db8b75666761f5e767c91abb1f437
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Wed Apr 24 19:23:11 2024 +0200

    netifd: add flow steering mode to the packet steering script
    
    This allows directing processing of locally received packets to the CPUs
    of the tasks receiving them
    
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 .../network/config/netifd/files/etc/init.d/packet_steering |  4 +++-
 .../netifd/files/usr/libexec/network/packet-steering.uc    | 14 +++++++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/package/network/config/netifd/files/etc/init.d/packet_steering b/package/network/config/netifd/files/etc/init.d/packet_steering
index d6f6afc2e1..ff4a39073b 100755
--- a/package/network/config/netifd/files/etc/init.d/packet_steering
+++ b/package/network/config/netifd/files/etc/init.d/packet_steering
@@ -15,9 +15,11 @@ service_triggers() {
 
 reload_service() {
 	packet_steering="$(uci get "network. at globals[0].packet_steering")"
+	steering_flows="$(uci get "network. at globals[0].steering_flows")"
+	[ "$steering_flows" -gt 0 ] && opts="-l $steering_flows"
 	if [ -e "/usr/libexec/platform/packet-steering.sh" ]; then
 		/usr/libexec/platform/packet-steering.sh "$packet_steering"
 	else
-		/usr/libexec/network/packet-steering.uc "$packet_steering"
+		/usr/libexec/network/packet-steering.uc $opts "$packet_steering"
 	fi
 }
diff --git a/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc b/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc
index 025532c1c1..a578e28879 100755
--- a/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc
+++ b/package/network/config/netifd/files/usr/libexec/network/packet-steering.uc
@@ -10,8 +10,10 @@ let debug = 0, do_nothing = 0;
 let disable;
 let cpus;
 let all_cpus;
+let local_flows = 0;
 
-for (let arg in ARGV) {
+while (length(ARGV) > 0) {
+	let arg = shift(ARGV);
 	switch (arg) {
 	case "-d":
 		debug++;
@@ -25,6 +27,9 @@ for (let arg in ARGV) {
 	case '2':
 		all_cpus = true;
 		break;
+	case '-l':
+		local_flows = +shift(ARGV);
+		break;
 	}
 }
 
@@ -71,6 +76,13 @@ function set_netdev_cpu(dev, cpu) {
 		if (!do_nothing)
 			writefile(queue, `${val}`);
 	}
+	queues = glob(`/sys/class/net/${dev}/queues/rx-*/rps_flow_cnt`);
+	for (let queue in queues) {
+		if (debug || do_nothing)
+			warn(`echo ${local_flows} > ${queue}\n`);
+		if (!do_nothing)
+			writefile(queue, `${local_flows}`);
+	}
 }
 
 function task_device_match(name, device)




More information about the lede-commits mailing list