[PATCH net-next 3/3] selftests: ethtool: Introduce ethernet PHY selftests on netdevsim

Maxime Chevallier posted 3 patches 3 months, 1 week ago
There is a newer version of this series
[PATCH net-next 3/3] selftests: ethtool: Introduce ethernet PHY selftests on netdevsim
Posted by Maxime Chevallier 3 months, 1 week ago
Now that netdevsim supports PHY device simulation, we can start writing
some tests to cover a little bit all PHY-related ethtool commands.

So far we only test the basic use of "ethtool --show-phys", with :
 - A simple command to get a PHY we just added
 - A DUMP command listing PHYs on multiple netdevsim instances
 - A Filtered DUMP command listing all PHYs on a netdevsim

Introduce some helpers to create netdevsim PHYs, and a new test file.

Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
 .../selftests/drivers/net/netdevsim/config    |  1 +
 .../drivers/net/netdevsim/ethtool-common.sh   | 15 +++++
 .../drivers/net/netdevsim/ethtool-phy.sh      | 64 +++++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 100755 tools/testing/selftests/drivers/net/netdevsim/ethtool-phy.sh

diff --git a/tools/testing/selftests/drivers/net/netdevsim/config b/tools/testing/selftests/drivers/net/netdevsim/config
index 5117c78ddf0a..223e82cb7759 100644
--- a/tools/testing/selftests/drivers/net/netdevsim/config
+++ b/tools/testing/selftests/drivers/net/netdevsim/config
@@ -6,6 +6,7 @@ CONFIG_NETDEVSIM=m
 CONFIG_NET_SCH_MQPRIO=y
 CONFIG_NET_SCH_MULTIQ=y
 CONFIG_NET_SCH_PRIO=y
+CONFIG_PHYLIB=m
 CONFIG_PSAMPLE=y
 CONFIG_PTP_1588_CLOCK_MOCK=y
 CONFIG_VXLAN=m
diff --git a/tools/testing/selftests/drivers/net/netdevsim/ethtool-common.sh b/tools/testing/selftests/drivers/net/netdevsim/ethtool-common.sh
index d9c7a3d397a9..1bd0ac5e7bba 100644
--- a/tools/testing/selftests/drivers/net/netdevsim/ethtool-common.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/ethtool-common.sh
@@ -53,3 +53,18 @@ function make_netdev {
     # get new device name
     ls /sys/bus/netdevsim/devices/netdevsim${NSIM_ID}/net/
 }
+
+function make_phydev_on_netdev {
+    local parent_ndev_nsim_id=$1
+    local parent=$2
+
+    local ndev_dfs=/sys/kernel/debug/netdevsim/netdevsim$parent_ndev_nsim_id/ports/0
+
+    old_dev_dfs=$(find $ndev_dfs -type d)
+    echo $parent > $ndev_dfs/phy_add
+    new_dev_dfs=$(find $ndev_dfs -type d)
+
+    # The new phydev name corresponds to the new file that was created. Its
+    # name isn't predictable.
+    echo $old_dev_dfs $new_dev_dfs | xargs -n1 | sort  | uniq -u
+}
diff --git a/tools/testing/selftests/drivers/net/netdevsim/ethtool-phy.sh b/tools/testing/selftests/drivers/net/netdevsim/ethtool-phy.sh
new file mode 100755
index 000000000000..7b740a3fda1d
--- /dev/null
+++ b/tools/testing/selftests/drivers/net/netdevsim/ethtool-phy.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0-only
+
+source ethtool-common.sh
+
+# Bail if ethtool is too old
+if ! ethtool -h | grep show-phys 2>&1 >/dev/null; then
+    echo "SKIP: No --show-phys support in ethtool"
+    exit 4
+fi
+
+function make_netdev_from_id {
+    local new_nsim_id="$1"
+    # Make a netdevsim
+    echo $new_nsim_id > /sys/bus/netdevsim/new_device
+    udevadm settle
+    # get new device name
+    ls /sys/bus/netdevsim/devices/netdevsim${new_nsim_id}/net/
+}
+
+function cleanup_netdev_from_id {
+    local to_del_nsim_id="$1"
+    echo $to_del_nsim_id > /sys/bus/netdevsim/del_device
+}
+
+NSIM_NETDEV=$(make_netdev)
+
+set -o pipefail
+
+# Check simple PHY addition and listing
+
+# Parent == 0 means that the PHY's parent is the netdev
+PHY_DFS=$(make_phydev_on_netdev $NSIM_ID 0)
+
+# First PHY gets index 1
+index=$(ethtool --show-phys $NSIM_NETDEV | grep "PHY index" | cut -d ' ' -f 3)
+check $? "$index" "1"
+
+# Insert a second PHY, same parent. It gets index 2.
+PHY2_DFS=$(make_phydev_on_netdev $NSIM_ID 0)
+
+# Create another netdev
+NSIM_ID2=$((RANDOM % 1024))
+NSIM_NETDEV_2=$(make_netdev_from_id "$NSIM_ID2")
+
+PHY3_DFS=$(make_phydev_on_netdev $NSIM_ID2 0);
+
+# Check unfiltered PHY Dump
+n_phy=$(ethtool --show-phys '*' | grep "PHY index" | wc -l)
+check $? "$n_phy" "3"
+
+# Check filtered Dump
+n_phy=$(ethtool --show-phys $NSIM_NETDEV | grep "PHY index" | wc -l)
+check $? "$n_phy" "2"
+
+cleanup_netdev_from_id $NSIM_ID2
+
+if [ $num_errors -eq 0 ]; then
+    echo "PASSED all $((num_passes)) checks"
+    exit 0
+else
+    echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
+    exit 1
+fi
-- 
2.49.0
Re: [PATCH net-next 3/3] selftests: ethtool: Introduce ethernet PHY selftests on netdevsim
Posted by Simon Horman 3 months ago
On Wed, Jul 02, 2025 at 10:28:05AM +0200, Maxime Chevallier wrote:
> Now that netdevsim supports PHY device simulation, we can start writing
> some tests to cover a little bit all PHY-related ethtool commands.
> 
> So far we only test the basic use of "ethtool --show-phys", with :
>  - A simple command to get a PHY we just added
>  - A DUMP command listing PHYs on multiple netdevsim instances
>  - A Filtered DUMP command listing all PHYs on a netdevsim
> 
> Introduce some helpers to create netdevsim PHYs, and a new test file.
> 
> Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>

