selftests: mptcp: join: test for prohibited MPC to port-based endp
commit 5afca7e996c42aed1b4a42d4712817601ba42aff upstream.
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: 1729cf186d
("mptcp: create the listening socket for new port")
Cc: stable@vger.kernel.org
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>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20241014-net-mptcp-mpc-port-endp-v2-2-7faea8e6b6ae@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
170792097b
commit
a304a394be
1 changed files with 86 additions and 31 deletions
|
@ -23,6 +23,7 @@ tmpfile=""
|
|||
cout=""
|
||||
err=""
|
||||
capout=""
|
||||
cappid=""
|
||||
ns1=""
|
||||
ns2=""
|
||||
iptables="iptables"
|
||||
|
@ -861,6 +862,44 @@ check_cestab()
|
|||
fi
|
||||
}
|
||||
|
||||
cond_start_capture()
|
||||
{
|
||||
local ns="$1"
|
||||
|
||||
:> "$capout"
|
||||
|
||||
if $capture; 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" "$ns")
|
||||
|
||||
echo "Capturing traffic for test $MPTCP_LIB_TEST_COUNTER into $capfile"
|
||||
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"
|
||||
|
@ -868,33 +907,17 @@ do_transfer()
|
|||
local cl_proto="$3"
|
||||
local srv_proto="$4"
|
||||
local connect_addr="$5"
|
||||
local port
|
||||
|
||||
local port=$((10000 + MPTCP_LIB_TEST_COUNTER - 1))
|
||||
local cappid
|
||||
local FAILING_LINKS=${FAILING_LINKS:-""}
|
||||
local fastclose=${fastclose:-""}
|
||||
local speed=${speed:-"fast"}
|
||||
port=$(get_port)
|
||||
|
||||
:> "$cout"
|
||||
:> "$sout"
|
||||
:> "$capout"
|
||||
|
||||
if $capture; then
|
||||
local capuser
|
||||
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}")
|
||||
|
||||
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 &
|
||||
cappid=$!
|
||||
|
||||
sleep 1
|
||||
fi
|
||||
cond_start_capture ${listener_ns}
|
||||
|
||||
NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \
|
||||
nstat -n
|
||||
|
@ -981,10 +1004,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
|
||||
|
@ -1000,7 +1020,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
|
||||
|
||||
|
@ -1017,13 +1036,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()
|
||||
|
@ -2786,6 +2799,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
|
||||
|
@ -2876,6 +2915,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()
|
||||
|
|
Loading…
Reference in a new issue