Re: [PATCH net] selftests/net: Fix icmp.sh race between ping and tcpdump startup

From: David Ahern

Date: Wed Sep 02 2026 - 16:39:02 EST


On 9/1/26 8:09 AM, Ricardo B. Marlière (SUSE) wrote:
> @@ -53,11 +54,21 @@ ip -netns $NS2 route add $RT2 via inet6 $H1_IP6
> # Make sure ns2 will respond with ICMP unreachable
> ip netns exec $NS2 sysctl -qw net.ipv4.icmp_ratelimit=0 net.ipv4.ip_forward=1
>
> -# Run the test - a ping runs in the background, and we capture ICMP responses
> -# with tcpdump; -c 1 means it should exit on the first ping, but add a timeout
> -# in case something goes wrong
> +# Run the test - start tcpdump and wait for it to be capturing before
> +# sending any traffic. -c 1 means it should exit on the first ping, but add
> +# a timeout in case something goes wrong
> +ip netns exec $NS1 timeout 10 tcpdump -tpni veth0 -c 1 \
> + 'icmp and icmp[icmptype] != icmp-echo' > $TMPFILE 2>$TCPDUMP_ERR &

Why keep the 'timeout 10'?

> +TCPDUMP_PID=$!

You have the pid. You can always kill it after the ping command if it
does not terminate on its own after the 1 packet is received.

> +if ! slowwait 3 grep -qs "listening" "$TCPDUMP_ERR"; then
> + echo "FAIL - tcpdump did not start listening"
> + cat "$TCPDUMP_ERR"
> + exit 1
> +fi
> +
> ip netns exec $NS1 ping -w 3 -i 0.5 $PINGADDR >/dev/null &
> -ip netns exec $NS1 timeout 10 tcpdump -tpni veth0 -c 1 'icmp and icmp[icmptype] != icmp-echo' > $TMPFILE 2>/dev/null
> +
> +wait $TCPDUMP_PID
>