From: Jiri Pirko <j...@mellanox.com>

Add couple of tests for devlink reload testing and also resource
limitations testing, along with devlink reload.

Signed-off-by: Jiri Pirko <j...@mellanox.com>
---
 .../drivers/net/netdevsim/devlink.sh          | 120 +++++++++++++++++-
 1 file changed, 119 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh 
b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
index 115837355eaf..69af99bd562b 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
@@ -3,7 +3,8 @@
 
 lib_dir=$(dirname $0)/../../../net/forwarding
 
-ALL_TESTS="fw_flash_test params_test regions_test"
+ALL_TESTS="fw_flash_test params_test regions_test reload_test \
+          netns_reload_test resource_test"
 NUM_NETIFS=0
 source $lib_dir/lib.sh
 
@@ -142,6 +143,123 @@ regions_test()
        log_test "regions test"
 }
 
+reload_test()
+{
+       RET=0
+
+       devlink dev reload $DL_HANDLE
+       check_err $? "Failed to reload"
+
+       log_test "reload test"
+}
+
+netns_reload_test()
+{
+       RET=0
+
+       ip netns add testns1
+       check_err $? "Failed add netns \"testns1\""
+       ip netns add testns2
+       check_err $? "Failed add netns \"testns2\""
+
+       devlink dev reload $DL_HANDLE netns testns1
+       check_err $? "Failed to reload into netns \"testns1\""
+
+       devlink -N testns1 dev reload $DL_HANDLE netns testns2
+       check_err $? "Failed to reload from netns \"testns1\" into netns 
\"testns2\""
+
+       ip netns del testns2
+       ip netns del testns1
+
+       log_test "netns reload test"
+}
+
+DUMMYDEV="dummytest"
+
+res_val_get()
+{
+       local netns=$1
+       local parentname=$2
+       local name=$3
+       local type=$4
+
+       cmd_jq "devlink -N $netns resource show $DL_HANDLE -j" \
+              ".[][][] | select(.name == \"$parentname\").resources[] \
+               | select(.name == \"$name\").$type"
+}
+
+resource_test()
+{
+       RET=0
+
+       ip netns add testns1
+       check_err $? "Failed add netns \"testns1\""
+       ip netns add testns2
+       check_err $? "Failed add netns \"testns2\""
+
+       devlink dev reload $DL_HANDLE netns testns1
+       check_err $? "Failed to reload into netns \"testns1\""
+
+       # Create dummy dev to add the address and routes on.
+
+       ip -n testns1 link add name $DUMMYDEV type dummy
+       check_err $? "Failed create dummy device"
+       ip -n testns1 link set $DUMMYDEV up
+       check_err $? "Failed bring up dummy device"
+       ip -n testns1 a a 192.0.1.1/24 dev $DUMMYDEV
+       check_err $? "Failed add an IP address to dummy device"
+
+       local occ=$(res_val_get testns1 IPv4 fib occ)
+       local limit=$((occ+1))
+
+       # Set fib size limit to handle one another route only.
+
+       devlink -N testns1 resource set $DL_HANDLE path IPv4/fib size $limit
+       check_err $? "Failed to set IPv4/fib resource size"
+       local size_new=$(res_val_get testns1 IPv4 fib size_new)
+       [ "$size_new" -eq "$limit" ]
+       check_err $? "Unexpected \"size_new\" value (got $size_new, expected 
$limit)"
+
+       devlink -N testns1 dev reload $DL_HANDLE
+       check_err $? "Failed to reload"
+       local size=$(res_val_get testns1 IPv4 fib size)
+       [ "$size" -eq "$limit" ]
+       check_err $? "Unexpected \"size\" value (got $size, expected $limit)"
+
+       # Insert 2 routes, the first is going to be inserted,
+       # the second is expected to fail to be inserted.
+
+       ip -n testns1 r a 192.0.2.0/24 via 192.0.1.2
+       check_err $? "Failed to add route"
+
+       ip -n testns1 r a 192.0.3.0/24 via 192.0.1.2
+       check_fail $? "Unexpected successful route add over limit"
+
+       # Now create another dummy in second network namespace and
+       # insert two routes. That is over the limit of the netdevsim
+       # instance in the first namespace. Move the netdevsim instance
+       # into the second namespace and expect it to fail.
+
+       ip -n testns2 link add name $DUMMYDEV type dummy
+       check_err $? "Failed create dummy device"
+       ip -n testns2 link set $DUMMYDEV up
+       check_err $? "Failed bring up dummy device"
+       ip -n testns2 a a 192.0.1.1/24 dev $DUMMYDEV
+       check_err $? "Failed add an IP address to dummy device"
+       ip -n testns2 r a 192.0.2.0/24 via 192.0.1.2
+       check_err $? "Failed to add route"
+       ip -n testns2 r a 192.0.3.0/24 via 192.0.1.2
+       check_err $? "Failed to add route"
+
+       devlink -N testns1 dev reload $DL_HANDLE netns testns2
+       check_fail $? "Unexpected successful reload from netns \"testns1\" into 
netns \"testns2\""
+
+       ip netns del testns2
+       ip netns del testns1
+
+       log_test "resource test"
+}
+
 setup_prepare()
 {
        modprobe netdevsim
-- 
2.21.0

Reply via email to