Commit 3bdd9fd2 authored by Lucas Karpinski's avatar Lucas Karpinski Committed by David S. Miller
Browse files

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: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarLucas Karpinski <lkarpins@redhat.com>
Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e47ef9eb
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
#!/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
}
+6 −7
Original line number Diff line number Diff line
@@ -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)
+3 −2
Original line number Diff line number Diff line
@@ -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}
}

+3 −2
Original line number Diff line number Diff line
@@ -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}
}