mptcp: add MSG_FASTOPEN sendmsg flag support
authorDmytro Shytyi <dmytro@shytyi.net>
Fri, 25 Nov 2022 22:29:47 +0000 (23:29 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 30 Nov 2022 04:24:24 +0000 (20:24 -0800)
Since commit 54f1944ed6d2 ("mptcp: factor out mptcp_connect()"), all the
infrastructure is now in place to support the MSG_FASTOPEN flag, we
just need to call into the fastopen path in mptcp_sendmsg().

Co-developed-by: Benjamin Hesmans <benjamin.hesmans@tessares.net>
Signed-off-by: Benjamin Hesmans <benjamin.hesmans@tessares.net>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Dmytro Shytyi <dmytro@shytyi.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/protocol.c

index 3722a8580b6121d51e7966a17a5abb7c9010fa1a..efc84816a692914fbd75500d867b5a132ef96c26 100644 (file)
@@ -1711,17 +1711,14 @@ static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
        int ret = 0;
        long timeo;
 
-       /* we don't support FASTOPEN yet */
-       if (msg->msg_flags & MSG_FASTOPEN)
-               return -EOPNOTSUPP;
-
        /* silently ignore everything else */
-       msg->msg_flags &= MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL;
+       msg->msg_flags &= MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL | MSG_FASTOPEN;
 
        lock_sock(sk);
 
        ssock = __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))) {
                int copied_syn = 0;
 
                ret = mptcp_sendmsg_fastopen(sk, ssock->sk, msg, len, &copied_syn);