Commit d1f3dbad authored by Mohsin Bashir's avatar Mohsin Bashir Committed by Jakub Kicinski
Browse files

selftests: drv-net: Wait for bkg socat to start



Currently, UDP exchange is prone to failure when cmd attempt to send data
while socat in bkg is not ready. Since, the behavior is probabilistic, this
can result in flakiness for XDP tests. While testing
test_xdp_native_tx_mb() on netdevsim, a failure rate of around 1% in 500
500 iterations was observed.

Use wait_port_listen() to ensure that the bkg socat is started and ready to
receive before cmd start sending. With proposed changes, a re-run of the
same test passed 100% of time.

Signed-off-by: default avatarMohsin Bashir <mohsin.bashr@gmail.com>
Link: https://patch.msgid.link/20250724235140.2645885-1-mohsin.bashr@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 8020ca54
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ from enum import Enum

from lib.py import ksft_run, ksft_exit, ksft_eq, ksft_ne, ksft_pr
from lib.py import KsftFailEx, NetDrvEpEnv, EthtoolFamily, NlError
from lib.py import bkg, cmd, rand_port
from lib.py import bkg, cmd, rand_port, wait_port_listen
from lib.py import ip, bpftool, defer


@@ -70,6 +70,7 @@ def _exchg_udp(cfg, port, test_string):
    tx_udp_cmd = f"echo -n {test_string} | socat -t 2 -u STDIN UDP:{cfg.baddr}:{port}"

    with bkg(rx_udp_cmd, exit_wait=True) as nc:
        wait_port_listen(port, proto="udp")
        cmd(tx_udp_cmd, host=cfg.remote, shell=True)

    return nc.stdout.strip()
@@ -310,6 +311,7 @@ def test_xdp_native_tx_mb(cfg):
    tx_udp = f"echo {test_string} | socat -t 2 -u STDIN UDP:{cfg.baddr}:{port}"

    with bkg(rx_udp, host=cfg.remote, exit_wait=True) as rnc:
        wait_port_listen(port, proto="udp", host=cfg.remote)
        cmd(tx_udp, host=cfg.remote, shell=True)

    stats = _get_stats(prog_info['maps']['map_xdp_stats'])