All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] selftests: add a generic testsuite for ethernet device
@ 2017-04-04 13:32 Corentin Labbe
  2017-04-04 14:24 ` Andrew Lunn
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Corentin Labbe @ 2017-04-04 13:32 UTC (permalink / raw)
  To: shuah, davem, andrew, linux-kselftest
  Cc: linux-kernel, netdev, Corentin Labbe

This patch add a generic testsuite for testing ethernet network device driver.

Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---

Changes since v1:
- Test for starting master interface
- Changed printing format to "RESULT: $netdev: line"
- Use "ip link" to get device list

 tools/testing/selftests/net/Makefile     |   2 +-
 tools/testing/selftests/net/netdevice.sh | 200 +++++++++++++++++++++++++++++++
 2 files changed, 201 insertions(+), 1 deletion(-)
 create mode 100755 tools/testing/selftests/net/netdevice.sh

diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
index fbfe5d0..35cbb4c 100644
--- a/tools/testing/selftests/net/Makefile
+++ b/tools/testing/selftests/net/Makefile
@@ -5,7 +5,7 @@ CFLAGS += -I../../../../usr/include/
 
 reuseport_bpf_numa: LDFLAGS += -lnuma
 
-TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh
+TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh
 TEST_GEN_FILES =  socket
 TEST_GEN_FILES += psock_fanout psock_tpacket
 TEST_GEN_FILES += reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa
diff --git a/tools/testing/selftests/net/netdevice.sh b/tools/testing/selftests/net/netdevice.sh
new file mode 100755
index 0000000..4e00568
--- /dev/null
+++ b/tools/testing/selftests/net/netdevice.sh
@@ -0,0 +1,200 @@
+#!/bin/sh
+#
+# This test is for checking network interface
+# For the moment it tests only ethernet interface (but wifi could be easily added)
+#
+# We assume that all network driver are loaded
+# if not they probably have failed earlier in the boot process and their logged error will be catched by another test
+#
+
+# this function will try to up the interface
+# if already up, nothing done
+# arg1: network interface name
+kci_net_start()
+{
+	netdev=$1
+
+	ip link show "$netdev" |grep -q UP
+	if [ $? -eq 0 ];then
+		echo "SKIP: $netdev: interface already up"
+		return 0
+	fi
+
+	ip link set "$netdev" up
+	if [ $? -ne 0 ];then
+		echo "FAIL: $netdev: Fail to up interface"
+		return 1
+	else
+		echo "PASS: $netdev: set interface up"
+		NETDEV_STARTED=1
+	fi
+	return 0
+}
+
+# this function will try to setup an IP and MAC address on a network interface
+# Doing nothing if the interface was already up
+# arg1: network interface name
+kci_net_setup()
+{
+	netdev=$1
+
+	# do nothing if the interface was already up
+	if [ $NETDEV_STARTED -eq 0 ];then
+		return 0
+	fi
+
+	MACADDR='02:03:04:05:06:07'
+	ip link set dev $netdev address "$MACADDR"
+	if [ $? -ne 0 ];then
+		echo "FAIL: $netdev: Cannot set MAC address"
+	else
+		ip link show $netdev |grep -q "$MACADDR"
+		if [ $? -eq 0 ];then
+			echo "PASS: $netdev: set MAC address"
+		else
+			echo "FAIL: $netdev: Cannot set MAC address"
+		fi
+	fi
+
+	#check that the interface did not already have an IP
+	ip address show "$netdev" |grep '^[[:space:]]*inet'
+	if [ $? -eq 0 ];then
+		echo "SKIP: $netdev: already have an IP"
+		return 0
+	fi
+
+	# TODO what ipaddr to set ? DHCP ?
+	echo "SKIP: $netdev: set IP address"
+	return 0
+}
+
+# test an ethtool command
+# arg1: return code for not supported (see ethtool code source)
+# arg2: summary of the command
+# arg3: command to execute
+kci_netdev_ethtool_test()
+{
+	if [ $# -le 2 ];then
+		echo "SKIP: $netdev: ethtool: invalid number of arguments"
+		return 1
+	fi
+	$3 >/dev/null
+	ret=$?
+	if [ $ret -ne 0 ];then
+		if [ $ret -eq "$1" ];then
+			echo "SKIP: $netdev: ethtool $2 not supported"
+		else
+			echo "FAIL: $netdev: ethtool $2"
+			return 1
+		fi
+	else
+		echo "PASS: $netdev: ethtool $2"
+	fi
+	return 0
+}
+
+# test ethtool commands
+# arg1: network interface name
+kci_netdev_ethtool()
+{
+	netdev=$1
+
+	#check presence of ethtool
+	ethtool --version 2>/dev/null >/dev/null
+	if [ $? -ne 0 ];then
+		echo "SKIP: ethtool not present"
+		return 1
+	fi
+
+	TMP_ETHTOOL_FEATURES="$(mktemp)"
+	if [ ! -e "$TMP_ETHTOOL_FEATURES" ];then
+		echo "SKIP: Cannot create a tmp file"
+		return 1
+	fi
+
+	ethtool -k "$netdev" > "$TMP_ETHTOOL_FEATURES"
+	if [ $? -ne 0 ];then
+		echo "FAIL: $netdev: ethtool list features"
+		rm "$TMP_ETHTOOL_FEATURES"
+		return 1
+	fi
+	echo "PASS: $netdev: ethtool list features"
+	#TODO for each non fixed features, try to turn them on/off
+	rm "$TMP_ETHTOOL_FEATURES"
+
+	kci_netdev_ethtool_test 74 'dump' "ethtool -d $netdev"
+	kci_netdev_ethtool_test 94 'stats' "ethtool -S $netdev"
+	return 0
+}
+
+# stop a netdev
+# arg1: network interface name
+kci_netdev_stop()
+{
+	netdev=$1
+
+	if [ $NETDEV_STARTED -eq 0 ];then
+		echo "SKIP: $netdev: interface kept up"
+		return 0
+	fi
+
+	ip link set "$netdev" down
+	if [ $? -ne 0 ];then
+		echo "FAIL: $netdev: stop interface"
+		return 1
+	fi
+	echo "PASS: $netdev: stop interface"
+	return 0
+}
+
+# run all test on a netdev
+# arg1: network interface name
+kci_test_netdev()
+{
+	NETDEV_STARTED=0
+	IFACE_TO_UPDOWN="$1"
+	IFACE_TO_TEST="$1"
+	#check for VLAN interface
+	MASTER_IFACE="$(echo $1 | cut -d@ -f2)"
+	if [ ! -z "$MASTER_IFACE" ];then
+		IFACE_TO_UPDOWN="$MASTER_IFACE"
+		IFACE_TO_TEST="$(echo $1 | cut -d@ -f1)"
+	fi
+
+	NETDEV_STARTED=0
+	kci_net_start "$IFACE_TO_UPDOWN"
+
+	kci_net_setup "$IFACE_TO_TEST"
+
+	kci_netdev_ethtool "$IFACE_TO_TEST"
+
+	kci_netdev_stop "$IFACE_TO_UPDOWN"
+	return 0
+}
+
+#check for needed privileges
+if [ "$(id -u)" -ne 0 ];then
+	echo "SKIP: Need root privileges"
+	exit 0
+fi
+
+ip -Version 2>/dev/null >/dev/null
+if [ $? -ne 0 ];then
+	echo "SKIP: Could not run test without the ip tool"
+	exit 0
+fi
+
+TMP_LIST_NETDEV="$(mktemp)"
+if [ ! -e "$TMP_LIST_NETDEV" ];then
+	echo "FAIL: Cannot create a tmp file"
+	exit 1
+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"
+while read netdev
+do
+	kci_test_netdev "$netdev"
+done < "$TMP_LIST_NETDEV"
+
+rm "$TMP_LIST_NETDEV"
+exit 0
-- 
2.10.2

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] selftests: add a generic testsuite for ethernet device
  2017-04-04 13:32 [PATCH v2] selftests: add a generic testsuite for ethernet device Corentin Labbe
@ 2017-04-04 14:24 ` Andrew Lunn
  2017-04-04 14:43 ` Niklas Cassel
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Andrew Lunn @ 2017-04-04 14:24 UTC (permalink / raw)
  To: Corentin Labbe; +Cc: shuah, davem, linux-kselftest, linux-kernel, netdev

On Tue, Apr 04, 2017 at 03:32:47PM +0200, Corentin Labbe wrote:
> This patch add a generic testsuite for testing ethernet network device driver.

# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAUL0
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFA2
    link/ether 94:10:3e:80:bc:f3 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFA2
    link/ether a2:e2:da:92:7e:8c brd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default0
    link/sit 0.0.0.0 brd 0.0.0.0
5: lan4@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state 0
    link/ether 94:10:3e:80:bc:f3 brd ff:ff:ff:ff:ff:ff
6: lan3@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT0
    link/ether 94:10:3e:80:bc:f3 brd ff:ff:ff:ff:ff:ff
7: lan2@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state 0
    link/ether 94:10:3e:80:bc:f3 brd ff:ff:ff:ff:ff:ff
8: lan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP0
    link/ether 94:10:3e:80:bc:f3 brd ff:ff:ff:ff:ff:ff
9: internet@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue st0
    link/ether 94:10:3e:80:bc:f3 brd ff:ff:ff:ff:ff:ff

# /home/andrew/netdevice.sh 
[  151.417351] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
PASS: eth0: set interface up
PASS: eth0: set MAC address
SKIP: eth0: set IP address
PASS: eth0: ethtool list features
Cannot get register dump: Operation not supported
SKIP: eth0: ethtool dump not supported
PASS: eth0: ethtool stats
PASS: eth0: stop interface
SKIP: eth1: interface already up
PASS: eth1: ethtool list features
Cannot get register dump: Operation not supported
SKIP: eth1: ethtool dump not supported
PASS: eth1: ethtool stats
SKIP: eth1: interface kept up
PASS: eth0: set interface up
PASS: lan4: set MAC address
    inet 192.168.13.2/24 brd 192.168.13.255 scope global lan4
SKIP: lan4: already have an IP
PASS: lan4: ethtool list features
PASS: lan4: ethtool dump
PASS: lan4: ethtool stats
PASS: eth0: stop interface
PASS: eth0: set interface up
PASS: lan3: set MAC address
SKIP: lan3: set IP address
PASS: lan3: ethtool list features
PASS: lan3: ethtool dump
PASS: lan3: ethtool stats
PASS: eth0: stop interface
PASS: eth0: set interface up
PASS: lan2: set MAC address
SKIP: lan2: set IP address
PASS: lan2: ethtool list features
PASS: lan2: ethtool dump
PASS: lan2: ethtool stats
PASS: eth0: stop interface
PASS: eth0: set interface up
PASS: lan1: set MAC address
    inet 10.0.0.12/24 brd 10.0.0.255 scope global lan1
SKIP: lan1: already have an IP
PASS: lan1: ethtool list features
PASS: lan1: ethtool dump
PASS: lan1: ethtool stats
PASS: eth0: stop interface
PASS: eth0: set interface up
PASS: internet: set MAC address
    inet 192.168.10.2/24 brd 192.168.10.255 scope global internet
SKIP: internet: already have an IP
PASS: internet: ethtool list features
PASS: internet: ethtool dump
PASS: internet: ethtool stats
PASS: eth0: stop interface

Cool

Tested-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] selftests: add a generic testsuite for ethernet device
  2017-04-04 13:32 [PATCH v2] selftests: add a generic testsuite for ethernet device Corentin Labbe
  2017-04-04 14:24 ` Andrew Lunn
