All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Krystad <peter.krystad at linux.intel.com>
To: mptcp at lists.01.org
Subject: [MPTCP] [RFC 1/3] mptcp: Slightly refactor mptcp_established_options_xxx()
Date: Wed, 22 May 2019 14:38:23 -0700	[thread overview]
Message-ID: <20190522213825.4057-2-peter.krystad@linux.intel.com> (raw)
In-Reply-To: 20190522213825.4057-1-peter.krystad@linux.intel.com

[-- Attachment #1: Type: text/plain, Size: 3632 bytes --]

Make mptcp_established_options_xxx() take the same
parameter list and remove the restriction that MP_CAPABLE
and DSS options may not be sent in the same header.

Split and squash to "Handle MP_CAPABLE options" and
"Write MPTCP DSS headers".

Signed-off-by: Peter Krystad <peter.krystad(a)linux.intel.com>
---
 include/net/mptcp.h   |  7 +++++--
 net/ipv4/tcp_output.c | 26 +++++++++++++-------------
 net/mptcp/options.c   |  6 ++++--
 3 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/include/net/mptcp.h b/include/net/mptcp.h
index ed67b140af33..0f66dab1c444 100644
--- a/include/net/mptcp.h
+++ b/include/net/mptcp.h
@@ -69,8 +69,9 @@ bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
 				   struct mptcp_out_options* opts);
 bool mptcp_synack_options(const struct request_sock *req, unsigned int *size,
 			  struct mptcp_out_options *opts);
-bool mptcp_established_options(struct sock *sk, unsigned int *size,
-				       struct mptcp_out_options *opts);
+bool mptcp_established_options(struct sock *sk, struct sk_buff *skb,
+			       unsigned int *size, unsigned int remaining,
+			       struct mptcp_out_options *opts);
 
 void mptcp_attach_dss(struct sock *sk, struct sk_buff *skb,
 		      struct tcp_options_received *opt_rx);
@@ -126,7 +127,9 @@ static inline bool mptcp_synack_options(const struct request_sock *req,
 }
 
 static inline bool mptcp_established_options(struct sock *sk,
+					     struct sk_buff *skb,
 					     unsigned int *size,
+					     unsigned int remaining,
 					     struct mptcp_out_options *opts)
 {
 	return false;
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 1cd915890ce5..68a2311b56d4 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -797,20 +797,20 @@ static unsigned int tcp_established_options(struct sock *sk, struct sk_buff *skb
 		unsigned int remaining = MAX_TCP_OPTION_SPACE - size;
 		unsigned int opt_size;
 
-		if (mptcp_established_options(sk, &opt_size, &opts->mptcp)) {
-			if (remaining >= opt_size) {
-				opts->options |= OPTION_MPTCP;
-				size += opt_size;
-			}
-		} else {
-			unsigned int dss_size;
+		if (mptcp_established_options(sk, skb, &opt_size,
+					      remaining, &opts->mptcp)) {
+			opts->options |= OPTION_MPTCP;
+			size += opt_size;
+			remaining -= opt_size;
+		}
+
+		if (mptcp_established_options_dss(sk, skb, &opt_size,
+						  remaining, &opts->mptcp)) {
+			opts->options |= OPTION_MPTCP;
+			size += opt_size;
+			remaining -= opt_size;
+		}
 
-			if (mptcp_established_options_dss(sk, skb, &dss_size,
-							  remaining,
-							  &opts->mptcp)) {
-				opts->options |= OPTION_MPTCP;
-				size += dss_size;
-			}
 		}
 	}
 
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index c71e40f6f06a..47d7507a2f2a 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -240,13 +240,15 @@ void mptcp_rcv_synsent(struct sock *sk)
 	}
 }
 
-bool mptcp_established_options(struct sock *sk, unsigned int *size,
+bool mptcp_established_options(struct sock *sk, struct sk_buff *skb,
+			       unsigned int *size, unsigned int remaining,
 			       struct mptcp_out_options *opts)
 {
 	struct subflow_context *subflow = subflow_ctx(sk);
 
 	pr_debug("subflow=%p", subflow);
-	if (subflow->mp_capable && !subflow->fourth_ack) {
+	if (subflow->mp_capable && !subflow->fourth_ack &&
+	    remaining >= TCPOLEN_MPTCP_MPC_ACK) {
 		opts->suboptions = OPTION_MPTCP_MPC_ACK;
 		opts->sndr_key = subflow->local_key;
 		opts->rcvr_key = subflow->remote_key;
-- 
2.17.2


             reply	other threads:[~2019-05-22 21:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-22 21:38 Peter Krystad [this message]
  -- strict thread matches above, loose matches on Subject: below --
2019-05-23  9:00 [MPTCP] [RFC 1/3] mptcp: Slightly refactor mptcp_established_options_xxx() Paolo Abeni
2019-05-28 18:39 Peter Krystad

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190522213825.4057-2-peter.krystad@linux.intel.com \
    --to=unknown@example.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.