From: Florian Westphal <fw at strlen.de> To: mptcp at lists.01.org Subject: [MPTCP] [RFC v2 mptcp-next 04/12] mptcp: subflow: split subflow_init_req into helpers Date: Tue, 21 Jul 2020 22:36:34 +0200 [thread overview] Message-ID: <20200721203642.32753-5-fw@strlen.de> (raw) In-Reply-To: 20200721203642.32753-1-fw@strlen.de [-- Attachment #1: Type: text/plain, Size: 2809 bytes --] When syncookie support is added, we will need to add a variant of subflow_init_req() helper. It will do almost same thing except that it will not compute/add a token to the mptcp token tree. To avoid excess copy&paste, this commit splits away part of the code into helpers that can then be re-used from the 'no insert' function added in a followup change. Signed-off-by: Florian Westphal <fw(a)strlen.de> --- net/mptcp/subflow.c | 49 ++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 9526566ec153..800e7d472dcd 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -91,17 +91,9 @@ static struct mptcp_sock *subflow_token_join_request(struct request_sock *req, return msk; } -static void subflow_init_req(struct request_sock *req, - const struct sock *sk_listener, - struct sk_buff *skb) +static int __subflow_init_req(struct request_sock *req, const struct sock *sk_listener) { - struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk_listener); struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req); - struct mptcp_options_received mp_opt; - - pr_debug("subflow_req=%p, listener=%p", subflow_req, listener); - - mptcp_get_options(skb, &mp_opt); subflow_req->mp_capable = 0; subflow_req->mp_join = 0; @@ -113,18 +105,47 @@ static void subflow_init_req(struct request_sock *req, * TCP option space. */ if (rcu_access_pointer(tcp_sk(sk_listener)->md5sig_info)) - return; + return -EINVAL; #endif - if (mp_opt.mp_capable) { + return 0; +} + +static int __subflow_check_options(const struct mptcp_options_received *mp_opt, + struct request_sock *req) +{ + if (mp_opt->mp_capable) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MPCAPABLEPASSIVE); - if (mp_opt.mp_join) - return; - } else if (mp_opt.mp_join) { + if (mp_opt->mp_join) + return -EINVAL; + } else if (mp_opt->mp_join) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINSYNRX); } + return 0; +} + +static void subflow_init_req(struct request_sock *req, + const struct sock *sk_listener, + struct sk_buff *skb) +{ + struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk_listener); + struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req); + struct mptcp_options_received mp_opt; + int ret; + + pr_debug("subflow_req=%p, listener=%p", subflow_req, listener); + + ret = __subflow_init_req(req, sk_listener); + if (ret) + return; + + mptcp_get_options(skb, &mp_opt); + ret = __subflow_check_options(&mp_opt, req); + if (ret) + return; + if (mp_opt.mp_capable && listener->request_mptcp) { int err, retries = 4; -- 2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: Florian Westphal <fw@strlen.de> To: <netdev@vger.kernel.org> Cc: mathew.j.martineau@linux.intel.com, edumazet@google.com, mptcp@lists.01.org, matthieu.baerts@tessares.net, Florian Westphal <fw@strlen.de> Subject: [RFC v2 mptcp-next 04/12] mptcp: subflow: split subflow_init_req into helpers Date: Tue, 21 Jul 2020 22:36:34 +0200 [thread overview] Message-ID: <20200721203642.32753-5-fw@strlen.de> (raw) In-Reply-To: <20200721203642.32753-1-fw@strlen.de> When syncookie support is added, we will need to add a variant of subflow_init_req() helper. It will do almost same thing except that it will not compute/add a token to the mptcp token tree. To avoid excess copy&paste, this commit splits away part of the code into helpers that can then be re-used from the 'no insert' function added in a followup change. Signed-off-by: Florian Westphal <fw@strlen.de> --- net/mptcp/subflow.c | 49 ++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 9526566ec153..800e7d472dcd 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -91,17 +91,9 @@ static struct mptcp_sock *subflow_token_join_request(struct request_sock *req, return msk; } -static void subflow_init_req(struct request_sock *req, - const struct sock *sk_listener, - struct sk_buff *skb) +static int __subflow_init_req(struct request_sock *req, const struct sock *sk_listener) { - struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk_listener); struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req); - struct mptcp_options_received mp_opt; - - pr_debug("subflow_req=%p, listener=%p", subflow_req, listener); - - mptcp_get_options(skb, &mp_opt); subflow_req->mp_capable = 0; subflow_req->mp_join = 0; @@ -113,18 +105,47 @@ static void subflow_init_req(struct request_sock *req, * TCP option space. */ if (rcu_access_pointer(tcp_sk(sk_listener)->md5sig_info)) - return; + return -EINVAL; #endif - if (mp_opt.mp_capable) { + return 0; +} + +static int __subflow_check_options(const struct mptcp_options_received *mp_opt, + struct request_sock *req) +{ + if (mp_opt->mp_capable) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MPCAPABLEPASSIVE); - if (mp_opt.mp_join) - return; - } else if (mp_opt.mp_join) { + if (mp_opt->mp_join) + return -EINVAL; + } else if (mp_opt->mp_join) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINSYNRX); } + return 0; +} + +static void subflow_init_req(struct request_sock *req, + const struct sock *sk_listener, + struct sk_buff *skb) +{ + struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk_listener); + struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req); + struct mptcp_options_received mp_opt; + int ret; + + pr_debug("subflow_req=%p, listener=%p", subflow_req, listener); + + ret = __subflow_init_req(req, sk_listener); + if (ret) + return; + + mptcp_get_options(skb, &mp_opt); + ret = __subflow_check_options(&mp_opt, req); + if (ret) + return; + if (mp_opt.mp_capable && listener->request_mptcp) { int err, retries = 4; -- 2.26.2
next reply other threads:[~2020-07-21 20:36 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-21 20:36 Florian Westphal [this message] 2020-07-21 20:36 ` [RFC v2 mptcp-next 04/12] mptcp: subflow: split subflow_init_req into helpers Florian Westphal -- strict thread matches above, loose matches on Subject: below -- 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 12/12] selftests: mptcp: make 2nd net namespace use tcp syn cookies unconditionally Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 11/12] mptcp: enable JOIN requests even if cookies are in use Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 10/12] tcp: handle want_cookie clause via reqsk_put Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 09/12] tcp: syncookies: create mptcp request socket for ACK cookies with MPTCP option Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 08/12] mptcp: subflow: add mptcp_subflow_init_cookie_req helper Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 07/12] tcp: pass want_cookie down to req_init function Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 06/12] tcp: remove sk_listener const qualifier from " Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 05/12] mptcp: rename and export mptcp_subflow_request_sock_ops Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 03/12] mptcp: token: move retry to caller Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 02/12] tcp: syncookies: use single reqsk_free location Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 01/12] tcp: remove cookie_ts bit from request_sock Florian Westphal 2020-07-21 20:36 ` Florian Westphal 2020-07-21 20:36 [MPTCP] [RFC v2 mptcp-next 01/12] mptcp: add syncookie support Florian Westphal 2020-07-21 20:36 ` Florian Westphal
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=20200721203642.32753-5-fw@strlen.de \ --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: linkBe 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.