selftests: net: more strict check in net_helper
authorPaolo Abeni <pabeni@redhat.com>
Mon, 12 Feb 2024 10:19:23 +0000 (11:19 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 13 Feb 2024 18:19:05 +0000 (10:19 -0800)
The helper waiting for a listener port can match any socket whose
hexadecimal representation of source or destination addresses
matches that of the given port.

Additionally, any socket state is accepted.

All the above can let the helper return successfully before the
relevant listener is actually ready, with unexpected results.

So far I could not find any related failure in the netdev CI, but
the next patch is going to make the critical event more easily
reproducible.

Address the issue matching the port hex only vs the relevant socket
field and additionally checking the socket state for TCP sockets.

Fixes: 3bdd9fd29cb0 ("selftests/net: synchronize udpgro tests' tx and rx connection")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Link: https://lore.kernel.org/r/192b3dbc443d953be32991d1b0ca432bd4c65008.1707731086.git.pabeni@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/net_helper.sh

index 4fe0befa13fbc6aa52fed84080615362ff92724f..6596fe03c77f43742e5676e5ccd1e46ba96e5c12 100644 (file)
@@ -8,13 +8,16 @@ wait_local_port_listen()
        local listener_ns="${1}"
        local port="${2}"
        local protocol="${3}"
-       local port_hex
+       local pattern
        local i
 
-       port_hex="$(printf "%04X" "${port}")"
+       pattern=":$(printf "%04X" "${port}") "
+
+       # for tcp protocol additionally check the socket state
+       [ ${protocol} = "tcp" ] && pattern="${pattern}0A"
        for i in $(seq 10); do
-               if ip netns exec "${listener_ns}" cat /proc/net/"${protocol}"* | \
-                  grep -q "${port_hex}"; then
+               if ip netns exec "${listener_ns}" awk '{print $2" "$4}' \
+                  /proc/net/"${protocol}"* | grep -q "${pattern}"; then
                        break
                fi
                sleep 0.1