@ 2017-04-04 14:43 ` Niklas Cassel
  2017-04-04 14:50   ` Corentin Labbe
  2017-04-04 15:00   ` Andrew Lunn
  2017-04-05 15:30 ` David Miller
  2017-06-29  8:26 ` Fathi Boudra
  3 siblings, 2 replies; 8+ messages in thread
From: Niklas Cassel @ 2017-04-04 14:43 UTC (permalink / raw)
  To: Corentin Labbe, shuah, davem, andrew, linux-kselftest
  Cc: linux-kernel, netdev

On 04/04/2017 03:32 PM, Corentin Labbe wrote:
> This patch add a generic testsuite for testing ethernet network device driver.
> 
> Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> ---
> 
> Changes since v1:
> - Test for starting master interface
> - Changed printing format to "RESULT: $netdev: line"
> - Use "ip link" to get device list
> 
>  tools/testing/selftests/net/Makefile     |   2 +-
>  tools/testing/selftests/net/netdevice.sh | 200 +++++++++++++++++++++++++++++++
>  2 files changed, 201 insertions(+), 1 deletion(-)
>  create mode 100755 tools/testing/selftests/net/netdevice.sh
> 
(snip)

Good work!

I suggest adding a test for setting MTU as well.
It doesn't have to be added before merging, but it
would be great if it could be added in the near future.


Regards,
Niklas

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] selftests: add a generic testsuite for ethernet device
  2017-04-04 14:43 ` Niklas Cassel
