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.
Changes in v4: Move veth creation/removal to the main shell script. Tested using vng on a networkless kernel and the script works, sample output below the changes.
Changes in v3: https://lore.kernel.org/all/20240614113240.41550-1-jain.abhinav177@gmail.com...
Add a check for netdev, create veth pair for testing. Restore feature to its initial state.
Changes in v2: https://lore.kernel.org/all/20240609132124.51683-1-jain.abhinav177@gmail.com...
Remove tail usage; use read to parse the features from temp file.
v1: https://lore.kernel.org/all/20240606212714.27472-1-jain.abhinav177@gmail.com...
``` # selftests: net: netdevice.sh # No valid network device found, creating veth pair # PASS: veth0: set interface up # PASS: veth0: set MAC address # SKIP: veth0: set IP address # 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 # tx-tcp-segmentation: off [not requested] .... .... .... # PASS: veth1: Restore feature tx-nocache-copy to initial state off # PASS: veth1: Turned off feature: tx-vlan-stag-hw-insert # PASS: veth1: Turned on feature: tx-vlan-stag-hw-insert # PASS: veth1: Restore feature tx-vlan-stag-hw-insert to initial state on # PASS: veth1: Turned off feature: rx-vlan-stag-hw-parse # PASS: veth1: Turned on feature: rx-vlan-stag-hw-parse # PASS: veth1: Restore feature rx-vlan-stag-hw-parse to initial state on # PASS: veth1: Turned off feature: rx-gro-list # PASS: veth1: Turned on feature: rx-gro-list # PASS: veth1: Restore feature rx-gro-list to initial state off # PASS: veth1: Turned off feature: rx-udp-gro-forwarding # PASS: veth1: Turned on feature: rx-udp-gro-forwarding # PASS: veth1: Restore feature rx-udp-gro-forwarding to initial state off # Cannot get register dump: Operation not supported # SKIP: veth1: ethtool dump not supported # PASS: veth1: ethtool stats # PASS: veth1: stop interface # Removed veth pair ok 12 selftests: net: netdevice.sh ``` Abhinav Jain (2): selftests: net: Create veth pair for testing in networkless kernel selftests: net: Add on/off checks for non-fixed features of interface
tools/testing/selftests/net/netdevice.sh | 55 +++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-)
-- 2.34.1
Check if the netdev list is empty and create veth pair to be used for feature on/off testing. Remove the veth pair after testing is complete.
Signed-off-by: Abhinav Jain jain.abhinav177@gmail.com --- tools/testing/selftests/net/netdevice.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/tools/testing/selftests/net/netdevice.sh b/tools/testing/selftests/net/netdevice.sh index e3afcb424710..279c44271047 100755 --- a/tools/testing/selftests/net/netdevice.sh +++ b/tools/testing/selftests/net/netdevice.sh @@ -129,6 +129,7 @@ kci_netdev_ethtool()
kci_netdev_ethtool_test 74 'dump' "ethtool -d $netdev" kci_netdev_ethtool_test 94 'stats' "ethtool -S $netdev" + return 0 }
@@ -196,10 +197,27 @@ 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" + +veth_created=0 + +if [ ! -s "$TMP_LIST_NETDEV" ]; then + echo "No valid network device found, creating veth pair" + ip link add veth0 type peer name veth1 + echo "veth0" > "$TMP_LIST_NETDEV" + echo "veth1" >> "$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
On Wed, 7 Aug 2024 18:28:34 -0700 Jakub Kicinski wrote:
That's not the right syntax..
Thanks for the feedback Jakub. I have rectified this and while at it, I tested using vng on a network based kernel and found another issue in veth removal logic. I have fixed that as well.
Please kindly check the v5 series here: https://lore.kernel.org/all/20240808122452.25683-1-jain.abhinav177@gmail.com... ---
On Thu, 8 Aug 2024 12:28:47 +0000 Abhinav Jain wrote:
On Wed, 7 Aug 2024 18:28:34 -0700 Jakub Kicinski wrote:
That's not the right syntax..
Thanks for the feedback Jakub. I have rectified this and while at it, I tested using vng on a network based kernel and found another issue in veth removal logic. I have fixed that as well.
Please kindly check the v5 series here
I'll take a look, but please try to follow the guidance in our process doc: https://www.kernel.org/doc/html/next/process/maintainer-netdev.html
Implement on/off testing for all non-fixed features via while loop. Save the initial state so that it can be restored after on/off checks.
Signed-off-by: Abhinav Jain jain.abhinav177@gmail.com --- tools/testing/selftests/net/netdevice.sh | 37 +++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/netdevice.sh b/tools/testing/selftests/net/netdevice.sh index 279c44271047..c47fb984616d 100755 --- a/tools/testing/selftests/net/netdevice.sh +++ b/tools/testing/selftests/net/netdevice.sh @@ -124,7 +124,42 @@ 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%:*}" + + initial_state=$(ethtool -k "$netdev" | grep "$feature:" \ + | awk '{print $2}') + 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" "$initial_state" + if [ $? -eq 0 ]; then + echo "PASS: $netdev: Restore feature $feature" \ + "to initial state $initial_state" + else + echo "FAIL: $netdev: Failed to restore feature" \ + "$feature to default $initial_state" + fi + + done < "$TMP_ETHTOOL_FEATURES" + rm "$TMP_ETHTOOL_FEATURES"
kci_netdev_ethtool_test 74 'dump' "ethtool -d $netdev"
linux-kselftest-mirror@lists.linaro.org