diff options
author | Paolo Abeni <pabeni@redhat.com> | 2021-08-14 00:15:42 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-08-14 12:37:25 +0200 |
commit | 71b7dec27f340c4ab90ef39ae096d8bb2e1c851c (patch) | |
tree | e0261e6240435e71bdae81139820adf14089bc3b /net/mptcp/protocol.h | |
parent | mptcp: more accurate timeout (diff) | |
download | linux-71b7dec27f340c4ab90ef39ae096d8bb2e1c851c.tar.xz linux-71b7dec27f340c4ab90ef39ae096d8bb2e1c851c.zip |
mptcp: less aggressive retransmission strategy
The current mptcp re-inject strategy is very aggressive,
we have mptcp-level retransmissions even on single subflow
connection, if the link in-use is lossy.
Let's be a little more conservative: we do retransmit
only if at least a subflow has write and rtx queue empty.
Additionally use the backup subflows only if the active
subflows are stale - no progresses in at least an rtx period
and ignore stale subflows for rtx timeout update
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/207
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to '')
-rw-r--r-- | net/mptcp/protocol.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 0f0c026c5f8b..6a3cbdb597e2 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -439,11 +439,13 @@ struct mptcp_subflow_context { u8 reset_seen:1; u8 reset_transient:1; u8 reset_reason:4; + u8 stale_count; long delegated_status; struct list_head delegated_node; /* link into delegated_action, protected by local BH */ - u32 setsockopt_seq; + u32 setsockopt_seq; + u32 stale_rcv_tstamp; struct sock *tcp_sock; /* tcp sk backpointer */ struct sock *conn; /* parent mptcp_sock */ @@ -690,6 +692,7 @@ void mptcp_crypto_hmac_sha(u64 key1, u64 key2, u8 *msg, int len, void *hmac); void __init mptcp_pm_init(void); void mptcp_pm_data_init(struct mptcp_sock *msk); +void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk); void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ssk, int server_side); void mptcp_pm_fully_established(struct mptcp_sock *msk, const struct sock *ssk, gfp_t gfp); bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk); |