@ 2017-04-04 14:50   ` Corentin Labbe
  2017-04-04 15:00   ` Andrew Lunn
  1 sibling, 0 replies; 8+ messages in thread
From: Corentin Labbe @ 2017-04-04 14:50 UTC (permalink / raw)
  To: Niklas Cassel; +Cc: shuah, davem, andrew, linux-kselftest, linux-kernel, netdev

On Tue, Apr 04, 2017 at 04:43:19PM +0200, Niklas Cassel wrote:
> On 04/04/2017 03:32 PM, Corentin Labbe wrote:
> > This patch add a generic testsuite for testing ethernet network device driver.
> > 
> > Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> > ---
> > 
> > Changes since v1:
> > - Test for starting master interface
> > - Changed printing format to "RESULT: $netdev: line"
> > - Use "ip link" to get device list
> > 
> >  tools/testing/selftests/net/Makefile     |   2 +-
> >  tools/testing/selftests/net/netdevice.sh | 200 +++++++++++++++++++++++++++++++
> >  2 files changed, 201 insertions(+), 1 deletion(-)
> >  create mode 100755 tools/testing/selftests/net/netdevice.sh
> > 
> (snip)
> 
> Good work!
> 
> I suggest adding a test for setting MTU as well.
> It doesn't have to be added before merging, but it
> would be great if it could be added in the near future.
> 
> 
> Regards,
> Niklas

I already have it but prefer to add few test and add the rest one by one.
But yes, I should add it as TODO like set ipaddr.

Regards

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] selftests: add a generic testsuite for ethernet device
  2017-04-04 14:43 ` Niklas Cassel
  2017-04-04 14:50   ` Corentin Labbe
@ 2017-04-04 15:00   ` Andrew Lunn
  1 sibling, 0 replies; 8+ messages in thread
From: Andrew Lunn @ 2017-04-04 15:00 UTC (permalink / raw)
  To: Niklas Cassel
  Cc: Corentin Labbe, shuah, davem, linux-kselftest, linux-kernel, netdev

On Tue, Apr 04, 2017 at 04:43:19PM +0200, Niklas Cassel wrote:
> On 04/04/2017 03:32 PM, Corentin Labbe wrote:
> > This patch add a generic testsuite for testing ethernet network device driver.
> > 
> > Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> > ---
> > 
> > Changes since v1:
> > - Test for starting master interface
> > - Changed printing format to "RESULT: $netdev: line"
> > - Use "ip link" to get device list
> > 
> >  tools/testing/selftests/net/Makefile     |   2 +-
> >  tools/testing/selftests/net/netdevice.sh | 200 +++++++++++++++++++++++++++++++
> >  2 files changed, 201 insertions(+), 1 deletion(-)
> >  create mode 100755 tools/testing/selftests/net/netdevice.sh
> > 
> (snip)
> 
> Good work!
> 
> I suggest adding a test for setting MTU as well.

That one might be tricky. Some devices don't allow the MTU to be
changed when the device is up. Others might require the interface is
up...

	Andrew

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] selftests: add a generic testsuite for ethernet device
  2017-04-04 13:32 [PATCH v2] selftests: add a generic testsuite for ethernet device Corentin Labbe
  2017-04-04 14:24 ` Andrew Lunn
  2017-04-04 14:43 ` Niklas Cassel
@ 2017-04-05 15:30 ` David Miller
  2017-06-29  8:26 ` Fathi Boudra
  3 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2017-04-05 15:30 UTC (permalink / raw)
  To: clabbe.montjoie; +Cc: shuah, andrew, linux-kselftest, linux-kernel, netdev

From: Corentin Labbe <clabbe.montjoie@gmail.com>
Date: Tue,  4 Apr 2017 15:32:47 +0200

> This patch add a generic testsuite for testing ethernet network device driver.
> 
> Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> ---
> 
> Changes since v1:
> - Test for starting master interface
> - Changed printing format to "RESULT: $netdev: line"
> - Use "ip link" to get device list

Applied, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] selftests: add a generic testsuite for ethernet device
  2017-04-04 13:32 [PATCH v2] selftests: add a generic testsuite for ethernet device Corentin Labbe
                   ` (2 preceding siblings ...)
  2017-04-05 15:30 ` David Miller
@ 2017-06-29  8:26 ` Fathi Boudra
  2017-07-01  6:42   ` Corentin Labbe
  3 siblings, 1 reply; 8+ messages in thread
From: Fathi Boudra @ 2017-06-29  8:26 UTC (permalink / raw)
  To: Corentin Labbe
  Cc: Shuah Khan, davem, andrew, linux-kselftest, linux-kernel, netdev

On 4 April 2017 at 16:32, Corentin Labbe <clabbe.montjoie@gmail.com> wrote:
> This patch add a generic testsuite for testing ethernet network device driver.
>
> Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> ---
>
> Changes since v1:
> - Test for starting master interface
> - Changed printing format to "RESULT: $netdev: line"
> - Use "ip link" to get device list
>
>  tools/testing/selftests/net/Makefile     |   2 +-
>  tools/testing/selftests/net/netdevice.sh | 200 +++++++++++++++++++++++++++++++
>  2 files changed, 201 insertions(+), 1 deletion(-)
>  create mode 100755 tools/testing/selftests/net/netdevice.sh
>
> diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
> index fbfe5d0..35cbb4c 100644
> --- a/tools/testing/selftests/net/Makefile
> +++ b/tools/testing/selftests/net/Makefile
> @@ -5,7 +5,7 @@ CFLAGS += -I../../../../usr/include/
>
>  reuseport_bpf_numa: LDFLAGS += -lnuma
>
> -TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh
> +TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh
>  TEST_GEN_FILES =  socket
>  TEST_GEN_FILES += psock_fanout psock_tpacket
>  TEST_GEN_FILES += reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa
> diff --git a/tools/testing/selftests/net/netdevice.sh b/tools/testing/selftests/net/netdevice.sh
> new file mode 100755
> index 0000000..4e00568
> --- /dev/null
> +++ b/tools/testing/selftests/net/netdevice.sh
> @@ -0,0 +1,200 @@
> +#!/bin/sh
> +#
> +# This test is for checking network interface
> +# For the moment it tests only ethernet interface (but wifi could be easily added)
> +#
> +# We assume that all network driver are loaded
> +# if not they probably have failed earlier in the boot process and their logged error will be catched by another test
> +#
> +
> +# this function will try to up the interface
> +# if already up, nothing done
> +# arg1: network interface name
> +kci_net_start()
> +{
> +       netdev=$1
> +
> +       ip link show "$netdev" |grep -q UP
> +       if [ $? -eq 0 ];then
> +               echo "SKIP: $netdev: interface already up"
> +               return 0
> +       fi
> +
> +       ip link set "$netdev" up
> +       if [ $? -ne 0 ];then
> +               echo "FAIL: $netdev: Fail to up interface"
> +               return 1
> +       else
> +               echo "PASS: $netdev: set interface up"
> +               NETDEV_STARTED=1
> +       fi
> +       return 0
> +}
> +
> +# this function will try to setup an IP and MAC address on a network interface
> +# Doing nothing if the interface was already up
> +# arg1: network interface name
> +kci_net_setup()
> +{
> +       netdev=$1
> +
> +       # do nothing if the interface was already up
> +       if [ $NETDEV_STARTED -eq 0 ];then
> +               return 0
> +       fi
> +
> +       MACADDR='02:03:04:05:06:07'
> +       ip link set dev $netdev address "$MACADDR"
> +       if [ $? -ne 0 ];then
> +               echo "FAIL: $netdev: Cannot set MAC address"
> +       else
> +               ip link show $netdev |grep -q "$MACADDR"
> +               if [ $? -eq 0 ];then
> +                       echo "PASS: $netdev: set MAC address"
> +               else
> +                       echo "FAIL: $netdev: Cannot set MAC address"
> +               fi
> +       fi
> +
> +       #check that the interface did not already have an IP
> +       ip address show "$netdev" |grep '^[[:space:]]*inet'
> +       if [ $? -eq 0 ];then
> +               echo "SKIP: $netdev: already have an IP"
> +               return 0
> +       fi
> +
> +       # TODO what ipaddr to set ? DHCP ?
> +       echo "SKIP: $netdev: set IP address"
> +       return 0
> +}
> +
> +# test an ethtool command
> +# arg1: return code for not supported (see ethtool code source)
> +# arg2: summary of the command
> +# arg3: command to execute
> +kci_netdev_ethtool_test()
> +{
> +       if [ $# -le 2 ];then
> +               echo "SKIP: $netdev: ethtool: invalid number of arguments"
> +               return 1
> +       fi
> +       $3 >/dev/null
> +       ret=$?
> +       if [ $ret -ne 0 ];then
> +               if [ $ret -eq "$1" ];then
> +                       echo "SKIP: $netdev: ethtool $2 not supported"
> +               else
> +                       echo "FAIL: $netdev: ethtool $2"
> +                       return 1
> +               fi
> +       else
> +               echo "PASS: $netdev: ethtool $2"
> +       fi
> +       return 0
> +}
> +
> +# test ethtool commands
> +# arg1: network interface name
> +kci_netdev_ethtool()
> +{
> +       netdev=$1
> +
> +       #check presence of ethtool
> +       ethtool --version 2>/dev/null >/dev/null
> +       if [ $? -ne 0 ];then
> +               echo "SKIP: ethtool not present"
> +               return 1
> +       fi
> +
> +       TMP_ETHTOOL_FEATURES="$(mktemp)"
> +       if [ ! -e "$TMP_ETHTOOL_FEATURES" ];then
> +               echo "SKIP: Cannot create a tmp file"
> +               return 1
> +       fi
> +
> +       ethtool -k "$netdev" > "$TMP_ETHTOOL_FEATURES"
> +       if [ $? -ne 0 ];then
> +               echo "FAIL: $netdev: ethtool list features"
> +               rm "$TMP_ETHTOOL_FEATURES"
> +               return 1
> +       fi
> +       echo "PASS: $netdev: ethtool list features"
> +       #TODO for each non fixed features, try to turn them on/off
> +       rm "$TMP_ETHTOOL_FEATURES"
> +
> +       kci_netdev_ethtool_test 74 'dump' "ethtool -d $netdev"
> +       kci_netdev_ethtool_test 94 'stats' "ethtool -S $netdev"
> +       return 0
> +}
> +
> +# stop a netdev
> +# arg1: network interface name
> +kci_netdev_stop()
> +{
> +       netdev=$1
> +
> +       if [ $NETDEV_STARTED -eq 0 ];then
> +               echo "SKIP: $netdev: interface kept up"
> +               return 0
> +       fi
> +
> +       ip link set "$netdev" down
> +       if [ $? -ne 0 ];then
> +               echo "FAIL: $netdev: stop interface"
> +               return 1
> +       fi
> +       echo "PASS: $netdev: stop interface"
> +       return 0
> +}
> +
> +# run all test on a netdev
> +# arg1: network interface name
> +kci_test_netdev()
> +{
> +       NETDEV_STARTED=0
> +       IFACE_TO_UPDOWN="$1"
> +       IFACE_TO_TEST="$1"
> +       #check for VLAN interface
> +       MASTER_IFACE="$(echo $1 | cut -d@ -f2)"
> +       if [ ! -z "$MASTER_IFACE" ];then
> +               IFACE_TO_UPDOWN="$MASTER_IFACE"
> +               IFACE_TO_TEST="$(echo $1 | cut -d@ -f1)"
> +       fi
> +
> +       NETDEV_STARTED=0
> +       kci_net_start "$IFACE_TO_UPDOWN"
> +
> +       kci_net_setup "$IFACE_TO_TEST"
> +
> +       kci_netdev_ethtool "$IFACE_TO_TEST"
> +
> +       kci_netdev_stop "$IFACE_TO_UPDOWN"
> +       return 0
> +}
> +
> +#check for needed privileges
> +if [ "$(id -u)" -ne 0 ];then
> +       echo "SKIP: Need root privileges"
> +       exit 0
> +fi
> +
> +ip -Version 2>/dev/null >/dev/null

is the test supposed to work with busybox's ip or only with iproute2 version?

# ip -Version
BusyBox v1.24.1 (2017-06-14 13:46:50 UTC) multi-call binary.

Usage: ip [OPTIONS] {address | route | link | tunnel | } {COMMAND}

> +if [ $? -ne 0 ];then
> +       echo "SKIP: Could not run test without the ip tool"
> +       exit 0
> +fi
> +
> +TMP_LIST_NETDEV="$(mktemp)"
> +if [ ! -e "$TMP_LIST_NETDEV" ];then
> +       echo "FAIL: Cannot create a tmp file"
> +       exit 1
> +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"
> +while read netdev
> +do
> +       kci_test_netdev "$netdev"
> +done < "$TMP_LIST_NETDEV"
> +
> +rm "$TMP_LIST_NETDEV"
> +exit 0
> --
> 2.10.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] selftests: add a generic testsuite for ethernet device
  2017-06-29  8:26 ` Fathi Boudra
