Skip to content

Commit 6e51d91

Browse files
committed
Merge branch 'mptcp-selftests'
Matthieu Baerts says: ==================== selftests: mptcp: cleanups and 'ip mptcp' support Here are some patches from Geliang, doing different cleanups, and supporting 'ip mptcp' in more MPTCP selftests. Patch 1 checks that TC is available in selftests requiring it. Patch 2 adds 'ms' units in TC commands, to avoid confusions. Patches 3-9 are some prerequisites for patch 10: some export code from mptcp_join.sh to mptcp_lib.sh, to be re-used in pm_netlink.sh, mptcp_sockopt.sh and simult_flows.sh ; and others add helpers to pm_netlink.sh to easily support both 'ip mptcp' and 'pm_nl_ctl' tools to interact with the in-kernel MPTCP path-manager. Patch 10 adds a '-i' parameter in mptcp_sockopt.sh, pm_netlink.sh, and simult_flows.sh to use 'ip mptcp' tool instead of 'pm_nl_ctl'. Patch 11 fixes some ShellCheck warnings in pm_netlink.sh, in order to drop a ShellCheck's 'disable' instruction. ==================== Signed-off-by: Matthieu Baerts (NGI0) <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2 parents d2c3a7e + 6eaeda1 commit 6e51d91

File tree

6 files changed

+382
-259
lines changed

6 files changed

+382
-259
lines changed

tools/testing/selftests/net/mptcp/mptcp_connect.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ cleanup()
147147

148148
mptcp_lib_check_mptcp
149149
mptcp_lib_check_kallsyms
150-
mptcp_lib_check_tools ip
150+
mptcp_lib_check_tools ip tc
151151

152152
sin=$(mktemp)
153153
sout=$(mktemp)

tools/testing/selftests/net/mptcp/mptcp_join.sh

Lines changed: 23 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ timeout_poll=30
3131
timeout_test=$((timeout_poll * 2 + 1))
3232
capture=false
3333
checksum=false
34-
ip_mptcp=0
3534
check_invert=0
3635
validate_checksum=false
3736
init=0
@@ -125,8 +124,8 @@ init_shapers()
125124
{
126125
local i
127126
for i in $(seq 1 4); do
128-
tc -n $ns1 qdisc add dev ns1eth$i root netem rate 20mbit delay 1
129-
tc -n $ns2 qdisc add dev ns2eth$i root netem rate 20mbit delay 1
127+
tc -n $ns1 qdisc add dev ns1eth$i root netem rate 20mbit delay 1ms
128+
tc -n $ns2 qdisc add dev ns2eth$i root netem rate 20mbit delay 1ms
130129
done
131130
}
132131

