mirror of https://gitee.com/openkylin/linux.git
selftests: forwarding: lib: Add in_ns()
In order to run a certain command inside another network namespace, it's possible to use "ip netns exec ns command". However then one can't use functions defined in lib.sh or a test suite. One option is to do "ip netns exec ns bash -c command", provided that all functions that one wishes to use (and their dependencies) are published using "export -f". That may not be practical. Therefore, introduce a helper in_ns(), which wraps a given command in a boilerplate of "ip netns exec" and "source lib.sh", thus making all library functions available. (Custom functions that a script wishes to run within a namespace still need to be exported.) Because quotes in "$@" aren't recognized in heredoc, hand-expand the array in an explicit for loop, leveraging printf %q to handle proper quoting. Signed-off-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
601bc1c139
commit
d0540d1706
|
@ -783,6 +783,17 @@ multipath_eval()
|
|||
log_info "Expected ratio $weights_ratio Measured ratio $packets_ratio"
|
||||
}
|
||||
|
||||
in_ns()
|
||||
{
|
||||
local name=$1; shift
|
||||
|
||||
ip netns exec $name bash <<-EOF
|
||||
NUM_NETIFS=0
|
||||
source lib.sh
|
||||
$(for a in "$@"; do printf "%q${IFS:0:1}" "$a"; done)
|
||||
EOF
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Tests
|
||||
|
||||
|
|
Loading…
Reference in New Issue