diff options
| author | Dimitri Daskalakis <dimitri.daskalakis1@gmail.com> | 2025-08-20 18:40:22 -0700 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2025-08-22 07:46:27 -0700 |
| commit | d06d70eb6af441c59ec8fc71df0c47427321318b (patch) | |
| tree | 4d47dd737a706459f3146139f122383499a021c2 | |
| parent | 91aacd8ceffe6f07b324c5548c6efd763ae0e278 (diff) | |
selftests: drv-net: xdp: Add a single-buffer XDP_TX test.
Test single-buffer XDP_TX for packets with various payload sizes.
Update the socat TX command to generate packets with 0 length payloads.
Signed-off-by: Dimitri Daskalakis <dimitri.daskalakis1@gmail.com>
Link: https://patch.msgid.link/20250821014023.1481662-3-dimitri.daskalakis1@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
| -rwxr-xr-x | tools/testing/selftests/drivers/net/xdp.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/tools/testing/selftests/drivers/net/xdp.py b/tools/testing/selftests/drivers/net/xdp.py index ea4da9024f9f..cea24c9b573e 100755 --- a/tools/testing/selftests/drivers/net/xdp.py +++ b/tools/testing/selftests/drivers/net/xdp.py @@ -314,8 +314,13 @@ def _test_xdp_native_tx(cfg, bpf_info, payload_lens): rx_udp = f"socat -{cfg.addr_ipver} -T 2 " + \ f"-u UDP-RECV:{port},reuseport STDOUT" + + # Writing zero bytes to stdin gets ignored by socat, + # but with the shut-null flag socat generates a zero sized packet + # when the socket is closed. + tx_cmd_suffix = ",shut-null" if payload_len == 0 else "" tx_udp = f"echo -n {test_string} | socat -t 2 " + \ - f"-u STDIN UDP:{cfg.baddr}:{port}" + f"-u STDIN UDP:{cfg.baddr}:{port}{tx_cmd_suffix}" with bkg(rx_udp, host=cfg.remote, exit_wait=True) as rnc: wait_port_listen(port, proto="udp", host=cfg.remote) @@ -329,6 +334,21 @@ def _test_xdp_native_tx(cfg, bpf_info, payload_lens): ksft_eq(stats[XDPStats.TX.value], expected_pkts, "TX stats mismatch") +def test_xdp_native_tx_sb(cfg): + """ + Tests the XDP_TX action for a single-buff case. + + Args: + cfg: Configuration object containing network settings. + """ + bpf_info = BPFProgInfo("xdp_prog", "xdp_native.bpf.o", "xdp", 1500) + + # Ensure there's enough room for an ETH / IP / UDP header + pkt_hdr_len = 42 if cfg.addr_ipver == "4" else 62 + + _test_xdp_native_tx(cfg, bpf_info, [0, 1500 // 2, 1500 - pkt_hdr_len]) + + def test_xdp_native_tx_mb(cfg): """ Tests the XDP_TX action for a multi-buff case. @@ -665,6 +685,7 @@ def main(): test_xdp_native_pass_mb, test_xdp_native_drop_sb, test_xdp_native_drop_mb, + test_xdp_native_tx_sb, test_xdp_native_tx_mb, test_xdp_native_adjst_tail_grow_data, test_xdp_native_adjst_tail_shrnk_data, |
