mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 08:34:20 +08:00
selftests: mptcp: join: skip test if iptables/tc cmds fail
Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.
Some tests are using IPTables and/or TC commands to force some
behaviours. If one of these commands fails -- likely because some
features are not available due to missing kernel config -- we should
intercept the error and skip the tests requiring these features.
Note that if we expect to have these features available and if
SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var is set to 1, the tests
will be marked as failed instead of skipped.
This patch also replaces the 'exit 1' by 'return 1' not to stop the
selftest in the middle without the conclusion if there is an issue with
NF or TC.
Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 8d014eaa92
("selftests: mptcp: add ADD_ADDR timeout test case")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
47867f0a7e
commit
4a0b866a3f
@ -286,11 +286,15 @@ reset_with_add_addr_timeout()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1
|
ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1
|
||||||
ip netns exec $ns2 $tables -A OUTPUT -p tcp \
|
|
||||||
-m tcp --tcp-option 30 \
|
if ! ip netns exec $ns2 $tables -A OUTPUT -p tcp \
|
||||||
-m bpf --bytecode \
|
-m tcp --tcp-option 30 \
|
||||||
"$CBPF_MPTCP_SUBOPTION_ADD_ADDR" \
|
-m bpf --bytecode \
|
||||||
-j DROP
|
"$CBPF_MPTCP_SUBOPTION_ADD_ADDR" \
|
||||||
|
-j DROP; then
|
||||||
|
mark_as_skipped "unable to set the 'add addr' rule"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: test name
|
# $1: test name
|
||||||
@ -334,17 +338,12 @@ reset_with_allow_join_id0()
|
|||||||
# tc action pedit offset 162 out of bounds
|
# tc action pedit offset 162 out of bounds
|
||||||
#
|
#
|
||||||
# Netfilter is used to mark packets with enough data.
|
# Netfilter is used to mark packets with enough data.
|
||||||
reset_with_fail()
|
setup_fail_rules()
|
||||||
{
|
{
|
||||||
reset "${1}" || return 1
|
|
||||||
|
|
||||||
ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=1
|
|
||||||
ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=1
|
|
||||||
|
|
||||||
check_invert=1
|
check_invert=1
|
||||||
validate_checksum=1
|
validate_checksum=1
|
||||||
local i="$2"
|
local i="$1"
|
||||||
local ip="${3:-4}"
|
local ip="${2:-4}"
|
||||||
local tables
|
local tables
|
||||||
|
|
||||||
tables="${iptables}"
|
tables="${iptables}"
|
||||||
@ -359,15 +358,32 @@ reset_with_fail()
|
|||||||
-p tcp \
|
-p tcp \
|
||||||
-m length --length 150:9999 \
|
-m length --length 150:9999 \
|
||||||
-m statistic --mode nth --packet 1 --every 99999 \
|
-m statistic --mode nth --packet 1 --every 99999 \
|
||||||
-j MARK --set-mark 42 || exit 1
|
-j MARK --set-mark 42 || return ${ksft_skip}
|
||||||
|
|
||||||
tc -n $ns2 qdisc add dev ns2eth$i clsact || exit 1
|
tc -n $ns2 qdisc add dev ns2eth$i clsact || return ${ksft_skip}
|
||||||
tc -n $ns2 filter add dev ns2eth$i egress \
|
tc -n $ns2 filter add dev ns2eth$i egress \
|
||||||
protocol ip prio 1000 \
|
protocol ip prio 1000 \
|
||||||
handle 42 fw \
|
handle 42 fw \
|
||||||
action pedit munge offset 148 u8 invert \
|
action pedit munge offset 148 u8 invert \
|
||||||
pipe csum tcp \
|
pipe csum tcp \
|
||||||
index 100 || exit 1
|
index 100 || return ${ksft_skip}
|
||||||
|
}
|
||||||
|
|
||||||
|
reset_with_fail()
|
||||||
|
{
|
||||||
|
reset "${1}" || return 1
|
||||||
|
shift
|
||||||
|
|
||||||
|
ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=1
|
||||||
|
ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=1
|
||||||
|
|
||||||
|
local rc=0
|
||||||
|
setup_fail_rules "${@}" || rc=$?
|
||||||
|
|
||||||
|
if [ ${rc} -eq ${ksft_skip} ]; then
|
||||||
|
mark_as_skipped "unable to set the 'fail' rules"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_with_events()
|
reset_with_events()
|
||||||
@ -382,6 +398,25 @@ reset_with_events()
|
|||||||
evts_ns2_pid=$!
|
evts_ns2_pid=$!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reset_with_tcp_filter()
|
||||||
|
{
|
||||||
|
reset "${1}" || return 1
|
||||||
|
shift
|
||||||
|
|
||||||
|
local ns="${!1}"
|
||||||
|
local src="${2}"
|
||||||
|
local target="${3}"
|
||||||
|
|
||||||
|
if ! ip netns exec "${ns}" ${iptables} \
|
||||||
|
-A INPUT \
|
||||||
|
-s "${src}" \
|
||||||
|
-p tcp \
|
||||||
|
-j "${target}"; then
|
||||||
|
mark_as_skipped "unable to set the filter rules"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
fail_test()
|
fail_test()
|
||||||
{
|
{
|
||||||
ret=1
|
ret=1
|
||||||
@ -745,15 +780,6 @@ pm_nl_check_endpoint()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
filter_tcp_from()
|
|
||||||
{
|
|
||||||
local ns="${1}"
|
|
||||||
local src="${2}"
|
|
||||||
local target="${3}"
|
|
||||||
|
|
||||||
ip netns exec "${ns}" ${iptables} -A INPUT -s "${src}" -p tcp -j "${target}"
|
|
||||||
}
|
|
||||||
|
|
||||||
do_transfer()
|
do_transfer()
|
||||||
{
|
{
|
||||||
local listener_ns="$1"
|
local listener_ns="$1"
|
||||||
@ -1975,23 +2001,23 @@ subflows_error_tests()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# multiple subflows, with subflow creation error
|
# multiple subflows, with subflow creation error
|
||||||
if reset "multi subflows, with failing subflow"; then
|
if reset_with_tcp_filter "multi subflows, with failing subflow" ns1 10.0.3.2 REJECT &&
|
||||||
|
continue_if mptcp_lib_kallsyms_has "mptcp_pm_subflow_check_next$"; then
|
||||||
pm_nl_set_limits $ns1 0 2
|
pm_nl_set_limits $ns1 0 2
|
||||||
pm_nl_set_limits $ns2 0 2
|
pm_nl_set_limits $ns2 0 2
|
||||||
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
|
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
|
||||||
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
|
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
|
||||||
filter_tcp_from $ns1 10.0.3.2 REJECT
|
|
||||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
||||||
chk_join_nr 1 1 1
|
chk_join_nr 1 1 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# multiple subflows, with subflow timeout on MPJ
|
# multiple subflows, with subflow timeout on MPJ
|
||||||
if reset "multi subflows, with subflow timeout"; then
|
if reset_with_tcp_filter "multi subflows, with subflow timeout" ns1 10.0.3.2 DROP &&
|
||||||
|
continue_if mptcp_lib_kallsyms_has "mptcp_pm_subflow_check_next$"; then
|
||||||
pm_nl_set_limits $ns1 0 2
|
pm_nl_set_limits $ns1 0 2
|
||||||
pm_nl_set_limits $ns2 0 2
|
pm_nl_set_limits $ns2 0 2
|
||||||
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
|
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
|
||||||
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
|
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
|
||||||
filter_tcp_from $ns1 10.0.3.2 DROP
|
|
||||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
||||||
chk_join_nr 1 1 1
|
chk_join_nr 1 1 1
|
||||||
fi
|
fi
|
||||||
@ -1999,11 +2025,11 @@ subflows_error_tests()
|
|||||||
# multiple subflows, check that the endpoint corresponding to
|
# multiple subflows, check that the endpoint corresponding to
|
||||||
# closed subflow (due to reset) is not reused if additional
|
# closed subflow (due to reset) is not reused if additional
|
||||||
# subflows are added later
|
# subflows are added later
|
||||||
if reset "multi subflows, fair usage on close"; then
|
if reset_with_tcp_filter "multi subflows, fair usage on close" ns1 10.0.3.2 REJECT &&
|
||||||
|
continue_if mptcp_lib_kallsyms_has "mptcp_pm_subflow_check_next$"; then
|
||||||
pm_nl_set_limits $ns1 0 1
|
pm_nl_set_limits $ns1 0 1
|
||||||
pm_nl_set_limits $ns2 0 1
|
pm_nl_set_limits $ns2 0 1
|
||||||
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
|
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
|
||||||
filter_tcp_from $ns1 10.0.3.2 REJECT
|
|
||||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow &
|
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow &
|
||||||
|
|
||||||
# mpj subflow will be in TW after the reset
|
# mpj subflow will be in TW after the reset
|
||||||
|
Loading…
Reference in New Issue
Block a user