Skip to content

Commit

Permalink
selftests: netdevsim: add tests for devlink reload with resources
Browse files Browse the repository at this point in the history
Add couple of tests for devlink reload testing and also resource
limitations testing, along with devlink reload.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
jpirko authored and davem330 committed Oct 4, 2019
1 parent 070c63f commit b74c37f
Showing 1 changed file with 119 additions and 1 deletion.
120 changes: 119 additions & 1 deletion tools/testing/selftests/drivers/net/netdevsim/devlink.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit b74c37f

Please sign in to comment.