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
2 changed files with 78 additions and 1 deletions
|
@ -17,4 +17,5 @@ CONFIG_NFT_TPROXY=m
|
||||||
CONFIG_NFT_SOCKET=m
|
CONFIG_NFT_SOCKET=m
|
||||||
CONFIG_IP_ADVANCED_ROUTER=y
|
CONFIG_IP_ADVANCED_ROUTER=y
|
||||||
CONFIG_IP_MULTIPLE_TABLES=y
|
CONFIG_IP_MULTIPLE_TABLES=y
|
||||||
|
CONFIG_IP_NF_TARGET_REJECT=m
|
||||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||||
|
|
|
@ -937,6 +937,22 @@ chk_link_usage()
|
||||||
fi
|
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()
|
subflows_tests()
|
||||||
{
|
{
|
||||||
reset
|
reset
|
||||||
|
@ -994,6 +1010,61 @@ subflows_tests()
|
||||||
chk_join_nr "single subflow, dev" 1 1 1
|
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()
|
signal_address_tests()
|
||||||
{
|
{
|
||||||
# add_address, unused
|
# add_address, unused
|
||||||
|
@ -1805,6 +1876,7 @@ fullmesh_tests()
|
||||||
all_tests()
|
all_tests()
|
||||||
{
|
{
|
||||||
subflows_tests
|
subflows_tests
|
||||||
|
subflows_error_tests
|
||||||
signal_address_tests
|
signal_address_tests
|
||||||
link_failure_tests
|
link_failure_tests
|
||||||
add_addr_timeout_tests
|
add_addr_timeout_tests
|
||||||
|
@ -1824,6 +1896,7 @@ usage()
|
||||||
{
|
{
|
||||||
echo "mptcp_join usage:"
|
echo "mptcp_join usage:"
|
||||||
echo " -f subflows_tests"
|
echo " -f subflows_tests"
|
||||||
|
echo " -e subflows_error_tests"
|
||||||
echo " -s signal_address_tests"
|
echo " -s signal_address_tests"
|
||||||
echo " -l link_failure_tests"
|
echo " -l link_failure_tests"
|
||||||
echo " -t add_addr_timeout_tests"
|
echo " -t add_addr_timeout_tests"
|
||||||
|
@ -1872,11 +1945,14 @@ if [ $do_all_tests -eq 1 ]; then
|
||||||
exit $ret
|
exit $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while getopts 'fsltra64bpkdmchCS' opt; do
|
while getopts 'fesltra64bpkdmchCS' opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
f)
|
f)
|
||||||
subflows_tests
|
subflows_tests
|
||||||
;;
|
;;
|
||||||
|
e)
|
||||||
|
subflows_error_tests
|
||||||
|
;;
|
||||||
s)
|
s)
|
||||||
signal_address_tests
|
signal_address_tests
|
||||||
;;
|
;;
|
||||||
|
|
Loading…
Add table
Reference in a new issue