Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: mptcp: join: validate new laminar endp

Here are a few sub-tests for mptcp_join.sh, validating the new 'laminar'
endpoint type.

In a setup where subflows created using the routing rules would be
rejected by the listener, and where the latter announces one IP address,
some cases are verified:

- Without any 'laminar' endpoints: no new subflows are created.

- With one 'laminar' endpoint: a second subflow is created.

- With multiple 'laminar' endpoints: 2 IPv4 subflows are created.

- With one 'laminar' endpoint, but the server announcing a second IP
address, only one subflow is created.

- With one 'laminar' + 'subflow' endpoint, the same endpoint is only
used once.

Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20250927-net-next-mptcp-rcv-path-imp-v1-8-5da266aa9c1a@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Matthieu Baerts (NGI0) and committed by
Jakub Kicinski
c912f935 59701b18

+78
+69
tools/testing/selftests/net/mptcp/mptcp_join.sh
··· 2320 2320 fi 2321 2321 } 2322 2322 2323 + laminar_endp_tests() 2324 + { 2325 + # no laminar endpoints: routing rules are used 2326 + if reset_with_tcp_filter "without a laminar endpoint" ns1 10.0.2.2 REJECT && 2327 + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then 2328 + pm_nl_set_limits $ns1 0 2 2329 + pm_nl_set_limits $ns2 2 2 2330 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2331 + run_tests $ns1 $ns2 10.0.1.1 2332 + join_syn_tx=1 \ 2333 + chk_join_nr 0 0 0 2334 + chk_add_nr 1 1 2335 + fi 2336 + 2337 + # laminar endpoints: this endpoint is used 2338 + if reset_with_tcp_filter "with a laminar endpoint" ns1 10.0.2.2 REJECT && 2339 + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then 2340 + pm_nl_set_limits $ns1 0 2 2341 + pm_nl_set_limits $ns2 2 2 2342 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2343 + pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar 2344 + run_tests $ns1 $ns2 10.0.1.1 2345 + chk_join_nr 1 1 1 2346 + chk_add_nr 1 1 2347 + fi 2348 + 2349 + # laminar endpoints: these endpoints are used 2350 + if reset_with_tcp_filter "with multiple laminar endpoints" ns1 10.0.2.2 REJECT && 2351 + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then 2352 + pm_nl_set_limits $ns1 0 2 2353 + pm_nl_set_limits $ns2 2 2 2354 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2355 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 2356 + pm_nl_add_endpoint $ns2 dead:beef:3::2 flags laminar 2357 + pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar 2358 + pm_nl_add_endpoint $ns2 10.0.4.2 flags laminar 2359 + run_tests $ns1 $ns2 10.0.1.1 2360 + chk_join_nr 2 2 2 2361 + chk_add_nr 2 2 2362 + fi 2363 + 2364 + # laminar endpoints: only one endpoint is used 2365 + if reset_with_tcp_filter "single laminar endpoint" ns1 10.0.2.2 REJECT && 2366 + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then 2367 + pm_nl_set_limits $ns1 0 2 2368 + pm_nl_set_limits $ns2 2 2 2369 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2370 + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal 2371 + pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar 2372 + run_tests $ns1 $ns2 10.0.1.1 2373 + chk_join_nr 1 1 1 2374 + chk_add_nr 2 2 2375 + fi 2376 + 2377 + # laminar endpoints: subflow and laminar flags 2378 + if reset_with_tcp_filter "sublow + laminar endpoints" ns1 10.0.2.2 REJECT && 2379 + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then 2380 + pm_nl_set_limits $ns1 0 4 2381 + pm_nl_set_limits $ns2 2 4 2382 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal 2383 + pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,laminar 2384 + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,laminar 2385 + run_tests $ns1 $ns2 10.0.1.1 2386 + chk_join_nr 1 1 1 2387 + chk_add_nr 1 1 2388 + fi 2389 + } 2390 + 2323 2391 link_failure_tests() 2324 2392 { 2325 2393 # accept and use add_addr with additional subflows and link loss ··· 4177 4109 f@subflows_tests 4178 4110 e@subflows_error_tests 4179 4111 s@signal_address_tests 4112 + L@laminar_endp_tests 4180 4113 l@link_failure_tests 4181 4114 t@add_addr_timeout_tests 4182 4115 r@remove_tests
+9
tools/testing/selftests/net/mptcp/pm_nl_ctl.c
··· 830 830 flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW; 831 831 else if (!strcmp(tok, "signal")) 832 832 flags |= MPTCP_PM_ADDR_FLAG_SIGNAL; 833 + else if (!strcmp(tok, "laminar")) 834 + flags |= MPTCP_PM_ADDR_FLAG_LAMINAR; 833 835 else if (!strcmp(tok, "backup")) 834 836 flags |= MPTCP_PM_ADDR_FLAG_BACKUP; 835 837 else if (!strcmp(tok, "fullmesh")) ··· 1016 1014 if (flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { 1017 1015 printf("subflow"); 1018 1016 flags &= ~MPTCP_PM_ADDR_FLAG_SUBFLOW; 1017 + if (flags) 1018 + printf(","); 1019 + } 1020 + 1021 + if (flags & MPTCP_PM_ADDR_FLAG_LAMINAR) { 1022 + printf("laminar"); 1023 + flags &= ~MPTCP_PM_ADDR_FLAG_LAMINAR; 1019 1024 if (flags) 1020 1025 printf(","); 1021 1026 }