From nobody Sun Sep 8 03:03:44 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 892271C14 for ; Tue, 20 Sep 2022 12:52:52 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1663678370; cv=none; d=zohomail.eu; s=zohoarc; b=Gfr3pbHQtURUlUgDrVw3FSbVRVrTCFhpO5XqfjDs3AvI2gpQDuCaMcAG/eS/b8AELTAzTbw9KsvLLkS5LJ+bB3D6r01LmlUYG4sv01pXnaV30sTilvlwK/RZ4ofRN3WcfbGsjp/vnx/R2RVBNp8aFnfUSrBk1M4b2hJTw9GAUOw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1663678370; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=4rVkQa3qMMUlSRfyOKnPoxRWIYdOpkQv2kjbajFkgxY=; b=JsXOmzlCcJKYqu0+kg6F57VhNzayMAxa4BWJRK6W7POg8+7rzGsE5g4mK0JEi5Pj1DNESg+9BKgF/t4pZCTUTSy55gA0+JK86KCX6ZUR2Tds2E7JgP42izapBO+UkQa6XCN9CG31uSQKaiUuxDXi12VwwAGDUqFG+eFdvCuI0iQ= 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=1663678370; 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=4rVkQa3qMMUlSRfyOKnPoxRWIYdOpkQv2kjbajFkgxY=; b=cCjehvUj74qgPeo9ZhY7JO+sGdNwQrVBEFP+db7JDyrrxA7S5RRPki/pSVX0HF8k HrkJgpNb6AQ1sLjsbasl7K9O1qFvbkbf41A53CZcxqmnzjyEsb9Az+Gwc00gFD7NKGr 11cGhaKA6HZcgib6kDbW/0EsXDeinGXcSHhoD22M= Received: from doris.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1663678368568884.2600163466974; Tue, 20 Sep 2022 14:52:48 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220920125243.2880-2-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v8 1/7] add mptcp_stream_connect to protocol.h Date: Tue, 20 Sep 2022 14:52:37 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920125243.2880-1-dmytro@shytyi.net> References: <20220920125243.2880-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 call mptcp_stream_connect() from function tcp_sendmsg_fastopen() in file "net/ipv4/tcp.c", thus make such symbol visible. Signed-off-by: Dmytro Shytyi --- net/mptcp/protocol.c | 4 ++-- net/mptcp/protocol.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index c0bf48e3149b..470045793181 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3484,8 +3484,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; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 93c535440a5c..632161b13950 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -837,6 +837,7 @@ void mptcp_event(enum mptcp_event_type type, const stru= ct mptcp_sock *msk, void mptcp_event_addr_announced(const struct sock *ssk, const struct mptcp= _addr_info *info); void mptcp_event_addr_removed(const struct mptcp_sock *msk, u8 id); bool mptcp_userspace_pm_active(const struct mptcp_sock *msk); +int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, int = addr_len, int flags); =20 static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk) { --=20 2.25.1 From nobody Sun Sep 8 03:03:44 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 589D11C15 for ; Tue, 20 Sep 2022 12:52:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1663678369; cv=none; d=zohomail.eu; s=zohoarc; b=XbKoBafCPPdpIDeDofJvrHgK8m5yECEIRlsXHqri8ERfIWwo+TO/Fp7RP4KH9W+bN+9LRe4Qxrck0MpQPRrlbFFRpuaUdXM8D5i43puk3sFj7oUlowmGYf4WC6Gh3go1KrJsXHSnmDN0V90BE9yypITEm4fcBRJda/fxgr4X/mk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1663678369; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=zgLQuu9lB0tcK85i/WDpiapuLzHC3aA/wzbSVpkw8nI=; b=ZZbxzeztYB6tlX5/VuQFcebTMUxgy2NdR88wPeYk82PjZt5/3FEyhcK41iYTvNfwe5IVaRPSXB94NW81jYiXk70MTNVKUZJvpDhXo6+RoCdybagOIEfEysP/qXd5V+uyJtMdCn1xp7QG5mdyDz4OjPwoyNkpNUoLKtGjjNV6bE4= 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=1663678369; 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=zgLQuu9lB0tcK85i/WDpiapuLzHC3aA/wzbSVpkw8nI=; b=LOJRtC9WoxXAf7HZqkXG8jwgB+tuiV/QQRaXiXSuXDmYaUEOaSSYdlRnIxmnFgPd 07sTPfl2TM/UUv7Qvzy6sFgww74ILCl+GANBTPA4IXMfWxNUK/aDgbAI6pcsWg3be++ NYSDyEudOHpMNA0kRaLRjMv76Y6ORWZ6Gs2rIXG0= Received: from doris.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1663678368782377.35177501780663; Tue, 20 Sep 2022 14:52:48 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220920125243.2880-3-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v8 2/7] add mptcp_setsockopt_fastopen Date: Tue, 20 Sep 2022 14:52:38 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920125243.2880-1-dmytro@shytyi.net> References: <20220920125243.2880-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" Add set MPTFO socket option for MPTCP. Signed-off-by: Dmytro Shytyi --- net/mptcp/Makefile | 2 +- net/mptcp/fastopen.c | 32 ++++++++++++++++++++++++++++++++ net/mptcp/protocol.h | 5 +++++ net/mptcp/sockopt.c | 3 +++ 4 files changed, 41 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..9ef49a2d2ea2 --- /dev/null +++ b/net/mptcp/fastopen.c @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0 + * MPTCP Fast Open Mechanism. Copyright (c) 2021-2022, Dmytro SHYTYI + */ + +#include "protocol.h" + +int mptcp_setsockopt_sol_tcp_fastopen(struct mptcp_sock *msk, sockptr_t op= tval, + unsigned int optlen) +{ + struct sock *sk =3D (struct sock *)msk; + struct net *net =3D sock_net(sk); + int val; + int ret; + + ret =3D 0; + + if (copy_from_sockptr(&val, optval, sizeof(val))) + return -EFAULT; + + lock_sock(sk); + + if (val >=3D 0 && ((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) { + tcp_fastopen_init_key_once(net); + fastopen_queue_tune(sk, val); + } else { + ret =3D -EINVAL; + } + + release_sock(sk); + + return ret; +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 632161b13950..57596cdfb1f9 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -839,6 +839,11 @@ void mptcp_event_addr_removed(const struct mptcp_sock = *msk, u8 id); bool mptcp_userspace_pm_active(const struct mptcp_sock *msk); int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, int = addr_len, int flags); =20 +// Fast Open Mechanism functions begin +int mptcp_setsockopt_sol_tcp_fastopen(struct mptcp_sock *msk, sockptr_t op= tval, + unsigned int optlen); +// Fast Open Mechanism functions end + static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk) { return READ_ONCE(msk->pm.addr_signal) & diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 423d3826ca1e..f62f0d63b8e6 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: return true; } =20 @@ -796,6 +797,8 @@ 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: + return mptcp_setsockopt_sol_tcp_fastopen(msk, optval, optlen); } =20 return -EOPNOTSUPP; --=20 2.25.1 From nobody Sun Sep 8 03:03:44 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 0F621A55 for ; Tue, 20 Sep 2022 12:53:29 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1663678408; cv=none; d=zohomail.eu; s=zohoarc; b=hyWrzCyw5gm9LVw77JHGg5z5GEym3YPU3HsSzesb1VTWoDPtOE5uKu84RYwii7527t0jHnQBsM009ovNwd31MVlLA8d6mg9++/SI+29Gj0RUZYJ8Hffiz9AY8oHT85lE1vTtPlAujEBn0wlQnyef4+GfXMFLrixBM56HMqGqdHM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1663678408; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=bITp/RdzclZx2p+1gR0KyOs5jBdwvIgNgDuUAxniFdk=; b=MV02K96goNa2MHJvq9rvJKWORcXtQZd3BZ+e3XY/y5DHkevnxomyrfjvVEDnHuAb1BEXZEogiN1H/OojPIooX4vPnwaOLvMcjE6iS/bXq7hhteLYfbYN9kSgve6y4uXC44bEu5R79bAhkh7KfBOq5x1Zp+ASmm4d9GovqBlmtMY= 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=1663678408; 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=bITp/RdzclZx2p+1gR0KyOs5jBdwvIgNgDuUAxniFdk=; b=UJz+CSbOnpo4cULnAlSJ/u7P4yfghieq7jM8iiFu6DArXsE0/S2tz9RH4lC5gBZA 7c+5MQjIoLutX5ocHTYPmoMRVqiCc0CU2/FVLbeg2WMqyoU0M5Ns1ExcByga+KOdQxF neZFt+6igibsn17cOgF3+Ccs9G8LEXJB7onIsJXk= Received: from doris.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1663678369073953.9286586842846; Tue, 20 Sep 2022 14:52:49 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220920125243.2880-4-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v8 3/7] reuse tcp_sendmsg_fastopen() Date: Tue, 20 Sep 2022 14:52:39 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920125243.2880-1-dmytro@shytyi.net> References: <20220920125243.2880-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 reuse modified tcp_sendmsg_fastopen(). We call it from mptcp_sendmsg(). Signed-off-by: Dmytro Shytyi --- include/net/tcp.h | 3 +++ net/ipv4/tcp.c | 18 +++++++++++++----- net/mptcp/protocol.c | 11 +++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index 735e957f7f4b..a7d49e42470a 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1754,6 +1754,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 9251c99d3cfd..d10a3cdae220 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -280,6 +280,9 @@ #include #include =20 +#include +#include "../mptcp/protocol.h" + /* Track pending CMSGs. */ enum { TCP_CMSG_INQ =3D 1, @@ -1162,9 +1165,9 @@ void tcp_free_fastopen_req(struct tcp_sock *tp) } } =20 -static 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); @@ -1197,8 +1200,13 @@ static int tcp_sendmsg_fastopen(struct sock *sk, str= uct msghdr *msg, } } 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 + err =3D mptcp_stream_connect(sk->sk_socket, uaddr, + msg->msg_namelen, msg->msg_flags); + /* 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 470045793181..8cf307e4e59c 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1673,9 +1673,16 @@ static int mptcp_sendmsg(struct sock *sk, struct msg= hdr *msg, size_t len) long timeo; =20 /* we don't support FASTOPEN yet */ - if (msg->msg_flags & MSG_FASTOPEN) - return -EOPNOTSUPP; + if (msg->msg_flags & MSG_FASTOPEN) { + struct socket *ssock =3D __mptcp_nmpc_socket(msk); =20 + if (ssock) { + int copied_syn_fastopen =3D 0; + + ret =3D tcp_sendmsg_fastopen(ssock->sk, msg, &copied_syn_fastopen, len,= NULL); + copied +=3D copied_syn_fastopen; + } + } /* silently ignore everything else */ msg->msg_flags &=3D MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL; =20 --=20 2.25.1 From nobody Sun Sep 8 03:03:44 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 5A9841C26 for ; Tue, 20 Sep 2022 12:52:56 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1663678372; cv=none; d=zohomail.eu; s=zohoarc; b=GpjvZp8eG1XMhnszfU9t3B7yfm1tgPHQdks2c+qkZH2EjOiBESiVy6f+mHxACwAJzKyJ+QPDvAicdbBy9r2EUonh6R6kYih8N1ZUnex+coSPBH99hXf7pJJYQW6fKBw2FjGjFP2+Yp3PqkBnZC+ENMVDAJWs8YL6hOJYn8CxyQ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1663678372; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=BomVV4olj5Ja7EIR4z671e78rwD9YQdbHSUxTR3sNYc=; b=LpSiXIvbApgb3DniXIe1Eq0c1r4Pr3pYbqdIX+1EZbMNajOyyhAJFO/uQzKT8u7KwHY3cJEIEY0+RX7uTuvopxspzJGY/YbjUyfmg3VT9v1a/UdN6N/koeMiI1XWYYLX3t6aXRfiqUZC+gYhG+2rdbTs1Hx0EKD1aWKONzk/NZE= 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=1663678372; 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=BomVV4olj5Ja7EIR4z671e78rwD9YQdbHSUxTR3sNYc=; b=SDTk3pZMASub7xQ+9nZKJ9oU32C8N9uZ5tC0nGGc9JgU4QVFmKkpk+eAYdMVFT+w fuDQBXEgskH/396zi7ygwR8ziGHzSgSWDpTWgYT8s4qrYuaWw04NaU/QceKOpYbnZXL DOKlIoXEVVaaBCPdIpokst3iFhaUvsvzsxm7TvNg= Received: from doris.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1663678369292962.0724831824473; Tue, 20 Sep 2022 14:52:49 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220920125243.2880-5-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v8 4/7] mptfo variables for msk, options. Fix loop retrans Date: Tue, 20 Sep 2022 14:52:40 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920125243.2880-1-dmytro@shytyi.net> References: <20220920125243.2880-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" Introduce mptfo variables for msk and options. Also fix the infinite retransmissions in the end of second session. The variable 2nd ack received in struct mptcp_options_received identifies t= he received ack on the listener side during 3way handshake in mptfo context and miningless alone if used alone. It is further used(checked) in conjunction in the same "if" statement with variable is_mptfo from struct mptcp_sock. Signed-off-by: Dmytro Shytyi --- net/mptcp/fastopen.c | 14 ++++++++++++++ net/mptcp/options.c | 4 ++++ net/mptcp/protocol.h | 6 +++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/net/mptcp/fastopen.c b/net/mptcp/fastopen.c index 9ef49a2d2ea2..92885e459f93 100644 --- a/net/mptcp/fastopen.c +++ b/net/mptcp/fastopen.c @@ -30,3 +30,17 @@ int mptcp_setsockopt_sol_tcp_fastopen(struct mptcp_sock = *msk, sockptr_t optval, =20 return ret; } + +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; + + msk->can_ack =3D true; + msk->remote_key =3D 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..8852a13cfe62 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -91,6 +91,7 @@ static void mptcp_parse_option(const struct sk_buff *skb, ptr +=3D 8; } if (opsize >=3D TCPOLEN_MPTCP_MPC_ACK) { + mp_opt->hns_2nd_ack_rcvd =3D 1; mp_opt->rcvr_key =3D get_unaligned_be64(ptr); ptr +=3D 8; } @@ -1124,6 +1125,9 @@ bool mptcp_incoming_options(struct sock *sk, struct s= k_buff *skb) return sk->sk_state !=3D TCP_CLOSE; =20 if (unlikely(mp_opt.suboptions !=3D OPTION_MPTCP_DSS)) { + if (mp_opt.suboptions & OPTIONS_MPTCP_MPC && mp_opt.hns_2nd_ack_rcvd && = msk->is_mptfo) + mptcp_gen_msk_ackseq_fastopen(msk, subflow, mp_opt); + if ((mp_opt.suboptions & OPTION_MPTCP_FASTCLOSE) && msk->local_key =3D=3D mp_opt.rcvr_key) { WRITE_ONCE(msk->rcv_fastclose, true); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 57596cdfb1f9..3b9a349a7080 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -155,7 +155,8 @@ struct mptcp_options_received { echo:1, backup:1, deny_join_id0:1, - __unused:2; + __unused:1; + u8 hns_2nd_ack_rcvd:1; u8 join_id; u64 thmac; u8 hmac[MPTCPOPT_HMAC_LEN]; @@ -282,6 +283,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, @@ -842,6 +844,8 @@ int mptcp_stream_connect(struct socket *sock, struct so= ckaddr *uaddr, int addr_l // Fast Open Mechanism functions begin int mptcp_setsockopt_sol_tcp_fastopen(struct mptcp_sock *msk, sockptr_t op= tval, unsigned int optlen); +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 =20 static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk) --=20 2.25.1 From nobody Sun Sep 8 03:03:44 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 5EB951C26 for ; Tue, 20 Sep 2022 12:52:54 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1663678371; cv=none; d=zohomail.eu; s=zohoarc; b=bwBPRoLWPJ4oMc3nWEvYl36YYd0y+nNY+IxXW+izlm+04QCcLnWMsP/Y5PTnUMv2/24s/VKf66iaa6u9evYiWCVut4MyM5u5uWRWNTVWg9Nx4h8pXor83E3VDHrNGWbt/X7FNMEg7g/h8hG/z00gx63IVNK8M9QbXeAUH5y8M7M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1663678371; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=Kc3dIgypXaAFTV5ZQnDy9B33pM/DUI0xqBu0W2vd1jc=; b=bACUgjgde+69NIQxyKUr74twgJcp323ehZ7sv3YZlzWuvVoroIheskBEV700+TMz1ZSvctHFUNkoNVuuiC2Ljrbr/YVuQMNFJzmUkbrmyK4/vl/47kVh6homllxxuDm7PfBhY12O7XyyB35SgOB+ZXmf/KjRRA4WJ7qy2LOVeMA= 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=1663678371; 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=Kc3dIgypXaAFTV5ZQnDy9B33pM/DUI0xqBu0W2vd1jc=; b=JZz1C/8bGM5ObXvcn/EbPKSSir03BJ1nA32Zksxv8/N9D5ID1208cGY8+cUffZ9H U4rwiekQxzt8nja5uGpEFyS5hbcMrtqL9aoEEoCHiXWecH4jTg2BdvxAKy3tjYZkkvH mfj5eFRG9fqz2WnNQ7WPqVEcp2PWrE8E7SgbBCfI= Received: from doris.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1663678369512887.626353964329; Tue, 20 Sep 2022 14:52:49 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220920125243.2880-6-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v8 5/7] Fix unxpctd val of subflow->map_seq(dscrd packet) Date: Tue, 20 Sep 2022 14:52:41 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920125243.2880-1-dmytro@shytyi.net> References: <20220920125243.2880-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" Fix unexpected value of subflow->map_seq (discarded and after retransmitted 2nd packet(1st after TFO)). We use mptcp_gen_msk_ackseq_fasopen() when we know this is the first chunk of data after TFO. Signed-off-by: Dmytro Shytyi --- net/mptcp/options.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 8852a13cfe62..8e937a422909 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1212,6 +1212,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; + =09 + 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; --=20 2.25.1 From nobody Sun Sep 8 03:03:44 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 535521C2C for ; Tue, 20 Sep 2022 12:52:55 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1663678372; cv=none; d=zohomail.eu; s=zohoarc; b=K14jNiPf9oz69zqrsupFNNQdd0Ui4FOKVkyZV/XD4CJlzgN5BRzu5uckUuoeG5LU/GvPEa5P5ZM3NJ8zRt4L00a42++Kwk7g3AfxcP1mBrWqlAvbgOqRh0XZiKHyPfebxEBJggMCrrw59rQZ4PUaDiRr1IQ8EqHL+7blsgg0m18= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1663678372; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=2XZ7xI9ZUYlysUXOthx8OFRz0Ou/hN+oPvfOGP7eC78=; b=NF5Bt37I675PhS8VRuEG7aROnlbdiheetxxGlMxghfO8p4mrgD5EQejvMEtcYzpFreSL/MGGELTTtv7CH8BMKr8gKDHAElie/Fy/zenYS18AP4KYVjc58PgXEnQ9i/r9sVZ+b4b1GE/Uim2buhSXUFIFmzVO7OBo+zCLKfop3U8= 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=1663678372; 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=2XZ7xI9ZUYlysUXOthx8OFRz0Ou/hN+oPvfOGP7eC78=; b=RyjoWOQAoMYDEwh67qzz+nAKaXF4jBP5SIJGa63TrBeH4hyEFCJn7UbwPhhaz147 x6eIrou0hLLnQezjI8KFX2vVfVEP0AkFBA5zaqiiHV4kVqTb8Ms82aec4+vmO6wKaBo 2VL7EeKloEguy69Czgvt+9ADbPzJJTDTQm23c9b4= Received: from doris.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 1663678369719293.1301311611096; Tue, 20 Sep 2022 14:52:49 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220920125243.2880-7-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v8 6/7] add skb to mskq in tcp_fastopen_add_skb() Date: Tue, 20 Sep 2022 14:52:42 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920125243.2880-1-dmytro@shytyi.net> References: <20220920125243.2880-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 add skb to msk->receive_queue in the MPTCP fastopen context. Signed-off-by: Dmytro Shytyi --- include/net/tcp.h | 2 +- net/ipv4/tcp_fastopen.c | 55 +++++++++++++++++++++++++++++++++++------ net/ipv4/tcp_input.c | 11 +++++++-- net/mptcp/protocol.c | 4 +-- net/mptcp/protocol.h | 2 ++ 5 files changed, 62 insertions(+), 12 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index a7d49e42470a..6456f90ed9ed 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1749,7 +1749,7 @@ int tcp_fastopen_reset_cipher(struct net *net, struct= sock *sk, void *primary_key, void *backup_key); int tcp_fastopen_get_cipher(struct net *net, struct inet_connection_sock *= icsk, u64 *key); -void tcp_fastopen_add_skb(struct sock *sk, struct sk_buff *skb); +void tcp_fastopen_add_skb(struct sock *sk, struct sk_buff *skb, struct req= uest_sock *req); struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb, struct request_sock *req, struct tcp_fastopen_cookie *foc, diff --git a/net/ipv4/tcp_fastopen.c b/net/ipv4/tcp_fastopen.c index 45cc7f1ca296..566706172828 100644 --- a/net/ipv4/tcp_fastopen.c +++ b/net/ipv4/tcp_fastopen.c @@ -3,6 +3,7 @@ #include #include #include +#include "../mptcp/protocol.h" =20 void tcp_fastopen_init_key_once(struct net *net) { @@ -166,8 +167,12 @@ static void tcp_fastopen_cookie_gen(struct sock *sk, /* If an incoming SYN or SYNACK frame contains a payload and/or FIN, * queue this additional data / FIN. */ -void tcp_fastopen_add_skb(struct sock *sk, struct sk_buff *skb) +void tcp_fastopen_add_skb(struct sock *sk, struct sk_buff *skb, struct req= uest_sock *req) { + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); + struct tcp_request_sock *tcp_r_sock =3D tcp_rsk(req); + struct sock *socket =3D mptcp_subflow_ctx(sk)->conn; + struct mptcp_sock *msk =3D mptcp_sk(socket); struct tcp_sock *tp =3D tcp_sk(sk); =20 if (TCP_SKB_CB(skb)->end_seq =3D=3D tp->rcv_nxt) @@ -194,7 +199,34 @@ void tcp_fastopen_add_skb(struct sock *sk, struct sk_b= uff *skb) TCP_SKB_CB(skb)->tcp_flags &=3D ~TCPHDR_SYN; =20 tp->rcv_nxt =3D TCP_SKB_CB(skb)->end_seq; + + if (req && tp->syn_fastopen && sk_is_mptcp(sk)) + tcp_r_sock =3D tcp_rsk(req); + else + goto add_skb_to_sk; + + msk->is_mptfo =3D 1; + + //Solves: WARNING: at 704 _mptcp_move_skbs_from_subflow+0x5d0/0x651 + tp->copied_seq +=3D tp->rcv_nxt - tcp_r_sock->rcv_isn - 1; + + subflow->map_seq =3D mptcp_subflow_get_mapped_dsn(subflow); + + //Solves: BAD mapping: ssn=3D0 map_seq=3D1 map_data_len=3D3 + subflow->ssn_offset =3D tp->copied_seq - 1; + + skb_orphan(skb); + skb->sk =3D socket; + skb->destructor =3D mptcp_rfree; + atomic_add(skb->truesize, &socket->sk_rmem_alloc); + msk->rmem_fwd_alloc -=3D skb->truesize; + + __skb_queue_tail(&msk->receive_queue, skb); + atomic64_set(&msk->rcv_wnd_sent, mptcp_subflow_get_mapped_dsn(subflow)); + goto avoid_add_skb_to_sk; +add_skb_to_sk: __skb_queue_tail(&sk->sk_receive_queue, skb); +avoid_add_skb_to_sk: tp->syn_data_acked =3D 1; =20 /* u64_stats_update_begin(&tp->syncp) not needed here, @@ -283,7 +315,7 @@ static struct sock *tcp_fastopen_create_child(struct so= ck *sk, =20 tp->rcv_nxt =3D TCP_SKB_CB(skb)->seq + 1; =20 - tcp_fastopen_add_skb(child, skb); + tcp_fastopen_add_skb(child, skb, req); =20 tcp_rsk(req)->rcv_nxt =3D tp->rcv_nxt; tp->rcv_wup =3D tp->rcv_nxt; @@ -350,17 +382,26 @@ struct sock *tcp_try_fastopen(struct sock *sk, struct= sk_buff *skb, bool syn_data =3D TCP_SKB_CB(skb)->end_seq !=3D TCP_SKB_CB(skb)->seq + 1; int tcp_fastopen =3D READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_fastopen); struct tcp_fastopen_cookie valid_foc =3D { .len =3D -1 }; + struct tcp_sock *tp =3D tcp_sk(sk); struct sock *child; int ret =3D 0; =20 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 (tp->syn_fastopen && 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; + } } =20 if (tcp_fastopen_no_cookie(sk, dst, TFO_SERVER_COOKIE_NOT_REQD)) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index bc2ea12221f9..3facccee9dcb 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -6134,7 +6134,7 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, = struct sk_buff *synack, --tp->delivered; } =20 - tcp_fastopen_add_skb(sk, synack); + tcp_fastopen_add_skb(sk, synack, NULL); =20 return false; } @@ -6954,7 +6954,14 @@ int tcp_conn_request(struct request_sock_ops *rsk_op= s, if (IS_ENABLED(CONFIG_SMC) && want_cookie) tmp_opt.smc_ok =3D 0; =20 - tmp_opt.tstamp_ok =3D tmp_opt.saw_tstamp; + if (foc.len =3D=3D -1 && sk_is_mptcp(sk)) { + tmp_opt.tstamp_ok =3D tmp_opt.saw_tstamp; + } else { + tmp_opt.tstamp_ok =3D 0; + tcp_rsk(req)->ts_off =3D 1; + tp->syn_fastopen =3D 1; + } + tcp_openreq_init(req, &tmp_opt, skb, sk); inet_rsk(req)->no_srccheck =3D inet_sk(sk)->transparent; =20 diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 8cf307e4e59c..b2329ef298fd 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -178,7 +178,7 @@ static void __mptcp_rmem_reclaim(struct sock *sk, int a= mount) __sk_mem_reduce_allocated(sk, amount); } =20 -static void mptcp_rmem_uncharge(struct sock *sk, int size) +void mptcp_rmem_uncharge(struct sock *sk, int size) { struct mptcp_sock *msk =3D mptcp_sk(sk); int reclaimable; @@ -191,7 +191,7 @@ static void mptcp_rmem_uncharge(struct sock *sk, int si= ze) __mptcp_rmem_reclaim(sk, reclaimable); } =20 -static void mptcp_rfree(struct sk_buff *skb) +void mptcp_rfree(struct sk_buff *skb) { unsigned int len =3D skb->truesize; struct sock *sk =3D skb->sk; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 3b9a349a7080..5d86cd7d8dab 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -840,6 +840,8 @@ 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); int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, int = addr_len, int flags); +void mptcp_rmem_uncharge(struct sock *sk, int size); +void mptcp_rfree(struct sk_buff *skb); =20 // Fast Open Mechanism functions begin int mptcp_setsockopt_sol_tcp_fastopen(struct mptcp_sock *msk, sockptr_t op= tval, --=20 2.25.1 From nobody Sun Sep 8 03:03:44 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 2E2A41C14 for ; Tue, 20 Sep 2022 12:52:54 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1663678371; cv=none; d=zohomail.eu; s=zohoarc; b=e5F0RmK6+C4197WiIJzx75rKR9TURglKEw57Ous5+wcfAAdYcZTB00cIajAFERyf278GqUOwenX94hTbfyEQ2HRgUtNzmeDUD2E6YOEEoJ0pN7VN8t1ZQHp1/1CFhT+3qqk3iRIKmQ2tGCcO/ulr3O8BB7o0tGPw1YETV+76OTs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1663678371; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=A374qcFGZnxbZk1AlL4TUHso2FHnehXtgKDlDMolsaI=; b=NJqnICnGtpKYy02cg8wRE/1HuGAepDMh8kSfXK/qNshbTjlHKSEl4xHi+jzlFNe16SSxBYr7Isz9ghc2hwb5MkxYHAiAyDQWMfyRKmAh4FhFyzH4oHzM58cgPF90aIp1apsQ6bstdIDkVFQAT5nvy9Mkb1OJJbSpUiz9awEGP38= 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=1663678371; 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=A374qcFGZnxbZk1AlL4TUHso2FHnehXtgKDlDMolsaI=; b=Ms1JAxelW1fuYPNop7I4ADWeRvtew0M6C1zPFCtG1uhVeUsXTHlAwjhHROfKMafO 03ruxHafpXBHbAVPngisuTNFlPy1pvJf9YLO9DpaiMqo/0LO+hyiWhnsLQMCpHLCe4L nx+EtdJKawTtoUSRKlsMMKAQax3OytTqgiyrJKqY= Received: from doris.localdomain (243.34.22.93.rev.sfr.net [93.22.34.243]) by mx.zoho.eu with SMTPS id 166367836992645.303161780793516; Tue, 20 Sep 2022 14:52:49 +0200 (CEST) From: Dmytro Shytyi To: mptcp@lists.linux.dev Cc: Dmytro Shytyi Message-ID: <20220920125243.2880-8-dmytro@shytyi.net> Subject: [RFC PATCH mptcp-next v8 7/7] selftests: mptfo initiator/listener Date: Tue, 20 Sep 2022 14:52:43 +0200 X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220920125243.2880-1-dmytro@shytyi.net> References: <20220920125243.2880-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 | 41 ++++++++ .../selftests/net/mptcp/mptfo_listener.c | 98 +++++++++++++++++++ 3 files changed, 152 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..e23b88693fb0 --- /dev/null +++ b/tools/testing/selftests/net/mptcp/mptfo_initiator.c @@ -0,0 +1,41 @@ +#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..7e3de8d1d08c --- /dev/null +++ b/tools/testing/selftests/net/mptcp/mptfo_listener.c @@ -0,0 +1,98 @@ +#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.25.1