Hi Maxime,

We have recently started running shellcheck as part of our CI (NIPA).
Could you do so for the scripts added and modified by this patch?

> ---
>  .../selftests/drivers/net/netdevsim/config    |  1 +
>  .../drivers/net/netdevsim/ethtool-common.sh   | 15 +++++
>  .../drivers/net/netdevsim/ethtool-phy.sh      | 64 +++++++++++++++++++

Should ethtool-phy.sh be added to TEST_PROGS the Makefile in
the same directory?

...
Re: [PATCH net-next 3/3] selftests: ethtool: Introduce ethernet PHY selftests on netdevsim
Posted by Maxime Chevallier 3 months ago
On Fri, 4 Jul 2025 14:20:19 +0100
Simon Horman <horms@kernel.org> wrote:

> On Wed, Jul 02, 2025 at 10:28:05AM +0200, Maxime Chevallier wrote:
> > Now that netdevsim supports PHY device simulation, we can start writing
> > some tests to cover a little bit all PHY-related ethtool commands.
> > 
> > So far we only test the basic use of "ethtool --show-phys", with :
> >  - A simple command to get a PHY we just added
> >  - A DUMP command listing PHYs on multiple netdevsim instances
> >  - A Filtered DUMP command listing all PHYs on a netdevsim
> > 
> > Introduce some helpers to create netdevsim PHYs, and a new test file.
> > 
> > Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>  
> 
> Hi Maxime,
> 
> We have recently started running shellcheck as part of our CI (NIPA).
> Could you do so for the scripts added and modified by this patch?

Sure thing, I'll do that :)

> 
> > ---
> >  .../selftests/drivers/net/netdevsim/config    |  1 +
> >  .../drivers/net/netdevsim/ethtool-common.sh   | 15 +++++
> >  .../drivers/net/netdevsim/ethtool-phy.sh      | 64 +++++++++++++++++++  
> 
> Should ethtool-phy.sh be added to TEST_PROGS the Makefile in
> the same directory?

Ah yes I forgot that. So any file in that TEST_PROGS list will end-up
being run in NAPI tests ?

Maxime
Re: [PATCH net-next 3/3] selftests: ethtool: Introduce ethernet PHY selftests on netdevsim
Posted by Simon Horman 3 months ago
On Fri, Jul 04, 2025 at 03:32:50PM +0200, Maxime Chevallier wrote:
> On Fri, 4 Jul 2025 14:20:19 +0100
> Simon Horman <horms@kernel.org> wrote:
> 
> > On Wed, Jul 02, 2025 at 10:28:05AM +0200, Maxime Chevallier wrote:
> > > Now that netdevsim supports PHY device simulation, we can start writing
> > > some tests to cover a little bit all PHY-related ethtool commands.
> > > 
> > > So far we only test the basic use of "ethtool --show-phys", with :
> > >  - A simple command to get a PHY we just added
> > >  - A DUMP command listing PHYs on multiple netdevsim instances
> > >  - A Filtered DUMP command listing all PHYs on a netdevsim
> > > 
> > > Introduce some helpers to create netdevsim PHYs, and a new test file.
> > > 
> > > Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>  
> > 
> > Hi Maxime,
> > 
> > We have recently started running shellcheck as part of our CI (NIPA).
> > Could you do so for the scripts added and modified by this patch?
> 
> Sure thing, I'll do that :)

Thanks.

> > > ---
> > >  .../selftests/drivers/net/netdevsim/config    |  1 +
> > >  .../drivers/net/netdevsim/ethtool-common.sh   | 15 +++++
> > >  .../drivers/net/netdevsim/ethtool-phy.sh      | 64 +++++++++++++++++++  
> > 
> > Should ethtool-phy.sh be added to TEST_PROGS the Makefile in
> > the same directory?
> 
> Ah yes I forgot that. So any file in that TEST_PROGS list will end-up
> being run in NAPI tests ?

I assume so.