]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests: netdevsim: add carrier state consistency test
authorYohei Kojima <yk@y-koj.net>
Mon, 5 Jan 2026 15:17:33 +0000 (00:17 +0900)
committerJakub Kicinski <kuba@kernel.org>
Wed, 7 Jan 2026 02:04:01 +0000 (18:04 -0800)
This commit adds a test case for netdevsim carrier state consistency.
Specifically, the added test verifies the carrier state during the
following operations:

1. Unlink two netdevsims
2. ifdown one netdevsim, then ifup again
3. Link the netdevsims again
4. ifdown one netdevsim, then ifup again

These steps verifies that the carrier is UP iff two netdevsims are
linked and ifuped.

Signed-off-by: Yohei Kojima <yk@y-koj.net>
Link: https://patch.msgid.link/481e2729e53b6074ebfc0ad85764d8feb244de8c.1767624906.git.yk@y-koj.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/drivers/net/netdevsim/peer.sh

index 7f32b5600925768bd54dd3a961abc474524cf509..f4721f7636dd6aaf9a671f2520655d0c88330eba 100755 (executable)
@@ -52,6 +52,39 @@ cleanup_ns()
        ip netns del nssv
 }
 
+is_carrier_up()
+{
+       local netns="$1"
+       local nsim_dev="$2"
+
+       test "$(ip netns exec "$netns"  \
+               cat /sys/class/net/"$nsim_dev"/carrier 2>/dev/null)" -eq 1
+}
+
+assert_carrier_up()
+{
+       local netns="$1"
+       local nsim_dev="$2"
+
+       if ! is_carrier_up "$netns" "$nsim_dev"; then
+               echo "$nsim_dev's carrier should be UP, but it isn't"
+               cleanup_ns
+               exit 1
+       fi
+}
+
+assert_carrier_down()
+{
+       local netns="$1"
+       local nsim_dev="$2"
+
+       if is_carrier_up "$netns" "$nsim_dev"; then
+               echo "$nsim_dev's carrier should be DOWN, but it isn't"
+               cleanup_ns
+               exit 1
+       fi
+}
+
 ###
 ### Code start
 ###
@@ -113,6 +146,32 @@ if [ $? -eq 0 ]; then
        exit 1
 fi
 
+# netdevsim carrier state consistency checking
+assert_carrier_up nssv "$NSIM_DEV_1_NAME"
+assert_carrier_up nscl "$NSIM_DEV_2_NAME"
+
+echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX" > "$NSIM_DEV_SYS_UNLINK"
+
+assert_carrier_down nssv "$NSIM_DEV_1_NAME"
+assert_carrier_down nscl "$NSIM_DEV_2_NAME"
+
+ip netns exec nssv ip link set dev "$NSIM_DEV_1_NAME" down
+ip netns exec nssv ip link set dev "$NSIM_DEV_1_NAME" up
+
+assert_carrier_down nssv "$NSIM_DEV_1_NAME"
+assert_carrier_down nscl "$NSIM_DEV_2_NAME"
+
+echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_2_FD:$NSIM_DEV_2_IFIDX" > $NSIM_DEV_SYS_LINK
+
+assert_carrier_up nssv "$NSIM_DEV_1_NAME"
+assert_carrier_up nscl "$NSIM_DEV_2_NAME"
+
+ip netns exec nssv ip link set dev "$NSIM_DEV_1_NAME" down
+ip netns exec nssv ip link set dev "$NSIM_DEV_1_NAME" up
+
+assert_carrier_up nssv "$NSIM_DEV_1_NAME"
+assert_carrier_up nscl "$NSIM_DEV_2_NAME"
+
 # send/recv packets
 
 tmp_file=$(mktemp)