]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests: rtnetlink: Add operational state test
authorIdo Schimmel <idosch@nvidia.com>
Thu, 17 Jul 2025 12:51:51 +0000 (15:51 +0300)
committerJakub Kicinski <kuba@kernel.org>
Sat, 19 Jul 2025 00:22:40 +0000 (17:22 -0700)
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: Petr Machata <petrm@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250717125151.466882-1-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/rtnetlink.sh

index 49141254065cb3eebed25f4f36fb07d4fa68149f..441b17947230f19a55930b594757d18b7878d728 100755 (executable)
@@ -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