[PATCH net-next v2 0/3] selftests: drv-net: Introduce flow-control selftest
From: "Maxime Chevallier (Netdev Foundation)" <maxime.chevallier@bootlin.com>
Date: 2026-09-25 18:26:43
Also in:
linux-doc, lkml
Hi everyone,
This is V2 for the ethtool flow control test.
This test aims at validating the flow control implementation in drivers,
using the ethtool API.
The test can run in various conditions :
DUT <-----> Anything that has link up (not controllable)
DUT <-----> A directly connected device
It enumerates the local and remote device's capabilities, to test as
much as possibly testable. I've run it on 17 different boards connected
to other boards through various means : Usb to Eth dongles, direct
connection to the board, connection through a switch. Some of the ports
tested were user ports of DSA switches too.
Overall, this produced 4 different results (duplicates removed):
dev A : (stmmac or mvpp2), LP that can't use pause
dev B : stmmac, fully controllable LP
dev C : mv88exxx DSA port
dev D : stmmac + KSZ9031 (masks Asym)
[dev A] [dev B] [dev C] [dev D]
test_support RX off TX off ok ok ok ok
test_support RX off TX on ok ok ok ok
test_support RX on TX off ok ok ok ok
test_support RX on TX on ok ok ok ok
advertising_test RX off TX off FAIL FAIL ok FAIL
advertising_test RX off TX on ok ok skip skip
advertising_test RX on TX off ok ok skip skip
advertising_test RX on TX on ok ok ok ok
aneg_resol local rx off tx off, remote rx off tx off skip ok skip skip
aneg_resol local rx off tx off, remote rx off tx on skip ok skip skip
aneg_resol local rx off tx off, remote rx on tx off skip ok skip skip
aneg_resol local rx off tx off, remote rx on tx on skip ok skip skip
aneg_resol local rx off tx on, remote rx off tx off skip ok skip skip
aneg_resol local rx off tx on, remote rx off tx on skip ok skip skip
aneg_resol local rx off tx on, remote rx on tx off skip ok skip skip
aneg_resol local rx off tx on, remote rx on tx on skip ok skip skip
aneg_resol local rx on tx off, remote rx off tx off skip ok skip skip
aneg_resol local rx on tx off, remote rx off tx on skip ok skip skip
aneg_resol local rx on tx off, remote rx on tx off skip ok skip skip
aneg_resol local rx on tx off, remote rx on tx on skip ok skip skip
aneg_resol local rx on tx on, remote rx off tx off skip ok skip skip
aneg_resol local rx on tx on, remote rx off tx on skip ok skip skip
aneg_resol local rx on tx on, remote rx on tx off skip ok skip skip
aneg_resol local rx on tx on, remote rx on tx on skip ok skip skip
autoneg_state_adv skip FAIL skip skip
autoneg_state_params skip ok skip skip
autoneg_off_while_link_autoneg_on skip ok skip skip
autoneg_link_autoneg skip ok skip skip
We immediately note 2 things :
- advertising_test.RX off TX off Fails
- autoneg_state_adv Fails
These are common to all boards that use phylink in the following scenario :
MAC - PHY <-------------> Peer
It doesn't appear on DSA user ports, even if they user phylink themselves.
The first issue : advertising_test.RX off TX off
ethtool -A eth0 tx off rx off autoneg on
=> We keep advertising Pause and/or Asym
This seems like a legit issue in phylink.
The second issue : autoneg_state_adv
With link aneg on :
ethtool -A eth0 rx on tx on autoneg off
=> We keep advertising Pause + Asym
So, disabling pause autoneg doesn't disable pause advertising, that's not
expected either.
This is worth looking into as a followup.
Thanks to the Netdev Foundation for funding this work :)
Maxime
Changes in V2:
- Don't add stuff to the lib
- Fix most pylink errors (module's too long for pylint ...)
- Ditch the fail=False from the defer()
- Remove duplicate patches
- Clean the comments
- Drop the return type annotations, most were wrong...
V1 : https://lore.kernel.org/netdev/20260920164732.349744-1-maxime.chevallier@bootlin.com/ (local)
Maxime Chevallier (Netdev Foundation) (3):
selftests: drv-net: Introduce a selftest for ethtool flow control
selftests: drv-net: pause: Validate the pause autonegotiation with a
partner
selftests: drv-net: pause: Validate pause autoneg interactions with
link autoneg
.../testing/selftests/drivers/net/hw/Makefile | 1 +
.../testing/selftests/drivers/net/hw/pause.py | 1035 +++++++++++++++++
2 files changed, 1036 insertions(+)
create mode 100755 tools/testing/selftests/drivers/net/hw/pause.py
--
2.55.0