mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-20 17:44:33 +08:00
selftests: mptcp: add tests for subflow creation failure
Verify that, when multiple endpoints are available, subflows creation proceed even when the first additional subflow creation fails - due to packet drop on the relevant link Co-developed-by: Geliang Tang <geliang.tang@suse.com> Signed-off-by: Geliang Tang <geliang.tang@suse.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a88c9e4969
commit
46e967d187
@ -17,4 +17,5 @@ CONFIG_NFT_TPROXY=m
|
||||
CONFIG_NFT_SOCKET=m
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
|
@ -937,6 +937,22 @@ chk_link_usage()
|
||||
fi
|
||||
}
|
||||
|
||||
wait_for_tw()
|
||||
{
|
||||
local timeout_ms=$((timeout_poll * 1000))
|
||||
local time=0
|
||||
local ns=$1
|
||||
|
||||
while [ $time -lt $timeout_ms ]; do
|
||||
local cnt=$(ip netns exec $ns ss -t state time-wait |wc -l)
|
||||
|
||||
[ "$cnt" = 1 ] && return 1
|
||||
time=$((time + 100))
|
||||
sleep 0.1
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
subflows_tests()
|
||||
{
|
||||
reset
|
||||
@ -994,6 +1010,61 @@ subflows_tests()
|
||||
chk_join_nr "single subflow, dev" 1 1 1
|
||||
}
|
||||
|
||||
subflows_error_tests()
|
||||
{
|
||||
# If a single subflow is configured, and matches the MPC src
|
||||
# address, no additional subflow should be created
|
||||
reset
|
||||
ip netns exec $ns1 ./pm_nl_ctl limits 0 1
|
||||
ip netns exec $ns2 ./pm_nl_ctl limits 0 1
|
||||
ip netns exec $ns2 ./pm_nl_ctl add 10.0.1.2 flags subflow
|
||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
||||
chk_join_nr "no MPC reuse with single endpoint" 0 0 0
|
||||
|
||||
# multiple subflows, with subflow creation error
|
||||
reset
|
||||
ip netns exec $ns1 ./pm_nl_ctl limits 0 2
|
||||
ip netns exec $ns2 ./pm_nl_ctl limits 0 2
|
||||
ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
|
||||
ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
|
||||
ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j REJECT
|
||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
||||
chk_join_nr "multi subflows, with failing subflow" 1 1 1
|
||||
|
||||
# multiple subflows, with subflow timeout on MPJ
|
||||
reset
|
||||
ip netns exec $ns1 ./pm_nl_ctl limits 0 2
|
||||
ip netns exec $ns2 ./pm_nl_ctl limits 0 2
|
||||
ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
|
||||
ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
|
||||
ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j DROP
|
||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
||||
chk_join_nr "multi subflows, with subflow timeout" 1 1 1
|
||||
|
||||
# multiple subflows, check that the endpoint corresponding to
|
||||
# closed subflow (due to reset) is not reused if additional
|
||||
# subflows are added later
|
||||
reset
|
||||
ip netns exec $ns1 ./pm_nl_ctl limits 0 1
|
||||
ip netns exec $ns2 ./pm_nl_ctl limits 0 1
|
||||
ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
|
||||
ip netns exec $ns1 iptables -A INPUT -s 10.0.3.2 -p tcp -j REJECT
|
||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow &
|
||||
|
||||
# updates in the child shell do not have any effect here, we
|
||||
# need to bump the test counter for the above case
|
||||
TEST_COUNT=$((TEST_COUNT+1))
|
||||
|
||||
# mpj subflow will be in TW after the reset
|
||||
wait_for_tw $ns2
|
||||
ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
|
||||
wait
|
||||
|
||||
# additional subflow could be created only if the PM select
|
||||
# the later endpoint, skipping the already used one
|
||||
chk_join_nr "multi subflows, fair usage on close" 1 1 1
|
||||
}
|
||||
|
||||
signal_address_tests()
|
||||
{
|
||||
# add_address, unused
|
||||
@ -1805,6 +1876,7 @@ fullmesh_tests()
|
||||
all_tests()
|
||||
{
|
||||
subflows_tests
|
||||
subflows_error_tests
|
||||
signal_address_tests
|
||||
link_failure_tests
|
||||
add_addr_timeout_tests
|
||||
@ -1824,6 +1896,7 @@ usage()
|
||||
{
|
||||
echo "mptcp_join usage:"
|
||||
echo " -f subflows_tests"
|
||||
echo " -e subflows_error_tests"
|
||||
echo " -s signal_address_tests"
|
||||
echo " -l link_failure_tests"
|
||||
echo " -t add_addr_timeout_tests"
|
||||
@ -1872,11 +1945,14 @@ if [ $do_all_tests -eq 1 ]; then
|
||||
exit $ret
|
||||
fi
|
||||
|
||||
while getopts 'fsltra64bpkdmchCS' opt; do
|
||||
while getopts 'fesltra64bpkdmchCS' opt; do
|
||||
case $opt in
|
||||
f)
|
||||
subflows_tests
|
||||
;;
|
||||
e)
|
||||
subflows_error_tests
|
||||
;;
|
||||
s)
|
||||
signal_address_tests
|
||||
;;
|
||||
|
Loading…
Reference in New Issue
Block a user