[PATCH bpf-next v4 0/6] Add the capability to load HW RX checksum in eBPF programs
From: Vladimir Vdovin <hidden>
Date: 2026-07-08 20:34:50
Also in:
bpf, intel-wired-lan, linux-kselftest
Introduce bpf_xdp_metadata_rx_checksum() kfunc in order to load the HW RX checksum results in the eBPF program bound to the NIC. Implement xmo_rx_checksum callback for veth and ice drivers. If the hardware detects a wrong/failed checksum, it will report CHECKSUM_NONE in the packet metadata. Moreover, CHECKSUM_NONE will be returned even if the NIC can't parse the packet (e.g. if it does not support a specific protocol). A possible use case for bpf_xdp_metadata_rx_checksum() would be to implement a XDP DDoS application [1] combining the info from bpf_xdp_metadata_rx_checksum() and bpf_xdp_metadata_rx_hash() kfuncs in order to filter packets with a wrong/failed checksum. This is a repost of Lorenzo's series, rebased on top of net-next, with a new drv-net selftest for the RX checksum metadata added on top of it, as Lorenzo suggested [2]. A note on the new selftest semantics: for traffic with a correct checksum the test requires a usable verdict (CHECKSUM_UNNECESSARY and/or CHECKSUM_COMPLETE) but reports SKIP on CHECKSUM_NONE, since the API allows devices that do not verify the packets (e.g. veth reports NONE for locally generated CHECKSUM_PARTIAL traffic). For corrupted packets it only asserts that CHECKSUM_UNNECESSARY is not set, as CHECKSUM_COMPLETE legitimately carries the raw checksum of bad packets too. [1] https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/ [2] https://lore.kernel.org/r/ak5ox296M46FAcWX@lore-desk (local) --- Changes in v4: - Report ip_summed as a bitmask of XDP_CHECKSUM_* values and return the hw checksum and the checksum level via dedicated bpf_xdp_metadata_rx_checksum() arguments - Rebase on top of net-next - Add a drv-net selftest for the XDP RX checksum metadata - Link to v3: https://lore.kernel.org/r/20260217-bpf-xdp-meta-rxcksum-v3-0-30024c50ba71@kernel.org (local) Changes in v3: - Remove leftover assignment from v2 in veth_xdp_rx_checksum() - Fix typos - Fix commit logs - Link to v2: https://lore.kernel.org/r/20260213-bpf-xdp-meta-rxcksum-v2-0-a82c4802afbe@kernel.org (local) Changes in v2: - Remove XDP_CHECKSUM_PARTIAL definition - Improve veth_xdp_rx_checksum() callback - Fix uninitialized case for cksum_meta in ice_get_rx_csum() - Fix sparse warnings in ice driver - Fix typos - Link to v1: https://lore.kernel.org/r/20260210-bpf-xdp-meta-rxcksum-v1-0-e5d55caa0541@kernel.org (local) Changes in v1: - Rebase on top of bpf-next - Test ice driver using xdp_hw_metadata tool available in the bpf kernel selftest - Improve cover letter with an use-case for bpf_xdp_metadata_rx_checksum() - Link to RFC v2: https://lore.kernel.org/r/20250925-bpf-xdp-meta-rxcksum-v2-0-6b3fe987ce91@kernel.org (local) change-id: 20250925-bpf-xdp-meta-rxcksum-900685e2909d Lorenzo Bianconi (5): netlink: specs: Add XDP RX checksum capability to XDP metadata specs net: veth: Add xmo_rx_checksum callback to veth driver net: ice: Add xmo_rx_checksum callback selftests/bpf: Add selftest support for bpf_xdp_metadata_rx_checksum selftests/bpf: Add bpf_xdp_metadata_rx_checksum support to xdp_hw_metadat prog Vladimir Vdovin (1): selftests: drv-net: add XDP RX checksum metadata tests Documentation/netlink/specs/netdev.yaml | 5 + drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 123 ++++++++++++------ drivers/net/veth.c | 32 +++++ include/net/xdp.h | 18 +++ include/uapi/linux/netdev.h | 3 + net/core/xdp.c | 32 +++++ tools/include/uapi/linux/netdev.h | 3 + .../selftests/bpf/prog_tests/xdp_metadata.c | 9 ++ .../selftests/bpf/progs/xdp_hw_metadata.c | 7 + .../selftests/bpf/progs/xdp_metadata.c | 2 + tools/testing/selftests/bpf/xdp_hw_metadata.c | 31 +++++ tools/testing/selftests/bpf/xdp_metadata.h | 13 ++ .../selftests/drivers/net/hw/xdp_metadata.py | 110 ++++++++++++++++ .../selftests/net/lib/xdp_metadata.bpf.c | 112 ++++++++++++++-- 14 files changed, 445 insertions(+), 55 deletions(-) base-commit: 08030ddb87b4c6c6a2c03c82731b5e188f02f5b9 -- 2.47.0