Commit 65fb58af authored by Matthieu Baerts (NGI0)'s avatar Matthieu Baerts (NGI0) Committed by Jakub Kicinski

selftests: mptcp: join: check re-using ID of closed subflow

This test extends "delete and re-add" to validate the previous commit. A
new 'subflow' endpoint is added, but the subflow request will be
rejected. The result is that no subflow will be established from this
address.

Later, the endpoint is removed and re-added after having cleared the
firewall rule. Before the previous commit, the client would not have
been able to create this new subflow.

While at it, extra checks have been added to validate the expected
numbers of MPJ and RM_ADDR.

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: b6c08380 ("mptcp: remove addr and subflow in PM netlink")
Cc: stable@vger.kernel.org
Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20240819-net-mptcp-pm-reusing-id-v1-4-38035d40de5b@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent edd8b5d8
...@@ -436,9 +436,10 @@ reset_with_tcp_filter() ...@@ -436,9 +436,10 @@ reset_with_tcp_filter()
local ns="${!1}" local ns="${!1}"
local src="${2}" local src="${2}"
local target="${3}" local target="${3}"
local chain="${4:-INPUT}"
if ! ip netns exec "${ns}" ${iptables} \ if ! ip netns exec "${ns}" ${iptables} \
-A INPUT \ -A "${chain}" \
-s "${src}" \ -s "${src}" \
-p tcp \ -p tcp \
-j "${target}"; then -j "${target}"; then
...@@ -3571,10 +3572,10 @@ endpoint_tests() ...@@ -3571,10 +3572,10 @@ endpoint_tests()
mptcp_lib_kill_wait $tests_pid mptcp_lib_kill_wait $tests_pid
fi fi
if reset "delete and re-add" && if reset_with_tcp_filter "delete and re-add" ns2 10.0.3.2 REJECT OUTPUT &&
mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then
pm_nl_set_limits $ns1 1 1 pm_nl_set_limits $ns1 0 2
pm_nl_set_limits $ns2 1 1 pm_nl_set_limits $ns2 0 2
pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
test_linkfail=4 speed=20 \ test_linkfail=4 speed=20 \
run_tests $ns1 $ns2 10.0.1.1 & run_tests $ns1 $ns2 10.0.1.1 &
...@@ -3591,11 +3592,27 @@ endpoint_tests() ...@@ -3591,11 +3592,27 @@ endpoint_tests()
chk_subflow_nr "after delete" 1 chk_subflow_nr "after delete" 1
chk_mptcp_info subflows 0 subflows 0 chk_mptcp_info subflows 0 subflows 0
pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
wait_mpj $ns2 wait_mpj $ns2
chk_subflow_nr "after re-add" 2 chk_subflow_nr "after re-add" 2
chk_mptcp_info subflows 1 subflows 1 chk_mptcp_info subflows 1 subflows 1
pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow
wait_attempt_fail $ns2
chk_subflow_nr "after new reject" 2
chk_mptcp_info subflows 1 subflows 1
ip netns exec "${ns2}" ${iptables} -D OUTPUT -s "10.0.3.2" -p tcp -j REJECT
pm_nl_del_endpoint $ns2 3 10.0.3.2
pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow
wait_mpj $ns2
chk_subflow_nr "after no reject" 3
chk_mptcp_info subflows 2 subflows 2
mptcp_lib_kill_wait $tests_pid mptcp_lib_kill_wait $tests_pid
chk_join_nr 3 3 3
chk_rm_nr 1 1
fi fi
# remove and re-add # remove and re-add
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment