* [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
* 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
* [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
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.