Skip to content

Commit

Permalink
tools/testing/selftests/bpf/test_tc_tunnel.sh: Prevent client connect…
Browse files Browse the repository at this point in the history
… before server bind

In some systems, the netcat server can incur in delay to start listening.
When this happens, the test can randomly fail in various points.
This is an example error message:

   # ip gre none gso
   # encap 192.168.1.1 to 192.168.1.2, type gre, mac none len 2000
   # test basic connectivity
   # Ncat: Connection refused.

The issue stems from a race condition between the netcat client and server.
The test author had addressed this problem by implementing a sleep, which
I have removed in this patch.
This patch introduces a function capable of sleeping for up to two seconds.
However, it can terminate the waiting period early if the port is reported
to be listening.

Signed-off-by: Alessandro Carminati (Red Hat) <alessandro.carminati@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240314105911.213411-1-alessandro.carminati@gmail.com
  • Loading branch information
alessandrocarminati authored and anakryiko committed Mar 19, 2024
1 parent 437ffcb commit 86bb1a9
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion tools/testing/selftests/bpf/test_tc_tunnel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ cleanup() {
server_listen() {
ip netns exec "${ns2}" nc "${netcat_opt}" -l "${port}" > "${outfile}" &
server_pid=$!
sleep 0.2
}

client_connect() {
Expand All @@ -93,6 +92,16 @@ verify_data() {
fi
}

wait_for_port() {
for i in $(seq 20); do
if ip netns exec "${ns2}" ss ${2:--4}OHntl | grep -q "$1"; then
return 0
fi
sleep 0.1
done
return 1
}

set -e

# no arguments: automated test, run all
Expand Down Expand Up @@ -193,6 +202,7 @@ setup
# basic communication works
echo "test basic connectivity"
server_listen
wait_for_port ${port} ${netcat_opt}
client_connect
verify_data

Expand All @@ -204,6 +214,7 @@ ip netns exec "${ns1}" tc filter add dev veth1 egress \
section "encap_${tuntype}_${mac}"
echo "test bpf encap without decap (expect failure)"
server_listen
wait_for_port ${port} ${netcat_opt}
! client_connect

if [[ "$tuntype" =~ "udp" ]]; then
Expand Down

0 comments on commit 86bb1a9

Please sign in to comment.