mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 14:30:06 -04:00
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>
This commit is contained in:
committed by
Jakub Kicinski
parent
59701b1870
commit
c912f935a5
@@ -2320,6 +2320,74 @@ signal_address_tests()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
laminar_endp_tests()
|
||||||
|
{
|
||||||
|
# no laminar endpoints: routing rules are used
|
||||||
|
if reset_with_tcp_filter "without a laminar endpoint" ns1 10.0.2.2 REJECT &&
|
||||||
|
mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then
|
||||||
|
pm_nl_set_limits $ns1 0 2
|
||||||
|
pm_nl_set_limits $ns2 2 2
|
||||||
|
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1
|
||||||
|
join_syn_tx=1 \
|
||||||
|
chk_join_nr 0 0 0
|
||||||
|
chk_add_nr 1 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# laminar endpoints: this endpoint is used
|
||||||
|
if reset_with_tcp_filter "with a laminar endpoint" ns1 10.0.2.2 REJECT &&
|
||||||
|
mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then
|
||||||
|
pm_nl_set_limits $ns1 0 2
|
||||||
|
pm_nl_set_limits $ns2 2 2
|
||||||
|
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
|
||||||
|
pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1
|
||||||
|
chk_join_nr 1 1 1
|
||||||
|
chk_add_nr 1 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# laminar endpoints: these endpoints are used
|
||||||
|
if reset_with_tcp_filter "with multiple laminar endpoints" ns1 10.0.2.2 REJECT &&
|
||||||
|
mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then
|
||||||
|
pm_nl_set_limits $ns1 0 2
|
||||||
|
pm_nl_set_limits $ns2 2 2
|
||||||
|
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
|
||||||
|
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
|
||||||
|
pm_nl_add_endpoint $ns2 dead:beef:3::2 flags laminar
|
||||||
|
pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar
|
||||||
|
pm_nl_add_endpoint $ns2 10.0.4.2 flags laminar
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1
|
||||||
|
chk_join_nr 2 2 2
|
||||||
|
chk_add_nr 2 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# laminar endpoints: only one endpoint is used
|
||||||
|
if reset_with_tcp_filter "single laminar endpoint" ns1 10.0.2.2 REJECT &&
|
||||||
|
mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then
|
||||||
|
pm_nl_set_limits $ns1 0 2
|
||||||
|
pm_nl_set_limits $ns2 2 2
|
||||||
|
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
|
||||||
|
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
|
||||||
|
pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1
|
||||||
|
chk_join_nr 1 1 1
|
||||||
|
chk_add_nr 2 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# laminar endpoints: subflow and laminar flags
|
||||||
|
if reset_with_tcp_filter "sublow + laminar endpoints" ns1 10.0.2.2 REJECT &&
|
||||||
|
mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then
|
||||||
|
pm_nl_set_limits $ns1 0 4
|
||||||
|
pm_nl_set_limits $ns2 2 4
|
||||||
|
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
|
||||||
|
pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,laminar
|
||||||
|
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,laminar
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1
|
||||||
|
chk_join_nr 1 1 1
|
||||||
|
chk_add_nr 1 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
link_failure_tests()
|
link_failure_tests()
|
||||||
{
|
{
|
||||||
# accept and use add_addr with additional subflows and link loss
|
# accept and use add_addr with additional subflows and link loss
|
||||||
@@ -4109,6 +4177,7 @@ all_tests_sorted=(
|
|||||||
f@subflows_tests
|
f@subflows_tests
|
||||||
e@subflows_error_tests
|
e@subflows_error_tests
|
||||||
s@signal_address_tests
|
s@signal_address_tests
|
||||||
|
L@laminar_endp_tests
|
||||||
l@link_failure_tests
|
l@link_failure_tests
|
||||||
t@add_addr_timeout_tests
|
t@add_addr_timeout_tests
|
||||||
r@remove_tests
|
r@remove_tests
|
||||||
|
|||||||
@@ -830,6 +830,8 @@ int add_addr(int fd, int pm_family, int argc, char *argv[])
|
|||||||
flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW;
|
flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW;
|
||||||
else if (!strcmp(tok, "signal"))
|
else if (!strcmp(tok, "signal"))
|
||||||
flags |= MPTCP_PM_ADDR_FLAG_SIGNAL;
|
flags |= MPTCP_PM_ADDR_FLAG_SIGNAL;
|
||||||
|
else if (!strcmp(tok, "laminar"))
|
||||||
|
flags |= MPTCP_PM_ADDR_FLAG_LAMINAR;
|
||||||
else if (!strcmp(tok, "backup"))
|
else if (!strcmp(tok, "backup"))
|
||||||
flags |= MPTCP_PM_ADDR_FLAG_BACKUP;
|
flags |= MPTCP_PM_ADDR_FLAG_BACKUP;
|
||||||
else if (!strcmp(tok, "fullmesh"))
|
else if (!strcmp(tok, "fullmesh"))
|
||||||
@@ -1018,6 +1020,13 @@ static void print_addr(struct rtattr *attrs, int len)
|
|||||||
printf(",");
|
printf(",");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & MPTCP_PM_ADDR_FLAG_LAMINAR) {
|
||||||
|
printf("laminar");
|
||||||
|
flags &= ~MPTCP_PM_ADDR_FLAG_LAMINAR;
|
||||||
|
if (flags)
|
||||||
|
printf(",");
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & MPTCP_PM_ADDR_FLAG_BACKUP) {
|
if (flags & MPTCP_PM_ADDR_FLAG_BACKUP) {
|
||||||
printf("backup");
|
printf("backup");
|
||||||
flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP;
|
flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP;
|
||||||
|
|||||||
Reference in New Issue
Block a user