From nobody Fri May 3 13:06:00 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:bd2:0:0:0:0 with SMTP id g18csp2020382jad; Thu, 24 Feb 2022 15:22:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJwPfNmSrcSlmhoZ8BhJP+W1Zfqx3X1ZxvU44v3XAbpW2NHXvPB61EflwGRkVM/NY1BOFg9Q X-Received: by 2002:a17:902:8ec9:b0:14f:11f7:db77 with SMTP id x9-20020a1709028ec900b0014f11f7db77mr4597167plo.136.1645744953146; Thu, 24 Feb 2022 15:22:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645744953; cv=none; d=google.com; s=arc-20160816; b=ItwGKO5ky7+B/yOOEQL7lIizHOXNOsw5DIs97NW3K6NMSG4ADgXpp0cDyQ1PaCYk0v CeNL/5996svIoHbri49J7cQgF29UQF52gPW0RI/SR8MHHJcc267WYDxfzo/6VHU+DJLm yBmfge4SnSpVn9obxBNdJ0pdYi40ccbg/bj90DFegZqYjQ2yFMWk2UgUrEjd3tOX5Pfc +T3kofCLaNN0lCzJxBEsBKQUeR/GEVxJwcOcg9kMj+MRJ+x1lXF9n3GZjYg4eVXjyVp4 pjya7D8AyicE9bfTNTDcXhmChDTeqJ9nch+RXlRSs/ywStUC0EWykIn2UNpoDsQNAaAL 4Zmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=66mNFf8viiPIvzB+UmVXsoKsriyrVtVe/Aue7hJAGLw=; b=XoT5OEZ1B0VmjgQd5WAxPcr1TA6TJWjs+1yvU1wZLholpBt6mu7dDk0nM/Tmv1lNqu SkdAAn3cBOfM3DXrv0iyGYMfWU3oFfddWEJVnTXSMyUUFw1eVg2+xM6gsaldwTnyA/7M iNM76GTVai/KqBJ+cADT8Lnu+txelQiJ4pOeT2wPsOJQxnm6XfnLtT11pcn7ygV/GRE0 8OCvSNZ5lyaU8MzfrNYbKqD1ZIiYBnjpwqKNNYfwlp92LDRjEZT9EyhmxIjVl1gYrrBh ide+cpWbmXqTMOOEM1gsl0gHHkP5cWBCThOgl9CG7eaff1S7Rua2swBRGNJjNW7xjnxL /HMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="mEfQ8P3/"; spf=pass (google.com: domain of mptcp+bounces-4027-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-4027-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id u2-20020a170903124200b001500760bfcesi380870plh.615.2022.02.24.15.22.33 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 Feb 2022 15:22:33 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-4027-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="mEfQ8P3/"; spf=pass (google.com: domain of mptcp+bounces-4027-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-4027-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sjc.edge.kernel.org (Postfix) with ESMTPS id 68B303E0F0D for ; Thu, 24 Feb 2022 23:22:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6362F10E0; Thu, 24 Feb 2022 23:22:31 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 2E75D6ABC for ; Thu, 24 Feb 2022 23:22:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645744950; x=1677280950; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LWEmFrZ2U2Fi08dR/mdrOd+Y5WVaan8bzd0gJqYlgCE=; b=mEfQ8P3/cAfAr/6Gp0NcRdClM7dmQsw9R4sDBBfxWJuoc+sjkhnM9s16 4n6PzoNbz+kCdoYgeijQpw3M7OlSKQwY0Td/3yykllkXRPA0jR4oXyKXw j0XvR2eKP95VDqHWzgdsbJZ2T15GlhIyg/AzAbwrjZSXHEBUSy0hANCHH FTkrbVidZUAzLDC9SHx4SDhSQ3HH5xk3/Xjg35f0N/vKHYANOn2O71o2V ZGbZABV5sTIG/NsnvR/vboymhJOlzZANUZfnCq2Bq1mmsz00XHOo97Wd8 wdTj0Gvz5s9DgpiyJ84scmDCkZfP2/RGC4+j4XmjJohAMTjm/Zd0z4Zpe w==; X-IronPort-AV: E=McAfee;i="6200,9189,10268"; a="232998394" X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="232998394" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="491784930" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.28.67]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau , fw@strlen.de Subject: [RFC PATCH mptcp-next 1/4] mptcp: Move some symbols to be visible outside the MPTCP subsystem Date: Thu, 24 Feb 2022 15:22:23 -0800 Message-Id: <20220224232226.259304-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> References: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Later patches will be checking MPTCP enabled status and a TCP option, so make those symbols available in TCP code. Signed-off-by: Mat Martineau --- include/net/mptcp.h | 18 ++++++++++++++++++ net/mptcp/protocol.h | 12 ------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index b8939d7ea12e..211f395d8139 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -16,6 +16,17 @@ struct mptcp_info; struct mptcp_sock; struct seq_file; =20 +/* MPTCP option subtypes */ +#define MPTCPOPT_MP_CAPABLE 0 +#define MPTCPOPT_MP_JOIN 1 +#define MPTCPOPT_DSS 2 +#define MPTCPOPT_ADD_ADDR 3 +#define MPTCPOPT_RM_ADDR 4 +#define MPTCPOPT_MP_PRIO 5 +#define MPTCPOPT_MP_FAIL 6 +#define MPTCPOPT_MP_FASTCLOSE 7 +#define MPTCPOPT_RST 8 + /* MPTCP sk_buff extension data */ struct mptcp_ext { union { @@ -100,6 +111,8 @@ extern struct request_sock_ops mptcp_subflow_request_so= ck_ops; =20 void mptcp_init(void); =20 +int mptcp_is_enabled(const struct net *net); + static inline bool sk_is_mptcp(const struct sock *sk) { return tcp_sk(sk)->is_mptcp; @@ -219,6 +232,11 @@ static inline void mptcp_init(void) { } =20 +static inline int mptcp_is_enabled(const struct net *net) +{ + return 0; +} + static inline bool sk_is_mptcp(const struct sock *sk) { return false; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 7ec2513e1c2f..75c852f0dd3a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -36,17 +36,6 @@ #define OPTIONS_MPTCP_MPJ (OPTION_MPTCP_MPJ_SYN | OPTION_MPTCP_MPJ_SYNACK = | \ OPTION_MPTCP_MPJ_ACK) =20 -/* MPTCP option subtypes */ -#define MPTCPOPT_MP_CAPABLE 0 -#define MPTCPOPT_MP_JOIN 1 -#define MPTCPOPT_DSS 2 -#define MPTCPOPT_ADD_ADDR 3 -#define MPTCPOPT_RM_ADDR 4 -#define MPTCPOPT_MP_PRIO 5 -#define MPTCPOPT_MP_FAIL 6 -#define MPTCPOPT_MP_FASTCLOSE 7 -#define MPTCPOPT_RST 8 - /* MPTCP suboption lengths */ #define TCPOLEN_MPTCP_MPC_SYN 4 #define TCPOLEN_MPTCP_MPC_SYNACK 12 @@ -577,7 +566,6 @@ static inline void mptcp_subflow_delegated_done(struct = mptcp_subflow_context *su clear_bit(action, &subflow->delegated_status); } =20 -int mptcp_is_enabled(const struct net *net); unsigned int mptcp_get_add_addr_timeout(const struct net *net); int mptcp_is_checksum_enabled(const struct net *net); int mptcp_allow_join_id0(const struct net *net); --=20 2.35.1 From nobody Fri May 3 13:06:00 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:bd2:0:0:0:0 with SMTP id g18csp2020387jad; Thu, 24 Feb 2022 15:22:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJzsnhI9ACzgQFZFCR8+7XQWDJqsqu71cnm+gXKiOgwNGXEwY+ZwvakfaWN6DjYcpoWoSqWV X-Received: by 2002:a81:5fc3:0:b0:2d7:ab5d:1dd8 with SMTP id t186-20020a815fc3000000b002d7ab5d1dd8mr4926529ywb.514.1645744954093; Thu, 24 Feb 2022 15:22:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645744954; cv=none; d=google.com; s=arc-20160816; b=TSP73EqKnNCR/nXtAlyQryG7gPKeKs4J945KxW25EqNjieeo6kmaOGTKeHa3IQhEPw KolEuOgLeTYYvFgWxJZwBIKO5jYEyrYiNE0Z/v8NST5Kz05zfi+sBxvyx2nieddXL3df EHKdErRgoXa1Xp2rWQxwkg3H3HxYCRNw43BxhIh9K0h+4RHaOmti4amNJR97K6XkhjCU f2O2b7xRb3oD5yl8jKJ4LRErAjoHk2HiyZpW19X5QkjO0oKHyyJRnURf6hPx67FlO6D5 Hn54Ei3vDnaqghTl5QR5OXVG5jznICTWylRy5p4zZ7tZYj9yhixc04K9MtOk0oQxCYHk DOdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=W9N6Itf09BVlqgBDWVUwjW0pROv/e/Ilfhy3JSwXGfU=; b=C5zdy12eyT+/4Ad3hRets+tD/8Yc6AaJU45sVlrYNex949/cHFYKZ3K3b90E4QW/Af fFblB7UdCd0lh+pe+mFZQIWGgK6ttMlCf/Q2f3BZTtTDAU1J11OBLFMeh1yp4wGBCIdg I+xCs16lny/vLc1X5begeMKu6P8AYGn1+3b1Rhtmr8hJ9TwkjGb/aF8DNosQ8jQt7Fze RLlz5H0TO4/eQ/QprY8gZB5sPLtD3eSg6NjlrV6ustmUZMbuiG7tuVPVw42bign906SG P81VBIKVg/540+PRI5Uy08srds8iVOrbXqJqHZZbA6mQ+qN5mwLlrrjMnE7iRgRLHKdE QYsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=XE83anwO; spf=pass (google.com: domain of mptcp+bounces-4028-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4028-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [2604:1380:1:3600::1]) by mx.google.com with ESMTPS id 184-20020a2505c1000000b0061a06e38f2fsi810145ybf.133.2022.02.24.15.22.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 Feb 2022 15:22:34 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-4028-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) client-ip=2604:1380:1:3600::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=XE83anwO; spf=pass (google.com: domain of mptcp+bounces-4028-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4028-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ewr.edge.kernel.org (Postfix) with ESMTPS id B8B5F1C0B49 for ; Thu, 24 Feb 2022 23:22:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EBB1310E3; Thu, 24 Feb 2022 23:22:31 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 7E3976ADB for ; Thu, 24 Feb 2022 23:22:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645744950; x=1677280950; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ueI6AXKUpu13rwh4tTo1/sxA24G7VVoqab0DpiBrETk=; b=XE83anwOAkJjbHouI+aNJBclGeR/v+kQAapd3YJcfg4HORMqOQhTJDJv I9NfogvD39fFirjCWaUtUWnZMiXts9B6RjP4oJ2yq9D1R1w3WzPBXZ8zx HgjsftIgUZM0XS3DXJhfBnI74A9tUhExY9V/RamWNlVJXTbzVAnvswHJq CvhtQUDgYr9V67kX8GH7IzBymXn7+R/feC5+2Qi1oB9l0UWujD8owZ12b cj/80WRWPmU9ONgSG+GVzw5DKz558llEn3FSDglfavAiAEQkAAAxcOqVe btKDjszxnNfBGaNZ3eEUVifMDY1dj3Fyio1zd7Nw9Wqi0duYAfv7ng3as g==; X-IronPort-AV: E=McAfee;i="6200,9189,10268"; a="232998397" X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="232998397" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="491784931" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.28.67]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau , fw@strlen.de Subject: [RFC PATCH mptcp-next 2/4] tcp: Allow tcp_check_req() to return more status values Date: Thu, 24 Feb 2022 15:22:24 -0800 Message-Id: <20220224232226.259304-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> References: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" tcp_check_req() can already use an output parameter to set req_status, indicating whether the current thread has lost a race to process the req. Convert this bool pointer to instead use an enum, so tcp_check_req() can look for and set status values indicating other situations. This is used in a subsequent commit to check for a MPTCP MP_JOIN header. There is no functional change intended in this patch. Signed-off-by: Mat Martineau --- include/net/tcp.h | 10 +++++++++- net/ipv4/tcp_input.c | 4 ++-- net/ipv4/tcp_ipv4.c | 6 +++--- net/ipv4/tcp_minisocks.c | 6 +++--- net/ipv6/tcp_ipv6.c | 6 +++--- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index 04f4650e0ff0..0215acaec29f 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -382,9 +382,17 @@ enum tcp_tw_status { enum tcp_tw_status tcp_timewait_state_process(struct inet_timewait_sock *t= w, struct sk_buff *skb, const struct tcphdr *th); + +enum tcp_req_status { + TCP_REQ_OK =3D 0, + TCP_REQ_LOST_RACE =3D 1, + TCP_REQ_MP_JOIN =3D 2 +}; + struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb, struct request_sock *req, bool fastopen, - bool *lost_race); + enum tcp_req_status *req_status); + int tcp_child_process(struct sock *parent, struct sock *child, struct sk_buff *skb); void tcp_enter_loss(struct sock *sk); diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 2088f93fa37b..7eb02f9da3c9 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -6457,12 +6457,12 @@ int tcp_rcv_state_process(struct sock *sk, struct s= k_buff *skb) req =3D rcu_dereference_protected(tp->fastopen_rsk, lockdep_sock_is_held(sk)); if (req) { - bool req_stolen; + enum tcp_req_status req_status; =20 WARN_ON_ONCE(sk->sk_state !=3D TCP_SYN_RECV && sk->sk_state !=3D TCP_FIN_WAIT1); =20 - if (!tcp_check_req(sk, skb, req, true, &req_stolen)) + if (!tcp_check_req(sk, skb, req, true, &req_status)) goto discard; } =20 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index feb779d1fd21..73e5726af8d0 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -2030,8 +2030,8 @@ int tcp_v4_rcv(struct sk_buff *skb) goto do_time_wait; =20 if (sk->sk_state =3D=3D TCP_NEW_SYN_RECV) { + enum tcp_req_status req_status =3D TCP_REQ_OK; struct request_sock *req =3D inet_reqsk(sk); - bool req_stolen =3D false; struct sock *nsk; =20 sk =3D req->rsk_listener; @@ -2067,13 +2067,13 @@ int tcp_v4_rcv(struct sk_buff *skb) th =3D (const struct tcphdr *)skb->data; iph =3D ip_hdr(skb); tcp_v4_fill_cb(skb, iph, th); - nsk =3D tcp_check_req(sk, skb, req, false, &req_stolen); + nsk =3D tcp_check_req(sk, skb, req, false, &req_status); } else { drop_reason =3D SKB_DROP_REASON_SOCKET_FILTER; } if (!nsk) { reqsk_put(req); - if (req_stolen) { + if (req_status =3D=3D TCP_REQ_LOST_RACE) { /* Another cpu got exclusive access to req * and created a full blown socket. * Try to feed this packet to this socket diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index 6366df7aaf2a..3d989f8676a5 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -562,7 +562,7 @@ EXPORT_SYMBOL(tcp_create_openreq_child); =20 struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb, struct request_sock *req, - bool fastopen, bool *req_stolen) + bool fastopen, enum tcp_req_status *req_status) { struct tcp_options_received tmp_opt; struct sock *child; @@ -774,7 +774,7 @@ struct sock *tcp_check_req(struct sock *sk, struct sk_b= uff *skb, =20 sock_rps_save_rxhash(child, skb); tcp_synack_rtt_meas(child, req); - *req_stolen =3D !own_req; + *req_status =3D own_req ? TCP_REQ_OK : TCP_REQ_LOST_RACE; return inet_csk_complete_hashdance(sk, child, req, own_req); =20 listen_overflow: @@ -803,7 +803,7 @@ struct sock *tcp_check_req(struct sock *sk, struct sk_b= uff *skb, =20 if (unlinked) __NET_INC_STATS(sock_net(sk), LINUX_MIB_EMBRYONICRSTS); - *req_stolen =3D !unlinked; + *req_status =3D unlinked ? TCP_REQ_OK : TCP_REQ_LOST_RACE; } return NULL; } diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index b414e2f77fa3..4706aad6dd8f 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -1682,8 +1682,8 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff= *skb) goto do_time_wait; =20 if (sk->sk_state =3D=3D TCP_NEW_SYN_RECV) { + enum tcp_req_status req_status =3D TCP_REQ_OK; struct request_sock *req =3D inet_reqsk(sk); - bool req_stolen =3D false; struct sock *nsk; =20 sk =3D req->rsk_listener; @@ -1716,13 +1716,13 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_bu= ff *skb) th =3D (const struct tcphdr *)skb->data; hdr =3D ipv6_hdr(skb); tcp_v6_fill_cb(skb, hdr, th); - nsk =3D tcp_check_req(sk, skb, req, false, &req_stolen); + nsk =3D tcp_check_req(sk, skb, req, false, &req_status); } else { drop_reason =3D SKB_DROP_REASON_SOCKET_FILTER; } if (!nsk) { reqsk_put(req); - if (req_stolen) { + if (req_status =3D=3D TCP_REQ_LOST_RACE) { /* Another cpu got exclusive access to req * and created a full blown socket. * Try to feed this packet to this socket --=20 2.35.1 From nobody Fri May 3 13:06:00 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:bd2:0:0:0:0 with SMTP id g18csp2020395jad; Thu, 24 Feb 2022 15:22:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJwLBr0nJ+uEoPtEbXADslqrJ1j7G+OtxBXiMdm4uT9bzeh1j9bphCY+52WYUgQPYA0D6439 X-Received: by 2002:a05:6a00:1503:b0:4e1:d277:cca with SMTP id q3-20020a056a00150300b004e1d2770ccamr5032217pfu.4.1645744955052; Thu, 24 Feb 2022 15:22:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645744955; cv=none; d=google.com; s=arc-20160816; b=FIvv8EzNxzZ1p05cAGgdljrl7X1GZgK92u2a4dqdR2kIkp/YA/wyFtWCJ4r0Dr3zXb k4cGaV+FjkmWCMQX20bmXgqbHS2B61CqzFWlPU0PbJNWrRyFCNMKe0gnfrjZMXTX3TSY VvKXJ1RU+rpbe/WFKRAIfK/BZZt7kl4rW4/Ika9WIOlIniuQCPBsDAZ6sFcRWbDIDT6Z Zve3YSYqBh0cvnKdrRHi8VJPMrMOFt2QIvyqh6bFotMDHk3DD3LkDTdWBE7JcNbCobY9 RdH24KeVT1uzN680SUCXxvG3QyUunB7Lg8Zd2q/jNNRPuHlpO2sBBu1zdnWf27qgRcLN CIdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=CXIb2E5Z4XVxCu4FwtAqY3c/BGnKx2YgFV3j9QWQVLY=; b=pCIPQX2LbuNcNTr30cC42QTX/zHZewb4Ywo1RMO//IayOaiaH4A3kNqds4XFSuyu3r A1GGRdyIDZcQ9XSFOaaLu9EKlo4raxyMeLZDRmLYG1m+BrnHMQeExdsrX7Nzts4JnKgz 6ZXCiHuSgBxb1Ms08kBGgVlezCCHv7oUXYbH8Soh3bGyBzWrQTH36GnhiVbydNQW3o4W c/mefUgKWj7SmN9sisTd+ePZjI3g54xbeMPUBVJdHntY4FkTbHgm4gRrfTIJqAz1n9wV Y5Y6XloBaFJAZwu+a2k/PTOpgeDlERwiMgR2dT1z+WlyQ5KldCfvKPhh4DLHSGFKjMts EHeQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ES4bUC9v; spf=pass (google.com: domain of mptcp+bounces-4029-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-4029-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id u2-20020a170903124200b001500760bfcesi380870plh.615.2022.02.24.15.22.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 Feb 2022 15:22:35 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-4029-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ES4bUC9v; spf=pass (google.com: domain of mptcp+bounces-4029-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-4029-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sjc.edge.kernel.org (Postfix) with ESMTPS id 75ACD3E0F09 for ; Thu, 24 Feb 2022 23:22:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 66ECF10E4; Thu, 24 Feb 2022 23:22:32 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 7966910E1 for ; Thu, 24 Feb 2022 23:22:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645744951; x=1677280951; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jcxPSYB1Zxxid+t+G+YhJEo7aY7Sfx9GM5su9zqZIAU=; b=ES4bUC9vRm0v5UAquUz8X/Br/CsV9k1DeHsg/x0P32itdYargckcVlO6 46GRFXWGBkbp82Ylu/LxM4+X4RTMsGNg334jdkcp7JUvBwHmQGvyJEI97 JSjibmP8okvfaQXAeHznFAgIJIZzU/1OnuFp1AStSl7N7LxQFh3NyP+d8 fyqPRkB2igdX4sivYRtNVEYRBMtUUvHcsMiUMFg81kytkvQRBU+TRENvv +yLi79WqsA9rkLK5qmcuLn0L4f+pnEF3ihKaZH155WCYWFjWZOsdEH1r6 iD2nMBjW/GZhPSAosDq/RmFqUXwzPdNe2tRFjG8kdZpIb3fDHAZZmrnhb A==; X-IronPort-AV: E=McAfee;i="6200,9189,10268"; a="232998399" X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="232998399" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="491784932" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.28.67]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau , fw@strlen.de Subject: [RFC PATCH mptcp-next 3/4] tcp: Check for the presence of a MP_JOIN option Date: Thu, 24 Feb 2022 15:22:25 -0800 Message-Id: <20220224232226.259304-4-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> References: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a bit to struct tcp_options_received and set that bit if a MPTCP option with the MP_JOIN subtype is present in a TCP header. Signed-off-by: Mat Martineau --- include/linux/tcp.h | 3 ++- net/ipv4/tcp_input.c | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 1168302b7927..46a14bce8019 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -93,7 +93,8 @@ struct tcp_options_received { snd_wscale : 4, /* Window scaling received from sender */ rcv_wscale : 4; /* Window scaling to send to receiver */ u8 saw_unknown:1, /* Received unknown option */ - unused:7; + saw_mp_join:1, /* Received MPTCP MP_JOIN */ + unused:6; u8 num_sacks; /* Number of SACK blocks */ u16 user_mss; /* mss requested by user in ioctl */ u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 7eb02f9da3c9..845f0e6906b5 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4122,6 +4122,14 @@ void tcp_parse_options(const struct net *net, opt_rx->saw_unknown =3D 1; break; =20 + case TCPOPT_MPTCP: + __u8 mptcp_subtype =3D *ptr >> 4; + + if (mptcp_subtype =3D=3D MPTCPOPT_MP_JOIN) + opt_rx->saw_mp_join =3D 1; + + break; + default: opt_rx->saw_unknown =3D 1; } --=20 2.35.1 From nobody Fri May 3 13:06:00 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:bd2:0:0:0:0 with SMTP id g18csp2020401jad; Thu, 24 Feb 2022 15:22:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJz0LGP5iA/p4oAjtiNlz5cqpAMD3BfLOZkNfAO8+WOdnKTT44tX0Td3FPFTzQylmT20zrSv X-Received: by 2002:a17:90a:9408:b0:1b5:3908:d3d1 with SMTP id r8-20020a17090a940800b001b53908d3d1mr407688pjo.188.1645744956311; Thu, 24 Feb 2022 15:22:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645744956; cv=none; d=google.com; s=arc-20160816; b=ip6oAiSxky/tJ2UvYWu4u5VTwJCNGBA1hvCB2PltMMAF2TJnsXdGSiyTjlDZdAQHHC tAU8WDzUAYDnmYC8Y/8bZwLJvVsV+9LI+Og/ywJzA72HMhqRMhQru3Cijwl6Oxtfctc1 /LlucPlJoihjz46CCvScF0bvnfDKMGDq8+xj7LAuuYewiaCb6LWrivzhNbXJuaJnh79k z8/p3fgwmutzpMaLQt9Z0tUPQbgkes99Dw8TP3MLUbJFHqh3AgrKwGEs9hqIlEtrmSOP FRXUm2uDJukUqSLqYK8fWRzY5RhJD7kmVMpjHTDFa282qxUJkrSUX/SgqGH6oZST2OtP ieSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=j7BEh702zJvVyiLCDT5WBGbJRNKxuoU4tUYAvEh8+kg=; b=w1aG7foeyVPnh90HiPjS6F+b361JM3mHQr92pVlJIUjCuYvKa88C+In6v8bTldAq9+ RiYWAi1x3+3o5puCKFWOn7WL2dEE60LdzHjdfkC/3gto+DAjeVEP1MNmeFQhOTDAbeqs wraq/v1aVxBnzm7Vb1PEqUTb1IqHcL7a/SyX2GCJfhlaJGvwoWnWWEf1YFz22UdByau2 LZWwR6RwStgTD2YLsrdRX5CH1/N36kURZlxeLFhPGlLG/2aN/PM1Blkl3WlZuQzHxx5f bbJUC479GUBMSvxT0QFD7Dzd2KEXwnY19HXYpdOU/N3/OUUKUxXLAnPStd4E2yE057hu ETLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=V1xqvcKv; spf=pass (google.com: domain of mptcp+bounces-4030-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-4030-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id g24-20020a170902869800b0014c8e454184si423539plo.199.2022.02.24.15.22.36 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 Feb 2022 15:22:36 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-4030-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=V1xqvcKv; spf=pass (google.com: domain of mptcp+bounces-4030-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-4030-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sjc.edge.kernel.org (Postfix) with ESMTPS id 96F123E0F62 for ; Thu, 24 Feb 2022 23:22:35 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D8C4F10E1; Thu, 24 Feb 2022 23:22:32 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 D44E010E2 for ; Thu, 24 Feb 2022 23:22:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645744951; x=1677280951; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MPcoIlfb8cRyOXEBIy/zCEWbrLuumRm9LC6RGE9AxLE=; b=V1xqvcKvlT5VrxakkfF5GRJNF9ZrioiJagQnLFOrjAb/mxEO6KlFGZsn cIzdGTwxOGk2qr83JBWfcfLxkxHB/ncEOD+2xrGh3HfoRwy1mOvTBpgw5 D3TyRYwbPbWDDFZU7pUPlqgBHM9QpNDvWxNa3iYn1FetEfk78xSipW1IZ LwGbLQK0aiA/MIiIwUXOV3ygVuli+4rLvcLpshUlYvFpFTqT5RqXM5jMy nf47ILy4z1Gak4j4FSPg/RbqHHAlPvOhwOQyQ2sJtJykIcl4raOnvcRbc /1l8sdYDS7lTrecdSwXn/kEj8qx9jZVICcPHjrw4mZOn3BPWvhVIWaX23 Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10268"; a="232998400" X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="232998400" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 X-IronPort-AV: E=Sophos;i="5.90,134,1643702400"; d="scan'208";a="491784933" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.28.67]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2022 15:22:28 -0800 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau , fw@strlen.de Subject: [RFC PATCH mptcp-next 4/4] tcp: Add TCP hooks for detecting MP_JOIN on a regular TCP listener Date: Thu, 24 Feb 2022 15:22:26 -0800 Message-Id: <20220224232226.259304-5-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> References: <20220224232226.259304-1-mathew.j.martineau@linux.intel.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" MPTCP uses a TCP SYN packet with the MP_JOIN option to add subflows to an existing MPTCP connection. This uses token lookup to match the incoming SYN with the appropriate MPTCP socket instead of the port number (in accordance with RFC 8684), and it is possible for a TCP listener to be present at the port that the MPTCP peer is trying to connect to. If the TCP listener ignores the MP_JOIN option and sends a normal TCP SYN-ACK without a MP_JOIN option header, the peer will be forced to send a RST. Given that a peer sending MP_JOIN is guaranteed to reject a regular TCP SYN-ACK, it's better to attempt a MPTCP token lookup and either let MPTCP continue the handshake or immediately reject the connection attempt. The only new conditional in the TCP SYN handling hot path is a check of the saw_mp_join bit. If that is set, tcp_check_req() returns early and tcp_v4_rcv() or tcp_v6_rcv() call the MPTCP join handler in an error path. If MPTCP is not configured, all the code added in this commit should be optimized away. Signed-off-by: Mat Martineau --- net/ipv4/tcp_ipv4.c | 7 +++++++ net/ipv4/tcp_minisocks.c | 8 +++++++- net/ipv6/tcp_ipv6.c | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 73e5726af8d0..124ad393e6fb 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -2082,6 +2082,13 @@ int tcp_v4_rcv(struct sk_buff *skb) tcp_v4_restore_cb(skb); sock_put(sk); goto lookup; + } else if (req_status =3D=3D TCP_REQ_MP_JOIN) { + struct sock *msk =3D mptcp_handle_join4(skb); + + if (msk) { + sk =3D msk; + goto process; + } } goto discard_and_relse; } diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index 3d989f8676a5..4fdca31b33bb 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -572,10 +572,16 @@ struct sock *tcp_check_req(struct sock *sk, struct sk= _buff *skb, bool own_req; =20 tmp_opt.saw_tstamp =3D 0; + tmp_opt.saw_mp_join =3D 0; if (th->doff > (sizeof(struct tcphdr)>>2)) { tcp_parse_options(sock_net(sk), skb, &tmp_opt, 0, NULL); =20 - if (tmp_opt.saw_tstamp) { + if (unlikely(tmp_opt.saw_mp_join) && + mptcp_is_enabled(sock_net(sk))) { + *req_status =3D TCP_REQ_MP_JOIN; + + return NULL; + } else if (tmp_opt.saw_tstamp) { tmp_opt.ts_recent =3D req->ts_recent; if (tmp_opt.rcv_tsecr) tmp_opt.rcv_tsecr -=3D tcp_rsk(req)->ts_off; diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 4706aad6dd8f..d46fa8243e83 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -1731,6 +1731,13 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buf= f *skb) tcp_v6_restore_cb(skb); sock_put(sk); goto lookup; + } else if (req_status =3D=3D TCP_REQ_MP_JOIN) { + struct sock *msk =3D mptcp_handle_join6(skb); + + if (msk) { + sk =3D msk; + goto process; + } } goto discard_and_relse; } --=20 2.35.1