selftests: test creating netdevsim inside network namespace
authorJiri Pirko <jiri@mellanox.com>
Sat, 5 Oct 2019 06:10:33 +0000 (08:10 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 5 Oct 2019 23:34:15 +0000 (16:34 -0700)
Add a test that creates netdevsim instance inside network namespace
and verifies that the related devlink instance and port netdevices
reside in the namespace.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/drivers/net/netdevsim/devlink_in_netns.sh [new file with mode: 0755]
tools/testing/selftests/net/forwarding/lib.sh

diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink_in_netns.sh b/tools/testing/selftests/drivers/net/netdevsim/devlink_in_netns.sh
new file mode 100755 (executable)
index 0000000..7effd35
--- /dev/null
@@ -0,0 +1,72 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+lib_dir=$(dirname $0)/../../../net/forwarding
+
+ALL_TESTS="check_devlink_test check_ports_test"
+NUM_NETIFS=0
+source $lib_dir/lib.sh
+
+BUS_ADDR=10
+PORT_COUNT=4
+DEV_NAME=netdevsim$BUS_ADDR
+SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/
+DL_HANDLE=netdevsim/$DEV_NAME
+NETNS_NAME=testns1
+
+port_netdev_get()
+{
+       local port_index=$1
+
+       cmd_jq "devlink -N $NETNS_NAME port show -j" \
+              ".[][\"$DL_HANDLE/$port_index\"].netdev" "-e"
+}
+
+check_ports_test()
+{
+       RET=0
+
+       for i in $(seq 0 $(expr $PORT_COUNT - 1)); do
+               netdev_name=$(port_netdev_get $i)
+               check_err $? "Failed to get netdev name for port $DL_HANDLE/$i"
+               ip -n $NETNS_NAME link show $netdev_name &> /dev/null
+               check_err $? "Failed to find netdev $netdev_name"
+       done
+
+       log_test "check ports test"
+}
+
+check_devlink_test()
+{
+       RET=0
+
+       devlink -N $NETNS_NAME dev show $DL_HANDLE &> /dev/null
+       check_err $? "Failed to show devlink instance"
+
+       log_test "check devlink test"
+}
+
+setup_prepare()
+{
+       modprobe netdevsim
+       ip netns add $NETNS_NAME
+       ip netns exec $NETNS_NAME \
+               echo "$BUS_ADDR $PORT_COUNT" > /sys/bus/netdevsim/new_device
+       while [ ! -d $SYSFS_NET_DIR ] ; do :; done
+}
+
+cleanup()
+{
+       pre_cleanup
+       echo "$BUS_ADDR" > /sys/bus/netdevsim/del_device
+       ip netns del $NETNS_NAME
+       modprobe -r netdevsim
+}
+
+trap cleanup EXIT
+
+setup_prepare
+
+tests_run
+
+exit $EXIT_STATUS
index 85c587a03c8a5e48dba0cb3b1956c26bbccac7ea..8b48ec54d058a547a869473ed3fff6a72b29df2b 100644 (file)
@@ -254,6 +254,7 @@ cmd_jq()
 {
        local cmd=$1
        local jq_exp=$2
+       local jq_opts=$3
        local ret
        local output
 
@@ -263,7 +264,11 @@ cmd_jq()
        if [[ $ret -ne 0 ]]; then
                return $ret
        fi
-       output=$(echo $output | jq -r "$jq_exp")
+       output=$(echo $output | jq -r $jq_opts "$jq_exp")
+       ret=$?
+       if [[ $ret -ne 0 ]]; then
+               return $ret
+       fi
        echo $output
        # return success only in case of non-empty output
        [ ! -z "$output" ]