Skip to content

Commit

Permalink
selftests: mptcp: join: add test-case for MPC attempt towards signl ep
Browse files Browse the repository at this point in the history
Explicitly verify that MPC connection attempts towards a port-based
signal endpoint fail with a reset.

Note that this new test is a bit different from the other ones, not
using 'run_tests'. It is then needed to add the capture capability, and
the picking the right port which have been extracted into three new
helpers. The info about the capture can also be printed from a single
point, which simplifies the exit paths in do_transfer().

The 'Fixes' tag here below is the same as the one from the previous
commit: this patch here is not fixing anything wrong in the selftests,
but it validates the previous fix for an issue introduced by this commit
ID.

Fixes: 1729cf1 ("mptcp: create the listening socket for new port")
Co-developed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
  • Loading branch information
Paolo Abeni authored and intel-lab-lkp committed Oct 8, 2024
1 parent 3dca031 commit 6d91a77
Showing 1 changed file with 85 additions and 30 deletions.
115 changes: 85 additions & 30 deletions tools/testing/selftests/net/mptcp/mptcp_join.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ tmpfile=""
cout=""
err=""
capout=""
cappid=""
ns1=""
ns2=""
iptables="iptables"
Expand Down Expand Up @@ -887,40 +888,62 @@ check_cestab()
fi
}

do_transfer()
cond_start_capture()
{
local listener_ns="$1"
local connector_ns="$2"
local cl_proto="$3"
local srv_proto="$4"
local connect_addr="$5"

local port=$((10000 + MPTCP_LIB_TEST_COUNTER - 1))
local cappid
local FAILING_LINKS=${FAILING_LINKS:-""}
local fastclose=${fastclose:-""}
local speed=${speed:-"fast"}
local ns="$1"

:> "$cout"
:> "$sout"
:> "$capout"

if $capture; then
local capuser
if [ -z $SUDO_USER ] ; then
local capuser capfile
if [ -z $SUDO_USER ]; then
capuser=""
else
capuser="-Z $SUDO_USER"
fi

capfile=$(printf "mp_join-%02u-%s.pcap" "$MPTCP_LIB_TEST_COUNTER" "${listener_ns}")
capfile=$(printf "mp_join-%02u-%s.pcap" "$MPTCP_LIB_TEST_COUNTER" "$ns")

echo "Capturing traffic for test $MPTCP_LIB_TEST_COUNTER into $capfile"
ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&1 &
ip netns exec "$ns" tcpdump -i any -s 65535 -B 32768 $capuser -w "$capfile" > "$capout" 2>&1 &
cappid=$!

sleep 1
fi
}

cond_stop_capture()
{
if $capture; then
sleep 1
kill $cappid
cat "$capout"
fi
}

get_port()
{
echo "$((10000 + MPTCP_LIB_TEST_COUNTER - 1))"
}

do_transfer()
{
local listener_ns="$1"
local connector_ns="$2"
local cl_proto="$3"
local srv_proto="$4"
local connect_addr="$5"
local port

local FAILING_LINKS=${FAILING_LINKS:-""}
local fastclose=${fastclose:-""}
local speed=${speed:-"fast"}
port=$(get_port)

:> "$cout"
:> "$sout"

cond_start_capture ${listener_ns}

NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \
nstat -n
Expand Down Expand Up @@ -1007,10 +1030,7 @@ do_transfer()
wait $spid
local rets=$?

if $capture; then
sleep 1
kill $cappid
fi
cond_stop_capture

NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \
nstat | grep Tcp > /tmp/${listener_ns}.out
Expand All @@ -1026,7 +1046,6 @@ do_transfer()
ip netns exec ${connector_ns} ss -Menita 1>&2 -o "dport = :$port"
cat /tmp/${connector_ns}.out

cat "$capout"
return 1
fi

Expand All @@ -1043,13 +1062,7 @@ do_transfer()
fi
rets=$?

if [ $retc -eq 0 ] && [ $rets -eq 0 ];then
cat "$capout"
return 0
fi

cat "$capout"
return 1
[ $retc -eq 0 ] && [ $rets -eq 0 ]
}

make_file()
Expand Down Expand Up @@ -2873,6 +2886,32 @@ verify_listener_events()
fail_test
}

chk_mpc_endp_attempt()
{
local retl=$1
local attempts=$2

print_check "Connect"

if [ ${retl} = 124 ]; then
fail_test "timeout on connect"
elif [ ${retl} = 0 ]; then
fail_test "unexpected successful connect"
else
print_ok

print_check "Attempts"
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPCapableEndpAttempt")
if [ -z "$count" ]; then
print_skip
elif [ "$count" != "$attempts" ]; then
fail_test "got ${count} MPC attempt[s] on port-based endpoint, expected ${attempts}"
else
print_ok
fi
fi
}

add_addr_ports_tests()
{
# signal address with port
Expand Down Expand Up @@ -2963,6 +3002,22 @@ add_addr_ports_tests()
chk_join_nr 2 2 2
chk_add_nr 2 2 2
fi

if reset "port-based signal endpoint must not accept mpc"; then
local port retl count
port=$(get_port)

cond_start_capture ${ns1}
pm_nl_add_endpoint ${ns1} 10.0.2.1 flags signal port ${port}
mptcp_lib_wait_local_port_listen ${ns1} ${port}

timeout 1 ip netns exec ${ns2} \
./mptcp_connect -t ${timeout_poll} -p $port -s MPTCP 10.0.2.1 >/dev/null 2>&1
retl=$?
cond_stop_capture

chk_mpc_endp_attempt ${retl} 1
fi
}

syncookies_tests()
Expand Down

0 comments on commit 6d91a77

Please sign in to comment.