From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Jakub Kicinski <kuba@kernel.org>, davem@davemloft.net
Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com,
andrew+netdev@lunn.ch, horms@kernel.org,
willemdebruijn.kernel@gmail.com, shuah@kernel.org,
sdf@fomichev.me, krakauer@google.com,
linux-kselftest@vger.kernel.org,
Jakub Kicinski <kuba@kernel.org>
Subject: Re: [PATCH net-next 09/12] selftests: drv-net: add a Python version of the GRO test
Date: Mon, 17 Nov 2025 21:08:31 -0500 [thread overview]
Message-ID: <willemdebruijn.kernel.d636696e1da5@gmail.com> (raw)
In-Reply-To: <20251117205810.1617533-10-kuba@kernel.org>
Jakub Kicinski wrote:
> Rewrite the existing gro.sh test in Python. The conversion
> not exact, the changes are related to integrating the test
> with our "remote endpoint" paradigm. The test now reads
> the IP addresses from the user config. It resolves the MAC
> address (including running over Layer 3 networks).
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> tools/testing/selftests/drivers/net/Makefile | 2 +-
> tools/testing/selftests/drivers/net/gro.c | 3 +
> tools/testing/selftests/drivers/net/gro.py | 161 +++++++++++++++++++
> tools/testing/selftests/drivers/net/gro.sh | 105 ------------
> 4 files changed, 165 insertions(+), 106 deletions(-)
> create mode 100755 tools/testing/selftests/drivers/net/gro.py
> delete mode 100755 tools/testing/selftests/drivers/net/gro.sh
>
> diff --git a/tools/testing/selftests/drivers/net/Makefile b/tools/testing/selftests/drivers/net/Makefile
> index 7083a8707c4e..f5c71d993750 100644
> --- a/tools/testing/selftests/drivers/net/Makefile
> +++ b/tools/testing/selftests/drivers/net/Makefile
> @@ -11,7 +11,7 @@ TEST_GEN_FILES := \
> # end of TEST_GEN_FILES
>
> TEST_PROGS := \
> - gro.sh \
> + gro.py \
> hds.py \
> napi_id.py \
> napi_threaded.py \
> diff --git a/tools/testing/selftests/drivers/net/gro.c b/tools/testing/selftests/drivers/net/gro.c
> index 9b9be0cf8f7f..995b492f5bcb 100644
> --- a/tools/testing/selftests/drivers/net/gro.c
> +++ b/tools/testing/selftests/drivers/net/gro.c
> @@ -58,6 +58,7 @@
> #include <unistd.h>
>
> #include "../../kselftest.h"
> +#include "../../net/lib/ksft.h"
>
> #define DPORT 8000
> #define SPORT 1500
> @@ -1127,6 +1128,8 @@ static void gro_receiver(void)
> set_timeout(rxfd);
> bind_packetsocket(rxfd);
>
> + ksft_ready();
> +
> memset(correct_payload, 0, sizeof(correct_payload));
>
> if (strcmp(testname, "data") == 0) {
> diff --git a/tools/testing/selftests/drivers/net/gro.py b/tools/testing/selftests/drivers/net/gro.py
> new file mode 100755
> index 000000000000..a27f8106eb63
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/net/gro.py
> @@ -0,0 +1,161 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0
> +
> +"""
> +GRO (Generic Receive Offload) conformance tests.
> +
> +Validates that GRO coalescing works correctly by running the gro
> +binary in different configurations and checking for correct packet
> +coalescing behavior.
> +
> +Test cases:
> + - data: Data packets with same size/headers and correct seq numbers coalesce
> + - ack: Pure ACK packets do not coalesce
> + - flags: Packets with PSH, SYN, URG, RST flags do not coalesce
> + - tcp: Packets with incorrect checksum, non-consecutive seqno don't coalesce
> + - ip: Packets with different ECN, TTL, TOS, or IP options don't coalesce
> + - large: Packets larger than GRO_MAX_SIZE don't coalesce
> +"""
> +
> +import os
> +from lib.py import ksft_run, ksft_exit, ksft_pr
> +from lib.py import NetDrvEpEnv, KsftXfailEx
> +from lib.py import cmd, defer, bkg, ip
> +from lib.py import ksft_variants
> +
> +
> +def _resolve_dmac(cfg, ipver):
> + """
> + Find the destination MAC address remote host should use to send packets
> + towards the local host. I may be a router / gateway address.
I -> It
> + """
> +
> + attr = "dmac" + ipver
> + # Cache the response across test cases
> + if hasattr(cfg, attr):
> + return getattr(cfg, attr)
> +
> + route = ip(f"-{ipver} route get {cfg.addr_v[ipver]}",
> + json=True, host=cfg.remote)[0]
> + gw = route.get("gateway")
> + # Local L2 segment, address directly
> + if not gw:
> + setattr(cfg, attr, cfg.dev['address'])
> + return getattr(cfg, attr)
> +
> + # ping to make sure neighbor is resolved,
> + # bind to an interface, for v6 the GW is likely link local
> + cmd(f"ping -c1 -W0 -I{cfg.remote_ifname} {gw}", host=cfg.remote)
> +
> + neigh = ip(f"neigh get {gw} dev {cfg.remote_ifname}",
> + json=True, host=cfg.remote)[0]
> + setattr(cfg, attr, neigh['lladdr'])
> + return getattr(cfg, attr)
next prev parent reply other threads:[~2025-11-18 2:08 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-17 20:57 [PATCH net-next 00/12] selftests: drv-net: convert GRO and Toeplitz tests to work for drivers in NIPA Jakub Kicinski
2025-11-17 20:57 ` [PATCH net-next 01/12] selftests: net: py: coding style improvements Jakub Kicinski
2025-11-17 20:58 ` [PATCH net-next 02/12] selftests: net: py: extract the case generation logic Jakub Kicinski
2025-11-17 20:58 ` [PATCH net-next 03/12] selftests: net: py: add test variants Jakub Kicinski
2025-11-17 20:58 ` [PATCH net-next 04/12] selftests: drv-net: xdp: use variants for qstat tests Jakub Kicinski
2025-11-17 20:58 ` [PATCH net-next 05/12] selftests: net: relocate gro and toeplitz tests to drivers/net Jakub Kicinski
2025-11-18 2:07 ` Willem de Bruijn
2025-11-17 20:58 ` [PATCH net-next 06/12] selftests: net: py: support ksft ready without wait Jakub Kicinski
2025-11-17 20:58 ` [PATCH net-next 07/12] selftests: net: py: read ip link info about remote dev Jakub Kicinski
2025-11-17 20:58 ` [PATCH net-next 08/12] netdevsim: pass packets thru GRO on Rx Jakub Kicinski
2025-11-18 2:07 ` Willem de Bruijn
2025-11-17 20:58 ` [PATCH net-next 09/12] selftests: drv-net: add a Python version of the GRO test Jakub Kicinski
2025-11-18 2:08 ` Willem de Bruijn [this message]
2025-11-17 20:58 ` [PATCH net-next 10/12] selftests: drv-net: hw: convert the Toeplitz test to Python Jakub Kicinski
2025-11-18 2:09 ` Willem de Bruijn
2025-11-17 20:58 ` [PATCH net-next 11/12] netdevsim: add loopback support Jakub Kicinski
2025-11-17 20:58 ` [PATCH net-next 12/12] selftests: net: remove old setup_* scripts Jakub Kicinski
2025-11-18 2:11 ` [PATCH net-next 00/12] selftests: drv-net: convert GRO and Toeplitz tests to work for drivers in NIPA Willem de Bruijn
2025-11-18 4:56 ` Jakub Kicinski
2025-11-18 14:13 ` Willem de Bruijn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=willemdebruijn.kernel.d636696e1da5@gmail.com \
--to=willemdebruijn.kernel@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=krakauer@google.com \
--cc=kuba@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.