selftests: mptcp: join: check re-using ID of unused ADD_ADDR

commit a13d5aad4dd9a309eecdc33cfd75045bd5f376a3 upstream.

This test extends "delete re-add signal" to validate the previous
commit. An extra address is announced by the server, but this address
cannot be used by the client. The result is that no subflow will be
established to this address.

Later, the server will delete this extra endpoint, and set a new one,
with a valid address, but re-using the same ID. Before the previous
commit, the server would not have been able to announce this new
address.

While at it, extra checks have been added to validate the expected
numbers of MPJ, ADD_ADDR 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: b6c0838086 ("mptcp: remove addr and subflow in PM netlink")
Cc: stable@vger.kernel.org
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20240819-net-mptcp-pm-reusing-id-v1-2-38035d40de5b@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
[ Conflicts in mptcp_join.sh, because the helpers are different in this
  version:
  - run_tests has been modified a few times to reduce the number of
    positional parameters
  - no chk_mptcp_info helper
  - chk_subflow_nr taking an extra parameter
  - kill_tests_wait instead of mptcp_lib_kill_wait ]
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Matthieu Baerts (NGI0)
2024-09-04 13:07:06 +02:00
committed by Greg Kroah-Hartman
parent 7f72d7095b
commit d6b06098db

View File

@@ -3243,9 +3243,11 @@ userspace_tests()
# remove and re-add # remove and re-add
if reset "delete re-add signal" && if reset "delete re-add signal" &&
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 2 2
pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal
# broadcast IP: no packet for this address will be received on ns1
pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
run_tests $ns1 $ns2 10.0.1.1 4 0 0 speed_20 2>/dev/null & run_tests $ns1 $ns2 10.0.1.1 4 0 0 speed_20 2>/dev/null &
local tests_pid=$! local tests_pid=$!
@@ -3253,13 +3255,19 @@ userspace_tests()
chk_subflow_nr needtitle "before delete" 2 chk_subflow_nr needtitle "before delete" 2
pm_nl_del_endpoint $ns1 1 10.0.2.1 pm_nl_del_endpoint $ns1 1 10.0.2.1
pm_nl_del_endpoint $ns1 2 224.0.0.1
sleep 0.5 sleep 0.5
chk_subflow_nr "" "after delete" 1 chk_subflow_nr "" "after delete" 1
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal
pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal
wait_mpj $ns2 wait_mpj $ns2
chk_subflow_nr "" "after re-add" 2 chk_subflow_nr "" "after re-add" 3
kill_tests_wait kill_tests_wait
chk_join_nr 3 3 3
chk_add_nr 4 4
chk_rm_nr 2 1 invert
fi fi
# flush and re-add # flush and re-add