@ 2017-07-01  6:42   ` Corentin Labbe
  0 siblings, 0 replies; 8+ messages in thread
From: Corentin Labbe @ 2017-07-01  6:42 UTC (permalink / raw)
  To: Fathi Boudra
  Cc: Shuah Khan, davem, andrew, linux-kselftest, linux-kernel, netdev

On Thu, Jun 29, 2017 at 11:26:40AM +0300, Fathi Boudra wrote:
> On 4 April 2017 at 16:32, Corentin Labbe <clabbe.montjoie@gmail.com> wrote:
> > This patch add a generic testsuite for testing ethernet network device driver.
> >
> > Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> > ---
> >
> > Changes since v1:
> > - Test for starting master interface
> > - Changed printing format to "RESULT: $netdev: line"
> > - Use "ip link" to get device list
> >
> >  tools/testing/selftests/net/Makefile     |   2 +-
> >  tools/testing/selftests/net/netdevice.sh | 200 +++++++++++++++++++++++++++++++
> >  2 files changed, 201 insertions(+), 1 deletion(-)
> >  create mode 100755 tools/testing/selftests/net/netdevice.sh
> >
> > diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
> > index fbfe5d0..35cbb4c 100644
> > --- a/tools/testing/selftests/net/Makefile
> > +++ b/tools/testing/selftests/net/Makefile
> > @@ -5,7 +5,7 @@ CFLAGS += -I../../../../usr/include/
> >
> >  reuseport_bpf_numa: LDFLAGS += -lnuma
> >
> > -TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh
> > +TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh
> >  TEST_GEN_FILES =  socket
> >  TEST_GEN_FILES += psock_fanout psock_tpacket
> >  TEST_GEN_FILES += reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa
> > diff --git a/tools/testing/selftests/net/netdevice.sh b/tools/testing/selftests/net/netdevice.sh
> > new file mode 100755
> > index 0000000..4e00568
> > --- /dev/null
> > +++ b/tools/testing/selftests/net/netdevice.sh
> > @@ -0,0 +1,200 @@
> > +#!/bin/sh
> > +#
> > +# This test is for checking network interface
> > +# For the moment it tests only ethernet interface (but wifi could be easily added)
> > +#
> > +# We assume that all network driver are loaded
> > +# if not they probably have failed earlier in the boot process and their logged error will be catched by another test
> > +#
> > +
> > +# this function will try to up the interface
> > +# if already up, nothing done
> > +# arg1: network interface name
> > +kci_net_start()
> > +{
> > +       netdev=$1
> > +
> > +       ip link show "$netdev" |grep -q UP
> > +       if [ $? -eq 0 ];then
> > +               echo "SKIP: $netdev: interface already up"
> > +               return 0
> > +       fi
> > +
> > +       ip link set "$netdev" up
> > +       if [ $? -ne 0 ];then
> > +               echo "FAIL: $netdev: Fail to up interface"
> > +               return 1
> > +       else
> > +               echo "PASS: $netdev: set interface up"
> > +               NETDEV_STARTED=1
> > +       fi
> > +       return 0
> > +}
> > +
> > +# this function will try to setup an IP and MAC address on a network interface
> > +# Doing nothing if the interface was already up
> > +# arg1: network interface name
> > +kci_net_setup()
> > +{
> > +       netdev=$1
> > +
> > +       # do nothing if the interface was already up
> > +       if [ $NETDEV_STARTED -eq 0 ];then
> > +               return 0
> > +       fi
> > +
> > +       MACADDR='02:03:04:05:06:07'
> > +       ip link set dev $netdev address "$MACADDR"
> > +       if [ $? -ne 0 ];then
> > +               echo "FAIL: $netdev: Cannot set MAC address"
> > +       else
> > +               ip link show $netdev |grep -q "$MACADDR"
> > +               if [ $? -eq 0 ];then
> > +                       echo "PASS: $netdev: set MAC address"
> > +               else
> > +                       echo "FAIL: $netdev: Cannot set MAC address"
> > +               fi
> > +       fi
> > +
> > +       #check that the interface did not already have an IP
> > +       ip address show "$netdev" |grep '^[[:space:]]*inet'
> > +       if [ $? -eq 0 ];then
> > +               echo "SKIP: $netdev: already have an IP"
> > +               return 0
> > +       fi
> > +
> > +       # TODO what ipaddr to set ? DHCP ?
> > +       echo "SKIP: $netdev: set IP address"
> > +       return 0
> > +}
> > +
> > +# test an ethtool command
> > +# arg1: return code for not supported (see ethtool code source)
> > +# arg2: summary of the command
> > +# arg3: command to execute
> > +kci_netdev_ethtool_test()
> > +{
> > +       if [ $# -le 2 ];then
> > +               echo "SKIP: $netdev: ethtool: invalid number of arguments"
> > +               return 1
> > +       fi
> > +       $3 >/dev/null
> > +       ret=$?
> > +       if [ $ret -ne 0 ];then
> > +               if [ $ret -eq "$1" ];then
> > +                       echo "SKIP: $netdev: ethtool $2 not supported"
> > +               else
> > +                       echo "FAIL: $netdev: ethtool $2"
> > +                       return 1
> > +               fi
> > +       else
> > +               echo "PASS: $netdev: ethtool $2"
> > +       fi
> > +       return 0
> > +}
> > +
> > +# test ethtool commands
> > +# arg1: network interface name
> > +kci_netdev_ethtool()
> > +{
> > +       netdev=$1
> > +
> > +       #check presence of ethtool
> > +       ethtool --version 2>/dev/null >/dev/null
> > +       if [ $? -ne 0 ];then
> > +               echo "SKIP: ethtool not present"
> > +               return 1
> > +       fi
> > +
> > +       TMP_ETHTOOL_FEATURES="$(mktemp)"
> > +       if [ ! -e "$TMP_ETHTOOL_FEATURES" ];then
> > +               echo "SKIP: Cannot create a tmp file"
> > +               return 1
> > +       fi
> > +
> > +       ethtool -k "$netdev" > "$TMP_ETHTOOL_FEATURES"
> > +       if [ $? -ne 0 ];then
> > +               echo "FAIL: $netdev: ethtool list features"
> > +               rm "$TMP_ETHTOOL_FEATURES"
> > +               return 1
> > +       fi
> > +       echo "PASS: $netdev: ethtool list features"
> > +       #TODO for each non fixed features, try to turn them on/off
> > +       rm "$TMP_ETHTOOL_FEATURES"
> > +
> > +       kci_netdev_ethtool_test 74 'dump' "ethtool -d $netdev"
> > +       kci_netdev_ethtool_test 94 'stats' "ethtool -S $netdev"
> > +       return 0
> > +}
> > +
> > +# stop a netdev
> > +# arg1: network interface name
> > +kci_netdev_stop()
> > +{
> > +       netdev=$1
> > +
> > +       if [ $NETDEV_STARTED -eq 0 ];then
> > +               echo "SKIP: $netdev: interface kept up"
> > +               return 0
> > +       fi
> > +
> > +       ip link set "$netdev" down
> > +       if [ $? -ne 0 ];then
> > +               echo "FAIL: $netdev: stop interface"
> > +               return 1
> > +       fi
> > +       echo "PASS: $netdev: stop interface"
> > +       return 0
> > +}
> > +
> > +# run all test on a netdev
> > +# arg1: network interface name
> > +kci_test_netdev()
> > +{
> > +       NETDEV_STARTED=0
> > +       IFACE_TO_UPDOWN="$1"
> > +       IFACE_TO_TEST="$1"
> > +       #check for VLAN interface
> > +       MASTER_IFACE="$(echo $1 | cut -d@ -f2)"
> > +       if [ ! -z "$MASTER_IFACE" ];then
> > +               IFACE_TO_UPDOWN="$MASTER_IFACE"
> > +               IFACE_TO_TEST="$(echo $1 | cut -d@ -f1)"
> > +       fi
> > +
> > +       NETDEV_STARTED=0
> > +       kci_net_start "$IFACE_TO_UPDOWN"
> > +
> > +       kci_net_setup "$IFACE_TO_TEST"
> > +
> > +       kci_netdev_ethtool "$IFACE_TO_TEST"
> > +
> > +       kci_netdev_stop "$IFACE_TO_UPDOWN"
> > +       return 0
> > +}
> > +
> > +#check for needed privileges
> > +if [ "$(id -u)" -ne 0 ];then
> > +       echo "SKIP: Need root privileges"
> > +       exit 0
> > +fi
> > +
> > +ip -Version 2>/dev/null >/dev/null
> 
> is the test supposed to work with busybox's ip or only with iproute2 version?
> 
> # ip -Version
> BusyBox v1.24.1 (2017-06-14 13:46:50 UTC) multi-call binary.
> 
> Usage: ip [OPTIONS] {address | route | link | tunnel | } {COMMAND}
> 

Hello

Since I have forgotten that busybox have the ip tool, I have tested only with iproute2.
But someone just sent a patch for handling busybox ip.

Regards

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-07-01  6:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-04 13:32 [PATCH v2] selftests: add a generic testsuite for ethernet device Corentin Labbe
2017-04-04 14:24 ` Andrew Lunn
2017-04-04 14:43 ` Niklas Cassel
2017-04-04 14:50   ` Corentin Labbe
2017-04-04 15:00   ` Andrew Lunn
2017-04-05 15:30 ` David Miller
2017-06-29  8:26 ` Fathi Boudra
2017-07-01  6:42   ` Corentin Labbe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.