@@ -142,7 +141,7 @@ init() {
142141

143142
mptcp_lib_check_mptcp
144143
mptcp_lib_check_kallsyms
145-
mptcp_lib_check_tools ip ss "${iptables}" "${ip6tables}"
144+
mptcp_lib_check_tools ip tc ss "${iptables}" "${ip6tables}"
146145

147146
sin=$(mktemp)
148147
sout=$(mktemp)
@@ -606,173 +605,65 @@ kill_events_pids()
606605

607606
pm_nl_set_limits()
608607
{
609-
local ns=$1
610-
local addrs=$2
611-
local subflows=$3
612-
613-
if [ $ip_mptcp -eq 1 ]; then
614-
ip -n $ns mptcp limits set add_addr_accepted $addrs subflows $subflows
615-
else
616-
ip netns exec $ns ./pm_nl_ctl limits $addrs $subflows
617-
fi
608+
mptcp_lib_pm_nl_set_limits "${@}"
618609
}
619610

620611
pm_nl_add_endpoint()
621612
{
622-
local ns=$1
623-
local addr=$2
624-
local flags _flags
625-
local port _port
626-
local dev _dev
627-
local id _id
628-
local nr=2
629-
630-
local p
631-
for p in "${@}"
632-
do
633-
if [ $p = "flags" ]; then
634-
eval _flags=\$"$nr"
635-
[ -n "$_flags" ]; flags="flags $_flags"
636-
fi
637-
if [ $p = "dev" ]; then
638-
eval _dev=\$"$nr"
639-
[ -n "$_dev" ]; dev="dev $_dev"
640-
fi
641-
if [ $p = "id" ]; then
642-
eval _id=\$"$nr"
643-
[ -n "$_id" ]; id="id $_id"
644-
fi
645-
if [ $p = "port" ]; then
646-
eval _port=\$"$nr"
647-
[ -n "$_port" ]; port="port $_port"
648-
fi
649-
650-
nr=$((nr + 1))
651-
done
652-
653-
if [ $ip_mptcp -eq 1 ]; then
654-
ip -n $ns mptcp endpoint add $addr ${_flags//","/" "} $dev $id $port
655-
else
656-
ip netns exec $ns ./pm_nl_ctl add $addr $flags $dev $id $port
657-
fi
613+
mptcp_lib_pm_nl_add_endpoint "${@}"
658614
}
659615

660616
pm_nl_del_endpoint()
661617
{
662-
local ns=$1
663-
local id=$2
664-
local addr=$3
665-
666-
if [ $ip_mptcp -eq 1 ]; then
667-
[ $id -ne 0 ] && addr=''
668-
ip -n $ns mptcp endpoint delete id $id $addr
669-
else
670-
ip netns exec $ns ./pm_nl_ctl del $id $addr
671-
fi
618+
mptcp_lib_pm_nl_del_endpoint "${@}"
672619
}
673620

674621
pm_nl_flush_endpoint()
675622
{
676-
local ns=$1
677-
678-
if [ $ip_mptcp -eq 1 ]; then
679-
ip -n $ns mptcp endpoint flush
680-
else
681-
ip netns exec $ns ./pm_nl_ctl flush
682-
fi
623+
mptcp_lib_pm_nl_flush_endpoint "${@}"
683624
}
684625

685626
pm_nl_show_endpoints()
686627
{
687-
local ns=$1
688-
689-
if [ $ip_mptcp -eq 1 ]; then
690-
ip -n $ns mptcp endpoint show
691-
else
692-
ip netns exec $ns ./pm_nl_ctl dump
693-
fi
628+
mptcp_lib_pm_nl_show_endpoints "${@}"
694629
}
695630

696631
pm_nl_change_endpoint()
697632
{
698-
local ns=$1
699-
local id=$2
700-
local flags=$3
701-
702-
if [ $ip_mptcp -eq 1 ]; then
703-
ip -n $ns mptcp endpoint change id $id ${flags//","/" "}
704-
else
705-
ip netns exec $ns ./pm_nl_ctl set id $id flags $flags
706-
fi
633+
mptcp_lib_pm_nl_change_endpoint "${@}"
707634
}
708635

709636
pm_nl_check_endpoint()
710637
{
711-
local line expected_line
712638
local msg="$1"
713639
local ns=$2
714640
local addr=$3
715-
local _flags=""
716-
local flags
717-
local _port
718-
local port
719-
local dev
720-
local _id
721-
local id
641+
local flags dev id port
722642

723643
print_check "${msg}"
724644

725645
shift 3
726646
while [ -n "$1" ]; do
727-
if [ $1 = "flags" ]; then
728-
_flags=$2
729-
[ -n "$_flags" ]; flags="flags $_flags"
730-
shift
731-
elif [ $1 = "dev" ]; then
732-
[ -n "$2" ]; dev="dev $2"
647+
case "${1}" in
648+
"flags" | "dev" | "id" | "port")
649+
eval "${1}"="${2}"
733650
shift
734-
elif [ $1 = "id" ]; then
735-
_id=$2
736-
[ -n "$_id" ]; id="id $_id"
737-
shift
738-
elif [ $1 = "port" ]; then
739-
_port=$2
740-
[ -n "$_port" ]; port=" port $_port"
741-
shift
742-
fi
651+
;;
652+
*)
653+
;;
654+
esac
743655

744656
shift
745657
done
746658

747-
if [ -z "$id" ]; then
659+
if [ -z "${id}" ]; then
748660
test_fail "bad test - missing endpoint id"
749661
return
750662
fi
751663

752-
if [ $ip_mptcp -eq 1 ]; then
753-
# get line and trim trailing whitespace
754-
line=$(ip -n $ns mptcp endpoint show $id)
755-
line="${line% }"
756-
# the dump order is: address id flags port dev
757-
[ -n "$addr" ] && expected_line="$addr"
758-
expected_line+=" $id"
759-
[ -n "$_flags" ] && expected_line+=" ${_flags//","/" "}"
760-
[ -n "$dev" ] && expected_line+=" $dev"
761-
[ -n "$port" ] && expected_line+=" $port"
762-
else
763-
line=$(ip netns exec $ns ./pm_nl_ctl get $_id)
764-
# the dump order is: id flags dev address port
765-
expected_line="$id"
766-
[ -n "$flags" ] && expected_line+=" $flags"
767-
[ -n "$dev" ] && expected_line+=" $dev"
768-
[ -n "$addr" ] && expected_line+=" $addr"
769-
[ -n "$_port" ] && expected_line+=" $_port"
770-
fi
771-
if [ "$line" = "$expected_line" ]; then
772-
print_ok
773-
else
774-
fail_test "expected '$expected_line' found '$line'"
775-
fi
664+
check_output "mptcp_lib_pm_nl_get_endpoint ${ns} ${id}" \
665+
"$(mptcp_lib_pm_nl_format_endpoints \
666+
"${id},${addr},${flags//","/" "},${dev},${port}")"
776667
}
777668

778669
pm_nl_set_endpoint()
@@ -3212,7 +3103,7 @@ fail_tests()
32123103

32133104
# multiple subflows
32143105
if reset_with_fail "MP_FAIL MP_RST" 2; then
3215-
tc -n $ns2 qdisc add dev ns2eth1 root netem rate 1mbit delay 5
3106+
tc -n $ns2 qdisc add dev ns2eth1 root netem rate 1mbit delay 5ms
32163107
pm_nl_set_limits $ns1 0 1
32173108
pm_nl_set_limits $ns2 0 1
32183109
pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow
@@ -3702,7 +3593,7 @@ while getopts "${all_tests_args}cCih" opt; do
37023593
checksum=true
37033594
;;
37043595
i)
3705-
ip_mptcp=1
3596+
mptcp_lib_set_ip_mptcp
37063597
;;
37073598
h)
37083599
usage

tools/testing/selftests/net/mptcp/mptcp_lib.sh

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ MPTCP_LIB_SUBTESTS=()
2323
MPTCP_LIB_SUBTESTS_DUPLICATED=0
2424
MPTCP_LIB_TEST_COUNTER=0
2525
MPTCP_LIB_TEST_FORMAT="%02u %-50s"
26+
MPTCP_LIB_IP_MPTCP=0
2627

2728
# only if supported (or forced) and not disabled, see no-color.org
2829
if { [ -t 1 ] || [ "${SELFTESTS_MPTCP_LIB_COLOR_FORCE:-}" = "1" ]; } &&
@@ -384,6 +385,12 @@ mptcp_lib_check_tools() {
384385
exit ${KSFT_SKIP}
385386
fi
386387
;;
388+
"tc")
389+
if ! tc -help &> /dev/null; then
390+
mptcp_lib_pr_skip "Could not run test without tc tool"
391+
exit ${KSFT_SKIP}
392+
fi
393+
;;
387394
"ss")
388395
if ! ss -h | grep -q MPTCP; then
389396
mptcp_lib_pr_skip "ss tool does not support MPTCP"
@@ -505,3 +512,131 @@ mptcp_lib_verify_listener_events() {
505512
mptcp_lib_check_expected "type" "family" "saddr" "sport" || rc="${?}"
506513
return "${rc}"
507514
}
515+
516+
mptcp_lib_set_ip_mptcp() {
517+
MPTCP_LIB_IP_MPTCP=1
518+
}
519+
520+
mptcp_lib_is_ip_mptcp() {
521+
[ "${MPTCP_LIB_IP_MPTCP}" = "1" ]
522+
}
523+
524+
# format: <id>,<ip>,<flags>,<dev>
525+
mptcp_lib_pm_nl_format_endpoints() {
526+
local entry id ip flags dev port
527+
528+
for entry in "${@}"; do
529+
IFS=, read -r id ip flags dev port <<< "${entry}"
530+
if mptcp_lib_is_ip_mptcp; then
531+
echo -n "${ip}"
532+
[ -n "${port}" ] && echo -n " port ${port}"
533+
echo -n " id ${id}"
534+
[ -n "${flags}" ] && echo -n " ${flags}"
535+
[ -n "${dev}" ] && echo -n " dev ${dev}"
536+
echo " " # always a space at the end
537+
else
538+
echo -n "id ${id}"
539+
echo -n " flags ${flags//" "/","}"
540+
[ -n "${dev}" ] && echo -n " dev ${dev}"
541+
echo -n " ${ip}"
542+
[ -n "${port}" ] && echo -n " ${port}"
543+
echo ""
544+
fi
545+
done
546+
}
547+
548+
mptcp_lib_pm_nl_get_endpoint() {
549+
local ns=${1}
550+
local id=${2}
551+
552+
if mptcp_lib_is_ip_mptcp; then
553+
ip -n "${ns}" mptcp endpoint show id "${id}"
554+
else
555+
ip netns exec "${ns}" ./pm_nl_ctl get "${id}"
556+
fi
557+
}
558+
559+
mptcp_lib_pm_nl_set_limits() {
560+
local ns=${1}
561+
local addrs=${2}
562+
local subflows=${3}
563+
564+
if mptcp_lib_is_ip_mptcp; then
565+
ip -n "${ns}" mptcp limits set add_addr_accepted "${addrs}" subflows "${subflows}"
566+
else
567+
ip netns exec "${ns}" ./pm_nl_ctl limits "${addrs}" "${subflows}"
568+
fi
569+
}
570+
571+
mptcp_lib_pm_nl_add_endpoint() {
572+
local ns=${1}
573+
local addr=${2}
574+
local flags dev id port
575+
local nr=2
576+
577+
local p
578+
for p in "${@}"; do
579+
case "${p}" in
580+
"flags" | "dev" | "id" | "port")
581+
eval "${p}"=\$"${nr}"
582+
;;
583+
esac
584+
585+
nr=$((nr + 1))
586+
done
587+
588+
if mptcp_lib_is_ip_mptcp; then
589+
# shellcheck disable=SC2086 # blanks in flags, no double quote
590+
ip -n "${ns}" mptcp endpoint add "${addr}" ${flags//","/" "} \
591+
${dev:+dev "${dev}"} ${id:+id "${id}"} ${port:+port "${port}"}
592+
else
593+
ip netns exec "${ns}" ./pm_nl_ctl add "${addr}" ${flags:+flags "${flags}"} \
594+
${dev:+dev "${dev}"} ${id:+id "${id}"} ${port:+port "${port}"}
595+
fi
596+
}
597+
598+
mptcp_lib_pm_nl_del_endpoint() {
599+
local ns=${1}
600+
local id=${2}
601+
local addr=${3}
602+
603+
if mptcp_lib_is_ip_mptcp; then
604+
[ "${id}" -ne 0 ] && addr=''
605+
ip -n "${ns}" mptcp endpoint delete id "${id}" ${addr:+"${addr}"}
606+
else
607+
ip netns exec "${ns}" ./pm_nl_ctl del "${id}" "${addr}"
608+
fi
609+
}
610+
611+
mptcp_lib_pm_nl_flush_endpoint() {
612+
local ns=${1}
613+
614+
if mptcp_lib_is_ip_mptcp; then
615+
ip -n "${ns}" mptcp endpoint flush
616+
else
617+
ip netns exec "${ns}" ./pm_nl_ctl flush
618+
fi
619+
}
620+
621+
mptcp_lib_pm_nl_show_endpoints() {
622+
local ns=${1}
623+
624+
if mptcp_lib_is_ip_mptcp; then
625+
ip -n "${ns}" mptcp endpoint show
626+
else
627+
ip netns exec "${ns}" ./pm_nl_ctl dump
628+
fi
629+
}
630+
631+
mptcp_lib_pm_nl_change_endpoint() {
632+
local ns=${1}
633+
local id=${2}
634+
local flags=${3}
635+
636+
if mptcp_lib_is_ip_mptcp; then
637+
# shellcheck disable=SC2086 # blanks in flags, no double quote
638+
ip -n "${ns}" mptcp endpoint change id "${id}" ${flags//","/" "}
639+
else
640+
ip netns exec "${ns}" ./pm_nl_ctl set id "${id}" flags "${flags}"
641+
fi
642+
}

0 commit comments

Comments
 (0)