Currently, in zerocopy mode with mergeable receive buffer, virtio-net does not support multi buffer but a single buffer only. This commit adds support for multi mergeable receive buffer in the zerocopy XDP path by utilizing XDP buffer with frags. This happens when the MTU of tap device is set to 9000 so that a packet can exceed a single XDP buffer. As a result, that packet will be split into multi buffer XDP.
This series also adds the test for virtio-net rx when an XDP socket is bound to the interface. The test exercises both copy and zerocopy mode. We can adjust the tap device's MTU to test both single buffer and multi buffer XDP. Changes in RFC v2: - Return XDP_DROP when receiving multi-buffer XDP but BPF program does not support it - Add selftest - Link to RFC v1: https://lore.kernel.org/netdev/20250426082752.43222-1-minhquangbu...@gmail.com/ Thanks, Quang Minh. Bui Quang Minh (2): virtio-net: support zerocopy multi buffer XDP in mergeable selftests: net: add XDP socket tests for virtio-net drivers/net/virtio_net.c | 123 +++--- .../selftests/drivers/net/hw/.gitignore | 3 + .../testing/selftests/drivers/net/hw/Makefile | 12 +- .../drivers/net/hw/xsk_receive.bpf.c | 43 ++ .../selftests/drivers/net/hw/xsk_receive.c | 398 ++++++++++++++++++ .../selftests/drivers/net/hw/xsk_receive.py | 75 ++++ 6 files changed, 596 insertions(+), 58 deletions(-) create mode 100644 tools/testing/selftests/drivers/net/hw/xsk_receive.bpf.c create mode 100644 tools/testing/selftests/drivers/net/hw/xsk_receive.c create mode 100755 tools/testing/selftests/drivers/net/hw/xsk_receive.py -- 2.43.0