selftests: mptcp: userspace: validate v4-v6 subflows mix
commit 4656d72c1e
upstream.
MPTCP protocol supports having subflows in both IPv4 and IPv6. In Linux,
it is possible to have that if the MPTCP socket has been created with
AF_INET6 family without the IPV6_V6ONLY option.
Here, a new IPv4 subflow is being added to the initial IPv6 connection,
then being removed using Netlink commands.
Cc: stable@vger.kernel.org # v5.19+
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f44ce13201
commit
f59549814a
|
@ -776,6 +776,52 @@ test_subflows()
|
|||
rm -f "$evts"
|
||||
}
|
||||
|
||||
test_subflows_v4_v6_mix()
|
||||
{
|
||||
# Attempt to add a listener at 10.0.2.1:<subflow-port>
|
||||
ip netns exec "$ns1" ./pm_nl_ctl listen 10.0.2.1\
|
||||
$app6_port > /dev/null 2>&1 &
|
||||
local listener_pid=$!
|
||||
|
||||
# ADD_ADDR4 from server to client machine reusing the subflow port on
|
||||
# the established v6 connection
|
||||
:>"$client_evts"
|
||||
ip netns exec "$ns1" ./pm_nl_ctl ann 10.0.2.1 token "$server6_token" id\
|
||||
$server_addr_id dev ns1eth2 > /dev/null 2>&1
|
||||
stdbuf -o0 -e0 printf "ADD_ADDR4 id:%d 10.0.2.1 (ns1) => ns2, reuse port\t\t" $server_addr_id
|
||||
sleep 0.5
|
||||
verify_announce_event "$client_evts" "$ANNOUNCED" "$client6_token" "10.0.2.1"\
|
||||
"$server_addr_id" "$app6_port"
|
||||
|
||||
# CREATE_SUBFLOW from client to server machine
|
||||
:>"$client_evts"
|
||||
ip netns exec "$ns2" ./pm_nl_ctl csf lip 10.0.2.2 lid 23 rip 10.0.2.1 rport\
|
||||
$app6_port token "$client6_token" > /dev/null 2>&1
|
||||
sleep 0.5
|
||||
verify_subflow_events "$client_evts" "$SUB_ESTABLISHED" "$client6_token"\
|
||||
"$AF_INET" "10.0.2.2" "10.0.2.1" "$app6_port" "23"\
|
||||
"$server_addr_id" "ns2" "ns1"
|
||||
|
||||
# Delete the listener from the server ns, if one was created
|
||||
kill_wait $listener_pid
|
||||
|
||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts")
|
||||
|
||||
# DESTROY_SUBFLOW from client to server machine
|
||||
:>"$client_evts"
|
||||
ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\
|
||||
$app6_port token "$client6_token" > /dev/null 2>&1
|
||||
sleep 0.5
|
||||
verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client6_token" \
|
||||
"$AF_INET" "10.0.2.2" "10.0.2.1" "$app6_port" "23"\
|
||||
"$server_addr_id" "ns2" "ns1"
|
||||
|
||||
# RM_ADDR from server to client machine
|
||||
ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\
|
||||
"$server6_token" > /dev/null 2>&1
|
||||
sleep 0.5
|
||||
}
|
||||
|
||||
test_prio()
|
||||
{
|
||||
local count
|
||||
|
@ -812,6 +858,7 @@ make_connection "v6"
|
|||
test_announce
|
||||
test_remove
|
||||
test_subflows
|
||||
test_subflows_v4_v6_mix
|
||||
test_prio
|
||||
|
||||
exit 0
|
||||
|
|
Loading…
Reference in New Issue