selftests/net: synchronize udpgro tests' tx and rx connection

The sockets used by udpgso_bench_tx aren't always ready when
udpgso_bench_tx transmits packets. This issue is more prevalent in -rt
kernels, but can occur in both. Replace the hacky sleep calls with a
function that checks whether the ports in the namespace are ready for
use.

Suggested-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Lucas Karpinski <lkarpins@redhat.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Lucas Karpinski 2023-11-14 10:11:31 -05:00 committed by David S. Miller
parent e47ef9eb5b
commit 3bdd9fd29c
4 changed files with 34 additions and 11 deletions

View File

@ -0,0 +1,22 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Helper functions
wait_local_port_listen()
{
local listener_ns="${1}"
local port="${2}"
local protocol="${3}"
local port_hex
local i
port_hex="$(printf "%04X" "${port}")"
for i in $(seq 10); do
if ip netns exec "${listener_ns}" cat /proc/net/"${protocol}"* | \
grep -q "${port_hex}"; then
break
fi
sleep 0.1
done
}

View File

@ -3,6 +3,8 @@
#
# Run a series of udpgro functional tests.
source net_helper.sh
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
BPF_FILE="../bpf/xdp_dummy.bpf.o"
@ -51,8 +53,7 @@ run_one() {
echo "ok" || \
echo "failed" &
# Hack: let bg programs complete the startup
sleep 0.2
wait_local_port_listen ${PEER_NS} 8000 udp
./udpgso_bench_tx ${tx_args}
ret=$?
wait $(jobs -p)
@ -97,7 +98,7 @@ run_one_nat() {
echo "ok" || \
echo "failed"&
sleep 0.1
wait_local_port_listen "${PEER_NS}" 8000 udp
./udpgso_bench_tx ${tx_args}
ret=$?
kill -INT $pid
@ -118,11 +119,9 @@ run_one_2sock() {
echo "ok" || \
echo "failed" &
# Hack: let bg programs complete the startup
sleep 0.2
wait_local_port_listen "${PEER_NS}" 12345 udp
./udpgso_bench_tx ${tx_args} -p 12345
sleep 0.1
# first UDP GSO socket should be closed at this point
wait_local_port_listen "${PEER_NS}" 8000 udp
./udpgso_bench_tx ${tx_args}
ret=$?
wait $(jobs -p)

View File

@ -3,6 +3,8 @@
#
# Run a series of udpgro benchmarks
source net_helper.sh
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
BPF_FILE="../bpf/xdp_dummy.bpf.o"
@ -40,8 +42,7 @@ run_one() {
ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -r &
ip netns exec "${PEER_NS}" ./udpgso_bench_rx -t ${rx_args} -r &
# Hack: let bg programs complete the startup
sleep 0.2
wait_local_port_listen "${PEER_NS}" 8000 udp
./udpgso_bench_tx ${tx_args}
}

View File

@ -3,6 +3,8 @@
#
# Run a series of udpgro benchmarks
source net_helper.sh
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
BPF_FILE="../bpf/xdp_dummy.bpf.o"
@ -45,8 +47,7 @@ run_one() {
echo ${rx_args}
ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -r &
# Hack: let bg programs complete the startup
sleep 0.2
wait_local_port_listen "${PEER_NS}" 8000 udp
./udpgso_bench_tx ${tx_args}
}