selftests: mptcp: userspace: validate v4-v6 subflows mix
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>
This commit is contained in:
parent
fb00ee4f33
commit
4656d72c1e
|
@ -752,6 +752,52 @@ test_subflows()
|
|||
"$server4_token" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -861,6 +907,7 @@ make_connection "v6"
|
|||
test_announce
|
||||
test_remove
|
||||
test_subflows
|
||||
test_subflows_v4_v6_mix
|
||||
test_prio
|
||||
test_listener
|
||||
|
||||
|
|
Loading…
Reference in New Issue