Commit 75df712c authored by Yohei Kojima's avatar Yohei Kojima Committed by Jakub Kicinski
Browse files

selftests: netdevsim: add carrier state consistency test



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: default avatarYohei Kojima <yk@y-koj.net>
Link: https://patch.msgid.link/481e2729e53b6074ebfc0ad85764d8feb244de8c.1767624906.git.yk@y-koj.net


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent d83dddff
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -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)