mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
Merge branch 'selftests-pmtu-Add-test-choice-and-captures'
Stefano Brivio says: ==================== selftests: pmtu: Add test choice and captures This series adds a couple of features useful for debugging: 1/2 allows selecting single tests and 2/2 adds optional traffic captures. Semantics for current invocation of test script are preserved. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
9e983c5898
1 changed files with 68 additions and 1 deletions
|
@ -142,6 +142,7 @@ dummy6_mask="64"
|
||||||
|
|
||||||
cleanup_done=1
|
cleanup_done=1
|
||||||
err_buf=
|
err_buf=
|
||||||
|
tcpdump_pids=
|
||||||
|
|
||||||
err() {
|
err() {
|
||||||
err_buf="${err_buf}${1}
|
err_buf="${err_buf}${1}
|
||||||
|
@ -284,7 +285,24 @@ setup() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace() {
|
||||||
|
[ $tracing -eq 0 ] && return
|
||||||
|
|
||||||
|
for arg do
|
||||||
|
[ "${ns_cmd}" = "" ] && ns_cmd="${arg}" && continue
|
||||||
|
${ns_cmd} tcpdump -s 0 -i "${arg}" -w "${name}_${arg}.pcap" 2> /dev/null &
|
||||||
|
tcpdump_pids="${tcpdump_pids} $!"
|
||||||
|
ns_cmd=
|
||||||
|
done
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
|
for pid in ${tcpdump_pids}; do
|
||||||
|
kill ${pid}
|
||||||
|
done
|
||||||
|
tcpdump_pids=
|
||||||
|
|
||||||
[ ${cleanup_done} -eq 1 ] && return
|
[ ${cleanup_done} -eq 1 ] && return
|
||||||
for n in ${NS_A} ${NS_B} ${NS_R1} ${NS_R2}; do
|
for n in ${NS_A} ${NS_B} ${NS_R1} ${NS_R2}; do
|
||||||
ip netns del ${n} 2> /dev/null
|
ip netns del ${n} 2> /dev/null
|
||||||
|
@ -357,6 +375,10 @@ test_pmtu_ipvX() {
|
||||||
family=${1}
|
family=${1}
|
||||||
|
|
||||||
setup namespaces routing || return 2
|
setup namespaces routing || return 2
|
||||||
|
trace "${ns_a}" veth_A-R1 "${ns_r1}" veth_R1-A \
|
||||||
|
"${ns_r1}" veth_R1-B "${ns_b}" veth_B-R1 \
|
||||||
|
"${ns_a}" veth_A-R2 "${ns_r2}" veth_R2-A \
|
||||||
|
"${ns_r2}" veth_R2-B "${ns_b}" veth_B-R2
|
||||||
|
|
||||||
if [ ${family} -eq 4 ]; then
|
if [ ${family} -eq 4 ]; then
|
||||||
ping=ping
|
ping=ping
|
||||||
|
@ -445,6 +467,8 @@ test_pmtu_ipv6_exception() {
|
||||||
|
|
||||||
test_pmtu_vti4_exception() {
|
test_pmtu_vti4_exception() {
|
||||||
setup namespaces veth vti4 xfrm4 || return 2
|
setup namespaces veth vti4 xfrm4 || return 2
|
||||||
|
trace "${ns_a}" veth_a "${ns_b}" veth_b \
|
||||||
|
"${ns_a}" vti4_a "${ns_b}" vti4_b
|
||||||
|
|
||||||
veth_mtu=1500
|
veth_mtu=1500
|
||||||
vti_mtu=$((veth_mtu - 20))
|
vti_mtu=$((veth_mtu - 20))
|
||||||
|
@ -473,6 +497,8 @@ test_pmtu_vti4_exception() {
|
||||||
|
|
||||||
test_pmtu_vti6_exception() {
|
test_pmtu_vti6_exception() {
|
||||||
setup namespaces veth vti6 xfrm6 || return 2
|
setup namespaces veth vti6 xfrm6 || return 2
|
||||||
|
trace "${ns_a}" veth_a "${ns_b}" veth_b \
|
||||||
|
"${ns_a}" vti6_a "${ns_b}" vti6_b
|
||||||
fail=0
|
fail=0
|
||||||
|
|
||||||
# Create route exception by exceeding link layer MTU
|
# Create route exception by exceeding link layer MTU
|
||||||
|
@ -641,15 +667,56 @@ test_pmtu_vti6_link_change_mtu() {
|
||||||
return ${fail}
|
return ${fail}
|
||||||
}
|
}
|
||||||
|
|
||||||
trap cleanup EXIT
|
usage() {
|
||||||
|
echo
|
||||||
|
echo "$0 [OPTIONS] [TEST]..."
|
||||||
|
echo "If no TEST argument is given, all tests will be run."
|
||||||
|
echo
|
||||||
|
echo "Options"
|
||||||
|
echo " --trace: capture traffic to TEST_INTERFACE.pcap"
|
||||||
|
echo
|
||||||
|
echo "Available tests${tests}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
exitcode=0
|
exitcode=0
|
||||||
desc=0
|
desc=0
|
||||||
IFS="
|
IFS="
|
||||||
"
|
"
|
||||||
|
|
||||||
|
tracing=0
|
||||||
|
for arg do
|
||||||
|
if [ "${arg}" != "${arg#--*}" ]; then
|
||||||
|
opt="${arg#--}"
|
||||||
|
if [ "${opt}" = "trace" ]; then
|
||||||
|
if which tcpdump > /dev/null 2>&1; then
|
||||||
|
tracing=1
|
||||||
|
else
|
||||||
|
echo "=== tcpdump not available, tracing disabled"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Check first that all requested tests are available before
|
||||||
|
# running any
|
||||||
|
command -v > /dev/null "test_${arg}" || { echo "=== Test ${arg} not found"; usage; }
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
for t in ${tests}; do
|
for t in ${tests}; do
|
||||||
[ $desc -eq 0 ] && name="${t}" && desc=1 && continue || desc=0
|
[ $desc -eq 0 ] && name="${t}" && desc=1 && continue || desc=0
|
||||||
|
|
||||||
|
run_this=1
|
||||||
|
for arg do
|
||||||
|
[ "${arg}" != "${arg#--*}" ] && continue
|
||||||
|
[ "${arg}" = "${name}" ] && run_this=1 && break
|
||||||
|
run_this=0
|
||||||
|
done
|
||||||
|
[ $run_this -eq 0 ] && continue
|
||||||
|
|
||||||
(
|
(
|
||||||
unset IFS
|
unset IFS
|
||||||
eval test_${name}
|
eval test_${name}
|
||||||
|
|
Loading…
Reference in a new issue