mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-22 18:08:58 -05:00
Merge branch 'mptcp-refactor-inet_accept-and-mib-updates'
Mat Martineau says: ==================== mptcp: Refactor inet_accept() and MIB updates Patches 1 and 2 refactor inet_accept() to provide a new __inet_accept() that's usable with locked sockets, and then make use of that helper to simplify mptcp_stream_accept(). Patches 3 and 4 add some new MIBS related to MPTCP address advertisement and update related selftest scripts. Patch 5 modifies the selftests to ensure MIBS are only printed once when a test case fails. ==================== Link: https://lore.kernel.org/r/20230516-send-net-next-20220516-v1-0-e91822b7b6e0@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -31,6 +31,8 @@ int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr,
|
||||
int addr_len, int flags);
|
||||
int inet_accept(struct socket *sock, struct socket *newsock, int flags,
|
||||
bool kern);
|
||||
void __inet_accept(struct socket *sock, struct socket *newsock,
|
||||
struct sock *newsk);
|
||||
int inet_send_prepare(struct sock *sk);
|
||||
int inet_sendmsg(struct socket *sock, struct msghdr *msg, size_t size);
|
||||
ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
|
||||
|
||||
@@ -730,6 +730,20 @@ int inet_stream_connect(struct socket *sock, struct sockaddr *uaddr,
|
||||
}
|
||||
EXPORT_SYMBOL(inet_stream_connect);
|
||||
|
||||
void __inet_accept(struct socket *sock, struct socket *newsock, struct sock *newsk)
|
||||
{
|
||||
sock_rps_record_flow(newsk);
|
||||
WARN_ON(!((1 << newsk->sk_state) &
|
||||
(TCPF_ESTABLISHED | TCPF_SYN_RECV |
|
||||
TCPF_CLOSE_WAIT | TCPF_CLOSE)));
|
||||
|
||||
if (test_bit(SOCK_SUPPORT_ZC, &sock->flags))
|
||||
set_bit(SOCK_SUPPORT_ZC, &newsock->flags);
|
||||
sock_graft(newsk, newsock);
|
||||
|
||||
newsock->state = SS_CONNECTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* Accept a pending connection. The TCP layer now gives BSD semantics.
|
||||
*/
|
||||
@@ -743,24 +757,12 @@ int inet_accept(struct socket *sock, struct socket *newsock, int flags,
|
||||
/* IPV6_ADDRFORM can change sk->sk_prot under us. */
|
||||
sk2 = READ_ONCE(sk1->sk_prot)->accept(sk1, flags, &err, kern);
|
||||
if (!sk2)
|
||||
goto do_err;
|
||||
return err;
|
||||
|
||||
lock_sock(sk2);
|
||||
|
||||
sock_rps_record_flow(sk2);
|
||||
WARN_ON(!((1 << sk2->sk_state) &
|
||||
(TCPF_ESTABLISHED | TCPF_SYN_RECV |
|
||||
TCPF_CLOSE_WAIT | TCPF_CLOSE)));
|
||||
|
||||
if (test_bit(SOCK_SUPPORT_ZC, &sock->flags))
|
||||
set_bit(SOCK_SUPPORT_ZC, &newsock->flags);
|
||||
sock_graft(sk2, newsock);
|
||||
|
||||
newsock->state = SS_CONNECTED;
|
||||
err = 0;
|
||||
__inet_accept(sock, newsock, sk2);
|
||||
release_sock(sk2);
|
||||
do_err:
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(inet_accept);
|
||||
|
||||
|
||||
@@ -34,7 +34,11 @@ static const struct snmp_mib mptcp_snmp_list[] = {
|
||||
SNMP_MIB_ITEM("NoDSSInWindow", MPTCP_MIB_NODSSWINDOW),
|
||||
SNMP_MIB_ITEM("DuplicateData", MPTCP_MIB_DUPDATA),
|
||||
SNMP_MIB_ITEM("AddAddr", MPTCP_MIB_ADDADDR),
|
||||
SNMP_MIB_ITEM("AddAddrTx", MPTCP_MIB_ADDADDRTX),
|
||||
SNMP_MIB_ITEM("AddAddrTxDrop", MPTCP_MIB_ADDADDRTXDROP),
|
||||
SNMP_MIB_ITEM("EchoAdd", MPTCP_MIB_ECHOADD),
|
||||
SNMP_MIB_ITEM("EchoAddTx", MPTCP_MIB_ECHOADDTX),
|
||||
SNMP_MIB_ITEM("EchoAddTxDrop", MPTCP_MIB_ECHOADDTXDROP),
|
||||
SNMP_MIB_ITEM("PortAdd", MPTCP_MIB_PORTADD),
|
||||
SNMP_MIB_ITEM("AddAddrDrop", MPTCP_MIB_ADDADDRDROP),
|
||||
SNMP_MIB_ITEM("MPJoinPortSynRx", MPTCP_MIB_JOINPORTSYNRX),
|
||||
@@ -44,6 +48,8 @@ static const struct snmp_mib mptcp_snmp_list[] = {
|
||||
SNMP_MIB_ITEM("MismatchPortAckRx", MPTCP_MIB_MISMATCHPORTACKRX),
|
||||
SNMP_MIB_ITEM("RmAddr", MPTCP_MIB_RMADDR),
|
||||
SNMP_MIB_ITEM("RmAddrDrop", MPTCP_MIB_RMADDRDROP),
|
||||
SNMP_MIB_ITEM("RmAddrTx", MPTCP_MIB_RMADDRTX),
|
||||
SNMP_MIB_ITEM("RmAddrTxDrop", MPTCP_MIB_RMADDRTXDROP),
|
||||
SNMP_MIB_ITEM("RmSubflow", MPTCP_MIB_RMSUBFLOW),
|
||||
SNMP_MIB_ITEM("MPPrioTx", MPTCP_MIB_MPPRIOTX),
|
||||
SNMP_MIB_ITEM("MPPrioRx", MPTCP_MIB_MPPRIORX),
|
||||
|
||||
@@ -27,7 +27,15 @@ enum linux_mptcp_mib_field {
|
||||
MPTCP_MIB_NODSSWINDOW, /* Segments not in MPTCP windows */
|
||||
MPTCP_MIB_DUPDATA, /* Segments discarded due to duplicate DSS */
|
||||
MPTCP_MIB_ADDADDR, /* Received ADD_ADDR with echo-flag=0 */
|
||||
MPTCP_MIB_ADDADDRTX, /* Sent ADD_ADDR with echo-flag=0 */
|
||||
MPTCP_MIB_ADDADDRTXDROP, /* ADD_ADDR with echo-flag=0 not send due to
|
||||
* resource exhaustion
|
||||
*/
|
||||
MPTCP_MIB_ECHOADD, /* Received ADD_ADDR with echo-flag=1 */
|
||||
MPTCP_MIB_ECHOADDTX, /* Send ADD_ADDR with echo-flag=1 */
|
||||
MPTCP_MIB_ECHOADDTXDROP, /* ADD_ADDR with echo-flag=1 not send due
|
||||
* to resource exhaustion
|
||||
*/
|
||||
MPTCP_MIB_PORTADD, /* Received ADD_ADDR with a port-number */
|
||||
MPTCP_MIB_ADDADDRDROP, /* Dropped incoming ADD_ADDR */
|
||||
MPTCP_MIB_JOINPORTSYNRX, /* Received a SYN MP_JOIN with a different port-number */
|
||||
@@ -37,6 +45,8 @@ enum linux_mptcp_mib_field {
|
||||
MPTCP_MIB_MISMATCHPORTACKRX, /* Received an ACK MP_JOIN with a mismatched port-number */
|
||||
MPTCP_MIB_RMADDR, /* Received RM_ADDR */
|
||||
MPTCP_MIB_RMADDRDROP, /* Dropped incoming RM_ADDR */
|
||||
MPTCP_MIB_RMADDRTX, /* Sent RM_ADDR */
|
||||
MPTCP_MIB_RMADDRTXDROP, /* RM_ADDR not sent due to resource exhaustion */
|
||||
MPTCP_MIB_RMSUBFLOW, /* Remove a subflow */
|
||||
MPTCP_MIB_MPPRIOTX, /* Transmit a MP_PRIO */
|
||||
MPTCP_MIB_MPPRIORX, /* Received a MP_PRIO */
|
||||
@@ -63,6 +73,14 @@ struct mptcp_mib {
|
||||
unsigned long mibs[LINUX_MIB_MPTCP_MAX];
|
||||
};
|
||||
|
||||
static inline void MPTCP_ADD_STATS(struct net *net,
|
||||
enum linux_mptcp_mib_field field,
|
||||
int val)
|
||||
{
|
||||
if (likely(net->mib.mptcp_statistics))
|
||||
SNMP_ADD_STATS(net->mib.mptcp_statistics, field, val);
|
||||
}
|
||||
|
||||
static inline void MPTCP_INC_STATS(struct net *net,
|
||||
enum linux_mptcp_mib_field field)
|
||||
{
|
||||
|
||||
@@ -687,9 +687,12 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *
|
||||
}
|
||||
opts->suboptions |= OPTION_MPTCP_ADD_ADDR;
|
||||
if (!echo) {
|
||||
MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDRTX);
|
||||
opts->ahmac = add_addr_generate_hmac(msk->local_key,
|
||||
msk->remote_key,
|
||||
&opts->addr);
|
||||
} else {
|
||||
MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADDTX);
|
||||
}
|
||||
pr_debug("addr_id=%d, ahmac=%llu, echo=%d, port=%d",
|
||||
opts->addr.id, opts->ahmac, echo, ntohs(opts->addr.port));
|
||||
@@ -723,7 +726,7 @@ static bool mptcp_established_options_rm_addr(struct sock *sk,
|
||||
|
||||
for (i = 0; i < opts->rm_list.nr; i++)
|
||||
pr_debug("rm_list_ids[%d]=%d", i, opts->rm_list.ids[i]);
|
||||
|
||||
MPTCP_ADD_STATS(sock_net(sk), MPTCP_MIB_RMADDRTX, opts->rm_list.nr);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,8 @@ int mptcp_pm_announce_addr(struct mptcp_sock *msk,
|
||||
|
||||
if (add_addr &
|
||||
(echo ? BIT(MPTCP_ADD_ADDR_ECHO) : BIT(MPTCP_ADD_ADDR_SIGNAL))) {
|
||||
pr_warn("addr_signal error, add_addr=%d, echo=%d", add_addr, echo);
|
||||
MPTCP_INC_STATS(sock_net((struct sock *)msk),
|
||||
echo ? MPTCP_MIB_ECHOADDTXDROP : MPTCP_MIB_ADDADDRTXDROP);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -48,7 +49,8 @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_
|
||||
pr_debug("msk=%p, rm_list_nr=%d", msk, rm_list->nr);
|
||||
|
||||
if (rm_addr) {
|
||||
pr_warn("addr_signal error, rm_addr=%d", rm_addr);
|
||||
MPTCP_ADD_STATS(sock_net((struct sock *)msk),
|
||||
MPTCP_MIB_RMADDRTXDROP, rm_list->nr);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -3747,6 +3747,7 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock,
|
||||
{
|
||||
struct mptcp_sock *msk = mptcp_sk(sock->sk);
|
||||
struct socket *ssock;
|
||||
struct sock *newsk;
|
||||
int err;
|
||||
|
||||
pr_debug("msk=%p", msk);
|
||||
@@ -3758,17 +3759,20 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock,
|
||||
if (!ssock)
|
||||
return -EINVAL;
|
||||
|
||||
err = ssock->ops->accept(sock, newsock, flags, kern);
|
||||
if (err == 0 && !mptcp_is_tcpsk(newsock->sk)) {
|
||||
struct mptcp_sock *msk = mptcp_sk(newsock->sk);
|
||||
newsk = mptcp_accept(sock->sk, flags, &err, kern);
|
||||
if (!newsk)
|
||||
return err;
|
||||
|
||||
lock_sock(newsk);
|
||||
|
||||
__inet_accept(sock, newsock, newsk);
|
||||
if (!mptcp_is_tcpsk(newsock->sk)) {
|
||||
struct mptcp_sock *msk = mptcp_sk(newsk);
|
||||
struct mptcp_subflow_context *subflow;
|
||||
struct sock *newsk = newsock->sk;
|
||||
|
||||
set_bit(SOCK_CUSTOM_SOCKOPT, &newsock->flags);
|
||||
msk->in_accept_queue = 0;
|
||||
|
||||
lock_sock(newsk);
|
||||
|
||||
/* set ssk->sk_socket of accept()ed flows to mptcp socket.
|
||||
* This is needed so NOSPACE flag can be set from tcp stack.
|
||||
*/
|
||||
@@ -3789,11 +3793,10 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock,
|
||||
if (unlikely(list_empty(&msk->conn_list)))
|
||||
inet_sk_state_store(newsk, TCP_CLOSE);
|
||||
}
|
||||
|
||||
release_sock(newsk);
|
||||
}
|
||||
release_sock(newsk);
|
||||
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static __poll_t mptcp_check_writeable(struct mptcp_sock *msk)
|
||||
|
||||
@@ -34,6 +34,7 @@ evts_ns1=""
|
||||
evts_ns2=""
|
||||
evts_ns1_pid=0
|
||||
evts_ns2_pid=0
|
||||
stats_dumped=0
|
||||
|
||||
declare -A all_tests
|
||||
declare -a only_tests_ids
|
||||
@@ -87,6 +88,7 @@ init_partial()
|
||||
fi
|
||||
done
|
||||
|
||||
stats_dumped=0
|
||||
check_invert=0
|
||||
validate_checksum=$checksum
|
||||
FAILING_LINKS=""
|
||||
@@ -347,6 +349,9 @@ fail_test()
|
||||
{
|
||||
ret=1
|
||||
failed_tests[${TEST_COUNT}]="${TEST_NAME}"
|
||||
|
||||
[ "${stats_dumped}" = 0 ] && dump_stats
|
||||
stats_dumped=1
|
||||
}
|
||||
|
||||
get_failed_tests_ids()
|
||||
@@ -1120,7 +1125,6 @@ chk_csum_nr()
|
||||
local csum_ns1=${1:-0}
|
||||
local csum_ns2=${2:-0}
|
||||
local count
|
||||
local dump_stats
|
||||
local extra_msg=""
|
||||
local allow_multi_errors_ns1=0
|
||||
local allow_multi_errors_ns2=0
|
||||
@@ -1144,7 +1148,6 @@ chk_csum_nr()
|
||||
{ [ "$count" -lt $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 1 ]; }; then
|
||||
echo "[fail] got $count data checksum error[s] expected $csum_ns1"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1158,11 +1161,9 @@ chk_csum_nr()
|
||||
{ [ "$count" -lt $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 1 ]; }; then
|
||||
echo "[fail] got $count data checksum error[s] expected $csum_ns2"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
|
||||
echo "$extra_msg"
|
||||
}
|
||||
@@ -1173,7 +1174,6 @@ chk_fail_nr()
|
||||
local fail_rx=$2
|
||||
local ns_invert=${3:-""}
|
||||
local count
|
||||
local dump_stats
|
||||
local ns_tx=$ns1
|
||||
local ns_rx=$ns2
|
||||
local extra_msg=""
|
||||
@@ -1205,7 +1205,6 @@ chk_fail_nr()
|
||||
{ [ "$count" -gt "$fail_tx" ] && [ $allow_tx_lost -eq 1 ]; }; then
|
||||
echo "[fail] got $count MP_FAIL[s] TX expected $fail_tx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1220,13 +1219,10 @@ chk_fail_nr()
|
||||
{ [ "$count" -gt "$fail_rx" ] && [ $allow_rx_lost -eq 1 ]; }; then
|
||||
echo "[fail] got $count MP_FAIL[s] RX expected $fail_rx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
|
||||
echo "$extra_msg"
|
||||
}
|
||||
|
||||
@@ -1236,7 +1232,6 @@ chk_fclose_nr()
|
||||
local fclose_rx=$2
|
||||
local ns_invert=$3
|
||||
local count
|
||||
local dump_stats
|
||||
local ns_tx=$ns2
|
||||
local ns_rx=$ns1
|
||||
local extra_msg=" "
|
||||
@@ -1254,7 +1249,6 @@ chk_fclose_nr()
|
||||
if [ "$count" != "$fclose_tx" ]; then
|
||||
echo "[fail] got $count MP_FASTCLOSE[s] TX expected $fclose_tx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1266,13 +1260,10 @@ chk_fclose_nr()
|
||||
if [ "$count" != "$fclose_rx" ]; then
|
||||
echo "[fail] got $count MP_FASTCLOSE[s] RX expected $fclose_rx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
|
||||
echo "$extra_msg"
|
||||
}
|
||||
|
||||
@@ -1282,7 +1273,6 @@ chk_rst_nr()
|
||||
local rst_rx=$2
|
||||
local ns_invert=${3:-""}
|
||||
local count
|
||||
local dump_stats
|
||||
local ns_tx=$ns1
|
||||
local ns_rx=$ns2
|
||||
local extra_msg=""
|
||||
@@ -1299,7 +1289,6 @@ chk_rst_nr()
|
||||
if [ $count -lt $rst_tx ]; then
|
||||
echo "[fail] got $count MP_RST[s] TX expected $rst_tx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1310,13 +1299,10 @@ chk_rst_nr()
|
||||
if [ "$count" -lt "$rst_rx" ]; then
|
||||
echo "[fail] got $count MP_RST[s] RX expected $rst_rx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
|
||||
echo "$extra_msg"
|
||||
}
|
||||
|
||||
@@ -1325,7 +1311,6 @@ chk_infi_nr()
|
||||
local infi_tx=$1
|
||||
local infi_rx=$2
|
||||
local count
|
||||
local dump_stats
|
||||
|
||||
printf "%-${nr_blank}s %s" " " "itx"
|
||||
count=$(ip netns exec $ns2 nstat -as | grep InfiniteMapTx | awk '{print $2}')
|
||||
@@ -1333,7 +1318,6 @@ chk_infi_nr()
|
||||
if [ "$count" != "$infi_tx" ]; then
|
||||
echo "[fail] got $count infinite map[s] TX expected $infi_tx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1344,12 +1328,9 @@ chk_infi_nr()
|
||||
if [ "$count" != "$infi_rx" ]; then
|
||||
echo "[fail] got $count infinite map[s] RX expected $infi_rx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo "[ ok ]"
|
||||
fi
|
||||
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
}
|
||||
|
||||
chk_join_nr()
|
||||
@@ -1364,7 +1345,6 @@ chk_join_nr()
|
||||
local infi_nr=${8:-0}
|
||||
local corrupted_pkts=${9:-0}
|
||||
local count
|
||||
local dump_stats
|
||||
local with_cookie
|
||||
local title="${TEST_NAME}"
|
||||
|
||||
@@ -1378,7 +1358,6 @@ chk_join_nr()
|
||||
if [ "$count" != "$syn_nr" ]; then
|
||||
echo "[fail] got $count JOIN[s] syn expected $syn_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1396,7 +1375,6 @@ chk_join_nr()
|
||||
else
|
||||
echo "[fail] got $count JOIN[s] synack expected $syn_ack_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
fi
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
@@ -1408,11 +1386,9 @@ chk_join_nr()
|
||||
if [ "$count" != "$ack_nr" ]; then
|
||||
echo "[fail] got $count JOIN[s] ack expected $ack_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo "[ ok ]"
|
||||
fi
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
if [ $validate_checksum -eq 1 ]; then
|
||||
chk_csum_nr $csum_ns1 $csum_ns2
|
||||
chk_fail_nr $fail_nr $fail_nr
|
||||
@@ -1472,7 +1448,6 @@ chk_add_nr()
|
||||
local mis_syn_nr=${7:-0}
|
||||
local mis_ack_nr=${8:-0}
|
||||
local count
|
||||
local dump_stats
|
||||
local timeout
|
||||
|
||||
timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
|
||||
@@ -1486,18 +1461,16 @@ chk_add_nr()
|
||||
if [ "$count" != "$add_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_nr" ]; }; then
|
||||
echo "[fail] got $count ADD_ADDR[s] expected $add_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
|
||||
echo -n " - echo "
|
||||
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtEchoAdd | awk '{print $2}')
|
||||
count=$(ip netns exec $ns1 nstat -as MPTcpExtEchoAdd | grep MPTcpExtEchoAdd | awk '{print $2}')
|
||||
[ -z "$count" ] && count=0
|
||||
if [ "$count" != "$echo_nr" ]; then
|
||||
echo "[fail] got $count ADD_ADDR echo[s] expected $echo_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1509,7 +1482,6 @@ chk_add_nr()
|
||||
if [ "$count" != "$port_nr" ]; then
|
||||
echo "[fail] got $count ADD_ADDR[s] with a port-number expected $port_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo "[ ok ]"
|
||||
fi
|
||||
@@ -1522,7 +1494,6 @@ chk_add_nr()
|
||||
echo "[fail] got $count JOIN[s] syn with a different \
|
||||
port-number expected $syn_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1535,7 +1506,6 @@ chk_add_nr()
|
||||
echo "[fail] got $count JOIN[s] synack with a different \
|
||||
port-number expected $syn_ack_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1548,7 +1518,6 @@ chk_add_nr()
|
||||
echo "[fail] got $count JOIN[s] ack with a different \
|
||||
port-number expected $ack_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo "[ ok ]"
|
||||
fi
|
||||
@@ -1561,7 +1530,6 @@ chk_add_nr()
|
||||
echo "[fail] got $count JOIN[s] syn with a mismatched \
|
||||
port-number expected $mis_syn_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1574,15 +1542,45 @@ chk_add_nr()
|
||||
echo "[fail] got $count JOIN[s] ack with a mismatched \
|
||||
port-number expected $mis_ack_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo "[ ok ]"
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
chk_add_tx_nr()
|
||||
{
|
||||
local add_tx_nr=$1
|
||||
local echo_tx_nr=$2
|
||||
local timeout
|
||||
local count
|
||||
|
||||
timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
|
||||
|
||||
printf "%-${nr_blank}s %s" " " "add TX"
|
||||
count=$(ip netns exec $ns1 nstat -as MPTcpExtAddAddrTx | grep MPTcpExtAddAddrTx | awk '{print $2}')
|
||||
[ -z "$count" ] && count=0
|
||||
|
||||
# if the test configured a short timeout tolerate greater then expected
|
||||
# add addrs options, due to retransmissions
|
||||
if [ "$count" != "$add_tx_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_tx_nr" ]; }; then
|
||||
echo "[fail] got $count ADD_ADDR[s] TX, expected $add_tx_nr"
|
||||
fail_test
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
|
||||
echo -n " - echo TX "
|
||||
count=$(ip netns exec $ns2 nstat -as MPTcpExtEchoAddTx | grep MPTcpExtEchoAddTx | awk '{print $2}')
|
||||
[ -z "$count" ] && count=0
|
||||
if [ "$count" != "$echo_tx_nr" ]; then
|
||||
echo "[fail] got $count ADD_ADDR echo[s] TX, expected $echo_tx_nr"
|
||||
fail_test
|
||||
else
|
||||
echo "[ ok ]"
|
||||
fi
|
||||
}
|
||||
|
||||
chk_rm_nr()
|
||||
@@ -1592,7 +1590,6 @@ chk_rm_nr()
|
||||
local invert
|
||||
local simult
|
||||
local count
|
||||
local dump_stats
|
||||
local addr_ns=$ns1
|
||||
local subflow_ns=$ns2
|
||||
local extra_msg=""
|
||||
@@ -1614,12 +1611,11 @@ chk_rm_nr()
|
||||
fi
|
||||
|
||||
printf "%-${nr_blank}s %s" " " "rm "
|
||||
count=$(ip netns exec $addr_ns nstat -as | grep MPTcpExtRmAddr | awk '{print $2}')
|
||||
count=$(ip netns exec $addr_ns nstat -as MPTcpExtRmAddr | grep MPTcpExtRmAddr | awk '{print $2}')
|
||||
[ -z "$count" ] && count=0
|
||||
if [ "$count" != "$rm_addr_nr" ]; then
|
||||
echo "[fail] got $count RM_ADDR[s] expected $rm_addr_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1643,19 +1639,32 @@ chk_rm_nr()
|
||||
else
|
||||
echo "[fail] got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr:$((rm_subflow_nr*2))]"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
fi
|
||||
return
|
||||
fi
|
||||
if [ "$count" != "$rm_subflow_nr" ]; then
|
||||
echo "[fail] got $count RM_SUBFLOW[s] expected $rm_subflow_nr"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
echo "$extra_msg"
|
||||
}
|
||||
|
||||
chk_rm_tx_nr()
|
||||
{
|
||||
local rm_addr_tx_nr=$1
|
||||
|
||||
printf "%-${nr_blank}s %s" " " "rm TX "
|
||||
count=$(ip netns exec $ns2 nstat -as MPTcpExtRmAddrTx | grep MPTcpExtRmAddrTx | awk '{print $2}')
|
||||
[ -z "$count" ] && count=0
|
||||
if [ "$count" != "$rm_addr_tx_nr" ]; then
|
||||
echo "[fail] got $count RM_ADDR[s] expected $rm_addr_tx_nr"
|
||||
fail_test
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
|
||||
echo "$extra_msg"
|
||||
}
|
||||
@@ -1665,7 +1674,6 @@ chk_prio_nr()
|
||||
local mp_prio_nr_tx=$1
|
||||
local mp_prio_nr_rx=$2
|
||||
local count
|
||||
local dump_stats
|
||||
|
||||
printf "%-${nr_blank}s %s" " " "ptx"
|
||||
count=$(ip netns exec $ns1 nstat -as | grep MPTcpExtMPPrioTx | awk '{print $2}')
|
||||
@@ -1673,7 +1681,6 @@ chk_prio_nr()
|
||||
if [ "$count" != "$mp_prio_nr_tx" ]; then
|
||||
echo "[fail] got $count MP_PRIO[s] TX expected $mp_prio_nr_tx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo -n "[ ok ]"
|
||||
fi
|
||||
@@ -1684,12 +1691,9 @@ chk_prio_nr()
|
||||
if [ "$count" != "$mp_prio_nr_rx" ]; then
|
||||
echo "[fail] got $count MP_PRIO[s] RX expected $mp_prio_nr_rx"
|
||||
fail_test
|
||||
dump_stats=1
|
||||
else
|
||||
echo "[ ok ]"
|
||||
fi
|
||||
|
||||
[ "${dump_stats}" = 1 ] && dump_stats
|
||||
}
|
||||
|
||||
chk_subflow_nr()
|
||||
@@ -1721,7 +1725,6 @@ chk_subflow_nr()
|
||||
ss -N $ns1 -tOni
|
||||
ss -N $ns1 -tOni | grep token
|
||||
ip -n $ns1 mptcp endpoint
|
||||
dump_stats
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -1761,7 +1764,6 @@ chk_mptcp_info()
|
||||
if [ "$dump_stats" = 1 ]; then
|
||||
ss -N $ns1 -inmHM
|
||||
ss -N $ns2 -inmHM
|
||||
dump_stats
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -1939,6 +1941,7 @@ signal_address_tests()
|
||||
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
|
||||
run_tests $ns1 $ns2 10.0.1.1
|
||||
chk_join_nr 0 0 0
|
||||
chk_add_tx_nr 1 1
|
||||
chk_add_nr 1 1
|
||||
fi
|
||||
|
||||
@@ -2120,6 +2123,7 @@ add_addr_timeout_tests()
|
||||
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
|
||||
run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
|
||||
chk_join_nr 1 1 1
|
||||
chk_add_tx_nr 4 4
|
||||
chk_add_nr 4 0
|
||||
fi
|
||||
|
||||
@@ -2165,6 +2169,7 @@ remove_tests()
|
||||
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
|
||||
run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow
|
||||
chk_join_nr 1 1 1
|
||||
chk_rm_tx_nr 1
|
||||
chk_rm_nr 1 1
|
||||
fi
|
||||
|
||||
@@ -2263,6 +2268,7 @@ remove_tests()
|
||||
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
|
||||
run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
|
||||
chk_join_nr 3 3 3
|
||||
chk_rm_tx_nr 0
|
||||
chk_rm_nr 0 3 simult
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user