From nobody Sat May 4 11:38:09 2024 Received: from sender11-of-o51.zoho.eu (sender11-of-o51.zoho.eu [31.186.226.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2472E4C94 for ; Tue, 27 Sep 2022 22:54:22 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1664319258; cv=none; d=zohomail.eu; s=zohoarc; b=KL+BtACxdnkvlTVkOSPuZXqnP5BYBI6aCCTriAOJugm4bG/N+v9QZYeTyDKn4vVuyJoHgtXeTFywn98XYOUvoG3dgHB/5RBq1IwisC8mF9tAQbuhQo6fA0Us2j53QtMZSRYSaQKD3gwWi3ADWJPkH+NghcxNxjNYxFQodyOpkxo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1664319258; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=4pwWAZoUy/AWF7AAjotjTrwZ5Kzq6ua8imvf56tRp4I=; b=RJzVHnqSNSLcQwoWSYdxqVFRgage8uojazSdGkoMPXsNsNkR6kQVHbY8toYEy90cIRIwcnv2dNUG/a6tAgCulbmX5aewnAZqt5usDITjFHbEymnULQ6K/yzOcgUvovrcVwOS873yyc+J/tLnPlO10Z/uH99oL0Yo7Po97eyiyq4= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=shytyi.net; spf=pass smtp.mailfrom=dmytro@shytyi.net; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1664319258; s=hs; d=shytyi.net; i=dmytro@shytyi.net; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=4pwWAZoUy/AWF7AAjotjTrwZ5Kzq6ua8imvf56tRp4I=; b=JfjtfkKk3DZBlGaSKLzTBWHcfHea2RNEbuZzUtpZPw66PmP1Bal6J9AL2r7IutjP UPNfAYbBHo5b8RKzg6vgl6CiEZ9OuialF8lPPNVnd1zKFG7GhiL9GYaYHpmVAyFg/WE IJAjZA1XeuZePCyQPdgXL4s+aNkszeGOPNirvk48= Received: from localhost.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1664319256917110.94208261457095; Wed, 28 Sep 2022 00:54:16 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi , Benjamin Hesmans Message-ID: <20220927225341.14165-2-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v12 1/7] mptcp: introduce MSG_FASTOPEN flag. Date: Tue, 27 Sep 2022 22:53:35 +0000 X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220927225341.14165-1-dmytro@shytyi.net> References: <20220927225341.14165-1-dmytro@shytyi.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" In the following patches we will analyse the MSG_FASTOPEN flag in the mptcp_sendmsg() and invoke the MPTFO. Signed-of-by: Benjamin Hesmans Signed-off-by: Dmytro Shytyi --- include/net/mptcp.h | 9 +++++++++ include/net/tcp.h | 3 +++ net/ipv4/tcp.c | 20 ++++++++++++++++---- net/mptcp/protocol.c | 19 +++++++++++-------- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index c25939b2af68..ccf2b42837a1 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -150,6 +150,8 @@ void mptcp_write_options(struct tcphdr *th, __be32 *ptr= , struct tcp_sock *tp, struct mptcp_out_options *opts); =20 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info); +int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, int = addr_len, int flags); +struct sock *mptcp_subflow_conn_sock(struct sock *sk); =20 /* move the skb extension owership, with the assumption that 'to' is * newly allocated @@ -286,6 +288,13 @@ static inline bool mptcp_skb_can_collapse(const struct= sk_buff *to, =20 static inline void mptcp_space(const struct sock *ssk, int *s, int *fs) { } static inline void mptcp_seq_show(struct seq_file *seq) { } +static inline int mptcp_stream_connect(struct socket *sock, + struct sockaddr *uaddr, + int addr_len, + int flags) +{ + +} =20 static inline int mptcp_subflow_init_cookie_req(struct request_sock *req, const struct sock *sk_listener, diff --git a/include/net/tcp.h b/include/net/tcp.h index 4f71cc15ff8e..e53d26d74dec 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1757,6 +1757,9 @@ struct sock *tcp_try_fastopen(struct sock *sk, struct= sk_buff *skb, struct request_sock *req, struct tcp_fastopen_cookie *foc, const struct dst_entry *dst); +int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, + int *copied, size_t size, + struct ubuf_info *uarg); void tcp_fastopen_init_key_once(struct net *net); bool tcp_fastopen_cookie_check(struct sock *sk, u16 *mss, struct tcp_fastopen_cookie *cookie); diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 5237a3f08c94..daa611671d9a 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1162,8 +1162,9 @@ void tcp_free_fastopen_req(struct tcp_sock *tp) } } =20 -int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, int *copied, - size_t size, struct ubuf_info *uarg) +int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, + int *copied, size_t size, + struct ubuf_info *uarg) { struct tcp_sock *tp =3D tcp_sk(sk); struct inet_sock *inet =3D inet_sk(sk); @@ -1196,8 +1197,19 @@ int tcp_sendmsg_fastopen(struct sock *sk, struct msg= hdr *msg, int *copied, } } flags =3D (msg->msg_flags & MSG_DONTWAIT) ? O_NONBLOCK : 0; - err =3D __inet_stream_connect(sk->sk_socket, uaddr, - msg->msg_namelen, flags, 1); + if (!sk_is_mptcp(sk)) { + err =3D __inet_stream_connect(sk->sk_socket, uaddr, + msg->msg_namelen, flags, 1); + } else { + struct sock *parent =3D mptcp_subflow_conn_sock(sk); + + release_sock(sk); + release_sock(parent); + err =3D mptcp_stream_connect(sk->sk_socket, uaddr, + msg->msg_namelen, msg->msg_flags); + lock_sock(parent); + lock_sock(sk); + } /* fastopen_req could already be freed in __inet_stream_connect * if the connection times out or gets rst */ diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 8feb684408f7..0db50712bad7 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -58,6 +58,12 @@ static void __mptcp_check_send_data_fin(struct sock *sk); DEFINE_PER_CPU(struct mptcp_delegated_action, mptcp_delegated_actions); static struct net_device mptcp_napi_dev; =20 +struct sock * +mptcp_subflow_conn_sock(struct sock *sk) +{ + return ((mptcp_subflow_ctx(sk))->conn); +} + /* If msk has an initial subflow socket, and the MP_CAPABLE handshake has = not * completed yet or has failed, return the subflow socket. * Otherwise return NULL. @@ -1673,17 +1679,14 @@ static int mptcp_sendmsg(struct sock *sk, struct ms= ghdr *msg, size_t len) int ret =3D 0; long timeo; =20 - /* we don't support FASTOPEN yet */ - if (msg->msg_flags & MSG_FASTOPEN) - return -EOPNOTSUPP; - /* silently ignore everything else */ - msg->msg_flags &=3D MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL; + msg->msg_flags &=3D MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL | MSG_FASTOPEN; =20 lock_sock(sk); =20 ssock =3D __mptcp_nmpc_socket(msk); - if (unlikely(ssock && inet_sk(ssock->sk)->defer_connect)) { + if (unlikely(ssock && (inet_sk(ssock->sk)->defer_connect || + msg->msg_flags & MSG_FASTOPEN))) { struct sock *ssk =3D ssock->sk; int copied_syn =3D 0; =20 @@ -3568,8 +3571,8 @@ static void mptcp_subflow_early_fallback(struct mptcp= _sock *msk, __mptcp_do_fallback(msk); } =20 -static int mptcp_stream_connect(struct socket *sock, struct sockaddr *uadd= r, - int addr_len, int flags) +int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, + int addr_len, int flags) { struct mptcp_sock *msk =3D mptcp_sk(sock->sk); struct mptcp_subflow_context *subflow; --=20 2.34.1 From nobody Sat May 4 11:38:09 2024 Received: from sender11-of-o51.zoho.eu (sender11-of-o51.zoho.eu [31.186.226.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9AF54C93 for ; Tue, 27 Sep 2022 22:54:22 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1664319258; cv=none; d=zohomail.eu; s=zohoarc; b=XUTXtOMVeNVN1G/oCjS0HLEOivX6+b9gXwzxXSSE6Bc5+onMUlygHuH2hjuzNcvbQO2EyScvtmxlUgpdCbNRDmEY9u6/zobfD2Hb8lzrxYnnaSWwQGqU9CcEMQAbNhnx2TCQnBVlR1ksvKJj+epq0TX75UBvysEdP3SncM1gOnY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1664319258; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=vnjxOjcMDYrcLbQy+5FDy2xufVDeEbFU6NcKTVZkgAQ=; b=hOG9N1gFSPf4l2QGTb5jVYR5WflAt/R9wV3x5nIkU1bNwqi2f1rKnvUZ4ouvkdUoWK30tFphhOBQkvCkVrH0QsmvLdWcoRkq4FTKYhQcaatts0XZ407PVunxqs4QylJZXaQUT+25bGFaW3ebzXjoEabGPyJExcYNsdb1GRKc35k= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=shytyi.net; spf=pass smtp.mailfrom=dmytro@shytyi.net; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1664319258; s=hs; d=shytyi.net; i=dmytro@shytyi.net; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=vnjxOjcMDYrcLbQy+5FDy2xufVDeEbFU6NcKTVZkgAQ=; b=T0N3IXIr8J+Xi+Q2O0tsZOkp025BZgAU1+S5Yeef85Y36U2Koei3bVwS5IV/U7K5 YEqEEvbkVe5f4GkB88JSnmw0N69PC1dPbMAO75qGrCm2sdO6UU6PZe1JDo9gQ7yrJzt 46tkV6HhbXlalZGIddBwzxMcHyu3P3DrpK+TKar4= Received: from localhost.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1664319257334408.09512802636925; Wed, 28 Sep 2022 00:54:17 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220927225341.14165-3-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v12 2/7] mptcp: fix retrans., add mptfo vars to msk Date: Tue, 27 Sep 2022 22:53:36 +0000 X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220927225341.14165-1-dmytro@shytyi.net> References: <20220927225341.14165-1-dmytro@shytyi.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" With fastopen in place the first subflow socket is created before the MPC handshake completes, and we need to properly initialize the sequence numbers at MPC ACK reception. Signed-off-by: Dmytro Shytyi --- net/mptcp/Makefile | 2 +- net/mptcp/fastopen.c | 19 +++++++++++++++++++ net/mptcp/options.c | 5 +++++ net/mptcp/protocol.h | 6 ++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 net/mptcp/fastopen.c diff --git a/net/mptcp/Makefile b/net/mptcp/Makefile index 8a7f68efa35f..c42ad8609876 100644 --- a/net/mptcp/Makefile +++ b/net/mptcp/Makefile @@ -2,7 +2,7 @@ obj-$(CONFIG_MPTCP) +=3D mptcp.o =20 mptcp-y :=3D protocol.o subflow.o options.o token.o crypto.o ctrl.o pm.o d= iag.o \ - mib.o pm_netlink.o sockopt.o pm_userspace.o sched.o + mib.o pm_netlink.o sockopt.o pm_userspace.o sched.o fastopen.o =20 obj-$(CONFIG_SYN_COOKIES) +=3D syncookies.o obj-$(CONFIG_INET_MPTCP_DIAG) +=3D mptcp_diag.o diff --git a/net/mptcp/fastopen.c b/net/mptcp/fastopen.c new file mode 100644 index 000000000000..d6fb45e6be4f --- /dev/null +++ b/net/mptcp/fastopen.c @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 + * MPTCP Fast Open Mechanism. Copyright (c) 2021-2022, Dmytro SHYTYI + */ + +#include "protocol.h" + +void mptcp_gen_msk_ackseq_fastopen(struct mptcp_sock *msk, struct mptcp_su= bflow_context *subflow, + struct mptcp_options_received mp_opt) +{ + u64 ack_seq; + + WRITE_ONCE(msk->can_ack, true); + WRITE_ONCE(msk->remote_key, mp_opt.sndr_key); + mptcp_crypto_key_sha(msk->remote_key, NULL, &ack_seq); + ack_seq++; + WRITE_ONCE(msk->ack_seq, ack_seq); + pr_debug("ack_seq=3D%llu sndr_key=3D%llu", msk->ack_seq, mp_opt.sndr_key); + atomic64_set(&msk->rcv_wnd_sent, ack_seq); +} diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 30d289044e71..0b6c4535750c 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1208,6 +1208,11 @@ bool mptcp_incoming_options(struct sock *sk, struct = sk_buff *skb) mpext->dsn64 =3D 1; mpext->mpc_map =3D 1; mpext->data_fin =3D 0; + + if (msk->is_mptfo) { + mptcp_gen_msk_ackseq_fastopen(msk, subflow, mp_opt); + mpext->data_seq =3D READ_ONCE(msk->ack_seq); + } } else { mpext->data_seq =3D mp_opt.data_seq; mpext->subflow_seq =3D mp_opt.subflow_seq; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 93c535440a5c..a9708a2eb2bc 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -282,6 +282,7 @@ struct mptcp_sock { bool use_64bit_ack; /* Set when we received a 64-bit DSN */ bool csum_enabled; bool allow_infinite_fallback; + bool is_mptfo; u8 mpc_endpoint_id; u8 recvmsg_inq:1, cork:1, @@ -838,6 +839,11 @@ void mptcp_event_addr_announced(const struct sock *ssk= , const struct mptcp_addr_ void mptcp_event_addr_removed(const struct mptcp_sock *msk, u8 id); bool mptcp_userspace_pm_active(const struct mptcp_sock *msk); =20 +// Fast Open Mechanism functions begin +void mptcp_gen_msk_ackseq_fastopen(struct mptcp_sock *msk, struct mptcp_su= bflow_context *subflow, + struct mptcp_options_received mp_opt); +// Fast Open Mechanism functions end + static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk) { return READ_ONCE(msk->pm.addr_signal) & --=20 2.34.1 From nobody Sat May 4 11:38:09 2024 Received: from sender11-of-o51.zoho.eu (sender11-of-o51.zoho.eu [31.186.226.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1760B4C93 for ; Tue, 27 Sep 2022 22:54:24 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1664319260; cv=none; d=zohomail.eu; s=zohoarc; b=cXZFQfpwcu3Tk6aFavaI0pJSbDQGGW4H4wjUabfwiDAahtWnqVQhdjeoonc0s3hLK5GDdqecON4yA8uYF1o7OG/O9TPrYgygcHPJQZILjvH6wHjaVTqpgPvdC1TR+7QUNykvwS6kkZ097nCuYAsaQ+7iSVMal7l4nG2XyzTrArg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1664319260; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=NGUkgo3dSkuX/JOnRGP5gFdJh+kJcyaNwwKpsyK1Jsw=; b=YkCiLG+9bbwvkTfqD6MBDkArIahn8aCcpfIZcgKBhiV8TCGTd57AyyPtclUjKsuc3Om9Od+jVS/QkIa1cJv8dyxvqAoYjWJET8gqzOmSzoiGekFuav4esI5BWR/5C8wLie5oo7JWPbM1NF6MGGt7aMZzHsct4WEaKDVgSA52Kfw= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=shytyi.net; spf=pass smtp.mailfrom=dmytro@shytyi.net; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1664319260; s=hs; d=shytyi.net; i=dmytro@shytyi.net; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=NGUkgo3dSkuX/JOnRGP5gFdJh+kJcyaNwwKpsyK1Jsw=; b=E1oWoLg7fBR0vqriI6MGSc3brq8YjrEK2uOv0199iC/+ppAxkRJhJeMfWFr43W+P GjahmSLOUsbuzFyeF6W6dPNhykzCGQMH1e09I8Dmd44Nih7dVnYITvgRL1ix8UHnaEc ILO/3yz20MVWvqmNBOg+dyiaF+8mHSosXPZpqjUY= Received: from localhost.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1664319257546271.51229475042123; Wed, 28 Sep 2022 00:54:17 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220927225341.14165-4-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v12 3/7] mptcp: add subflow_v(4,6)_send_synack() Date: Tue, 27 Sep 2022 22:53:37 +0000 X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220927225341.14165-1-dmytro@shytyi.net> References: <20220927225341.14165-1-dmytro@shytyi.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" In this patch we add skb to the msk, dequeue it from sk, remove TSs and do skb mapping. Signed-off-by: Dmytro Shytyi --- net/ipv4/tcp_fastopen.c | 19 ++++++++++++------ net/mptcp/fastopen.c | 43 +++++++++++++++++++++++++++++++++++++++++ net/mptcp/protocol.c | 2 +- net/mptcp/protocol.h | 3 +++ net/mptcp/subflow.c | 42 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 102 insertions(+), 7 deletions(-) diff --git a/net/ipv4/tcp_fastopen.c b/net/ipv4/tcp_fastopen.c index 45cc7f1ca296..d6b1380525ea 100644 --- a/net/ipv4/tcp_fastopen.c +++ b/net/ipv4/tcp_fastopen.c @@ -356,13 +356,20 @@ struct sock *tcp_try_fastopen(struct sock *sk, struct= sk_buff *skb, if (foc->len =3D=3D 0) /* Client requests a cookie */ NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPFASTOPENCOOKIEREQD); =20 - if (!((tcp_fastopen & TFO_SERVER_ENABLE) && - (syn_data || foc->len >=3D 0) && - tcp_fastopen_queue_check(sk))) { - foc->len =3D -1; - return NULL; + if (sk_is_mptcp(sk)) { + if (((syn_data || foc->len >=3D 0) && + tcp_fastopen_queue_check(sk))) { + foc->len =3D -1; + return NULL; + } + } else { + if (!((tcp_fastopen & TFO_SERVER_ENABLE) && + (syn_data || foc->len >=3D 0) && + tcp_fastopen_queue_check(sk))) { + foc->len =3D -1; + return NULL; + } } - if (tcp_fastopen_no_cookie(sk, dst, TFO_SERVER_COOKIE_NOT_REQD)) goto fastopen; =20 diff --git a/net/mptcp/fastopen.c b/net/mptcp/fastopen.c index d6fb45e6be4f..1d824a4d9606 100644 --- a/net/mptcp/fastopen.c +++ b/net/mptcp/fastopen.c @@ -17,3 +17,46 @@ void mptcp_gen_msk_ackseq_fastopen(struct mptcp_sock *ms= k, struct mptcp_subflow_ pr_debug("ack_seq=3D%llu sndr_key=3D%llu", msk->ack_seq, mp_opt.sndr_key); atomic64_set(&msk->rcv_wnd_sent, ack_seq); } + +void subflow_fastopen_send_synack_set_params(struct mptcp_subflow_context = *subflow, + struct request_sock *req) +{ + struct tcp_request_sock *tcp_r_sock =3D tcp_rsk(req); + struct sock *ssk =3D subflow->tcp_sock; + struct sock *sk =3D subflow->conn; + struct mptcp_sock *msk; + struct sk_buff *skb; + struct tcp_sock *tp; + + msk =3D mptcp_sk(sk); + tp =3D tcp_sk(ssk); + + /* */ + msk->is_mptfo =3D 1; + + skb =3D skb_peek(&ssk->sk_receive_queue); + + /* */ + __skb_unlink(skb, &ssk->sk_receive_queue); + skb_ext_reset(skb); + skb_orphan(skb); + + /* */ + tp->copied_seq +=3D tp->rcv_nxt - tcp_r_sock->rcv_isn - 1; + subflow->map_seq =3D mptcp_subflow_get_mapped_dsn(subflow); + subflow->ssn_offset =3D tp->copied_seq - 1; + + /* */ + mptcp_data_lock(sk); + + /* */ + mptcp_set_owner_r(skb, sk); + __skb_queue_tail(&msk->receive_queue, skb); + atomic64_set(&msk->rcv_wnd_sent, mptcp_subflow_get_mapped_dsn(subflow)); + + /* */ + (sk)->sk_data_ready(sk); + + /* */ + mptcp_data_unlock(sk); +} diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 0db50712bad7..7e63b414011c 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -206,7 +206,7 @@ static void mptcp_rfree(struct sk_buff *skb) mptcp_rmem_uncharge(sk, len); } =20 -static void mptcp_set_owner_r(struct sk_buff *skb, struct sock *sk) +void mptcp_set_owner_r(struct sk_buff *skb, struct sock *sk) { skb_orphan(skb); skb->sk =3D sk; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index a9708a2eb2bc..9c46e802a73a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -842,6 +842,9 @@ bool mptcp_userspace_pm_active(const struct mptcp_sock = *msk); // Fast Open Mechanism functions begin void mptcp_gen_msk_ackseq_fastopen(struct mptcp_sock *msk, struct mptcp_su= bflow_context *subflow, struct mptcp_options_received mp_opt); +void mptcp_set_owner_r(struct sk_buff *skb, struct sock *sk); +void subflow_fastopen_send_synack_set_params(struct mptcp_subflow_context = *subflow, + struct request_sock *req); // Fast Open Mechanism functions end =20 static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 07dd23d0fe04..c48143bff114 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -307,6 +307,46 @@ static struct dst_entry *subflow_v4_route_req(const st= ruct sock *sk, return NULL; } =20 +static int subflow_v4_send_synack(const struct sock *sk, struct dst_entry = *dst, + struct flowi *fl, + struct request_sock *req, + struct tcp_fastopen_cookie *foc, + enum tcp_synack_type synack_type, + struct sk_buff *syn_skb) +{ + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); + struct inet_request_sock *ireq =3D inet_rsk(req); + + /* */ + if (foc) + ireq->tstamp_ok =3D 0; + + if (synack_type =3D=3D TCP_SYNACK_FASTOPEN) + subflow_fastopen_send_synack_set_params(subflow, req); + + return tcp_request_sock_ipv4_ops.send_synack(sk, dst, fl, req, foc, synac= k_type, syn_skb); +} + +static int subflow_v6_send_synack(const struct sock *sk, struct dst_entry = *dst, + struct flowi *fl, + struct request_sock *req, + struct tcp_fastopen_cookie *foc, + enum tcp_synack_type synack_type, + struct sk_buff *syn_skb) +{ + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); + struct inet_request_sock *ireq =3D inet_rsk(req); + + /* */ + if (foc) + ireq->tstamp_ok =3D 0; + + if (synack_type =3D=3D TCP_SYNACK_FASTOPEN) + subflow_fastopen_send_synack_set_params(subflow, req); + + return tcp_request_sock_ipv6_ops.send_synack(sk, dst, fl, req, foc, synac= k_type, syn_skb); +} + #if IS_ENABLED(CONFIG_MPTCP_IPV6) static struct dst_entry *subflow_v6_route_req(const struct sock *sk, struct sk_buff *skb, @@ -1920,6 +1960,7 @@ void __init mptcp_subflow_init(void) =20 subflow_request_sock_ipv4_ops =3D tcp_request_sock_ipv4_ops; subflow_request_sock_ipv4_ops.route_req =3D subflow_v4_route_req; + subflow_request_sock_ipv4_ops.send_synack =3D subflow_v4_send_synack; =20 subflow_specific =3D ipv4_specific; subflow_specific.conn_request =3D subflow_v4_conn_request; @@ -1933,6 +1974,7 @@ void __init mptcp_subflow_init(void) #if IS_ENABLED(CONFIG_MPTCP_IPV6) subflow_request_sock_ipv6_ops =3D tcp_request_sock_ipv6_ops; subflow_request_sock_ipv6_ops.route_req =3D subflow_v6_route_req; + subflow_request_sock_ipv6_ops.send_synack =3D subflow_v6_send_synack; =20 subflow_v6_specific =3D ipv6_specific; subflow_v6_specific.conn_request =3D subflow_v6_conn_request; --=20 2.34.1 From nobody Sat May 4 11:38:09 2024 Received: from sender11-of-o51.zoho.eu (sender11-of-o51.zoho.eu [31.186.226.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F8374C95 for ; Tue, 27 Sep 2022 22:54:24 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1664319260; cv=none; d=zohomail.eu; s=zohoarc; b=ZKru6BaiWr/AoKId3qk3z0fF0vZk7nBKARS/qleBwOr1N0Fh8jgVdMiLpimtI7xo/bF0UeT93KPy3dI4aHzg6b/2o8Z+3NcrygtqK5OkJlHg7j2ma15v+ocOA/A1pU8dSR5GH6CFog5QAVWR7TBLTQ+LROn7GgcYXYvMKOMNumE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1664319260; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=TRTqjKeha7LjFQdVpFzahmDMQCFZayAcXH1Kq9U+N48=; b=M3LBTvfBvZl+h9HZWI+Q4sU4NFvyRN+Nilw1oaVPuwg7DTpKE+oK80nGOxqm9CqYae3oAeLhLug9L/DE6R1H6KudBcMI35NYNzGHaPPhBxYvWkWCwNaa0W7/7wyOLi4Jo++IXlE+xrNWL1348kpsjBDmiL4GBSggSaU0EKHj4rI= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=shytyi.net; spf=pass smtp.mailfrom=dmytro@shytyi.net; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1664319260; s=hs; d=shytyi.net; i=dmytro@shytyi.net; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=TRTqjKeha7LjFQdVpFzahmDMQCFZayAcXH1Kq9U+N48=; b=A3MdoI9GO79Qr9RztVGLpxNlsOHyVfAo5kpP0OBi76Ma/+TVw0ORltFVaCFyvgbg mqtkVyj7PZXnmsjxci7Md1uAd5IzAefwmNzXkFCCa7cRuQosiG7iG7XcVgv2c0RW0Ii xstpdZCRvnD8+gdHHrGrCfapVXeeAogJnvwuOQP0= Received: from localhost.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 166431925775567.36965479881292; Wed, 28 Sep 2022 00:54:17 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Matthieu Baerts Message-ID: <20220927225341.14165-5-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v12 4/7] mptcp: sockopt: make 'tcp_fastopen_connect' generic Date: Tue, 27 Sep 2022 22:53:38 +0000 X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220927225341.14165-1-dmytro@shytyi.net> References: <20220927225341.14165-1-dmytro@shytyi.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" From: Matthieu Baerts This is patch provided by Matthieu. As it seems it not yet merged I temprorarly integrated in into my series for compilation. 'https://lore.kernel.org/mptcp/ 20220927150306.1552795-1-matthieu.baerts@tessares.net/T/' When it will be merged I will delete it from this set of patches. Signed-off-by: Matthieu Baerts --- net/mptcp/sockopt.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index c7cb68c725b2..8d3b09d75c3a 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -769,17 +769,17 @@ static int mptcp_setsockopt_sol_tcp_defer(struct mptc= p_sock *msk, sockptr_t optv return tcp_setsockopt(listener->sk, SOL_TCP, TCP_DEFER_ACCEPT, optval, op= tlen); } =20 -static int mptcp_setsockopt_sol_tcp_fastopen_connect(struct mptcp_sock *ms= k, sockptr_t optval, - unsigned int optlen) +static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int leve= l, int optname, + sockptr_t optval, unsigned int optlen) { struct socket *sock; =20 - /* Limit to first subflow */ + /* Limit to first subflow, before the connection establishment */ sock =3D __mptcp_nmpc_socket(msk); if (!sock) return -EINVAL; =20 - return tcp_setsockopt(sock->sk, SOL_TCP, TCP_FASTOPEN_CONNECT, optval, op= tlen); + return tcp_setsockopt(sock->sk, level, optname, optval, optlen); } =20 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname, @@ -811,7 +811,8 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *= msk, int optname, case TCP_DEFER_ACCEPT: return mptcp_setsockopt_sol_tcp_defer(msk, optval, optlen); case TCP_FASTOPEN_CONNECT: - return mptcp_setsockopt_sol_tcp_fastopen_connect(msk, optval, optlen); + return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, + optval, optlen); } =20 return -EOPNOTSUPP; --=20 2.34.1 From nobody Sat May 4 11:38:09 2024 Received: from sender11-of-o51.zoho.eu (sender11-of-o51.zoho.eu [31.186.226.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1ADFF4C9A for ; Tue, 27 Sep 2022 22:54:24 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1664319260; cv=none; d=zohomail.eu; s=zohoarc; b=dVl1RnIo8y88c9TMHM7ArjcPOJZQlSUcwhjfB2+Qem/OMtUMG+0krxZE+jgXpradlixnDlsEsHdTGZN/z29okt56nvX/R+ZUQp7iiP8Ynm7/9DkzCgtJdnTTYclwWq5nMW2ai5GpJiv2CiKbjdBhfiEFSgKO/KL8yN3BiTTgHvQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1664319260; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=C5+JLBx3Z5RGSz9ifWcfgtyT4XsoQfREPNE7FNnssFE=; b=MsiAdpJ4GPBSawYzUdVTxPW9dGS9lA0cSEVyCwfOpG3ayJCxVQZSXUP2c1pk66gulyPW5xUzdiOMCyE3ALJNxRGZMlL7X7HEGHqZCvloOhG738yAQgvyOrwYzCj9a/RGRfcrNs9A1Z2vwILDtj6Cjl0uQd5FeS0P7YODHFEXmnk= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=shytyi.net; spf=pass smtp.mailfrom=dmytro@shytyi.net; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1664319260; s=hs; d=shytyi.net; i=dmytro@shytyi.net; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=C5+JLBx3Z5RGSz9ifWcfgtyT4XsoQfREPNE7FNnssFE=; b=bXLZqqJIgbFN9y4B9A5VcVyy4wueZ+O+tJkP+xuVTuIYoem1K5TwF9fsxsacHR1p 44DlRMpyTAwQ8dh5L9Oft8fVdw6nPF1Ve7ybjlkq+HwLGuh5T/jCi0qXQROX0WliyAk VskCFZXXm7obzSxl3c5rleBMX7ossmeR+ytn2i10= Received: from localhost.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1664319258009197.78128357472542; Wed, 28 Sep 2022 00:54:18 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Matthieu Baerts Message-ID: <20220927225341.14165-6-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v12 5/7] mptcp: add TCP_FASTOPEN_NO_COOKIE support Date: Tue, 27 Sep 2022 22:53:39 +0000 X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220927225341.14165-1-dmytro@shytyi.net> References: <20220927225341.14165-1-dmytro@shytyi.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" From: Matthieu Baerts This is patch provided by Matthieu. As it seems it not yet merged I temprorarly integrated in into my series for compilation. 'https://lore.kernel.org/mptcp/ 20220927150306.1552795-1-matthieu.baerts@tessares.net/T/' When it will be merged I will delete it from this set of patches. Signed-off-by: Matthieu Baerts --- net/mptcp/sockopt.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 8d3b09d75c3a..1857281a0dd5 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -560,6 +560,7 @@ static bool mptcp_supported_sockopt(int level, int optn= ame) case TCP_TX_DELAY: case TCP_INQ: case TCP_FASTOPEN_CONNECT: + case TCP_FASTOPEN_NO_COOKIE: return true; } =20 @@ -568,8 +569,8 @@ static bool mptcp_supported_sockopt(int level, int optn= ame) /* TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS, * TCP_REPAIR_WINDOW are not supported, better avoid this mess */ - /* TCP_FASTOPEN_KEY, TCP_FASTOPEN, TCP_FASTOPEN_NO_COOKIE, - * are not supported fastopen is currently unsupported + /* TCP_FASTOPEN_KEY, TCP_FASTOPEN are not supported because + * fastopen for the listener side is currently unsupported */ } return false; @@ -811,6 +812,7 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *= msk, int optname, case TCP_DEFER_ACCEPT: return mptcp_setsockopt_sol_tcp_defer(msk, optval, optlen); case TCP_FASTOPEN_CONNECT: + case TCP_FASTOPEN_NO_COOKIE: return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen); } @@ -1175,6 +1177,7 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_sock= *msk, int optname, case TCP_CC_INFO: case TCP_DEFER_ACCEPT: case TCP_FASTOPEN_CONNECT: + case TCP_FASTOPEN_NO_COOKIE: return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen); case TCP_INQ: --=20 2.34.1 From nobody Sat May 4 11:38:09 2024 Received: from sender11-of-o51.zoho.eu (sender11-of-o51.zoho.eu [31.186.226.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA4644C98 for ; Tue, 27 Sep 2022 22:54:24 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1664319260; cv=none; d=zohomail.eu; s=zohoarc; b=NlP3vuPXiaoKkH6DTn0+w6e9QM4gtG+0mw7OivAyUwtyw4v2aSBtTJ53FgmhpfybFCTmEY50mONFUIIPkbMQxvpM6tYozuGDeH/FWnk5bNOuTuWM7WSXy4271rg+Xw+OcNZRnr1wYAvMUflvGSF8HFmVQdIyNtKAt26ey2RlWYo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1664319260; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=nxl5+Ng5QWmikY2EfQfFbubzWMPVWXzlSNHyHniwuq8=; b=BOeuEWngJ0wJcd3RkCF0V+Km8LWxqEZoBhRUYfCsRzbdAKOKBqt7TSJQ5qVzb9YIdN97fZbf8lCppOdkGenA8FBZb0Lu520x91wC9Yz9sKxqpc3w7vyILy2dNaSOYZjkjNk+vtzS25oipZuMbuU0pggLZdUSCG6c2zi8t2BLKgk= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=shytyi.net; spf=pass smtp.mailfrom=dmytro@shytyi.net; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1664319260; s=hs; d=shytyi.net; i=dmytro@shytyi.net; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=nxl5+Ng5QWmikY2EfQfFbubzWMPVWXzlSNHyHniwuq8=; b=WknD31QQKQ5RcvjlqKukrhWPO6y1119wSDUNZfKWmuodrKXJio5puesIAQuCgc8U GpTq/tIvEuKZ4RkoRyZh80oUwZYj2CPQsu3v3AfPNVoasXAz8z9ULohwBJdQ9YEC6ol zUKft3FAZG6NMRB0X0jUSrIz+uq5p5FQArqnBp2g= Received: from localhost.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1664319258267182.38766513430357; Wed, 28 Sep 2022 00:54:18 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220927225341.14165-7-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v12 6/7] mptcp: add TCP_FASTOPEN option Date: Tue, 27 Sep 2022 22:53:40 +0000 X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220927225341.14165-1-dmytro@shytyi.net> References: <20220927225341.14165-1-dmytro@shytyi.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" We add the TCP_FASTOPEN socket option in this patch that is going to be set by the listener side. Signed-off-by: Dmytro Shytyi --- net/mptcp/sockopt.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 1857281a0dd5..ab3ba8558efd 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -559,6 +559,7 @@ static bool mptcp_supported_sockopt(int level, int optn= ame) case TCP_NOTSENT_LOWAT: case TCP_TX_DELAY: case TCP_INQ: + case TCP_FASTOPEN: case TCP_FASTOPEN_CONNECT: case TCP_FASTOPEN_NO_COOKIE: return true; @@ -811,6 +812,7 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *= msk, int optname, return mptcp_setsockopt_sol_tcp_nodelay(msk, optval, optlen); case TCP_DEFER_ACCEPT: return mptcp_setsockopt_sol_tcp_defer(msk, optval, optlen); + case TCP_FASTOPEN: case TCP_FASTOPEN_CONNECT: case TCP_FASTOPEN_NO_COOKIE: return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, @@ -1176,6 +1178,7 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_sock= *msk, int optname, case TCP_INFO: case TCP_CC_INFO: case TCP_DEFER_ACCEPT: + case TCP_FASTOPEN: case TCP_FASTOPEN_CONNECT: case TCP_FASTOPEN_NO_COOKIE: return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, --=20 2.34.1 From nobody Sat May 4 11:38:09 2024 Received: from sender11-of-o51.zoho.eu (sender11-of-o51.zoho.eu [31.186.226.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8559C4C97 for ; Tue, 27 Sep 2022 22:54:24 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1664319260; cv=none; d=zohomail.eu; s=zohoarc; b=SIjK0cmmebu8hns236jVdXvtWqDP2rqIV5P45pBrZZJN+3ASQ71J88b22Xvwn4rRmPNoGdgP5Jovmkwo/4d7QCSMSf8CIT+6h7/Rw1CvKNiEoNvbU5bmy2vqax3lyEZuV7ulJB7JW0xUdsERIDgR6+uxpEpWgUMU9nxtLxnCDzg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1664319260; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=rDvKS/y4ifrmSjdukq6vsDamnf5X+7MrJcFBzZ0I/v4=; b=i38MaP+6Ge0nsSjjZwDHfW8HOyoIlRQWp+8CY6ZrRnIkEwCzgSNnFG/Pzjg0Ljmt8ayM6fIKCKfCkrnedpOSfFxF+gLlZbTECRN3vkPqWs0DHhP8V4wuO4HbLfPlVTeeP2UAdjzVJzP1SOXGIoFyyop9TJjTxnpyOLJz/PuAJT8= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=shytyi.net; spf=pass smtp.mailfrom=dmytro@shytyi.net; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1664319260; s=hs; d=shytyi.net; i=dmytro@shytyi.net; h=From:From:To:To:Cc:Cc:Message-ID:Subject:Subject:Date:Date:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=rDvKS/y4ifrmSjdukq6vsDamnf5X+7MrJcFBzZ0I/v4=; b=VLgNlbhpQWzKfMMJxguq5h7VNWm9xKXiC1nr4Uqq91OwsfjqAndhUH8Uc9vFk42s ZXaO0XkjTDovrXaZJvek+X0k97WCXyWVLM5o0QvssPYvz6qN7POGukFdViLMHN+T8/v r6JJvv6e1BdCPDZgbq4wZrGu84lTFPfGDMjAM0Os= Received: from localhost.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 166431925848117.86919990314857; Wed, 28 Sep 2022 00:54:18 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220927225341.14165-8-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v12 7/7] selftests: mptfo initiator/listener Date: Tue, 27 Sep 2022 22:53:41 +0000 X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220927225341.14165-1-dmytro@shytyi.net> References: <20220927225341.14165-1-dmytro@shytyi.net> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" MPTFO tests: these are examples of initiator (sendto) and listener, probably are going to be integrated to the mptcp_connect.* selftests Signed-off-by: Dmytro Shytyi --- tools/testing/selftests/net/mptcp/mptfo.sh | 13 +++ .../selftests/net/mptcp/mptfo_initiator.c | 43 ++++++++ .../selftests/net/mptcp/mptfo_listener.c | 100 ++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 tools/testing/selftests/net/mptcp/mptfo.sh create mode 100644 tools/testing/selftests/net/mptcp/mptfo_initiator.c create mode 100644 tools/testing/selftests/net/mptcp/mptfo_listener.c diff --git a/tools/testing/selftests/net/mptcp/mptfo.sh b/tools/testing/sel= ftests/net/mptcp/mptfo.sh new file mode 100644 index 000000000000..9ed0cb281094 --- /dev/null +++ b/tools/testing/selftests/net/mptcp/mptfo.sh @@ -0,0 +1,13 @@ +#!/bin/bash +#This is an example of environmen that was used to generate wireshark +sudo ip netns add server +sudo ip netns add client +sudo ip link add veth0 type veth peer name veth1 +sudo ip link set veth1 netns server +sudo ip link set veth0 netns client +sudo ip netns exec client ip a a 10.10.0.1/24 dev veth0 +sudo ip netns exec server ip a a 10.10.0.2/24 dev veth1 +sudo ip netns exec client ip link set dev veth0 up +sudo ip netns exec server ip link set dev veth1 up +sudo ip netns exec server bash -c "echo 2 > /proc/sys/net/ipv4/tcp_fastope= n" +sudo ip netns exec client bash -c "echo 1 > /proc/sys/net/ipv4/tcp_fastope= n" diff --git a/tools/testing/selftests/net/mptcp/mptfo_initiator.c b/tools/te= sting/selftests/net/mptcp/mptfo_initiator.c new file mode 100644 index 000000000000..05e6a3d62bb8 --- /dev/null +++ b/tools/testing/selftests/net/mptcp/mptfo_initiator.c @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SERVER_PORT 7003 + +int main(int argc, char *argv[]) +{ + unsigned char valsyn[3] =3D "abc"; + struct sockaddr_in daddr; + char *valend =3D "fff"; + char *val1 =3D "zz1"; + char *val2 =3D "zz2"; + char *val3 =3D "zz3"; + int sock_fd =3D -1; + int ret; + + memset(&daddr, 0, sizeof(daddr)); + inet_pton(AF_INET, "10.10.0.2", &daddr.sin_addr); + daddr.sin_family =3D AF_INET; + daddr.sin_port =3D htons(SERVER_PORT); + + sock_fd =3D socket(AF_INET, SOCK_STREAM, IPPROTO_MPTCP); + + ret =3D sendto(sock_fd, valsyn, 3, MSG_FASTOPEN, (struct sockaddr *) &dad= dr, sizeof(daddr)); + ret =3D write(sock_fd, val1, 3); + ret =3D write(sock_fd, val2, 3); + ret =3D write(sock_fd, val2, 3); + ret =3D write(sock_fd, val2, 3); + ret =3D write(sock_fd, val3, 3); + ret =3D write(sock_fd, valend, 3); + + close(sock_fd); + return EXIT_SUCCESS; +} diff --git a/tools/testing/selftests/net/mptcp/mptfo_listener.c b/tools/tes= ting/selftests/net/mptcp/mptfo_listener.c new file mode 100644 index 000000000000..6890349b14bb --- /dev/null +++ b/tools/testing/selftests/net/mptcp/mptfo_listener.c @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CLIENT_QUEUE_LEN 10 +#define SERVER_PORT 7003 + +int main(void) +{ + int listen_sock_fd =3D -1, client_sock_fd =3D -1; + char str_addr[INET6_ADDRSTRLEN]; + struct sockaddr_in server_addr; + int ret, flag; + int qlen =3D 5; + char ch; + + server_addr.sin_family =3D AF_INET; + inet_pton(AF_INET, "10.10.0.2", &server_addr.sin_addr); + server_addr.sin_port =3D htons(SERVER_PORT); + + /* Create socket for listening (client requests) */ + listen_sock_fd =3D socket(AF_INET, SOCK_STREAM, IPPROTO_MPTCP); + if (listen_sock_fd =3D=3D -1) { + perror("socket()server"); + return EXIT_FAILURE; + } + + /* Set socket to reuse address */ + flag =3D 1; + ret =3D setsockopt(listen_sock_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeo= f(flag)); + if (ret =3D=3D -1) { + perror("setsockopt()"); + return EXIT_FAILURE; + } + + ret =3D setsockopt(listen_sock_fd, SOL_TCP, TCP_FASTOPEN, &qlen, sizeof(q= len)); + if (ret =3D=3D -1) { + perror("setsockopt()TCP_FASTOPEN"); + return EXIT_FAILURE; + } + + /* Bind address and socket together */ + ret =3D bind(listen_sock_fd, (struct sockaddr *)&server_addr, sizeof(serv= er_addr)); + if (ret =3D=3D -1) { + perror("bind()"); + close(listen_sock_fd); + return EXIT_FAILURE; + } + + /* Create listening queue (client requests) */ + ret =3D listen(listen_sock_fd, CLIENT_QUEUE_LEN); + if (ret =3D=3D -1) { + perror("listen()"); + close(listen_sock_fd); + return EXIT_FAILURE; + } + perror("Server listening"); + while (1) { + /* Do TCP handshake with client */ + client_sock_fd =3D accept(listen_sock_fd, + NULL, + 0); + if (client_sock_fd =3D=3D -1) { + perror("accept()"); + close(listen_sock_fd); + return EXIT_FAILURE; + } else { + perror("ACCEPT_SUCCESS"); + } + + char rb[1024]; + + while (1) { + ret =3D read(client_sock_fd, rb, 3); + + if (ret =3D=3D -1) { + perror("SERVVERread()"); + close(client_sock_fd); + break; + } else { + fprintf(stderr, "received %c%c%c from client", rb[0], rb[1], rb[2]); + } + if (rb[0] =3D=3D 'f' && rb[1] =3D=3D 'f' && rb[2] =3D=3D 'f') { + close(client_sock_fd); + break; + } + + } + } + + return EXIT_SUCCESS; +} --=20 2.34.1