* [PATCH mptcp-next v4 0/2] send MP_FAIL with MP_RST and others
@ 2021-12-02 4:25 Geliang Tang
2021-12-02 4:25 ` [PATCH mptcp-next v4 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
2021-12-02 4:25 ` [PATCH mptcp-next v4 2/2] mptcp: print out reset infos of MP_RST Geliang Tang
0 siblings, 2 replies; 4+ messages in thread
From: Geliang Tang @ 2021-12-02 4:25 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v4:
- add Matt's patch, fix the missing ";" in it, dropped two empty lines
and added my Tested-by tag.
v3:
- update patch 1 as Matt suggested.
- do more cleanups in patch 1.
v2:
- rename patch 1 as a squash-to patch.
- print out reset_transient in patch 2 too. Please keep patch 2 as a
standalone patch, not a squash-to patch.
Two small patches about sending MP_FAIL with MP_RST.
Geliang Tang (1):
mptcp: print out reset infos of MP_RST
Matthieu Baerts (1):
Squash to "mptcp: implement fastclose xmit path"
net/mptcp/options.c | 62 +++++++++++++++++++++++++++------------------
1 file changed, 37 insertions(+), 25 deletions(-)
--
2.31.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH mptcp-next v4 1/2] Squash to "mptcp: implement fastclose xmit path"
2021-12-02 4:25 [PATCH mptcp-next v4 0/2] send MP_FAIL with MP_RST and others Geliang Tang
@ 2021-12-02 4:25 ` Geliang Tang
2021-12-02 4:47 ` Geliang Tang
2021-12-02 4:25 ` [PATCH mptcp-next v4 2/2] mptcp: print out reset infos of MP_RST Geliang Tang
1 sibling, 1 reply; 4+ messages in thread
From: Geliang Tang @ 2021-12-02 4:25 UTC (permalink / raw)
To: mptcp; +Cc: Matthieu Baerts, Paolo Abeni, Geliang Tang
From: Matthieu Baerts <matthieu.baerts@tessares.net>
This is linked to Geliang's patch with the same title.
If I understand the RFC properly, we can use MP_RST with an MP_FASTCLOSE
and an MP_FAIL (or none of them) but we cannot use MP_FASTCLOSE and
MP_FAIL together.
This patch implements this logic in both mptcp_established_options() and
mptcp_write_options(). Before this patch, the first function was not
allowing any of these 3 options to be used at the same time while the
second one was allowing MP_FAIL to be used with either MP_FASTCLOSE or
MP_RST.
Small note: I tried to keep Paolo's idea of reducing conditions for
"normal" options by moving MP_RST at the end and allow to jump there
from MP_FAIL and MP_FASTCLOSE but I'm not sure it makes it easy to read
and really improves perfs. We can also move MP_RST check at the
beginning.
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Geliang Tang <geliang.tang@suse.com>
Tested-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
net/mptcp/options.c | 60 ++++++++++++++++++++++++++-------------------
1 file changed, 35 insertions(+), 25 deletions(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 8a1020e4285c..078187456467 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -829,8 +829,12 @@ bool mptcp_established_options(struct sock *sk, struct sk_buff *skb,
if (unlikely(skb && TCP_SKB_CB(skb)->tcp_flags & TCPHDR_RST)) {
if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) ||
- mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts) ||
- mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) {
+ mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) {
+ *size += opt_size;
+ remaining -= opt_size;
+ }
+ /* MP_RST can be used with MP_FASTCLOSE and MP_FAIL if there is room */
+ if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) {
*size += opt_size;
remaining -= opt_size;
}
@@ -1257,21 +1261,7 @@ static u16 mptcp_make_csum(const struct mptcp_ext *mpext)
void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
struct mptcp_out_options *opts)
{
- if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
- const struct sock *ssk = (const struct sock *)tp;
- struct mptcp_subflow_context *subflow;
-
- subflow = mptcp_subflow_ctx(ssk);
- subflow->send_mp_fail = 0;
-
- *ptr++ = mptcp_option(MPTCPOPT_MP_FAIL,
- TCPOLEN_MPTCP_FAIL,
- 0, 0);
- put_unaligned_be64(opts->fail_seq, ptr);
- ptr += 2;
- }
-
- /* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive,
+ /* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and FAIL are mutually exclusive,
* see mptcp_established_options*()
*/
if (likely(OPTION_MPTCP_DSS & opts->suboptions)) {
@@ -1458,19 +1448,39 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
ptr += 1;
}
}
- } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) {
- /* RST is mutually exclusive with everything else */
- *ptr++ = mptcp_option(MPTCPOPT_RST,
- TCPOLEN_MPTCP_RST,
- opts->reset_transient,
- opts->reset_reason);
- return;
} else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) {
- /* FASTCLOSE is mutually exclusive with everything else */
+ /* FASTCLOSE is mutually exclusive with others except RST */
*ptr++ = mptcp_option(MPTCPOPT_MP_FASTCLOSE,
TCPOLEN_MPTCP_FASTCLOSE,
0, 0);
put_unaligned_be64(opts->rcvr_key, ptr);
+
+ if (OPTION_MPTCP_RST & opts->suboptions)
+ goto mp_rst;
+ return;
+ } else if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
+ /* MP_FAIL is mutually exclusive with others except RST */
+ const struct sock *ssk = (const struct sock *)tp;
+ struct mptcp_subflow_context *subflow;
+
+ subflow = mptcp_subflow_ctx(ssk);
+ subflow->send_mp_fail = 0;
+
+ *ptr++ = mptcp_option(MPTCPOPT_MP_FAIL,
+ TCPOLEN_MPTCP_FAIL,
+ 0, 0);
+ put_unaligned_be64(opts->fail_seq, ptr);
+ ptr += 2;
+
+ if (OPTION_MPTCP_RST & opts->suboptions)
+ goto mp_rst;
+ return;
+ } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) {
+mp_rst:
+ *ptr++ = mptcp_option(MPTCPOPT_RST,
+ TCPOLEN_MPTCP_RST,
+ opts->reset_transient,
+ opts->reset_reason);
return;
}
--
2.31.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH mptcp-next v4 2/2] mptcp: print out reset infos of MP_RST
2021-12-02 4:25 [PATCH mptcp-next v4 0/2] send MP_FAIL with MP_RST and others Geliang Tang
2021-12-02 4:25 ` [PATCH mptcp-next v4 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
@ 2021-12-02 4:25 ` Geliang Tang
1 sibling, 0 replies; 4+ messages in thread
From: Geliang Tang @ 2021-12-02 4:25 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch printed out the reset infos, reset_transient and reset_reason,
of MP_RST in mptcp_parse_option() to show that MP_RST is received.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/options.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 078187456467..efb828a4edaa 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -336,6 +336,8 @@ static void mptcp_parse_option(const struct sk_buff *skb,
flags = *ptr++;
mp_opt->reset_transient = flags & MPTCP_RST_TRANSIENT;
mp_opt->reset_reason = *ptr;
+ pr_debug("MP_RST: transient=%u reason=%u",
+ mp_opt->reset_transient, mp_opt->reset_reason);
break;
case MPTCPOPT_MP_FAIL:
--
2.31.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH mptcp-next v4 1/2] Squash to "mptcp: implement fastclose xmit path"
2021-12-02 4:25 ` [PATCH mptcp-next v4 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
@ 2021-12-02 4:47 ` Geliang Tang
0 siblings, 0 replies; 4+ messages in thread
From: Geliang Tang @ 2021-12-02 4:47 UTC (permalink / raw)
To: Geliang Tang; +Cc: MPTCP Upstream, Matthieu Baerts, Paolo Abeni
Sorry, this patch still needs to be improved.
I just notice that MP_FAIL will be sent with DSS too.
In the multiple subflow case, MP_FAIL will be sent with MP_RST,
But in the single subflow case, MP_FAIL will be sent with DSS.
I'll sent a new version of this squash-to patch later.
Thanks,
-Geliang
Geliang Tang <geliang.tang@suse.com> 于2021年12月2日周四 12:26写道:
>
> From: Matthieu Baerts <matthieu.baerts@tessares.net>
>
> This is linked to Geliang's patch with the same title.
>
> If I understand the RFC properly, we can use MP_RST with an MP_FASTCLOSE
> and an MP_FAIL (or none of them) but we cannot use MP_FASTCLOSE and
> MP_FAIL together.
>
> This patch implements this logic in both mptcp_established_options() and
> mptcp_write_options(). Before this patch, the first function was not
> allowing any of these 3 options to be used at the same time while the
> second one was allowing MP_FAIL to be used with either MP_FASTCLOSE or
> MP_RST.
>
> Small note: I tried to keep Paolo's idea of reducing conditions for
> "normal" options by moving MP_RST at the end and allow to jump there
> from MP_FAIL and MP_FASTCLOSE but I'm not sure it makes it easy to read
> and really improves perfs. We can also move MP_RST check at the
> beginning.
>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Geliang Tang <geliang.tang@suse.com>
> Tested-by: Geliang Tang <geliang.tang@suse.com>
> Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
> ---
> net/mptcp/options.c | 60 ++++++++++++++++++++++++++-------------------
> 1 file changed, 35 insertions(+), 25 deletions(-)
>
> diff --git a/net/mptcp/options.c b/net/mptcp/options.c
> index 8a1020e4285c..078187456467 100644
> --- a/net/mptcp/options.c
> +++ b/net/mptcp/options.c
> @@ -829,8 +829,12 @@ bool mptcp_established_options(struct sock *sk, struct sk_buff *skb,
>
> if (unlikely(skb && TCP_SKB_CB(skb)->tcp_flags & TCPHDR_RST)) {
> if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) ||
> - mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts) ||
> - mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) {
> + mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) {
> + *size += opt_size;
> + remaining -= opt_size;
> + }
> + /* MP_RST can be used with MP_FASTCLOSE and MP_FAIL if there is room */
> + if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) {
> *size += opt_size;
> remaining -= opt_size;
> }
> @@ -1257,21 +1261,7 @@ static u16 mptcp_make_csum(const struct mptcp_ext *mpext)
> void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
> struct mptcp_out_options *opts)
> {
> - if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
> - const struct sock *ssk = (const struct sock *)tp;
> - struct mptcp_subflow_context *subflow;
> -
> - subflow = mptcp_subflow_ctx(ssk);
> - subflow->send_mp_fail = 0;
> -
> - *ptr++ = mptcp_option(MPTCPOPT_MP_FAIL,
> - TCPOLEN_MPTCP_FAIL,
> - 0, 0);
> - put_unaligned_be64(opts->fail_seq, ptr);
> - ptr += 2;
> - }
> -
> - /* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive,
> + /* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and FAIL are mutually exclusive,
> * see mptcp_established_options*()
> */
> if (likely(OPTION_MPTCP_DSS & opts->suboptions)) {
> @@ -1458,19 +1448,39 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
> ptr += 1;
> }
> }
> - } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) {
> - /* RST is mutually exclusive with everything else */
> - *ptr++ = mptcp_option(MPTCPOPT_RST,
> - TCPOLEN_MPTCP_RST,
> - opts->reset_transient,
> - opts->reset_reason);
> - return;
> } else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) {
> - /* FASTCLOSE is mutually exclusive with everything else */
> + /* FASTCLOSE is mutually exclusive with others except RST */
> *ptr++ = mptcp_option(MPTCPOPT_MP_FASTCLOSE,
> TCPOLEN_MPTCP_FASTCLOSE,
> 0, 0);
> put_unaligned_be64(opts->rcvr_key, ptr);
> +
> + if (OPTION_MPTCP_RST & opts->suboptions)
> + goto mp_rst;
> + return;
> + } else if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
> + /* MP_FAIL is mutually exclusive with others except RST */
> + const struct sock *ssk = (const struct sock *)tp;
> + struct mptcp_subflow_context *subflow;
> +
> + subflow = mptcp_subflow_ctx(ssk);
> + subflow->send_mp_fail = 0;
> +
> + *ptr++ = mptcp_option(MPTCPOPT_MP_FAIL,
> + TCPOLEN_MPTCP_FAIL,
> + 0, 0);
> + put_unaligned_be64(opts->fail_seq, ptr);
> + ptr += 2;
> +
> + if (OPTION_MPTCP_RST & opts->suboptions)
> + goto mp_rst;
> + return;
> + } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) {
> +mp_rst:
> + *ptr++ = mptcp_option(MPTCPOPT_RST,
> + TCPOLEN_MPTCP_RST,
> + opts->reset_transient,
> + opts->reset_reason);
> return;
> }
>
> --
> 2.31.1
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-12-02 4:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-02 4:25 [PATCH mptcp-next v4 0/2] send MP_FAIL with MP_RST and others Geliang Tang
2021-12-02 4:25 ` [PATCH mptcp-next v4 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
2021-12-02 4:47 ` Geliang Tang
2021-12-02 4:25 ` [PATCH mptcp-next v4 2/2] mptcp: print out reset infos of MP_RST Geliang Tang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.