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 --- 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] 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
