Commit 69c6ce7b authored by Paolo Abeni's avatar Paolo Abeni Committed by Jakub Kicinski

selftests: mptcp: add implicit endpoint test case

Ensure implicit endpoint are created when expected and
that the user-space can update them
Reviewed-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Co-developed-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 4cf86ae8
...@@ -310,6 +310,21 @@ wait_rm_addr() ...@@ -310,6 +310,21 @@ wait_rm_addr()
done done
} }
wait_mpj()
{
local ns="${1}"
local cnt old_cnt
old_cnt=$(ip netns exec ${ns} nstat -as | grep MPJoinAckRx | awk '{print $2}')
local i
for i in $(seq 10); do
cnt=$(ip netns exec ${ns} nstat -as | grep MPJoinAckRx | awk '{print $2}')
[ "$cnt" = "${old_cnt}" ] || break
sleep 0.1
done
}
pm_nl_set_limits() pm_nl_set_limits()
{ {
local ns=$1 local ns=$1
...@@ -410,6 +425,80 @@ pm_nl_change_endpoint() ...@@ -410,6 +425,80 @@ pm_nl_change_endpoint()
fi fi
} }
pm_nl_check_endpoint()
{
local line expected_line
local title="$1"
local msg="$2"
local ns=$3
local addr=$4
local _flags=""
local flags
local _port
local port
local dev
local _id
local id
if [ -n "${title}" ]; then
printf "%03u %-36s %s" "${TEST_COUNT}" "${title}" "${msg}"
else
printf "%-${nr_blank}s %s" " " "${msg}"
fi
shift 4
while [ -n "$1" ]; do
if [ $1 = "flags" ]; then
_flags=$2
[ ! -z $_flags ]; flags="flags $_flags"
shift
elif [ $1 = "dev" ]; then
[ ! -z $2 ]; dev="dev $1"
shift
elif [ $1 = "id" ]; then
_id=$2
[ ! -z $_id ]; id="id $_id"
shift
elif [ $1 = "port" ]; then
_port=$2
[ ! -z $_port ]; port=" port $_port"
shift
fi
shift
done
if [ -z "$id" ]; then
echo "[skip] bad test - missing endpoint id"
return
fi
if [ $ip_mptcp -eq 1 ]; then
line=$(ip -n $ns mptcp endpoint show $id)
# the dump order is: address id flags port dev
expected_line="$addr"
[ -n "$addr" ] && expected_line="$expected_line $addr"
expected_line="$expected_line $id"
[ -n "$_flags" ] && expected_line="$expected_line ${_flags//","/" "}"
[ -n "$dev" ] && expected_line="$expected_line $dev"
[ -n "$port" ] && expected_line="$expected_line $port"
else
line=$(ip netns exec $ns ./pm_nl_ctl get $_id)
# the dump order is: id flags dev address port
expected_line="$id"
[ -n "$flags" ] && expected_line="$expected_line $flags"
[ -n "$dev" ] && expected_line="$expected_line $dev"
[ -n "$addr" ] && expected_line="$expected_line $addr"
[ -n "$_port" ] && expected_line="$expected_line $_port"
fi
if [ "$line" = "$expected_line" ]; then
echo "[ ok ]"
else
echo "[fail] expected '$expected_line' found '$line'"
ret=1
fi
}
do_transfer() do_transfer()
{ {
listener_ns="$1" listener_ns="$1"
...@@ -2269,6 +2358,30 @@ fastclose_tests() ...@@ -2269,6 +2358,30 @@ fastclose_tests()
chk_rst_nr 1 1 invert chk_rst_nr 1 1 invert
} }
implicit_tests()
{
# userspace pm type prevents add_addr
reset
pm_nl_set_limits $ns1 2 2
pm_nl_set_limits $ns2 2 2
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow &
wait_mpj $ns1
TEST_COUNT=$((TEST_COUNT + 1))
pm_nl_check_endpoint "implicit EP" "creation" \
$ns2 10.0.2.2 id 1 flags implicit
pm_nl_add_endpoint $ns2 10.0.2.2 id 33
pm_nl_check_endpoint "" "ID change is prevented" \
$ns2 10.0.2.2 id 1 flags implicit
pm_nl_add_endpoint $ns2 10.0.2.2 flags signal
pm_nl_check_endpoint "" "modif is allowed" \
$ns2 10.0.2.2 id 1 flags signal
wait
}
all_tests() all_tests()
{ {
subflows_tests subflows_tests
...@@ -2287,6 +2400,7 @@ all_tests() ...@@ -2287,6 +2400,7 @@ all_tests()
deny_join_id0_tests deny_join_id0_tests
fullmesh_tests fullmesh_tests
fastclose_tests fastclose_tests
implicit_tests
} }
# [$1: error message] # [$1: error message]
...@@ -2314,6 +2428,7 @@ usage() ...@@ -2314,6 +2428,7 @@ usage()
echo " -d deny_join_id0_tests" echo " -d deny_join_id0_tests"
echo " -m fullmesh_tests" echo " -m fullmesh_tests"
echo " -z fastclose_tests" echo " -z fastclose_tests"
echo " -I implicit_tests"
echo " -c capture pcap files" echo " -c capture pcap files"
echo " -C enable data checksum" echo " -C enable data checksum"
echo " -i use ip mptcp" echo " -i use ip mptcp"
...@@ -2324,7 +2439,7 @@ usage() ...@@ -2324,7 +2439,7 @@ usage()
tests=() tests=()
while getopts 'fesltra64bpkdmchzCSi' opt; do while getopts 'fesltra64bpkdmchzICSi' opt; do
case $opt in case $opt in
f) f)
tests+=(subflows_tests) tests+=(subflows_tests)
...@@ -2374,6 +2489,9 @@ while getopts 'fesltra64bpkdmchzCSi' opt; do ...@@ -2374,6 +2489,9 @@ while getopts 'fesltra64bpkdmchzCSi' opt; do
z) z)
tests+=(fastclose_tests) tests+=(fastclose_tests)
;; ;;
I)
tests+=(implicit_tests)
;;
c) c)
capture=1 capture=1
;; ;;
......
...@@ -436,6 +436,13 @@ static void print_addr(struct rtattr *attrs, int len) ...@@ -436,6 +436,13 @@ static void print_addr(struct rtattr *attrs, int len)
printf(","); printf(",");
} }
if (flags & MPTCP_PM_ADDR_FLAG_IMPLICIT) {
printf("implicit");
flags &= ~MPTCP_PM_ADDR_FLAG_IMPLICIT;
if (flags)
printf(",");
}
/* bump unknown flags, if any */ /* bump unknown flags, if any */
if (flags) if (flags)
printf("0x%x", flags); printf("0x%x", flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment