selftests: mptcp: add implicit endpoint test case
Ensure implicit endpoint are created when expected and that the user-space can update them Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net> Co-developed-by: Matthieu Baerts <matthieu.baerts@tessares.net> Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
4cf86ae84c
commit
69c6ce7b6e
|
@ -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()
|
||||||
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()
|
||||||
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()
|
||||||
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()
|
||||||
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()
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue