@@ -286,6 +286,23 @@ do_ping()
return 0
}
+# $1: ns, $2: port
+wait_local_port_listen()
+{
+ local listener_ns="${1}"
+ local port="${2}"
+
+ local port_hex i
+
+ port_hex="$(printf "%04X" "${port}")"
+ for i in $(seq 10); do
+ ip netns exec "${listener_ns}" cat /proc/net/tcp* | \
+ awk "BEGIN {rc=1} {if (\$2 ~ /:${port_hex}\$/ && \$4 ~ /0A/) {rc=0; exit}} END {exit rc}" &&
+ break
+ sleep 0.1
+ done
+}
+
do_transfer()
{
listener_ns="$1"
@@ -323,7 +340,7 @@ do_transfer()
ip netns exec ${listener_ns} ./mptcp_connect -t $timeout -l -p $port -s ${srv_proto} $local_addr < "$sin" > "$sout" &
spid=$!
- sleep 1
+ wait_local_port_listen "${listener_ns}" "${port}"
start=$(date +%s%3N)
ip netns exec ${connector_ns} ./mptcp_connect -t $timeout -p $port -s ${cl_proto} $connect_addr < "$cin" > "$cout" &
I noticed that we were spending a lot of time waiting with the sleep command. Now we poll the socket status and we reduce the exec time by maybe ~30 seconds. Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net> --- Notes: to be squashed in "mptcp: add basic kselftest for mptcp" .../selftests/net/mptcp/mptcp_connect.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)