All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH mptcp-next v5 0/2] send MP_FAIL with MP_RST and others
@ 2021-12-02  7:29 Geliang Tang
  2021-12-02  7:29 ` [PATCH mptcp-next v5 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
  2021-12-02  7:30 ` [PATCH mptcp-next v5 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  7:29 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

v5:
 - Since MP_FAIL could be sent with MP_RST and DSS, and MP_RST could be
sent with MP_FAIL and FASTCLOSE, this patch fixed the MP_RST sending in
mptcp_established_options() and mptcp_write_options().

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 (2):
  Squash to "mptcp: implement fastclose xmit path"
  mptcp: print out reset infos of MP_RST

 net/mptcp/options.c | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

-- 
2.31.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH mptcp-next v5 1/2] Squash to "mptcp: implement fastclose xmit path"
  2021-12-02  7:29 [PATCH mptcp-next v5 0/2] send MP_FAIL with MP_RST and others Geliang Tang
@ 2021-12-02  7:29 ` Geliang Tang
  2021-12-03  1:48   ` Mat Martineau
  2021-12-02  7:30 ` [PATCH mptcp-next v5 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  7:29 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang, Paolo Abeni, Matthieu Baerts

MP_FAIL could be sent with MP_RST at the same time, fix this in
mptcp_established_options().

MP_RST could be sent with FASTCLOSE at the same time, fix this in
mptcp_write_options().

Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/options.c | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 8a1020e4285c..73242304ada5 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,6 +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)
 {
+	/* MP_FAIL is mutually exclusive with others except RST and DSS */
 	if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
 		const struct sock *ssk = (const struct sock *)tp;
 		struct mptcp_subflow_context *subflow;
@@ -1271,7 +1276,16 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
 		ptr += 2;
 	}
 
-	/* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive,
+	/* RST is mutually exclusive with others except MP_FAIL and FASTCLOSE */
+	if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) {
+		*ptr++ = mptcp_option(MPTCPOPT_RST,
+				      TCPOLEN_MPTCP_RST,
+				      opts->reset_transient,
+				      opts->reset_reason);
+		return;
+	}
+
+	/* DSS, MPC, MPJ, ADD_ADDR and FASTCLOSE are mutually exclusive,
 	 * see mptcp_established_options*()
 	 */
 	if (likely(OPTION_MPTCP_DSS & opts->suboptions)) {
@@ -1458,15 +1472,8 @@ 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);
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH mptcp-next v5 2/2] mptcp: print out reset infos of MP_RST
  2021-12-02  7:29 [PATCH mptcp-next v5 0/2] send MP_FAIL with MP_RST and others Geliang Tang
  2021-12-02  7:29 ` [PATCH mptcp-next v5 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
@ 2021-12-02  7:30 ` Geliang Tang
  1 sibling, 0 replies; 4+ messages in thread
From: Geliang Tang @ 2021-12-02  7:30 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 73242304ada5..417cbb947832 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 v5 1/2] Squash to "mptcp: implement fastclose xmit path"
  2021-12-02  7:29 ` [PATCH mptcp-next v5 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
@ 2021-12-03  1:48   ` Mat Martineau
  0 siblings, 0 replies; 4+ messages in thread
From: Mat Martineau @ 2021-12-03  1:48 UTC (permalink / raw)
  To: Geliang Tang, Matthieu Baerts; +Cc: mptcp, Paolo Abeni

On Thu, 2 Dec 2021, Geliang Tang wrote:

> MP_FAIL could be sent with MP_RST at the same time, fix this in
> mptcp_established_options().
>
> MP_RST could be sent with FASTCLOSE at the same time, fix this in
> mptcp_write_options().
>

Matthieu -

We talked about the MP_FAIL+DSS combination in the meeting this week, and 
I think there is a case I overlooked in that discussion: When a peer 
receives an MP_FAIL, it may need to respond with both MP_FAIL and an 
infinite mapping (which is a DSS option). So it seems reasonable to handle 
those in the same header.


> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Matthieu Baerts <matthieu.baerts@tessares.net>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> net/mptcp/options.c | 29 ++++++++++++++++++-----------
> 1 file changed, 18 insertions(+), 11 deletions(-)
>
> diff --git a/net/mptcp/options.c b/net/mptcp/options.c
> index 8a1020e4285c..73242304ada5 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,6 +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)
> {
> +	/* MP_FAIL is mutually exclusive with others except RST and DSS */
> 	if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
> 		const struct sock *ssk = (const struct sock *)tp;
> 		struct mptcp_subflow_context *subflow;
> @@ -1271,7 +1276,16 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
> 		ptr += 2;
> 	}
>
> -	/* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive,
> +	/* RST is mutually exclusive with others except MP_FAIL and FASTCLOSE */
> +	if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) {
> +		*ptr++ = mptcp_option(MPTCPOPT_RST,
> +				      TCPOLEN_MPTCP_RST,
> +				      opts->reset_transient,
> +				      opts->reset_reason);
> +		return;
> +	}

Geliang -

Moving this before the DSS block undoes some of Paolo's optimization for 
DSS. It would be better to handle the mutual exclusion with FASTCLOSE in a 
way that does not add this extra conditional in the common DSS case.

> +
> +	/* DSS, MPC, MPJ, ADD_ADDR and FASTCLOSE are mutually exclusive,
> 	 * see mptcp_established_options*()
> 	 */
> 	if (likely(OPTION_MPTCP_DSS & opts->suboptions)) {
> @@ -1458,15 +1472,8 @@ 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);
> -- 
> 2.31.1
>
>
>

--
Mat Martineau
Intel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-12-03  1:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-02  7:29 [PATCH mptcp-next v5 0/2] send MP_FAIL with MP_RST and others Geliang Tang
2021-12-02  7:29 ` [PATCH mptcp-next v5 1/2] Squash to "mptcp: implement fastclose xmit path" Geliang Tang
2021-12-03  1:48   ` Mat Martineau
2021-12-02  7:30 ` [PATCH mptcp-next v5 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.