selftests: mptcp: join: check re-adding init endp with != id
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Wed, 28 Aug 2024 06:14:30 +0000 (08:14 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 29 Aug 2024 08:39:50 +0000 (10:39 +0200)
The initial subflow has a special local ID: 0. It is specific per
connection.

When a global endpoint is deleted and re-added later, it can have a
different ID, but the kernel should still use the ID 0 if it corresponds
to the initial address.

This test validates this behaviour: the endpoint linked to the initial
subflow is removed, and re-added with a different ID.

Note that removing the initial subflow will not decrement the 'subflows'
counters, which corresponds to the *additional* subflows. On the other
hand, when the same endpoint is re-added, it will increment this
counter, as it will be seen as an additional subflow this time.

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: 3ad14f54bd74 ("mptcp: more accurate MPC endpoint tracking")
Cc: stable@vger.kernel.org
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
tools/testing/selftests/net/mptcp/mptcp_join.sh

index 8b4529ff15e54d6abea2eb74f0fdbee921ee2b0f..75458ade32c78f5e6b2d35262d7c2706c3aead51 100755 (executable)
@@ -3627,11 +3627,12 @@ endpoint_tests()
        # remove and re-add
        if reset "delete re-add signal" &&
           mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then
-               pm_nl_set_limits $ns1 0 2
-               pm_nl_set_limits $ns2 2 2
+               pm_nl_set_limits $ns1 0 3
+               pm_nl_set_limits $ns2 3 3
                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
+               pm_nl_add_endpoint $ns1 10.0.1.1 id 42 flags signal
                test_linkfail=4 speed=20 \
                        run_tests $ns1 $ns2 10.0.1.1 &
                local tests_pid=$!
@@ -3653,11 +3654,21 @@ endpoint_tests()
                wait_mpj $ns2
                chk_subflow_nr "after re-add" 3
                chk_mptcp_info subflows 2 subflows 2
+
+               pm_nl_del_endpoint $ns1 42 10.0.1.1
+               sleep 0.5
+               chk_subflow_nr "after delete ID 0" 2
+               chk_mptcp_info subflows 2 subflows 2
+
+               pm_nl_add_endpoint $ns1 10.0.1.1 id 99 flags signal
+               wait_mpj $ns2
+               chk_subflow_nr "after re-add" 3
+               chk_mptcp_info subflows 3 subflows 3
                mptcp_lib_kill_wait $tests_pid
 
-               chk_join_nr 3 3 3
-               chk_add_nr 4 4
-               chk_rm_nr 2 1 invert
+               chk_join_nr 4 4 4
+               chk_add_nr 5 5
+               chk_rm_nr 3 2 invert
        fi
 
        # flush and re-add