From patchwork Wed Nov 6 04:41:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Krystad X-Patchwork-Id: 1190116 X-Patchwork-Delegate: matthieu.baerts@tessares.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.01.org (client-ip=2001:19d0:306:5::1; helo=ml01.01.org; envelope-from=mptcp-bounces@lists.01.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.intel.com Received: from ml01.01.org (ml01.01.org [IPv6:2001:19d0:306:5::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 477DQH3mcCz9sPv for ; Wed, 6 Nov 2019 15:41:42 +1100 (AEDT) Received: from new-ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 5E13A100DC3D8; Tue, 5 Nov 2019 20:44:16 -0800 (PST) Received-SPF: Pass (helo) identity=helo; client-ip=192.55.52.136; helo=mga12.intel.com; envelope-from=peter.krystad@linux.intel.com; receiver= Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id AF040100EA61C for ; Tue, 5 Nov 2019 20:44:13 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Nov 2019 20:41:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,272,1569308400"; d="scan'208";a="232731850" Received: from pkrystad-mobl4.sea.intel.com (HELO localhost.localdomain) ([10.252.132.183]) by fmsmga002.fm.intel.com with ESMTP; 05 Nov 2019 20:41:35 -0800 From: Peter Krystad To: mptcp@lists.01.org Date: Tue, 5 Nov 2019 20:41:30 -0800 Message-Id: <20191106044133.14418-4-peter.krystad@linux.intel.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20191106044133.14418-1-peter.krystad@linux.intel.com> References: <20191106044133.14418-1-peter.krystad@linux.intel.com> Message-ID-Hash: JRZMVYPY2HC3RWAOSXKOLNMRL2WH5XW4 X-Message-ID-Hash: JRZMVYPY2HC3RWAOSXKOLNMRL2WH5XW4 X-MailFrom: peter.krystad@linux.intel.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.1.1 Precedence: list Subject: [MPTCP] [PATCH v2 3/6] mptcp: Re-factor mptcp_getname routine to be af-agnostic List-Id: Discussions regarding MPTCP upstreaming Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Split mptcp_getname into two parts: af-specific part and functional part. squashto: Create SUBFLOW socket for incoming connections Signed-off-by: Peter Krystad --- net/mptcp/protocol.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index b3263a7f6458..323b3e65dba2 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1147,18 +1147,6 @@ static int mptcp_getname(struct socket *sock, struct sockaddr *uaddr, struct sock *ssk; int ret; - if (sock->sk->sk_prot == &tcp_prot) { - /* we are being invoked from __sys_accept4, after - * mptcp_accept() has just accepted a non-mp-capable - * flow: sk is a tcp_sk, not an mptcp one. - * - * Hand the socket over to tcp so all further socket ops - * bypass mptcp. - */ - sock->ops = &inet_stream_ops; - return sock->ops->getname(sock, uaddr, peer); - } - lock_sock(sock->sk); ssock = __mptcp_fallback_get_ref(msk); if (ssock) { @@ -1184,6 +1172,28 @@ static int mptcp_getname(struct socket *sock, struct sockaddr *uaddr, return ret; } +static int mptcp_v4_getname(struct socket *sock, struct sockaddr *uaddr, + int peer) +{ + int ret; + + if (sock->sk->sk_prot == &tcp_prot) { + /* we are being invoked from __sys_accept4, after + * mptcp_accept() has just accepted a non-mp-capable + * flow: sk is a tcp_sk, not an mptcp one. + * + * Hand the socket over to tcp so all further socket ops + * bypass mptcp. + */ + sock->ops = &inet_stream_ops; + return sock->ops->getname(sock, uaddr, peer); + } + + ret = mptcp_getname(sock, uaddr, peer); + + return ret; +} + static int mptcp_listen(struct socket *sock, int backlog) { struct mptcp_sock *msk = mptcp_sk(sock->sk); @@ -1300,7 +1310,7 @@ void mptcp_proto_init(void) mptcp_stream_ops.connect = mptcp_stream_connect; mptcp_stream_ops.poll = mptcp_poll; mptcp_stream_ops.accept = mptcp_stream_accept; - mptcp_stream_ops.getname = mptcp_getname; + mptcp_stream_ops.getname = mptcp_v4_getname; mptcp_stream_ops.listen = mptcp_listen; mptcp_stream_ops.shutdown = mptcp_shutdown;