[PATCH net-next v3 2/9] selftests: net: add helpers for running a command on other targets

From: Ioana Ciornei

Date: Thu Mar 19 2026 - 12:17:02 EST


Add a couple of helpers which can be used by tests which need to run a
specific bash command on a different target than the local system, be it
either another netns or a remote system accessible through ssh.

The run_cmd() function decides where to execute the command passed
through $@ based on the env variable TARGET value while run_on() will
receive the target through its first argument.

Signed-off-by: Ioana Ciornei <ioana.ciornei@xxxxxxx>
---
Changes in v3:
- s/TARGET/CUR_TARGET
- always fallback on running a command locally when either TARGETS is
not declared or there is no entry for a specific interface
Changes in v2:
- patch is new

tools/testing/selftests/net/lib.sh | 39 ++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)

diff --git a/tools/testing/selftests/net/lib.sh b/tools/testing/selftests/net/lib.sh
index b40694573f4c..f7c54d05758e 100644
--- a/tools/testing/selftests/net/lib.sh
+++ b/tools/testing/selftests/net/lib.sh
@@ -28,6 +28,10 @@ EXIT_STATUS=0
# Per-test return value. Clear at the beginning of each test.
RET=0

+# If a specific command needs to be executed on another target than local, set
+# this appropriately before calling run_cmd
+CUR_TARGET="local:"
+
##############################################################################
# Helpers

@@ -670,3 +674,38 @@ cmd_jq()
# return success only in case of non-empty output
[ ! -z "$output" ]
}
+
+run_cmd()
+{
+ IFS=':' read -r type args <<< "$CUR_TARGET"
+
+ case "$type" in
+ netns)
+ # Execute command in network namespace
+ # args contains the namespace name
+ ip netns exec "$args" "$@"
+ ;;
+ ssh)
+ # Execute command via SSH args contains user@host
+ ssh -n "$args" "$@"
+ ;;
+ local|*)
+ # Execute command locally. This is also the fallback
+ # case in case the CUR_TARGET is not set.
+ "$@"
+ ;;
+ esac
+}
+
+run_on()
+{
+ local iface=$1; shift
+
+ if declare -p TARGETS &>/dev/null; then
+ CUR_TARGET="${TARGETS[$iface]}"
+ else
+ CUR_TARGET="local:"
+ fi
+
+ run_cmd "$@"
+}
--
2.25.1