Commit 25250f40 authored by Ido Schimmel's avatar Ido Schimmel Committed by Jakub Kicinski
Browse files

selftests: rtnetlink: Add operational state test

Virtual devices (e.g., VXLAN) that do not have a notion of a carrier are
created with an "UNKNOWN" operational state which some users find
confusing [1].

It is possible to set the operational state from user space either
during device creation or afterwards and some applications will start
doing that in order to avoid the above problem.

Add a test for this functionality to ensure it does not regress.

[1] https://lore.kernel.org/netdev/20241119153703.71f97b76@hermes.local/



Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250717125151.466882-1-idosch@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent e7ce59d9
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ ALL_TESTS="
	kci_test_address_proto
	kci_test_enslave_bonding
	kci_test_mngtmpaddr
	kci_test_operstate
"

devdummy="test-dummy0"
@@ -1344,6 +1345,39 @@ kci_test_mngtmpaddr()
	return $ret
}

kci_test_operstate()
{
	local ret=0

	# Check that it is possible to set operational state during device
	# creation and that it is preserved when the administrative state of
	# the device is toggled.
	run_cmd ip link add name vx0 up state up type vxlan id 10010 dstport 4789
	run_cmd_grep "state UP" ip link show dev vx0
	run_cmd ip link set dev vx0 down
	run_cmd_grep "state DOWN" ip link show dev vx0
	run_cmd ip link set dev vx0 up
	run_cmd_grep "state UP" ip link show dev vx0

	run_cmd ip link del dev vx0

	# Check that it is possible to set the operational state of the device
	# after creation.
	run_cmd ip link add name vx0 up type vxlan id 10010 dstport 4789
	run_cmd_grep "state UNKNOWN" ip link show dev vx0
	run_cmd ip link set dev vx0 state up
	run_cmd_grep "state UP" ip link show dev vx0

	run_cmd ip link del dev vx0

	if [ "$ret" -ne 0 ]; then
		end_test "FAIL: operstate"
		return 1
	fi

	end_test "PASS: operstate"
}

kci_test_rtnl()
{
	local current_test