Commit 1cf60c61 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'enhance-network-interface-feature-testing'

Abhinav Jain says:

====================
Enhance network interface feature testing

This small series includes fixes for creation of veth pairs for
networkless kernels & adds tests for turning the different network
interface features on and off in selftests/net/netdevice.sh script.
Tested using vng and compiles for network as well as networkless kernel.

   # selftests: net: netdevice.sh
   # No valid network device found, creating veth pair
   # PASS: veth0: set interface up
   # PASS: veth0: set MAC address
   # XFAIL: veth0: set IP address unsupported for veth*
   # PASS: veth0: ethtool list features
   # PASS: veth0: Turned off feature: rx-checksumming
   # PASS: veth0: Turned on feature: rx-checksumming
   # PASS: veth0: Restore feature rx-checksumming to initial state on
   # Actual changes:
   # tx-checksum-ip-generic: off

   ...

   # PASS: veth0: Turned on feature: rx-udp-gro-forwarding
   # PASS: veth0: Restore feature rx-udp-gro-forwarding to initial state off
   # Cannot get register dump: Operation not supported
   # XFAIL: veth0: ethtool dump not supported
   # PASS: veth0: ethtool stats
   # PASS: veth0: stop interface
====================

Link: https://patch.msgid.link/20240821171903.118324-1-jain.abhinav177@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 5874e0c9 8402a158
Loading
Loading
Loading
Loading
+56 −4
Original line number Diff line number Diff line
@@ -67,8 +67,12 @@ kci_net_setup()
		return $ksft_skip
	fi

	if [ "$veth_created" ]; then
		echo "XFAIL: $netdev: set IP address unsupported for veth*"
	else
		# TODO what ipaddr to set ? DHCP ?
		echo "SKIP: $netdev: set IP address"
	fi
	return $ksft_skip
}

@@ -86,7 +90,7 @@ kci_netdev_ethtool_test()
	ret=$?
	if [ $ret -ne 0 ];then
		if [ $ret -eq "$1" ];then
			echo "SKIP: $netdev: ethtool $2 not supported"
			echo "XFAIL: $netdev: ethtool $2 not supported"
			return $ksft_skip
		else
			echo "FAIL: $netdev: ethtool $2"
@@ -124,11 +128,45 @@ kci_netdev_ethtool()
		return 1
	fi
	echo "PASS: $netdev: ethtool list features"
	#TODO for each non fixed features, try to turn them on/off

	while read -r FEATURE VALUE FIXED; do
		[ "$FEATURE" != "Features" ] || continue # Skip "Features"
		[ "$FIXED" != "[fixed]" ] || continue # Skip fixed features
		feature="${FEATURE%:*}"

		ethtool --offload "$netdev" "$feature" off
		if [ $? -eq 0 ]; then
			echo "PASS: $netdev: Turned off feature: $feature"
		else
			echo "FAIL: $netdev: Failed to turn off feature:" \
				"$feature"
		fi

		ethtool --offload "$netdev" "$feature" on
		if [ $? -eq 0 ]; then
			echo "PASS: $netdev: Turned on feature: $feature"
		else
			echo "FAIL: $netdev: Failed to turn on feature:" \
				"$feature"
		fi

		#restore the feature to its initial state
		ethtool --offload "$netdev" "$feature" "$VALUE"
		if [ $? -eq 0 ]; then
			echo "PASS: $netdev: Restore feature $feature" \
				"to initial state $VALUE"
		else
			echo "FAIL: $netdev: Failed to restore feature" \
				"$feature to initial state $VALUE"
		fi

	done < "$TMP_ETHTOOL_FEATURES"

	rm "$TMP_ETHTOOL_FEATURES"

	kci_netdev_ethtool_test 74 'dump' "ethtool -d $netdev"
	kci_netdev_ethtool_test 94 'stats' "ethtool -S $netdev"

	return 0
}

@@ -196,10 +234,24 @@ if [ ! -e "$TMP_LIST_NETDEV" ];then
fi

ip link show |grep '^[0-9]' | grep -oE '[[:space:]].*eth[0-9]*:|[[:space:]].*enp[0-9]s[0-9]:' | cut -d\  -f2 | cut -d: -f1> "$TMP_LIST_NETDEV"

if [ ! -s "$TMP_LIST_NETDEV" ]; then
	echo "No valid network device found, creating veth pair"
	ip link add veth0 type veth peer name veth1
	echo "veth0" > "$TMP_LIST_NETDEV"
	veth_created=1
fi

while read netdev
do
	kci_test_netdev "$netdev"
done < "$TMP_LIST_NETDEV"

#clean up veth interface pair if it was created
if [ "$veth_created" ]; then
	ip link delete veth0
	echo "Removed veth pair"
fi

rm "$TMP_LIST_NETDEV"
exit 0