From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 74B7E2CA5 for ; Wed, 12 Jan 2022 22:16:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642025771; x=1673561771; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=S0AsE2RcH/TKnANLPBUSz/kAluumjiVVGKrw50vnyG4=; b=WQT1JFihLmwUvtEx71l5vxDcvgyKhOFB2+O9bUByyQX/HsHFDurlaL33 oILCGK0PQFbbB2CcWwnUrqWZVUV8lpXlDQvec5RW3EWknJqRIrVfVqmqv ancXj7cR2aWQr696qMmBuDExVtYcCb7zopvnyUiY5mXEXdSh6jXnF68tQ /ir9DWafyOHasWrVgeH6Vbui2M0EuwWLkWHSpV1QnECCSVgtFbDywC75I nbFOIcjaFkPvb0nnwjtw98fOwxyOm3SLgDh3rZp+7gwlaiSVv1aJfY4/O 7PDA/JlG/HyOJk6ZolhqUjgMc2bihqFKjFzg/rlv9ZKFmmwmF2Vl7ATgC A==; X-IronPort-AV: E=McAfee;i="6200,9189,10225"; a="307213931" X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="307213931" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2022 14:16:07 -0800 X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="490907339" Received: from otc-tsn-4.jf.intel.com ([10.23.153.135]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2022 14:16:07 -0800 From: Kishen Maloor To: kishen.maloor@intel.com, mptcp@lists.linux.dev Subject: [PATCH mptcp-next v2 04/21] mptcp: establish subflows from either end of connection Date: Wed, 12 Jan 2022 17:15:06 -0500 Message-Id: <20220112221523.1829397-5-kishen.maloor@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220112221523.1829397-1-kishen.maloor@intel.com> References: <20220112221523.1829397-1-kishen.maloor@intel.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This change updates internal logic to permit subflows to be established from either the client or server ends of MPTCP connections. This symmetry and added flexibility may be harnessed by PM implementations running on either end in creating new subflows. The essence of this change lies in not relying on the "server_side" flag (which continues to be available if needed). v2: check for 3rd ACK retransmission only on passive side of the MPJ handshake Signed-off-by: Kishen Maloor --- net/mptcp/options.c | 2 +- net/mptcp/protocol.c | 5 +---- net/mptcp/protocol.h | 2 -- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index cceba8c7806d..89808816db06 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -921,7 +921,7 @@ static bool check_fully_established(struct mptcp_sock *msk, struct sock *ssk, if (TCP_SKB_CB(skb)->seq == subflow->ssn_offset + 1 && TCP_SKB_CB(skb)->end_seq == TCP_SKB_CB(skb)->seq && subflow->mp_join && (mp_opt->suboptions & OPTIONS_MPTCP_MPJ) && - READ_ONCE(msk->pm.server_side)) + !subflow->request_join) tcp_send_ack(ssk); goto fully_established; } diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 4012f844eec1..408a05bff633 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3248,15 +3248,12 @@ bool mptcp_finish_join(struct sock *ssk) return false; } - if (!msk->pm.server_side) + if (!list_empty(&subflow->node)) goto out; if (!mptcp_pm_allow_new_subflow(msk)) goto err_prohibited; - if (WARN_ON_ONCE(!list_empty(&subflow->node))) - goto err_prohibited; - /* active connections are already on conn_list. * If we can't acquire msk socket lock here, let the release callback * handle it diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index e2a67d3469f6..c50247673c7e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -908,10 +908,8 @@ static inline bool mptcp_check_infinite_map(struct sk_buff *skb) static inline bool subflow_simultaneous_connect(struct sock *sk) { struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); - struct sock *parent = subflow->conn; return sk->sk_state == TCP_ESTABLISHED && - !mptcp_sk(parent)->pm.server_side && !subflow->conn_finished; } -- 2.31.1