Re: [PATCH net-next v3 2/9] selftests: net: add helpers for running a command on other targets
From: Petr Machata <petrm@nvidia.com>
Date: 2026-03-20 11:16:16
Also in:
lkml
Ioana Ciornei [off-list ref] writes:
quoted hunk ↗ jump to hunk
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@nxp.com> --- 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:" +
These are new functions, they should just expose these parameters as
actual function parameters, not as hidden environment. If it is
desirable that run_cmd() can run local commands, maybe it makes sense to
make the current run_cmd() a helper like __run_cmd(), which takes the
remote-config parameter, and have run_cmd() be a wrapper:
run_cmd()
{
__run_cmd local: "$@"
}
quoted hunk ↗ jump to hunk
############################################################################## # 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 "$@" +}