selftests/net: synchronize udpgro tests' tx and rx connection
[ Upstream commit3bdd9fd29c] 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> Stable-dep-of:9d851dd4da("selftests: net: Remove executable bits from library scripts") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
fc1ec829bd
commit
5174a2aa22
Executable
+22
@@ -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
|
||||
}
|
||||
@@ -3,6 +3,8 @@
|
||||
#
|
||||
# Run a series of udpgro functional tests.
|
||||
|
||||
source net_helper.sh
|
||||
|
||||
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
|
||||
|
||||
# set global exit status, but never reset nonzero one.
|
||||
@@ -49,8 +51,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)
|
||||
@@ -95,7 +96,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
|
||||
@@ -116,11 +117,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,6 +3,8 @@
|
||||
#
|
||||
# Run a series of udpgro benchmarks
|
||||
|
||||
source net_helper.sh
|
||||
|
||||
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
|
||||
|
||||
cleanup() {
|
||||
@@ -38,8 +40,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}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user