On 26/09/2025 06.20, Stanislav Fomichev wrote:
On 09/25, Lorenzo Bianconi wrote:
Introduce XDP RX checksum capability to XDP metadata specs. XDP RX
checksum will be use by devices capable of exposing receive checksum
result via bpf_xdp_metadata_rx_checksum().
Moreover, introduce xmo_rx_checksum netdev callback in order allow the
eBPF program bounded to the device to retrieve the RX checksum result
computed by the hw NIC.

Signed-off-by: Lorenzo Bianconi <[email protected]>
---
  Documentation/netlink/specs/netdev.yaml |  5 +++++
  include/net/xdp.h                       | 14 ++++++++++++++
  net/core/xdp.c                          | 29 +++++++++++++++++++++++++++++
  3 files changed, 48 insertions(+)

diff --git a/Documentation/netlink/specs/netdev.yaml 
b/Documentation/netlink/specs/netdev.yaml
index 
e00d3fa1c152d7165e9485d6d383a2cc9cef7cfd..00699bf4a7fdb67c6b9ee3548098b0c933fd39a4
 100644
--- a/Documentation/netlink/specs/netdev.yaml
+++ b/Documentation/netlink/specs/netdev.yaml
@@ -61,6 +61,11 @@ definitions:
          doc: |
            Device is capable of exposing receive packet VLAN tag via
            bpf_xdp_metadata_rx_vlan_tag().
+      -
+        name: checksum
+        doc: |
+          Device is capable of exposing receive checksum result via
+          bpf_xdp_metadata_rx_checksum().
    -
      type: flags
      name: xsk-flags
diff --git a/include/net/xdp.h b/include/net/xdp.h
index 
aa742f413c358575396530879af4570dc3fc18de..9ab9ac10ae2074b70618a9d4f32544d8b9a30b63
 100644
--- a/include/net/xdp.h
+++ b/include/net/xdp.h
@@ -586,6 +586,10 @@ void xdp_attachment_setup(struct xdp_attachment_info *info,
                           NETDEV_XDP_RX_METADATA_VLAN_TAG, \
                           bpf_xdp_metadata_rx_vlan_tag, \
                           xmo_rx_vlan_tag) \
+       XDP_METADATA_KFUNC(XDP_METADATA_KFUNC_RX_CHECKSUM, \
+                          NETDEV_XDP_RX_METADATA_CHECKSUM, \
+                          bpf_xdp_metadata_rx_checksum, \
+                          xmo_rx_checksum)
enum xdp_rx_metadata {
  #define XDP_METADATA_KFUNC(name, _, __, ___) name,
@@ -643,12 +647,22 @@ enum xdp_rss_hash_type {
        XDP_RSS_TYPE_L4_IPV6_SCTP_EX = XDP_RSS_TYPE_L4_IPV6_SCTP | 
XDP_RSS_L3_DYNHDR,
  };
+enum xdp_checksum {
+       XDP_CHECKSUM_NONE               = CHECKSUM_NONE,
+       XDP_CHECKSUM_UNNECESSARY        = CHECKSUM_UNNECESSARY,
+       XDP_CHECKSUM_COMPLETE           = CHECKSUM_COMPLETE,
+       XDP_CHECKSUM_PARTIAL            = CHECKSUM_PARTIAL,
+};

Btw, might be worth mentioning, awhile ago we had settled on a smaller set of
exposed types:

https://lore.kernel.org/netdev/[email protected]/

Maybe go through the previous postings and check if the arguments are
still relevant? (or explain why we want more checksum now)

IHMO the linked proposal reduced the types too much.

I think Lorenzo's suggested types are much better. One argument is of-
cause that the types corresponds directly to the (time proven) types
used by the SKB.

I could argue, that we are lacking a type that indicate hardware
"failed" to do the checksum, but that is indirectly covered by
CHECKSUM_NONE case.  And having BPF-developers deal with both
CHECKSUM_NONE and CHECKSUM_FAIL correctly is a recipe for bugs.

I will explain in another email, why we need to document what
CHECKSUM_NONE actually means.

--Jesper







Reply via email to