mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 23:25:07 +00:00
Merge branch 'mptcp-more-selftest-coverage-and-code-cleanup-for-net-next'
Mat Martineau says: ==================== mptcp: More selftest coverage and code cleanup for net-next Patches 1-5 and 7-8 add selftest coverage (and an associated subflow counter in the kernel) to validate the recently-updated handling of subflows with ID 0. Patch 6 renames a label in the userspace path manager for clarity. Patches 9-11 and 13-15 factor out common selftest code by moving certain functions to mptcp_lib.sh Patch 12 makes sure the random data file generated for selftest payloads has the intended size. v3: https://lore.kernel.org/r/20231115-send-net-next-2023107-v3-0-1ef58145a882@kernel.org v2: https://lore.kernel.org/r/20231114-send-net-next-2023107-v2-0-b650a477362c@kernel.org v1: https://lore.kernel.org/r/20231027-send-net-next-2023107-v1-0-03eff9452957@kernel.org ==================== Link: https://lore.kernel.org/r/20231128-send-net-next-2023107-v4-0-8d6b94150f6b@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
5de7796dff
11 changed files with 407 additions and 410 deletions
|
@ -57,6 +57,7 @@ struct mptcp_info {
|
||||||
__u64 mptcpi_bytes_sent;
|
__u64 mptcpi_bytes_sent;
|
||||||
__u64 mptcpi_bytes_received;
|
__u64 mptcpi_bytes_received;
|
||||||
__u64 mptcpi_bytes_acked;
|
__u64 mptcpi_bytes_acked;
|
||||||
|
__u8 mptcpi_subflows_total;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* MPTCP Reset reason codes, rfc8684 */
|
/* MPTCP Reset reason codes, rfc8684 */
|
||||||
|
|
|
@ -276,12 +276,12 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
|
||||||
|
|
||||||
if (!mptcp_pm_is_userspace(msk)) {
|
if (!mptcp_pm_is_userspace(msk)) {
|
||||||
GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected");
|
GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected");
|
||||||
goto remove_err;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id_val == 0) {
|
if (id_val == 0) {
|
||||||
err = mptcp_userspace_pm_remove_id_zero_address(msk, info);
|
err = mptcp_userspace_pm_remove_id_zero_address(msk, info);
|
||||||
goto remove_err;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
lock_sock(sk);
|
lock_sock(sk);
|
||||||
|
@ -296,7 +296,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
|
||||||
if (!match) {
|
if (!match) {
|
||||||
GENL_SET_ERR_MSG(info, "address with specified id not found");
|
GENL_SET_ERR_MSG(info, "address with specified id not found");
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
goto remove_err;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_move(&match->list, &free_list);
|
list_move(&match->list, &free_list);
|
||||||
|
@ -310,7 +310,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = 0;
|
err = 0;
|
||||||
remove_err:
|
out:
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1072,6 +1072,15 @@ static inline void __mptcp_do_fallback(struct mptcp_sock *msk)
|
||||||
set_bit(MPTCP_FALLBACK_DONE, &msk->flags);
|
set_bit(MPTCP_FALLBACK_DONE, &msk->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool __mptcp_has_initial_subflow(const struct mptcp_sock *msk)
|
||||||
|
{
|
||||||
|
struct sock *ssk = READ_ONCE(msk->first);
|
||||||
|
|
||||||
|
return ssk && ((1 << inet_sk_state_load(ssk)) &
|
||||||
|
(TCPF_ESTABLISHED | TCPF_SYN_SENT |
|
||||||
|
TCPF_SYN_RECV | TCPF_LISTEN));
|
||||||
|
}
|
||||||
|
|
||||||
static inline void mptcp_do_fallback(struct sock *ssk)
|
static inline void mptcp_do_fallback(struct sock *ssk)
|
||||||
{
|
{
|
||||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
|
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
|
||||||
|
|
|
@ -938,6 +938,8 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
|
||||||
info->mptcpi_bytes_sent = msk->bytes_sent;
|
info->mptcpi_bytes_sent = msk->bytes_sent;
|
||||||
info->mptcpi_bytes_received = msk->bytes_received;
|
info->mptcpi_bytes_received = msk->bytes_received;
|
||||||
info->mptcpi_bytes_retrans = msk->bytes_retrans;
|
info->mptcpi_bytes_retrans = msk->bytes_retrans;
|
||||||
|
info->mptcpi_subflows_total = info->mptcpi_subflows +
|
||||||
|
__mptcp_has_initial_subflow(msk);
|
||||||
unlock_sock_fast(sk, slow);
|
unlock_sock_fast(sk, slow);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mptcp_diag_fill_info);
|
EXPORT_SYMBOL_GPL(mptcp_diag_fill_info);
|
||||||
|
|
|
@ -182,23 +182,6 @@ chk_msk_inuse()
|
||||||
__chk_nr get_msk_inuse $expected "$msg" 0
|
__chk_nr get_msk_inuse $expected "$msg" 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: ns, $2: port
|
|
||||||
wait_local_port_listen()
|
|
||||||
{
|
|
||||||
local listener_ns="${1}"
|
|
||||||
local port="${2}"
|
|
||||||
|
|
||||||
local port_hex i
|
|
||||||
|
|
||||||
port_hex="$(printf "%04X" "${port}")"
|
|
||||||
for i in $(seq 10); do
|
|
||||||
ip netns exec "${listener_ns}" cat /proc/net/tcp | \
|
|
||||||
awk "BEGIN {rc=1} {if (\$2 ~ /:${port_hex}\$/ && \$4 ~ /0A/) {rc=0; exit}} END {exit rc}" &&
|
|
||||||
break
|
|
||||||
sleep 0.1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
wait_connected()
|
wait_connected()
|
||||||
{
|
{
|
||||||
local listener_ns="${1}"
|
local listener_ns="${1}"
|
||||||
|
@ -222,7 +205,7 @@ echo "a" | \
|
||||||
ip netns exec $ns \
|
ip netns exec $ns \
|
||||||
./mptcp_connect -p 10000 -l -t ${timeout_poll} -w 20 \
|
./mptcp_connect -p 10000 -l -t ${timeout_poll} -w 20 \
|
||||||
0.0.0.0 >/dev/null &
|
0.0.0.0 >/dev/null &
|
||||||
wait_local_port_listen $ns 10000
|
mptcp_lib_wait_local_port_listen $ns 10000
|
||||||
chk_msk_nr 0 "no msk on netns creation"
|
chk_msk_nr 0 "no msk on netns creation"
|
||||||
chk_msk_listen 10000
|
chk_msk_listen 10000
|
||||||
|
|
||||||
|
@ -245,7 +228,7 @@ echo "a" | \
|
||||||
ip netns exec $ns \
|
ip netns exec $ns \
|
||||||
./mptcp_connect -p 10001 -l -s TCP -t ${timeout_poll} -w 20 \
|
./mptcp_connect -p 10001 -l -s TCP -t ${timeout_poll} -w 20 \
|
||||||
0.0.0.0 >/dev/null &
|
0.0.0.0 >/dev/null &
|
||||||
wait_local_port_listen $ns 10001
|
mptcp_lib_wait_local_port_listen $ns 10001
|
||||||
echo "b" | \
|
echo "b" | \
|
||||||
timeout ${timeout_test} \
|
timeout ${timeout_test} \
|
||||||
ip netns exec $ns \
|
ip netns exec $ns \
|
||||||
|
@ -266,7 +249,7 @@ for I in `seq 1 $NR_CLIENTS`; do
|
||||||
./mptcp_connect -p $((I+10001)) -l -w 20 \
|
./mptcp_connect -p $((I+10001)) -l -w 20 \
|
||||||
-t ${timeout_poll} 0.0.0.0 >/dev/null &
|
-t ${timeout_poll} 0.0.0.0 >/dev/null &
|
||||||
done
|
done
|
||||||
wait_local_port_listen $ns $((NR_CLIENTS + 10001))
|
mptcp_lib_wait_local_port_listen $ns $((NR_CLIENTS + 10001))
|
||||||
|
|
||||||
for I in `seq 1 $NR_CLIENTS`; do
|
for I in `seq 1 $NR_CLIENTS`; do
|
||||||
echo "b" | \
|
echo "b" | \
|
||||||
|
|
|
@ -254,31 +254,6 @@ else
|
||||||
set_ethtool_flags "$ns4" ns4eth3 "$ethtool_args"
|
set_ethtool_flags "$ns4" ns4eth3 "$ethtool_args"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_file_err()
|
|
||||||
{
|
|
||||||
ls -l "$1" 1>&2
|
|
||||||
echo "Trailing bytes are: "
|
|
||||||
tail -c 27 "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_transfer()
|
|
||||||
{
|
|
||||||
local in=$1
|
|
||||||
local out=$2
|
|
||||||
local what=$3
|
|
||||||
|
|
||||||
cmp "$in" "$out" > /dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ] ;then
|
|
||||||
echo "[ FAIL ] $what does not match (in, out):"
|
|
||||||
print_file_err "$in"
|
|
||||||
print_file_err "$out"
|
|
||||||
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
check_mptcp_disabled()
|
check_mptcp_disabled()
|
||||||
{
|
{
|
||||||
local disabled_ns="ns_disabled-$rndh"
|
local disabled_ns="ns_disabled-$rndh"
|
||||||
|
@ -310,12 +285,6 @@ check_mptcp_disabled()
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: IP address
|
|
||||||
is_v6()
|
|
||||||
{
|
|
||||||
[ -z "${1##*:*}" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
do_ping()
|
do_ping()
|
||||||
{
|
{
|
||||||
local listener_ns="$1"
|
local listener_ns="$1"
|
||||||
|
@ -324,7 +293,7 @@ do_ping()
|
||||||
local ping_args="-q -c 1"
|
local ping_args="-q -c 1"
|
||||||
local rc=0
|
local rc=0
|
||||||
|
|
||||||
if is_v6 "${connect_addr}"; then
|
if mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
$ipv6 || return 0
|
$ipv6 || return 0
|
||||||
ping_args="${ping_args} -6"
|
ping_args="${ping_args} -6"
|
||||||
fi
|
fi
|
||||||
|
@ -341,38 +310,6 @@ do_ping()
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: ns, $2: MIB counter
|
|
||||||
get_mib_counter()
|
|
||||||
{
|
|
||||||
local listener_ns="${1}"
|
|
||||||
local mib="${2}"
|
|
||||||
|
|
||||||
# strip the header
|
|
||||||
ip netns exec "${listener_ns}" \
|
|
||||||
nstat -z -a "${mib}" | \
|
|
||||||
tail -n+2 | \
|
|
||||||
while read a count c rest; do
|
|
||||||
echo $count
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: ns, $2: port
|
|
||||||
wait_local_port_listen()
|
|
||||||
{
|
|
||||||
local listener_ns="${1}"
|
|
||||||
local port="${2}"
|
|
||||||
|
|
||||||
local port_hex i
|
|
||||||
|
|
||||||
port_hex="$(printf "%04X" "${port}")"
|
|
||||||
for i in $(seq 10); do
|
|
||||||
ip netns exec "${listener_ns}" cat /proc/net/tcp* | \
|
|
||||||
awk "BEGIN {rc=1} {if (\$2 ~ /:${port_hex}\$/ && \$4 ~ /0A/) {rc=0; exit}} END {exit rc}" &&
|
|
||||||
break
|
|
||||||
sleep 0.1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
do_transfer()
|
do_transfer()
|
||||||
{
|
{
|
||||||
local listener_ns="$1"
|
local listener_ns="$1"
|
||||||
|
@ -441,12 +378,12 @@ do_transfer()
|
||||||
nstat -n
|
nstat -n
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local stat_synrx_last_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX")
|
local stat_synrx_last_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX")
|
||||||
local stat_ackrx_last_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableACKRX")
|
local stat_ackrx_last_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableACKRX")
|
||||||
local stat_cookietx_last=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesSent")
|
local stat_cookietx_last=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesSent")
|
||||||
local stat_cookierx_last=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesRecv")
|
local stat_cookierx_last=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesRecv")
|
||||||
local stat_csum_err_s=$(get_mib_counter "${listener_ns}" "MPTcpExtDataCsumErr")
|
local stat_csum_err_s=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtDataCsumErr")
|
||||||
local stat_csum_err_c=$(get_mib_counter "${connector_ns}" "MPTcpExtDataCsumErr")
|
local stat_csum_err_c=$(mptcp_lib_get_counter "${connector_ns}" "MPTcpExtDataCsumErr")
|
||||||
|
|
||||||
timeout ${timeout_test} \
|
timeout ${timeout_test} \
|
||||||
ip netns exec ${listener_ns} \
|
ip netns exec ${listener_ns} \
|
||||||
|
@ -454,7 +391,7 @@ do_transfer()
|
||||||
$extra_args $local_addr < "$sin" > "$sout" &
|
$extra_args $local_addr < "$sin" > "$sout" &
|
||||||
local spid=$!
|
local spid=$!
|
||||||
|
|
||||||
wait_local_port_listen "${listener_ns}" "${port}"
|
mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}"
|
||||||
|
|
||||||
local start
|
local start
|
||||||
start=$(date +%s%3N)
|
start=$(date +%s%3N)
|
||||||
|
@ -504,16 +441,16 @@ do_transfer()
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_transfer $sin $cout "file received by client"
|
mptcp_lib_check_transfer $sin $cout "file received by client"
|
||||||
retc=$?
|
retc=$?
|
||||||
check_transfer $cin $sout "file received by server"
|
mptcp_lib_check_transfer $cin $sout "file received by server"
|
||||||
rets=$?
|
rets=$?
|
||||||
|
|
||||||
local stat_synrx_now_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX")
|
local stat_synrx_now_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableSYNRX")
|
||||||
local stat_ackrx_now_l=$(get_mib_counter "${listener_ns}" "MPTcpExtMPCapableACKRX")
|
local stat_ackrx_now_l=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableACKRX")
|
||||||
local stat_cookietx_now=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesSent")
|
local stat_cookietx_now=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesSent")
|
||||||
local stat_cookierx_now=$(get_mib_counter "${listener_ns}" "TcpExtSyncookiesRecv")
|
local stat_cookierx_now=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookiesRecv")
|
||||||
local stat_ooo_now=$(get_mib_counter "${listener_ns}" "TcpExtTCPOFOQueue")
|
local stat_ooo_now=$(mptcp_lib_get_counter "${listener_ns}" "TcpExtTCPOFOQueue")
|
||||||
|
|
||||||
expect_synrx=$((stat_synrx_last_l))
|
expect_synrx=$((stat_synrx_last_l))
|
||||||
expect_ackrx=$((stat_ackrx_last_l))
|
expect_ackrx=$((stat_ackrx_last_l))
|
||||||
|
@ -542,8 +479,8 @@ do_transfer()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $checksum; then
|
if $checksum; then
|
||||||
local csum_err_s=$(get_mib_counter "${listener_ns}" "MPTcpExtDataCsumErr")
|
local csum_err_s=$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtDataCsumErr")
|
||||||
local csum_err_c=$(get_mib_counter "${connector_ns}" "MPTcpExtDataCsumErr")
|
local csum_err_c=$(mptcp_lib_get_counter "${connector_ns}" "MPTcpExtDataCsumErr")
|
||||||
|
|
||||||
local csum_err_s_nr=$((csum_err_s - stat_csum_err_s))
|
local csum_err_s_nr=$((csum_err_s - stat_csum_err_s))
|
||||||
if [ $csum_err_s_nr -gt 0 ]; then
|
if [ $csum_err_s_nr -gt 0 ]; then
|
||||||
|
@ -613,9 +550,8 @@ make_file()
|
||||||
ksize=$((SIZE / 1024))
|
ksize=$((SIZE / 1024))
|
||||||
rem=$((SIZE - (ksize * 1024)))
|
rem=$((SIZE - (ksize * 1024)))
|
||||||
|
|
||||||
dd if=/dev/urandom of="$name" bs=1024 count=$ksize 2> /dev/null
|
mptcp_lib_make_file $name 1024 $ksize
|
||||||
dd if=/dev/urandom conv=notrunc of="$name" bs=1 count=$rem 2> /dev/null
|
dd if=/dev/urandom conv=notrunc of="$name" oflag=append bs=1 count=$rem 2> /dev/null
|
||||||
echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "$name"
|
|
||||||
|
|
||||||
echo "Created $name (size $(du -b "$name")) containing data sent by $who"
|
echo "Created $name (size $(du -b "$name")) containing data sent by $who"
|
||||||
}
|
}
|
||||||
|
@ -635,12 +571,12 @@ run_tests_lo()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# skip if we don't want v6
|
# skip if we don't want v6
|
||||||
if ! $ipv6 && is_v6 "${connect_addr}"; then
|
if ! $ipv6 && mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local local_addr
|
local local_addr
|
||||||
if is_v6 "${connect_addr}"; then
|
if mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
local_addr="::"
|
local_addr="::"
|
||||||
else
|
else
|
||||||
local_addr="0.0.0.0"
|
local_addr="0.0.0.0"
|
||||||
|
@ -708,7 +644,7 @@ run_test_transparent()
|
||||||
TEST_GROUP="${msg}"
|
TEST_GROUP="${msg}"
|
||||||
|
|
||||||
# skip if we don't want v6
|
# skip if we don't want v6
|
||||||
if ! $ipv6 && is_v6 "${connect_addr}"; then
|
if ! $ipv6 && mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -741,7 +677,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local local_addr
|
local local_addr
|
||||||
if is_v6 "${connect_addr}"; then
|
if mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
local_addr="::"
|
local_addr="::"
|
||||||
r6flag="-6"
|
r6flag="-6"
|
||||||
else
|
else
|
||||||
|
|
|
@ -511,13 +511,6 @@ get_failed_tests_ids()
|
||||||
done | sort -n
|
done | sort -n
|
||||||
}
|
}
|
||||||
|
|
||||||
print_file_err()
|
|
||||||
{
|
|
||||||
ls -l "$1" 1>&2
|
|
||||||
echo -n "Trailing bytes are: "
|
|
||||||
tail -c 27 "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_transfer()
|
check_transfer()
|
||||||
{
|
{
|
||||||
local in=$1
|
local in=$1
|
||||||
|
@ -548,8 +541,8 @@ check_transfer()
|
||||||
local sum=$((0${a} + 0${b}))
|
local sum=$((0${a} + 0${b}))
|
||||||
if [ $check_invert -eq 0 ] || [ $sum -ne $((0xff)) ]; then
|
if [ $check_invert -eq 0 ] || [ $sum -ne $((0xff)) ]; then
|
||||||
fail_test "$what does not match (in, out):"
|
fail_test "$what does not match (in, out):"
|
||||||
print_file_err "$in"
|
mptcp_lib_print_file_err "$in"
|
||||||
print_file_err "$out"
|
mptcp_lib_print_file_err "$out"
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
|
@ -587,49 +580,9 @@ link_failure()
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: IP address
|
|
||||||
is_v6()
|
|
||||||
{
|
|
||||||
[ -z "${1##*:*}" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: ns, $2: port
|
|
||||||
wait_local_port_listen()
|
|
||||||
{
|
|
||||||
local listener_ns="${1}"
|
|
||||||
local port="${2}"
|
|
||||||
|
|
||||||
local port_hex
|
|
||||||
port_hex="$(printf "%04X" "${port}")"
|
|
||||||
|
|
||||||
local i
|
|
||||||
for i in $(seq 10); do
|
|
||||||
ip netns exec "${listener_ns}" cat /proc/net/tcp* | \
|
|
||||||
awk "BEGIN {rc=1} {if (\$2 ~ /:${port_hex}\$/ && \$4 ~ /0A/) {rc=0; exit}} END {exit rc}" &&
|
|
||||||
break
|
|
||||||
sleep 0.1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: ns ; $2: counter
|
|
||||||
get_counter()
|
|
||||||
{
|
|
||||||
local ns="${1}"
|
|
||||||
local counter="${2}"
|
|
||||||
local count
|
|
||||||
|
|
||||||
count=$(ip netns exec ${ns} nstat -asz "${counter}" | awk 'NR==1 {next} {print $2}')
|
|
||||||
if [ -z "${count}" ]; then
|
|
||||||
mptcp_lib_fail_if_expected_feature "${counter} counter"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${count}"
|
|
||||||
}
|
|
||||||
|
|
||||||
rm_addr_count()
|
rm_addr_count()
|
||||||
{
|
{
|
||||||
get_counter "${1}" "MPTcpExtRmAddr"
|
mptcp_lib_get_counter "${1}" "MPTcpExtRmAddr"
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: ns, $2: old rm_addr counter in $ns
|
# $1: ns, $2: old rm_addr counter in $ns
|
||||||
|
@ -649,7 +602,7 @@ wait_rm_addr()
|
||||||
|
|
||||||
rm_sf_count()
|
rm_sf_count()
|
||||||
{
|
{
|
||||||
get_counter "${1}" "MPTcpExtRmSubflow"
|
mptcp_lib_get_counter "${1}" "MPTcpExtRmSubflow"
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: ns, $2: old rm_sf counter in $ns
|
# $1: ns, $2: old rm_sf counter in $ns
|
||||||
|
@ -672,26 +625,20 @@ wait_mpj()
|
||||||
local ns="${1}"
|
local ns="${1}"
|
||||||
local cnt old_cnt
|
local cnt old_cnt
|
||||||
|
|
||||||
old_cnt=$(get_counter ${ns} "MPTcpExtMPJoinAckRx")
|
old_cnt=$(mptcp_lib_get_counter ${ns} "MPTcpExtMPJoinAckRx")
|
||||||
|
|
||||||
local i
|
local i
|
||||||
for i in $(seq 10); do
|
for i in $(seq 10); do
|
||||||
cnt=$(get_counter ${ns} "MPTcpExtMPJoinAckRx")
|
cnt=$(mptcp_lib_get_counter ${ns} "MPTcpExtMPJoinAckRx")
|
||||||
[ "$cnt" = "${old_cnt}" ] || break
|
[ "$cnt" = "${old_cnt}" ] || break
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_wait()
|
|
||||||
{
|
|
||||||
kill $1 > /dev/null 2>&1
|
|
||||||
wait $1 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
kill_events_pids()
|
kill_events_pids()
|
||||||
{
|
{
|
||||||
kill_wait $evts_ns1_pid
|
mptcp_lib_kill_wait $evts_ns1_pid
|
||||||
kill_wait $evts_ns2_pid
|
mptcp_lib_kill_wait $evts_ns2_pid
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_tests_wait()
|
kill_tests_wait()
|
||||||
|
@ -901,7 +848,7 @@ pm_nl_set_endpoint()
|
||||||
local id=10
|
local id=10
|
||||||
while [ $add_nr_ns1 -gt 0 ]; do
|
while [ $add_nr_ns1 -gt 0 ]; do
|
||||||
local addr
|
local addr
|
||||||
if is_v6 "${connect_addr}"; then
|
if mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
addr="dead:beef:$counter::1"
|
addr="dead:beef:$counter::1"
|
||||||
else
|
else
|
||||||
addr="10.0.$counter.1"
|
addr="10.0.$counter.1"
|
||||||
|
@ -953,7 +900,7 @@ pm_nl_set_endpoint()
|
||||||
local id=20
|
local id=20
|
||||||
while [ $add_nr_ns2 -gt 0 ]; do
|
while [ $add_nr_ns2 -gt 0 ]; do
|
||||||
local addr
|
local addr
|
||||||
if is_v6 "${connect_addr}"; then
|
if mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
addr="dead:beef:$counter::2"
|
addr="dead:beef:$counter::2"
|
||||||
else
|
else
|
||||||
addr="10.0.$counter.2"
|
addr="10.0.$counter.2"
|
||||||
|
@ -995,7 +942,7 @@ pm_nl_set_endpoint()
|
||||||
pm_nl_flush_endpoint ${connector_ns}
|
pm_nl_flush_endpoint ${connector_ns}
|
||||||
elif [ $rm_nr_ns2 -eq 9 ]; then
|
elif [ $rm_nr_ns2 -eq 9 ]; then
|
||||||
local addr
|
local addr
|
||||||
if is_v6 "${connect_addr}"; then
|
if mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
addr="dead:beef:1::2"
|
addr="dead:beef:1::2"
|
||||||
else
|
else
|
||||||
addr="10.0.1.2"
|
addr="10.0.1.2"
|
||||||
|
@ -1117,7 +1064,7 @@ do_transfer()
|
||||||
fi
|
fi
|
||||||
local spid=$!
|
local spid=$!
|
||||||
|
|
||||||
wait_local_port_listen "${listener_ns}" "${port}"
|
mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}"
|
||||||
|
|
||||||
extra_cl_args="$extra_args $extra_cl_args"
|
extra_cl_args="$extra_args $extra_cl_args"
|
||||||
if [ "$test_linkfail" -eq 0 ];then
|
if [ "$test_linkfail" -eq 0 ];then
|
||||||
|
@ -1199,8 +1146,7 @@ make_file()
|
||||||
local who=$2
|
local who=$2
|
||||||
local size=$3
|
local size=$3
|
||||||
|
|
||||||
dd if=/dev/urandom of="$name" bs=1024 count=$size 2> /dev/null
|
mptcp_lib_make_file $name 1024 $size
|
||||||
echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "$name"
|
|
||||||
|
|
||||||
print_info "Test file (size $size KB) for $who"
|
print_info "Test file (size $size KB) for $who"
|
||||||
}
|
}
|
||||||
|
@ -1284,7 +1230,7 @@ chk_csum_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "sum"
|
print_check "sum"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtDataCsumErr")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtDataCsumErr")
|
||||||
if [ "$count" != "$csum_ns1" ]; then
|
if [ "$count" != "$csum_ns1" ]; then
|
||||||
extra_msg="$extra_msg ns1=$count"
|
extra_msg="$extra_msg ns1=$count"
|
||||||
fi
|
fi
|
||||||
|
@ -1297,7 +1243,7 @@ chk_csum_nr()
|
||||||
print_ok
|
print_ok
|
||||||
fi
|
fi
|
||||||
print_check "csum"
|
print_check "csum"
|
||||||
count=$(get_counter ${ns2} "MPTcpExtDataCsumErr")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtDataCsumErr")
|
||||||
if [ "$count" != "$csum_ns2" ]; then
|
if [ "$count" != "$csum_ns2" ]; then
|
||||||
extra_msg="$extra_msg ns2=$count"
|
extra_msg="$extra_msg ns2=$count"
|
||||||
fi
|
fi
|
||||||
|
@ -1341,7 +1287,7 @@ chk_fail_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "ftx"
|
print_check "ftx"
|
||||||
count=$(get_counter ${ns_tx} "MPTcpExtMPFailTx")
|
count=$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMPFailTx")
|
||||||
if [ "$count" != "$fail_tx" ]; then
|
if [ "$count" != "$fail_tx" ]; then
|
||||||
extra_msg="$extra_msg,tx=$count"
|
extra_msg="$extra_msg,tx=$count"
|
||||||
fi
|
fi
|
||||||
|
@ -1355,7 +1301,7 @@ chk_fail_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "failrx"
|
print_check "failrx"
|
||||||
count=$(get_counter ${ns_rx} "MPTcpExtMPFailRx")
|
count=$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtMPFailRx")
|
||||||
if [ "$count" != "$fail_rx" ]; then
|
if [ "$count" != "$fail_rx" ]; then
|
||||||
extra_msg="$extra_msg,rx=$count"
|
extra_msg="$extra_msg,rx=$count"
|
||||||
fi
|
fi
|
||||||
|
@ -1388,7 +1334,7 @@ chk_fclose_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "ctx"
|
print_check "ctx"
|
||||||
count=$(get_counter ${ns_tx} "MPTcpExtMPFastcloseTx")
|
count=$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMPFastcloseTx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$fclose_tx" ]; then
|
elif [ "$count" != "$fclose_tx" ]; then
|
||||||
|
@ -1399,7 +1345,7 @@ chk_fclose_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "fclzrx"
|
print_check "fclzrx"
|
||||||
count=$(get_counter ${ns_rx} "MPTcpExtMPFastcloseRx")
|
count=$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtMPFastcloseRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$fclose_rx" ]; then
|
elif [ "$count" != "$fclose_rx" ]; then
|
||||||
|
@ -1429,7 +1375,7 @@ chk_rst_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "rtx"
|
print_check "rtx"
|
||||||
count=$(get_counter ${ns_tx} "MPTcpExtMPRstTx")
|
count=$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMPRstTx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
# accept more rst than expected except if we don't expect any
|
# accept more rst than expected except if we don't expect any
|
||||||
|
@ -1441,7 +1387,7 @@ chk_rst_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "rstrx"
|
print_check "rstrx"
|
||||||
count=$(get_counter ${ns_rx} "MPTcpExtMPRstRx")
|
count=$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtMPRstRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
# accept more rst than expected except if we don't expect any
|
# accept more rst than expected except if we don't expect any
|
||||||
|
@ -1462,7 +1408,7 @@ chk_infi_nr()
|
||||||
local count
|
local count
|
||||||
|
|
||||||
print_check "itx"
|
print_check "itx"
|
||||||
count=$(get_counter ${ns2} "MPTcpExtInfiniteMapTx")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtInfiniteMapTx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$infi_tx" ]; then
|
elif [ "$count" != "$infi_tx" ]; then
|
||||||
|
@ -1472,7 +1418,7 @@ chk_infi_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "infirx"
|
print_check "infirx"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtInfiniteMapRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtInfiniteMapRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$infi_rx" ]; then
|
elif [ "$count" != "$infi_rx" ]; then
|
||||||
|
@ -1501,7 +1447,7 @@ chk_join_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "syn"
|
print_check "syn"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMPJoinSynRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPJoinSynRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$syn_nr" ]; then
|
elif [ "$count" != "$syn_nr" ]; then
|
||||||
|
@ -1512,7 +1458,7 @@ chk_join_nr()
|
||||||
|
|
||||||
print_check "synack"
|
print_check "synack"
|
||||||
with_cookie=$(ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies)
|
with_cookie=$(ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies)
|
||||||
count=$(get_counter ${ns2} "MPTcpExtMPJoinSynAckRx")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtMPJoinSynAckRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$syn_ack_nr" ]; then
|
elif [ "$count" != "$syn_ack_nr" ]; then
|
||||||
|
@ -1529,7 +1475,7 @@ chk_join_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "ack"
|
print_check "ack"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMPJoinAckRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPJoinAckRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$ack_nr" ]; then
|
elif [ "$count" != "$ack_nr" ]; then
|
||||||
|
@ -1562,8 +1508,8 @@ chk_stale_nr()
|
||||||
|
|
||||||
print_check "stale"
|
print_check "stale"
|
||||||
|
|
||||||
stale_nr=$(get_counter ${ns} "MPTcpExtSubflowStale")
|
stale_nr=$(mptcp_lib_get_counter ${ns} "MPTcpExtSubflowStale")
|
||||||
recover_nr=$(get_counter ${ns} "MPTcpExtSubflowRecover")
|
recover_nr=$(mptcp_lib_get_counter ${ns} "MPTcpExtSubflowRecover")
|
||||||
if [ -z "$stale_nr" ] || [ -z "$recover_nr" ]; then
|
if [ -z "$stale_nr" ] || [ -z "$recover_nr" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ $stale_nr -lt $stale_min ] ||
|
elif [ $stale_nr -lt $stale_min ] ||
|
||||||
|
@ -1600,7 +1546,7 @@ chk_add_nr()
|
||||||
timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
|
timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
|
||||||
|
|
||||||
print_check "add"
|
print_check "add"
|
||||||
count=$(get_counter ${ns2} "MPTcpExtAddAddr")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtAddAddr")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
# if the test configured a short timeout tolerate greater then expected
|
# if the test configured a short timeout tolerate greater then expected
|
||||||
|
@ -1612,7 +1558,7 @@ chk_add_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "echo"
|
print_check "echo"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtEchoAdd")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtEchoAdd")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$echo_nr" ]; then
|
elif [ "$count" != "$echo_nr" ]; then
|
||||||
|
@ -1623,7 +1569,7 @@ chk_add_nr()
|
||||||
|
|
||||||
if [ $port_nr -gt 0 ]; then
|
if [ $port_nr -gt 0 ]; then
|
||||||
print_check "pt"
|
print_check "pt"
|
||||||
count=$(get_counter ${ns2} "MPTcpExtPortAdd")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtPortAdd")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$port_nr" ]; then
|
elif [ "$count" != "$port_nr" ]; then
|
||||||
|
@ -1633,7 +1579,7 @@ chk_add_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "syn"
|
print_check "syn"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMPJoinPortSynRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPJoinPortSynRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$syn_nr" ]; then
|
elif [ "$count" != "$syn_nr" ]; then
|
||||||
|
@ -1644,7 +1590,7 @@ chk_add_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "synack"
|
print_check "synack"
|
||||||
count=$(get_counter ${ns2} "MPTcpExtMPJoinPortSynAckRx")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtMPJoinPortSynAckRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$syn_ack_nr" ]; then
|
elif [ "$count" != "$syn_ack_nr" ]; then
|
||||||
|
@ -1655,7 +1601,7 @@ chk_add_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "ack"
|
print_check "ack"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMPJoinPortAckRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPJoinPortAckRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$ack_nr" ]; then
|
elif [ "$count" != "$ack_nr" ]; then
|
||||||
|
@ -1666,7 +1612,7 @@ chk_add_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "syn"
|
print_check "syn"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMismatchPortSynRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMismatchPortSynRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$mis_syn_nr" ]; then
|
elif [ "$count" != "$mis_syn_nr" ]; then
|
||||||
|
@ -1677,7 +1623,7 @@ chk_add_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "ack"
|
print_check "ack"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMismatchPortAckRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMismatchPortAckRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$mis_ack_nr" ]; then
|
elif [ "$count" != "$mis_ack_nr" ]; then
|
||||||
|
@ -1699,7 +1645,7 @@ chk_add_tx_nr()
|
||||||
timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
|
timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
|
||||||
|
|
||||||
print_check "add TX"
|
print_check "add TX"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtAddAddrTx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
# if the test configured a short timeout tolerate greater then expected
|
# if the test configured a short timeout tolerate greater then expected
|
||||||
|
@ -1711,7 +1657,7 @@ chk_add_tx_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "echo TX"
|
print_check "echo TX"
|
||||||
count=$(get_counter ${ns2} "MPTcpExtEchoAddTx")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtEchoAddTx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$echo_tx_nr" ]; then
|
elif [ "$count" != "$echo_tx_nr" ]; then
|
||||||
|
@ -1749,7 +1695,7 @@ chk_rm_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "rm"
|
print_check "rm"
|
||||||
count=$(get_counter ${addr_ns} "MPTcpExtRmAddr")
|
count=$(mptcp_lib_get_counter ${addr_ns} "MPTcpExtRmAddr")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$rm_addr_nr" ]; then
|
elif [ "$count" != "$rm_addr_nr" ]; then
|
||||||
|
@ -1759,13 +1705,13 @@ chk_rm_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "rmsf"
|
print_check "rmsf"
|
||||||
count=$(get_counter ${subflow_ns} "MPTcpExtRmSubflow")
|
count=$(mptcp_lib_get_counter ${subflow_ns} "MPTcpExtRmSubflow")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ -n "$simult" ]; then
|
elif [ -n "$simult" ]; then
|
||||||
local cnt suffix
|
local cnt suffix
|
||||||
|
|
||||||
cnt=$(get_counter ${addr_ns} "MPTcpExtRmSubflow")
|
cnt=$(mptcp_lib_get_counter ${addr_ns} "MPTcpExtRmSubflow")
|
||||||
|
|
||||||
# in case of simult flush, the subflow removal count on each side is
|
# in case of simult flush, the subflow removal count on each side is
|
||||||
# unreliable
|
# unreliable
|
||||||
|
@ -1794,7 +1740,7 @@ chk_rm_tx_nr()
|
||||||
local rm_addr_tx_nr=$1
|
local rm_addr_tx_nr=$1
|
||||||
|
|
||||||
print_check "rm TX"
|
print_check "rm TX"
|
||||||
count=$(get_counter ${ns2} "MPTcpExtRmAddrTx")
|
count=$(mptcp_lib_get_counter ${ns2} "MPTcpExtRmAddrTx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$rm_addr_tx_nr" ]; then
|
elif [ "$count" != "$rm_addr_tx_nr" ]; then
|
||||||
|
@ -1811,7 +1757,7 @@ chk_prio_nr()
|
||||||
local count
|
local count
|
||||||
|
|
||||||
print_check "ptx"
|
print_check "ptx"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMPPrioTx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPPrioTx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$mp_prio_nr_tx" ]; then
|
elif [ "$count" != "$mp_prio_nr_tx" ]; then
|
||||||
|
@ -1821,7 +1767,7 @@ chk_prio_nr()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_check "prx"
|
print_check "prx"
|
||||||
count=$(get_counter ${ns1} "MPTcpExtMPPrioRx")
|
count=$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPPrioRx")
|
||||||
if [ -z "$count" ]; then
|
if [ -z "$count" ]; then
|
||||||
print_skip
|
print_skip
|
||||||
elif [ "$count" != "$mp_prio_nr_rx" ]; then
|
elif [ "$count" != "$mp_prio_nr_rx" ]; then
|
||||||
|
@ -1867,12 +1813,10 @@ chk_mptcp_info()
|
||||||
local cnt2
|
local cnt2
|
||||||
local dump_stats
|
local dump_stats
|
||||||
|
|
||||||
print_check "mptcp_info ${info1:0:8}=$exp1:$exp2"
|
print_check "mptcp_info ${info1:0:15}=$exp1:$exp2"
|
||||||
|
|
||||||
cnt1=$(ss -N $ns1 -inmHM | grep "$info1:" |
|
cnt1=$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value "$info1" "$info1")
|
||||||
sed -n 's/.*\('"$info1"':\)\([[:digit:]]*\).*$/\2/p;q')
|
cnt2=$(ss -N $ns2 -inmHM | mptcp_lib_get_info_value "$info2" "$info2")
|
||||||
cnt2=$(ss -N $ns2 -inmHM | grep "$info2:" |
|
|
||||||
sed -n 's/.*\('"$info2"':\)\([[:digit:]]*\).*$/\2/p;q')
|
|
||||||
# 'ss' only display active connections and counters that are not 0.
|
# 'ss' only display active connections and counters that are not 0.
|
||||||
[ -z "$cnt1" ] && cnt1=0
|
[ -z "$cnt1" ] && cnt1=0
|
||||||
[ -z "$cnt2" ] && cnt2=0
|
[ -z "$cnt2" ] && cnt2=0
|
||||||
|
@ -1890,6 +1834,42 @@ chk_mptcp_info()
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# $1: subflows in ns1 ; $2: subflows in ns2
|
||||||
|
# number of all subflows, including the initial subflow.
|
||||||
|
chk_subflows_total()
|
||||||
|
{
|
||||||
|
local cnt1
|
||||||
|
local cnt2
|
||||||
|
local info="subflows_total"
|
||||||
|
local dump_stats
|
||||||
|
|
||||||
|
# if subflows_total counter is supported, use it:
|
||||||
|
if [ -n "$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value $info $info)" ]; then
|
||||||
|
chk_mptcp_info $info $1 $info $2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_check "$info $1:$2"
|
||||||
|
|
||||||
|
# if not, count the TCP connections that are in fact MPTCP subflows
|
||||||
|
cnt1=$(ss -N $ns1 -ti state established state syn-sent state syn-recv |
|
||||||
|
grep -c tcp-ulp-mptcp)
|
||||||
|
cnt2=$(ss -N $ns2 -ti state established state syn-sent state syn-recv |
|
||||||
|
grep -c tcp-ulp-mptcp)
|
||||||
|
|
||||||
|
if [ "$1" != "$cnt1" ] || [ "$2" != "$cnt2" ]; then
|
||||||
|
fail_test "got subflows $cnt1:$cnt2 expected $1:$2"
|
||||||
|
dump_stats=1
|
||||||
|
else
|
||||||
|
print_ok
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$dump_stats" = 1 ]; then
|
||||||
|
ss -N $ns1 -ti
|
||||||
|
ss -N $ns2 -ti
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
chk_link_usage()
|
chk_link_usage()
|
||||||
{
|
{
|
||||||
local ns=$1
|
local ns=$1
|
||||||
|
@ -1921,7 +1901,7 @@ wait_attempt_fail()
|
||||||
while [ $time -lt $timeout_ms ]; do
|
while [ $time -lt $timeout_ms ]; do
|
||||||
local cnt
|
local cnt
|
||||||
|
|
||||||
cnt=$(get_counter ${ns} "TcpAttemptFails")
|
cnt=$(mptcp_lib_get_counter ${ns} "TcpAttemptFails")
|
||||||
|
|
||||||
[ "$cnt" = 1 ] && return 1
|
[ "$cnt" = 1 ] && return 1
|
||||||
time=$((time + 100))
|
time=$((time + 100))
|
||||||
|
@ -2814,6 +2794,7 @@ backup_tests()
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SUB_ESTABLISHED=10 # MPTCP_EVENT_SUB_ESTABLISHED
|
||||||
LISTENER_CREATED=15 #MPTCP_EVENT_LISTENER_CREATED
|
LISTENER_CREATED=15 #MPTCP_EVENT_LISTENER_CREATED
|
||||||
LISTENER_CLOSED=16 #MPTCP_EVENT_LISTENER_CLOSED
|
LISTENER_CLOSED=16 #MPTCP_EVENT_LISTENER_CLOSED
|
||||||
|
|
||||||
|
@ -2848,13 +2829,13 @@ verify_listener_events()
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
type=$(grep "type:$e_type," $evt | sed -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q')
|
type=$(mptcp_lib_evts_get_info type "$evt" "$e_type")
|
||||||
family=$(grep "type:$e_type," $evt | sed -n 's/.*\(family:\)\([[:digit:]]*\).*$/\2/p;q')
|
family=$(mptcp_lib_evts_get_info family "$evt" "$e_type")
|
||||||
sport=$(grep "type:$e_type," $evt | sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
|
sport=$(mptcp_lib_evts_get_info sport "$evt" "$e_type")
|
||||||
if [ $family ] && [ $family = $AF_INET6 ]; then
|
if [ $family ] && [ $family = $AF_INET6 ]; then
|
||||||
saddr=$(grep "type:$e_type," $evt | sed -n 's/.*\(saddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
|
saddr=$(mptcp_lib_evts_get_info saddr6 "$evt" "$e_type")
|
||||||
else
|
else
|
||||||
saddr=$(grep "type:$e_type," $evt | sed -n 's/.*\(saddr4:\)\([0-9.]*\).*$/\2/p;q')
|
saddr=$(mptcp_lib_evts_get_info saddr4 "$evt" "$e_type")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $type ] && [ $type = $e_type ] &&
|
if [ $type ] && [ $type = $e_type ] &&
|
||||||
|
@ -3249,8 +3230,7 @@ fastclose_tests()
|
||||||
pedit_action_pkts()
|
pedit_action_pkts()
|
||||||
{
|
{
|
||||||
tc -n $ns2 -j -s action show action pedit index 100 | \
|
tc -n $ns2 -j -s action show action pedit index 100 | \
|
||||||
grep "packets" | \
|
mptcp_lib_get_info_value \"packets\" packets
|
||||||
sed 's/.*"packets":\([0-9]\+\),.*/\1/'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fail_tests()
|
fail_tests()
|
||||||
|
@ -3275,75 +3255,70 @@ fail_tests()
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# $1: ns ; $2: addr ; $3: id
|
||||||
userspace_pm_add_addr()
|
userspace_pm_add_addr()
|
||||||
{
|
{
|
||||||
local addr=$1
|
local evts=$evts_ns1
|
||||||
local id=$2
|
|
||||||
local tk
|
local tk
|
||||||
|
|
||||||
tk=$(grep "type:1," "$evts_ns1" |
|
[ "$1" == "$ns2" ] && evts=$evts_ns2
|
||||||
sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
|
tk=$(mptcp_lib_evts_get_info token "$evts")
|
||||||
ip netns exec $ns1 ./pm_nl_ctl ann $addr token $tk id $id
|
|
||||||
|
ip netns exec $1 ./pm_nl_ctl ann $2 token $tk id $3
|
||||||
sleep 1
|
sleep 1
|
||||||
}
|
}
|
||||||
|
|
||||||
userspace_pm_rm_sf_addr_ns1()
|
# $1: ns ; $2: id
|
||||||
|
userspace_pm_rm_addr()
|
||||||
{
|
{
|
||||||
local addr=$1
|
local evts=$evts_ns1
|
||||||
local id=$2
|
local tk
|
||||||
local tk sp da dp
|
local cnt
|
||||||
local cnt_addr cnt_sf
|
|
||||||
|
|
||||||
tk=$(grep "type:1," "$evts_ns1" |
|
[ "$1" == "$ns2" ] && evts=$evts_ns2
|
||||||
sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
|
tk=$(mptcp_lib_evts_get_info token "$evts")
|
||||||
sp=$(grep "type:10" "$evts_ns1" |
|
|
||||||
sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
|
cnt=$(rm_addr_count ${1})
|
||||||
da=$(grep "type:10" "$evts_ns1" |
|
ip netns exec $1 ./pm_nl_ctl rem token $tk id $2
|
||||||
sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
|
wait_rm_addr $1 "${cnt}"
|
||||||
dp=$(grep "type:10" "$evts_ns1" |
|
|
||||||
sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q')
|
|
||||||
cnt_addr=$(rm_addr_count ${ns1})
|
|
||||||
cnt_sf=$(rm_sf_count ${ns1})
|
|
||||||
ip netns exec $ns1 ./pm_nl_ctl rem token $tk id $id
|
|
||||||
ip netns exec $ns1 ./pm_nl_ctl dsf lip "::ffff:$addr" \
|
|
||||||
lport $sp rip $da rport $dp token $tk
|
|
||||||
wait_rm_addr $ns1 "${cnt_addr}"
|
|
||||||
wait_rm_sf $ns1 "${cnt_sf}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# $1: ns ; $2: addr ; $3: id
|
||||||
userspace_pm_add_sf()
|
userspace_pm_add_sf()
|
||||||
{
|
{
|
||||||
local addr=$1
|
local evts=$evts_ns1
|
||||||
local id=$2
|
|
||||||
local tk da dp
|
local tk da dp
|
||||||
|
|
||||||
tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
|
[ "$1" == "$ns2" ] && evts=$evts_ns2
|
||||||
da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
|
tk=$(mptcp_lib_evts_get_info token "$evts")
|
||||||
dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
|
da=$(mptcp_lib_evts_get_info daddr4 "$evts")
|
||||||
ip netns exec $ns2 ./pm_nl_ctl csf lip $addr lid $id \
|
dp=$(mptcp_lib_evts_get_info dport "$evts")
|
||||||
|
|
||||||
|
ip netns exec $1 ./pm_nl_ctl csf lip $2 lid $3 \
|
||||||
rip $da rport $dp token $tk
|
rip $da rport $dp token $tk
|
||||||
sleep 1
|
sleep 1
|
||||||
}
|
}
|
||||||
|
|
||||||
userspace_pm_rm_sf_addr_ns2()
|
# $1: ns ; $2: addr $3: event type
|
||||||
|
userspace_pm_rm_sf()
|
||||||
{
|
{
|
||||||
local addr=$1
|
local evts=$evts_ns1
|
||||||
local id=$2
|
local t=${3:-1}
|
||||||
|
local ip=4
|
||||||
local tk da dp sp
|
local tk da dp sp
|
||||||
local cnt_addr cnt_sf
|
local cnt
|
||||||
|
|
||||||
tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
|
[ "$1" == "$ns2" ] && evts=$evts_ns2
|
||||||
da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
|
if mptcp_lib_is_v6 $2; then ip=6; fi
|
||||||
dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
|
tk=$(mptcp_lib_evts_get_info token "$evts")
|
||||||
sp=$(grep "type:10" "$evts_ns2" |
|
da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t)
|
||||||
sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
|
dp=$(mptcp_lib_evts_get_info dport "$evts" $t)
|
||||||
cnt_addr=$(rm_addr_count ${ns2})
|
sp=$(mptcp_lib_evts_get_info sport "$evts" $t)
|
||||||
cnt_sf=$(rm_sf_count ${ns2})
|
|
||||||
ip netns exec $ns2 ./pm_nl_ctl rem token $tk id $id
|
cnt=$(rm_sf_count ${1})
|
||||||
ip netns exec $ns2 ./pm_nl_ctl dsf lip $addr lport $sp \
|
ip netns exec $1 ./pm_nl_ctl dsf lip $2 lport $sp \
|
||||||
rip $da rport $dp token $tk
|
rip $da rport $dp token $tk
|
||||||
wait_rm_addr $ns2 "${cnt_addr}"
|
wait_rm_sf $1 "${cnt}"
|
||||||
wait_rm_sf $ns2 "${cnt_sf}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
userspace_tests()
|
userspace_tests()
|
||||||
|
@ -3430,14 +3405,17 @@ userspace_tests()
|
||||||
run_tests $ns1 $ns2 10.0.1.1 &
|
run_tests $ns1 $ns2 10.0.1.1 &
|
||||||
local tests_pid=$!
|
local tests_pid=$!
|
||||||
wait_mpj $ns1
|
wait_mpj $ns1
|
||||||
userspace_pm_add_addr 10.0.2.1 10
|
userspace_pm_add_addr $ns1 10.0.2.1 10
|
||||||
chk_join_nr 1 1 1
|
chk_join_nr 1 1 1
|
||||||
chk_add_nr 1 1
|
chk_add_nr 1 1
|
||||||
chk_mptcp_info subflows 1 subflows 1
|
chk_mptcp_info subflows 1 subflows 1
|
||||||
|
chk_subflows_total 2 2
|
||||||
chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
|
chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
|
||||||
userspace_pm_rm_sf_addr_ns1 10.0.2.1 10
|
userspace_pm_rm_addr $ns1 10
|
||||||
|
userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $SUB_ESTABLISHED
|
||||||
chk_rm_nr 1 1 invert
|
chk_rm_nr 1 1 invert
|
||||||
chk_mptcp_info subflows 0 subflows 0
|
chk_mptcp_info subflows 0 subflows 0
|
||||||
|
chk_subflows_total 1 1
|
||||||
kill_events_pids
|
kill_events_pids
|
||||||
wait $tests_pid
|
wait $tests_pid
|
||||||
fi
|
fi
|
||||||
|
@ -3451,12 +3429,84 @@ userspace_tests()
|
||||||
run_tests $ns1 $ns2 10.0.1.1 &
|
run_tests $ns1 $ns2 10.0.1.1 &
|
||||||
local tests_pid=$!
|
local tests_pid=$!
|
||||||
wait_mpj $ns2
|
wait_mpj $ns2
|
||||||
userspace_pm_add_sf 10.0.3.2 20
|
userspace_pm_add_sf $ns2 10.0.3.2 20
|
||||||
chk_join_nr 1 1 1
|
chk_join_nr 1 1 1
|
||||||
chk_mptcp_info subflows 1 subflows 1
|
chk_mptcp_info subflows 1 subflows 1
|
||||||
userspace_pm_rm_sf_addr_ns2 10.0.3.2 20
|
chk_subflows_total 2 2
|
||||||
|
userspace_pm_rm_addr $ns2 20
|
||||||
|
userspace_pm_rm_sf $ns2 10.0.3.2 $SUB_ESTABLISHED
|
||||||
chk_rm_nr 1 1
|
chk_rm_nr 1 1
|
||||||
chk_mptcp_info subflows 0 subflows 0
|
chk_mptcp_info subflows 0 subflows 0
|
||||||
|
chk_subflows_total 1 1
|
||||||
|
kill_events_pids
|
||||||
|
wait $tests_pid
|
||||||
|
fi
|
||||||
|
|
||||||
|
# userspace pm create id 0 subflow
|
||||||
|
if reset_with_events "userspace pm create id 0 subflow" &&
|
||||||
|
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
|
||||||
|
set_userspace_pm $ns2
|
||||||
|
pm_nl_set_limits $ns1 0 1
|
||||||
|
speed=5 \
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1 &
|
||||||
|
local tests_pid=$!
|
||||||
|
wait_mpj $ns2
|
||||||
|
chk_mptcp_info subflows 0 subflows 0
|
||||||
|
chk_subflows_total 1 1
|
||||||
|
userspace_pm_add_sf $ns2 10.0.3.2 0
|
||||||
|
chk_join_nr 1 1 1
|
||||||
|
chk_mptcp_info subflows 1 subflows 1
|
||||||
|
chk_subflows_total 2 2
|
||||||
|
kill_events_pids
|
||||||
|
wait $tests_pid
|
||||||
|
fi
|
||||||
|
|
||||||
|
# userspace pm remove initial subflow
|
||||||
|
if reset_with_events "userspace pm remove initial subflow" &&
|
||||||
|
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
|
||||||
|
set_userspace_pm $ns2
|
||||||
|
pm_nl_set_limits $ns1 0 1
|
||||||
|
speed=5 \
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1 &
|
||||||
|
local tests_pid=$!
|
||||||
|
wait_mpj $ns2
|
||||||
|
userspace_pm_add_sf $ns2 10.0.3.2 20
|
||||||
|
chk_join_nr 1 1 1
|
||||||
|
chk_mptcp_info subflows 1 subflows 1
|
||||||
|
chk_subflows_total 2 2
|
||||||
|
userspace_pm_rm_sf $ns2 10.0.1.2
|
||||||
|
# we don't look at the counter linked to the RM_ADDR but
|
||||||
|
# to the one linked to the subflows that have been removed
|
||||||
|
chk_rm_nr 0 1
|
||||||
|
chk_rst_nr 0 0 invert
|
||||||
|
chk_mptcp_info subflows 1 subflows 1
|
||||||
|
chk_subflows_total 1 1
|
||||||
|
kill_events_pids
|
||||||
|
wait $tests_pid
|
||||||
|
fi
|
||||||
|
|
||||||
|
# userspace pm send RM_ADDR for ID 0
|
||||||
|
if reset_with_events "userspace pm send RM_ADDR for ID 0" &&
|
||||||
|
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
|
||||||
|
set_userspace_pm $ns1
|
||||||
|
pm_nl_set_limits $ns2 1 1
|
||||||
|
speed=5 \
|
||||||
|
run_tests $ns1 $ns2 10.0.1.1 &
|
||||||
|
local tests_pid=$!
|
||||||
|
wait_mpj $ns1
|
||||||
|
userspace_pm_add_addr $ns1 10.0.2.1 10
|
||||||
|
chk_join_nr 1 1 1
|
||||||
|
chk_add_nr 1 1
|
||||||
|
chk_mptcp_info subflows 1 subflows 1
|
||||||
|
chk_subflows_total 2 2
|
||||||
|
chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
|
||||||
|
userspace_pm_rm_addr $ns1 0
|
||||||
|
# we don't look at the counter linked to the subflows that
|
||||||
|
# have been removed but to the one linked to the RM_ADDR
|
||||||
|
chk_rm_nr 1 0 invert
|
||||||
|
chk_rst_nr 0 0 invert
|
||||||
|
chk_mptcp_info subflows 1 subflows 1
|
||||||
|
chk_subflows_total 1 1
|
||||||
kill_events_pids
|
kill_events_pids
|
||||||
wait $tests_pid
|
wait $tests_pid
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -207,3 +207,94 @@ mptcp_lib_result_print_all_tap() {
|
||||||
printf "%s\n" "${subtest}"
|
printf "%s\n" "${subtest}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# get the value of keyword $1 in the line marked by keyword $2
|
||||||
|
mptcp_lib_get_info_value() {
|
||||||
|
grep "${2}" | sed -n 's/.*\('"${1}"':\)\([0-9a-f:.]*\).*$/\2/p;q'
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: info name ; $2: evts_ns ; $3: event type
|
||||||
|
mptcp_lib_evts_get_info() {
|
||||||
|
mptcp_lib_get_info_value "${1}" "^type:${3:-1}," < "${2}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: PID
|
||||||
|
mptcp_lib_kill_wait() {
|
||||||
|
[ "${1}" -eq 0 ] && return 0
|
||||||
|
|
||||||
|
kill -SIGUSR1 "${1}" > /dev/null 2>&1
|
||||||
|
kill "${1}" > /dev/null 2>&1
|
||||||
|
wait "${1}" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: IP address
|
||||||
|
mptcp_lib_is_v6() {
|
||||||
|
[ -z "${1##*:*}" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: ns, $2: MIB counter
|
||||||
|
mptcp_lib_get_counter() {
|
||||||
|
local ns="${1}"
|
||||||
|
local counter="${2}"
|
||||||
|
local count
|
||||||
|
|
||||||
|
count=$(ip netns exec "${ns}" nstat -asz "${counter}" |
|
||||||
|
awk 'NR==1 {next} {print $2}')
|
||||||
|
if [ -z "${count}" ]; then
|
||||||
|
mptcp_lib_fail_if_expected_feature "${counter} counter"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${count}"
|
||||||
|
}
|
||||||
|
|
||||||
|
mptcp_lib_make_file() {
|
||||||
|
local name="${1}"
|
||||||
|
local bs="${2}"
|
||||||
|
local size="${3}"
|
||||||
|
|
||||||
|
dd if=/dev/urandom of="${name}" bs="${bs}" count="${size}" 2> /dev/null
|
||||||
|
echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "${name}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: file
|
||||||
|
mptcp_lib_print_file_err() {
|
||||||
|
ls -l "${1}" 1>&2
|
||||||
|
echo "Trailing bytes are: "
|
||||||
|
tail -c 27 "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: input file ; $2: output file ; $3: what kind of file
|
||||||
|
mptcp_lib_check_transfer() {
|
||||||
|
local in="${1}"
|
||||||
|
local out="${2}"
|
||||||
|
local what="${3}"
|
||||||
|
|
||||||
|
if ! cmp "$in" "$out" > /dev/null 2>&1; then
|
||||||
|
echo "[ FAIL ] $what does not match (in, out):"
|
||||||
|
mptcp_lib_print_file_err "$in"
|
||||||
|
mptcp_lib_print_file_err "$out"
|
||||||
|
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: ns, $2: port
|
||||||
|
mptcp_lib_wait_local_port_listen() {
|
||||||
|
local listener_ns="${1}"
|
||||||
|
local port="${2}"
|
||||||
|
|
||||||
|
local port_hex
|
||||||
|
port_hex="$(printf "%04X" "${port}")"
|
||||||
|
|
||||||
|
local _
|
||||||
|
for _ in $(seq 10); do
|
||||||
|
ip netns exec "${listener_ns}" cat /proc/net/tcp* | \
|
||||||
|
awk "BEGIN {rc=1} {if (\$2 ~ /:${port_hex}\$/ && \$4 ~ /0A/) \
|
||||||
|
{rc=0; exit}} END {exit rc}" &&
|
||||||
|
break
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
|
@ -135,38 +135,6 @@ check_mark()
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
print_file_err()
|
|
||||||
{
|
|
||||||
ls -l "$1" 1>&2
|
|
||||||
echo "Trailing bytes are: "
|
|
||||||
tail -c 27 "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_transfer()
|
|
||||||
{
|
|
||||||
local in=$1
|
|
||||||
local out=$2
|
|
||||||
local what=$3
|
|
||||||
|
|
||||||
cmp "$in" "$out" > /dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ] ;then
|
|
||||||
echo "[ FAIL ] $what does not match (in, out):"
|
|
||||||
print_file_err "$in"
|
|
||||||
print_file_err "$out"
|
|
||||||
ret=1
|
|
||||||
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: IP address
|
|
||||||
is_v6()
|
|
||||||
{
|
|
||||||
[ -z "${1##*:*}" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
do_transfer()
|
do_transfer()
|
||||||
{
|
{
|
||||||
local listener_ns="$1"
|
local listener_ns="$1"
|
||||||
|
@ -183,7 +151,7 @@ do_transfer()
|
||||||
local mptcp_connect="./mptcp_connect -r 20"
|
local mptcp_connect="./mptcp_connect -r 20"
|
||||||
|
|
||||||
local local_addr ip
|
local local_addr ip
|
||||||
if is_v6 "${connect_addr}"; then
|
if mptcp_lib_is_v6 "${connect_addr}"; then
|
||||||
local_addr="::"
|
local_addr="::"
|
||||||
ip=ipv6
|
ip=ipv6
|
||||||
else
|
else
|
||||||
|
@ -238,7 +206,7 @@ do_transfer()
|
||||||
check_mark $connector_ns 4 || retc=1
|
check_mark $connector_ns 4 || retc=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_transfer $cin $sout "file received by server"
|
mptcp_lib_check_transfer $cin $sout "file received by server"
|
||||||
rets=$?
|
rets=$?
|
||||||
|
|
||||||
mptcp_lib_result_code "${retc}" "mark ${ip}"
|
mptcp_lib_result_code "${retc}" "mark ${ip}"
|
||||||
|
@ -257,8 +225,7 @@ make_file()
|
||||||
local who=$2
|
local who=$2
|
||||||
local size=$3
|
local size=$3
|
||||||
|
|
||||||
dd if=/dev/urandom of="$name" bs=1024 count=$size 2> /dev/null
|
mptcp_lib_make_file $name 1024 $size
|
||||||
echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "$name"
|
|
||||||
|
|
||||||
echo "Created $name (size $size KB) containing data sent by $who"
|
echo "Created $name (size $size KB) containing data sent by $who"
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,23 +123,6 @@ setup()
|
||||||
grep -q ' kmemleak_init$\| lockdep_init$\| kasan_init$\| prove_locking$' /proc/kallsyms && slack=$((slack+550))
|
grep -q ' kmemleak_init$\| lockdep_init$\| kasan_init$\| prove_locking$' /proc/kallsyms && slack=$((slack+550))
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: ns, $2: port
|
|
||||||
wait_local_port_listen()
|
|
||||||
{
|
|
||||||
local listener_ns="${1}"
|
|
||||||
local port="${2}"
|
|
||||||
|
|
||||||
local port_hex i
|
|
||||||
|
|
||||||
port_hex="$(printf "%04X" "${port}")"
|
|
||||||
for i in $(seq 10); do
|
|
||||||
ip netns exec "${listener_ns}" cat /proc/net/tcp* | \
|
|
||||||
awk "BEGIN {rc=1} {if (\$2 ~ /:${port_hex}\$/ && \$4 ~ /0A/) {rc=0; exit}} END {exit rc}" &&
|
|
||||||
break
|
|
||||||
sleep 0.1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
do_transfer()
|
do_transfer()
|
||||||
{
|
{
|
||||||
local cin=$1
|
local cin=$1
|
||||||
|
@ -179,7 +162,7 @@ do_transfer()
|
||||||
0.0.0.0 < "$sin" > "$sout" &
|
0.0.0.0 < "$sin" > "$sout" &
|
||||||
local spid=$!
|
local spid=$!
|
||||||
|
|
||||||
wait_local_port_listen "${ns3}" "${port}"
|
mptcp_lib_wait_local_port_listen "${ns3}" "${port}"
|
||||||
|
|
||||||
timeout ${timeout_test} \
|
timeout ${timeout_test} \
|
||||||
ip netns exec ${ns1} \
|
ip netns exec ${ns1} \
|
||||||
|
|
|
@ -108,15 +108,6 @@ test_fail()
|
||||||
mptcp_lib_result_fail "${test_name}"
|
mptcp_lib_result_fail "${test_name}"
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_wait()
|
|
||||||
{
|
|
||||||
[ $1 -eq 0 ] && return 0
|
|
||||||
|
|
||||||
kill -SIGUSR1 $1 > /dev/null 2>&1
|
|
||||||
kill $1 > /dev/null 2>&1
|
|
||||||
wait $1 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
# This function is used in the cleanup trap
|
# This function is used in the cleanup trap
|
||||||
#shellcheck disable=SC2317
|
#shellcheck disable=SC2317
|
||||||
cleanup()
|
cleanup()
|
||||||
|
@ -128,7 +119,7 @@ cleanup()
|
||||||
for pid in $client4_pid $server4_pid $client6_pid $server6_pid\
|
for pid in $client4_pid $server4_pid $client6_pid $server6_pid\
|
||||||
$server_evts_pid $client_evts_pid
|
$server_evts_pid $client_evts_pid
|
||||||
do
|
do
|
||||||
kill_wait $pid
|
mptcp_lib_kill_wait $pid
|
||||||
done
|
done
|
||||||
|
|
||||||
local netns
|
local netns
|
||||||
|
@ -173,22 +164,12 @@ print_title "Init"
|
||||||
print_test "Created network namespaces ns1, ns2"
|
print_test "Created network namespaces ns1, ns2"
|
||||||
test_pass
|
test_pass
|
||||||
|
|
||||||
make_file()
|
|
||||||
{
|
|
||||||
# Store a chunk of data in a file to transmit over an MPTCP connection
|
|
||||||
local name=$1
|
|
||||||
local ksize=1
|
|
||||||
|
|
||||||
dd if=/dev/urandom of="$name" bs=2 count=$ksize 2> /dev/null
|
|
||||||
echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "$name"
|
|
||||||
}
|
|
||||||
|
|
||||||
make_connection()
|
make_connection()
|
||||||
{
|
{
|
||||||
if [ -z "$file" ]; then
|
if [ -z "$file" ]; then
|
||||||
file=$(mktemp)
|
file=$(mktemp)
|
||||||
fi
|
fi
|
||||||
make_file "$file" "client"
|
mptcp_lib_make_file "$file" 2 1
|
||||||
|
|
||||||
local is_v6=$1
|
local is_v6=$1
|
||||||
local app_port=$app4_port
|
local app_port=$app4_port
|
||||||
|
@ -210,7 +191,7 @@ make_connection()
|
||||||
fi
|
fi
|
||||||
:>"$client_evts"
|
:>"$client_evts"
|
||||||
if [ $client_evts_pid -ne 0 ]; then
|
if [ $client_evts_pid -ne 0 ]; then
|
||||||
kill_wait $client_evts_pid
|
mptcp_lib_kill_wait $client_evts_pid
|
||||||
fi
|
fi
|
||||||
ip netns exec "$ns2" ./pm_nl_ctl events >> "$client_evts" 2>&1 &
|
ip netns exec "$ns2" ./pm_nl_ctl events >> "$client_evts" 2>&1 &
|
||||||
client_evts_pid=$!
|
client_evts_pid=$!
|
||||||
|
@ -219,7 +200,7 @@ make_connection()
|
||||||
fi
|
fi
|
||||||
:>"$server_evts"
|
:>"$server_evts"
|
||||||
if [ $server_evts_pid -ne 0 ]; then
|
if [ $server_evts_pid -ne 0 ]; then
|
||||||
kill_wait $server_evts_pid
|
mptcp_lib_kill_wait $server_evts_pid
|
||||||
fi
|
fi
|
||||||
ip netns exec "$ns1" ./pm_nl_ctl events >> "$server_evts" 2>&1 &
|
ip netns exec "$ns1" ./pm_nl_ctl events >> "$server_evts" 2>&1 &
|
||||||
server_evts_pid=$!
|
server_evts_pid=$!
|
||||||
|
@ -247,14 +228,11 @@ make_connection()
|
||||||
local server_token
|
local server_token
|
||||||
local server_serverside
|
local server_serverside
|
||||||
|
|
||||||
client_token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts")
|
client_token=$(mptcp_lib_evts_get_info token "$client_evts")
|
||||||
client_port=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts")
|
client_port=$(mptcp_lib_evts_get_info sport "$client_evts")
|
||||||
client_serverside=$(sed --unbuffered -n 's/.*\(server_side:\)\([[:digit:]]*\).*$/\2/p;q'\
|
client_serverside=$(mptcp_lib_evts_get_info server_side "$client_evts")
|
||||||
"$client_evts")
|
server_token=$(mptcp_lib_evts_get_info token "$server_evts")
|
||||||
server_token=$(grep "type:1," "$server_evts" |
|
server_serverside=$(mptcp_lib_evts_get_info server_side "$server_evts")
|
||||||
sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
|
|
||||||
server_serverside=$(grep "type:1," "$server_evts" |
|
|
||||||
sed --unbuffered -n 's/.*\(server_side:\)\([[:digit:]]*\).*$/\2/p;q')
|
|
||||||
|
|
||||||
print_test "Established IP${is_v6} MPTCP Connection ns2 => ns1"
|
print_test "Established IP${is_v6} MPTCP Connection ns2 => ns1"
|
||||||
if [ "$client_token" != "" ] && [ "$server_token" != "" ] && [ "$client_serverside" = 0 ] &&
|
if [ "$client_token" != "" ] && [ "$server_token" != "" ] && [ "$client_serverside" = 0 ] &&
|
||||||
|
@ -340,16 +318,16 @@ verify_announce_event()
|
||||||
local dport
|
local dport
|
||||||
local id
|
local id
|
||||||
|
|
||||||
type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
type=$(mptcp_lib_evts_get_info type "$evt" $e_type)
|
||||||
token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
token=$(mptcp_lib_evts_get_info token "$evt" $e_type)
|
||||||
if [ "$e_af" = "v6" ]
|
if [ "$e_af" = "v6" ]
|
||||||
then
|
then
|
||||||
addr=$(sed --unbuffered -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' "$evt")
|
addr=$(mptcp_lib_evts_get_info daddr6 "$evt" $e_type)
|
||||||
else
|
else
|
||||||
addr=$(sed --unbuffered -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evt")
|
addr=$(mptcp_lib_evts_get_info daddr4 "$evt" $e_type)
|
||||||
fi
|
fi
|
||||||
dport=$(sed --unbuffered -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
dport=$(mptcp_lib_evts_get_info dport "$evt" $e_type)
|
||||||
id=$(sed --unbuffered -n 's/.*\(rem_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
id=$(mptcp_lib_evts_get_info rem_id "$evt" $e_type)
|
||||||
|
|
||||||
check_expected "type" "token" "addr" "dport" "id"
|
check_expected "type" "token" "addr" "dport" "id"
|
||||||
}
|
}
|
||||||
|
@ -367,7 +345,7 @@ test_announce()
|
||||||
$client_addr_id dev ns2eth1 > /dev/null 2>&1
|
$client_addr_id dev ns2eth1 > /dev/null 2>&1
|
||||||
|
|
||||||
local type
|
local type
|
||||||
type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts")
|
type=$(mptcp_lib_evts_get_info type "$server_evts")
|
||||||
print_test "ADD_ADDR 10.0.2.2 (ns2) => ns1, invalid token"
|
print_test "ADD_ADDR 10.0.2.2 (ns2) => ns1, invalid token"
|
||||||
if [ "$type" = "" ]
|
if [ "$type" = "" ]
|
||||||
then
|
then
|
||||||
|
@ -446,9 +424,9 @@ verify_remove_event()
|
||||||
local token
|
local token
|
||||||
local id
|
local id
|
||||||
|
|
||||||
type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
type=$(mptcp_lib_evts_get_info type "$evt" $e_type)
|
||||||
token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
token=$(mptcp_lib_evts_get_info token "$evt" $e_type)
|
||||||
id=$(sed --unbuffered -n 's/.*\(rem_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
id=$(mptcp_lib_evts_get_info rem_id "$evt" $e_type)
|
||||||
|
|
||||||
check_expected "type" "token" "id"
|
check_expected "type" "token" "id"
|
||||||
}
|
}
|
||||||
|
@ -466,7 +444,7 @@ test_remove()
|
||||||
$client_addr_id > /dev/null 2>&1
|
$client_addr_id > /dev/null 2>&1
|
||||||
print_test "RM_ADDR id:${client_addr_id} ns2 => ns1, invalid token"
|
print_test "RM_ADDR id:${client_addr_id} ns2 => ns1, invalid token"
|
||||||
local type
|
local type
|
||||||
type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts")
|
type=$(mptcp_lib_evts_get_info type "$server_evts")
|
||||||
if [ "$type" = "" ]
|
if [ "$type" = "" ]
|
||||||
then
|
then
|
||||||
test_pass
|
test_pass
|
||||||
|
@ -479,7 +457,7 @@ test_remove()
|
||||||
ip netns exec "$ns2" ./pm_nl_ctl rem token "$client4_token" id\
|
ip netns exec "$ns2" ./pm_nl_ctl rem token "$client4_token" id\
|
||||||
$invalid_id > /dev/null 2>&1
|
$invalid_id > /dev/null 2>&1
|
||||||
print_test "RM_ADDR id:${invalid_id} ns2 => ns1, invalid id"
|
print_test "RM_ADDR id:${invalid_id} ns2 => ns1, invalid id"
|
||||||
type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts")
|
type=$(mptcp_lib_evts_get_info type "$server_evts")
|
||||||
if [ "$type" = "" ]
|
if [ "$type" = "" ]
|
||||||
then
|
then
|
||||||
test_pass
|
test_pass
|
||||||
|
@ -583,19 +561,19 @@ verify_subflow_events()
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
type=$(mptcp_lib_evts_get_info type "$evt" $e_type)
|
||||||
token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
token=$(mptcp_lib_evts_get_info token "$evt" $e_type)
|
||||||
family=$(sed --unbuffered -n 's/.*\(family:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
family=$(mptcp_lib_evts_get_info family "$evt" $e_type)
|
||||||
dport=$(sed --unbuffered -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
dport=$(mptcp_lib_evts_get_info dport "$evt" $e_type)
|
||||||
locid=$(sed --unbuffered -n 's/.*\(loc_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
locid=$(mptcp_lib_evts_get_info loc_id "$evt" $e_type)
|
||||||
remid=$(sed --unbuffered -n 's/.*\(rem_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt")
|
remid=$(mptcp_lib_evts_get_info rem_id "$evt" $e_type)
|
||||||
if [ "$family" = "$AF_INET6" ]
|
if [ "$family" = "$AF_INET6" ]
|
||||||
then
|
then
|
||||||
saddr=$(sed --unbuffered -n 's/.*\(saddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' "$evt")
|
saddr=$(mptcp_lib_evts_get_info saddr6 "$evt" $e_type)
|
||||||
daddr=$(sed --unbuffered -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' "$evt")
|
daddr=$(mptcp_lib_evts_get_info daddr6 "$evt" $e_type)
|
||||||
else
|
else
|
||||||
saddr=$(sed --unbuffered -n 's/.*\(saddr4:\)\([0-9.]*\).*$/\2/p;q' "$evt")
|
saddr=$(mptcp_lib_evts_get_info saddr4 "$evt" $e_type)
|
||||||
daddr=$(sed --unbuffered -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evt")
|
daddr=$(mptcp_lib_evts_get_info daddr4 "$evt" $e_type)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_expected "type" "token" "daddr" "dport" "family" "saddr" "locid" "remid"
|
check_expected "type" "token" "daddr" "dport" "family" "saddr" "locid" "remid"
|
||||||
|
@ -627,10 +605,10 @@ test_subflows()
|
||||||
"10.0.2.2" "$client4_port" "23" "$client_addr_id" "ns1" "ns2"
|
"10.0.2.2" "$client4_port" "23" "$client_addr_id" "ns1" "ns2"
|
||||||
|
|
||||||
# Delete the listener from the client ns, if one was created
|
# Delete the listener from the client ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
local sport
|
local sport
|
||||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts")
|
sport=$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED)
|
||||||
|
|
||||||
# DESTROY_SUBFLOW from server to client machine
|
# DESTROY_SUBFLOW from server to client machine
|
||||||
:>"$server_evts"
|
:>"$server_evts"
|
||||||
|
@ -666,9 +644,9 @@ test_subflows()
|
||||||
"$client_addr_id" "ns1" "ns2"
|
"$client_addr_id" "ns1" "ns2"
|
||||||
|
|
||||||
# Delete the listener from the client ns, if one was created
|
# Delete the listener from the client ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts")
|
sport=$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED)
|
||||||
|
|
||||||
# DESTROY_SUBFLOW6 from server to client machine
|
# DESTROY_SUBFLOW6 from server to client machine
|
||||||
:>"$server_evts"
|
:>"$server_evts"
|
||||||
|
@ -705,9 +683,9 @@ test_subflows()
|
||||||
"$client_addr_id" "ns1" "ns2"
|
"$client_addr_id" "ns1" "ns2"
|
||||||
|
|
||||||
# Delete the listener from the client ns, if one was created
|
# Delete the listener from the client ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts")
|
sport=$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED)
|
||||||
|
|
||||||
# DESTROY_SUBFLOW from server to client machine
|
# DESTROY_SUBFLOW from server to client machine
|
||||||
:>"$server_evts"
|
:>"$server_evts"
|
||||||
|
@ -743,9 +721,9 @@ test_subflows()
|
||||||
"10.0.2.1" "$app4_port" "23" "$server_addr_id" "ns2" "ns1"
|
"10.0.2.1" "$app4_port" "23" "$server_addr_id" "ns2" "ns1"
|
||||||
|
|
||||||
# Delete the listener from the server ns, if one was created
|
# Delete the listener from the server ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts")
|
sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED)
|
||||||
|
|
||||||
# DESTROY_SUBFLOW from client to server machine
|
# DESTROY_SUBFLOW from client to server machine
|
||||||
:>"$client_evts"
|
:>"$client_evts"
|
||||||
|
@ -782,9 +760,9 @@ test_subflows()
|
||||||
"$server_addr_id" "ns2" "ns1"
|
"$server_addr_id" "ns2" "ns1"
|
||||||
|
|
||||||
# Delete the listener from the server ns, if one was created
|
# Delete the listener from the server ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts")
|
sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED)
|
||||||
|
|
||||||
# DESTROY_SUBFLOW6 from client to server machine
|
# DESTROY_SUBFLOW6 from client to server machine
|
||||||
:>"$client_evts"
|
:>"$client_evts"
|
||||||
|
@ -819,9 +797,9 @@ test_subflows()
|
||||||
"10.0.2.2" "10.0.2.1" "$new4_port" "23" "$server_addr_id" "ns2" "ns1"
|
"10.0.2.2" "10.0.2.1" "$new4_port" "23" "$server_addr_id" "ns2" "ns1"
|
||||||
|
|
||||||
# Delete the listener from the server ns, if one was created
|
# Delete the listener from the server ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts")
|
sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED)
|
||||||
|
|
||||||
# DESTROY_SUBFLOW from client to server machine
|
# DESTROY_SUBFLOW from client to server machine
|
||||||
:>"$client_evts"
|
:>"$client_evts"
|
||||||
|
@ -865,9 +843,9 @@ test_subflows_v4_v6_mix()
|
||||||
"$server_addr_id" "ns2" "ns1"
|
"$server_addr_id" "ns2" "ns1"
|
||||||
|
|
||||||
# Delete the listener from the server ns, if one was created
|
# Delete the listener from the server ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts")
|
sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED)
|
||||||
|
|
||||||
# DESTROY_SUBFLOW from client to server machine
|
# DESTROY_SUBFLOW from client to server machine
|
||||||
:>"$client_evts"
|
:>"$client_evts"
|
||||||
|
@ -896,9 +874,10 @@ test_prio()
|
||||||
|
|
||||||
# Check TX
|
# Check TX
|
||||||
print_test "MP_PRIO TX"
|
print_test "MP_PRIO TX"
|
||||||
count=$(ip netns exec "$ns2" nstat -as | grep MPTcpExtMPPrioTx | awk '{print $2}')
|
count=$(mptcp_lib_get_counter "$ns2" "MPTcpExtMPPrioTx")
|
||||||
[ -z "$count" ] && count=0
|
if [ -z "$count" ]; then
|
||||||
if [ $count != 1 ]; then
|
test_skip
|
||||||
|
elif [ $count != 1 ]; then
|
||||||
test_fail "Count != 1: ${count}"
|
test_fail "Count != 1: ${count}"
|
||||||
else
|
else
|
||||||
test_pass
|
test_pass
|
||||||
|
@ -906,9 +885,10 @@ test_prio()
|
||||||
|
|
||||||
# Check RX
|
# Check RX
|
||||||
print_test "MP_PRIO RX"
|
print_test "MP_PRIO RX"
|
||||||
count=$(ip netns exec "$ns1" nstat -as | grep MPTcpExtMPPrioRx | awk '{print $2}')
|
count=$(mptcp_lib_get_counter "$ns1" "MPTcpExtMPPrioRx")
|
||||||
[ -z "$count" ] && count=0
|
if [ -z "$count" ]; then
|
||||||
if [ $count != 1 ]; then
|
test_skip
|
||||||
|
elif [ $count != 1 ]; then
|
||||||
test_fail "Count != 1: ${count}"
|
test_fail "Count != 1: ${count}"
|
||||||
else
|
else
|
||||||
test_pass
|
test_pass
|
||||||
|
@ -933,18 +913,13 @@ verify_listener_events()
|
||||||
print_test "CLOSE_LISTENER $e_saddr:$e_sport"
|
print_test "CLOSE_LISTENER $e_saddr:$e_sport"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
type=$(grep "type:$e_type," $evt |
|
type=$(mptcp_lib_evts_get_info type $evt $e_type)
|
||||||
sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q')
|
family=$(mptcp_lib_evts_get_info family $evt $e_type)
|
||||||
family=$(grep "type:$e_type," $evt |
|
sport=$(mptcp_lib_evts_get_info sport $evt $e_type)
|
||||||
sed --unbuffered -n 's/.*\(family:\)\([[:digit:]]*\).*$/\2/p;q')
|
|
||||||
sport=$(grep "type:$e_type," $evt |
|
|
||||||
sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
|
|
||||||
if [ $family ] && [ $family = $AF_INET6 ]; then
|
if [ $family ] && [ $family = $AF_INET6 ]; then
|
||||||
saddr=$(grep "type:$e_type," $evt |
|
saddr=$(mptcp_lib_evts_get_info saddr6 $evt $e_type)
|
||||||
sed --unbuffered -n 's/.*\(saddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
|
|
||||||
else
|
else
|
||||||
saddr=$(grep "type:$e_type," $evt |
|
saddr=$(mptcp_lib_evts_get_info saddr4 $evt $e_type)
|
||||||
sed --unbuffered -n 's/.*\(saddr4:\)\([0-9.]*\).*$/\2/p;q')
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_expected "type" "family" "saddr" "sport"
|
check_expected "type" "family" "saddr" "sport"
|
||||||
|
@ -982,7 +957,7 @@ test_listener()
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
|
|
||||||
# Delete the listener from the client ns, if one was created
|
# Delete the listener from the client ns, if one was created
|
||||||
kill_wait $listener_pid
|
mptcp_lib_kill_wait $listener_pid
|
||||||
|
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
verify_listener_events $client_evts $LISTENER_CLOSED $AF_INET 10.0.2.2 $client4_port
|
verify_listener_events $client_evts $LISTENER_CLOSED $AF_INET 10.0.2.2 $client4_port
|
||||||
|
|
Loading…
Reference in a new issue