* [MPTCP] [PATCH 4/6] mptcp: Re-factor subflow routines to be af-agnostic
@ 2019-10-30 23:38 Peter Krystad
0 siblings, 0 replies; only message in thread
From: Peter Krystad @ 2019-10-30 23:38 UTC (permalink / raw)
To: mptcp
[-- Attachment #1: Type: text/plain, Size: 6107 bytes --]
Re-factor subflow_rebuild_header, init_req, conn_request,
syn_recv_sock, and finish_connect to separate af-specific
and functional parts.
squash unfortunately is complicated:
subflow_v4_finish_connect: Handle MP_CAPABLE options for outgoing...
subflow_v4_rebuild_header: Add key generation and token tree
subflow_v4_conn_request,
subflow_v4_syn_recv_sock,
subflow_v4_init_req: Create SUBFLOW socket for incoming connections
Signed-off-by: Peter Krystad <peter.krystad(a)linux.intel.com>
---
net/mptcp/subflow.c | 76 +++++++++++++++++++++++++++++++++------------
1 file changed, 56 insertions(+), 20 deletions(-)
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index 13e207458e0b..758b4b36644a 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -25,7 +25,7 @@ static inline void SUBFLOW_REQ_INC_STATS(struct request_sock *req,
MPTCP_INC_STATS(sock_net(req_to_sk(req)), field);
}
-static struct inet_connection_sock_af_ops subflow_specific;
+static struct inet_connection_sock_af_ops subflow_v4_specific;
static int subflow_rebuild_header(struct sock *sk)
{
@@ -44,6 +44,14 @@ static int subflow_rebuild_header(struct sock *sk)
} while (!subflow->local_nonce);
}
+ return err;
+}
+
+static int subflow_v4_rebuild_header(struct sock *sk)
+{
+ int err;
+
+ err = subflow_rebuild_header(sk);
if (err)
return err;
@@ -92,19 +100,14 @@ static bool subflow_token_join_request(struct request_sock *req,
return true;
}
-static void subflow_v4_init_req(struct request_sock *req,
- const struct sock *sk_listener,
- struct sk_buff *skb)
+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 tcp_options_received rx_opt;
- tcp_rsk(req)->is_mptcp = 1;
- pr_debug("subflow_req=%p, listener=%p", subflow_req, listener);
-
- tcp_request_sock_ipv4_ops.init_req(req, sk_listener, skb);
-
memset(&rx_opt.mptcp, 0, sizeof(rx_opt.mptcp));
mptcp_get_options(skb, &rx_opt);
@@ -148,6 +151,17 @@ static void subflow_v4_init_req(struct request_sock *req,
}
}
+static void subflow_v4_init_req(struct request_sock *req,
+ const struct sock *sk_listener,
+ struct sk_buff *skb)
+{
+ tcp_rsk(req)->is_mptcp = 1;
+
+ tcp_request_sock_ipv4_ops.init_req(req, sk_listener, skb);
+
+ subflow_init_req(req, sk_listener, skb);
+}
+
/* validate received truncated hmac and create hmac for third ACK */
static bool subflow_thmac_valid(struct mptcp_subflow_context *subflow)
{
@@ -171,8 +185,6 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
{
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
- ipv4_specific.sk_rx_dst_set(sk, skb);
-
if (!subflow->conn)
return;
@@ -207,10 +219,18 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
}
}
+static void subflow_v4_finish_connect(struct sock *sk,
+ const struct sk_buff *skb)
+{
+ ipv4_specific.sk_rx_dst_set(sk, skb);
+
+ subflow_finish_connect(sk, skb);
+}
+
static struct request_sock_ops subflow_request_sock_ops;
static struct tcp_request_sock_ops subflow_request_sock_ipv4_ops;
-static int subflow_conn_request(struct sock *sk, struct sk_buff *skb)
+static int subflow_v4_conn_request(struct sock *sk, struct sk_buff *skb)
{
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
@@ -259,7 +279,8 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
struct request_sock *req,
struct dst_entry *dst,
struct request_sock *req_unhash,
- bool *own_req)
+ bool *own_req,
+ const struct inet_connection_sock_af_ops *af_ops)
{
struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk);
struct mptcp_subflow_request_sock *subflow_req;
@@ -278,7 +299,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
return NULL;
}
- child = ipv4_specific.syn_recv_sock(sk, skb, req, dst, req_unhash,
+ child = af_ops->syn_recv_sock(sk, skb, req, dst, req_unhash,
own_req);
if (child && *own_req) {
@@ -312,6 +333,21 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
return NULL;
}
+static struct sock *subflow_v4_syn_recv_sock(const struct sock *sk,
+ struct sk_buff *skb,
+ struct request_sock *req,
+ struct dst_entry *dst,
+ struct request_sock *req_unhash,
+ bool *own_req)
+{
+ struct sock *child;
+
+ child = subflow_syn_recv_sock(sk, skb, req, dst, req_unhash, own_req,
+ &ipv4_specific);
+
+ return child;
+}
+
enum mapping_status {
MAPPING_OK,
MAPPING_INVALID,
@@ -770,7 +806,7 @@ static int subflow_ulp_init(struct sock *sk)
pr_debug("subflow=%p", ctx);
tp->is_mptcp = 1;
- icsk->icsk_af_ops = &subflow_specific;
+ icsk->icsk_af_ops = &subflow_v4_specific;
ctx->tcp_sk_data_ready = sk->sk_data_ready;
sk->sk_data_ready = subflow_data_ready;
sk->sk_write_space = subflow_write_space;
@@ -862,11 +898,11 @@ void mptcp_subflow_init(void)
subflow_request_sock_ipv4_ops = tcp_request_sock_ipv4_ops;
subflow_request_sock_ipv4_ops.init_req = subflow_v4_init_req;
- subflow_specific = ipv4_specific;
- subflow_specific.conn_request = subflow_conn_request;
- subflow_specific.syn_recv_sock = subflow_syn_recv_sock;
- subflow_specific.sk_rx_dst_set = subflow_finish_connect;
- subflow_specific.rebuild_header = subflow_rebuild_header;
+ subflow_v4_specific = ipv4_specific;
+ subflow_v4_specific.conn_request = subflow_v4_conn_request;
+ subflow_v4_specific.syn_recv_sock = subflow_v4_syn_recv_sock;
+ subflow_v4_specific.sk_rx_dst_set = subflow_v4_finish_connect;
+ subflow_v4_specific.rebuild_header = subflow_v4_rebuild_header;
mptcp_diag_subflow_init(&subflow_ulp_ops);
--
2.17.2
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2019-10-30 23:38 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-30 23:38 [MPTCP] [PATCH 4/6] mptcp: Re-factor subflow routines to be af-agnostic Peter Krystad
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.