Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1677517 > unrolled thread

Re: [PATCH v2] selftests: add a generic testsuite for ethernet device

Started byFathi Boudra <fathi.boudra@linaro.org>
First post2017-06-29 10:30 +0200
Last post2017-07-01 08:50 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH v2] selftests: add a generic testsuite for ethernet device Fathi Boudra <fathi.boudra@linaro.org> - 2017-06-29 10:30 +0200
    Re: [PATCH v2] selftests: add a generic testsuite for ethernet device Corentin Labbe <clabbe.montjoie@gmail.com> - 2017-07-01 08:50 +0200

#1677517 — Re: [PATCH v2] selftests: add a generic testsuite for ethernet device

FromFathi Boudra <fathi.boudra@linaro.org>
Date2017-06-29 10:30 +0200
SubjectRe: [PATCH v2] selftests: add a generic testsuite for ethernet device
Message-ID<tXCZQ-5df-17@gated-at.bofh.it>
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

[toc] | [next] | [standalone]


#1679272

FromCorentin Labbe <clabbe.montjoie@gmail.com>
Date2017-07-01 08:50 +0200
Message-ID<tYko9-7W8-5@gated-at.bofh.it>
In reply to#1677517
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

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web