From: Oleksij Rempel <o.rempel@pengutronix.de>
To: Jakub Kicinski <kuba@kernel.org>
Cc: Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
kernel@pengutronix.de, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org
Subject: [RFC] net: selftests: Adding TX checksum offload validation
Date: Tue, 16 Sep 2025 11:12:02 +0200 [thread overview]
Message-ID: <aMkp4vGilSPbAyun@pengutronix.de> (raw)
Hello everyone,
While working with the smsc95xx driver, I identified a need for better
validation of the driver and hardware TX checksum offloading capabilities. I
believe a generic test suite for this would benefit other drivers as well.
The generic selftest framework in net/core/selftests.c seems like the ideal
location. It already contains a test for the RX checksum path, so adding
validation for the TX path feels like a natural extension.
Here is the list of test cases I propose to add:
- TX csum offload, IPv4, TCP, Standard MTU Packet
- TX csum offload, IPv4, UDP, Standard MTU Packet
- TX csum offload, IPv4, ICMP, Standard Payload
- TX csum offload, IPv4, TCP, Minimal Size Packet (1-byte payload)
- TX csum offload, IPv4, UDP, Minimal Size Packet (1-byte payload)
- TX csum offload, IPv4, UDP, Zero-Checksum Payload (Verify checksum becomes
0xFFFF)
- TX csum offload, IPv4, TCP, With Single VLAN Tag
- TX csum offload, IPv4, TCP, With Double VLAN Tag (Q-in-Q)
- TX csum offload, IPv6, TCP, Standard MTU Packet
- TX csum offload, IPv6, UDP, Standard MTU Packet
The implementation for these tests would involve preparing an skb with the
corresponding L3/L4 headers, flagging it with CHECKSUM_PARTIAL, and sending it
through the PHY loopback. The test would pass if the received frame has a
valid checksum.
As a related question on driver implementation:
The documentation suggests that the older flags NETIF_F_IP_CSUM and
NETIF_F_IPV6_CSUM are being superseded by the more generic NETIF_F_HW_CSUM.
When the network stack sends a packet with skb->ip_summed = CHECKSUM_PARTIAL,
the driver is responsible for ensuring the final checksum is correct, either by
offloading the calculation to the device or by falling back to a software
function like skb_checksum_help().
Is this understanding correct, and is relying on CHECKSUM_PARTIAL as the
primary mechanism for requesting TX offload the recommended practice for modern
network drivers?
Thanks,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
next reply other threads:[~2025-09-16 9:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-16 9:12 Oleksij Rempel [this message]
2025-09-17 22:07 ` [RFC] net: selftests: Adding TX checksum offload validation Jakub Kicinski
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=aMkp4vGilSPbAyun@pengutronix.de \
--to=o.rempel@pengutronix.de \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hkallweit1@gmail.com \
--cc=kernel@pengutronix.de \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/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.