From nobody Sat Apr 20 04:42:34 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp2669030jap; Fri, 19 Nov 2021 12:41:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJyWAvHoZ42maxa3XxRzkre185lWck3aOFYqCzlijVCTcs9aamWAK0zx6meH3gWol9CmGmCt X-Received: by 2002:aa7:9dcd:0:b0:494:658c:3943 with SMTP id g13-20020aa79dcd000000b00494658c3943mr65911233pfq.19.1637354511285; Fri, 19 Nov 2021 12:41:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637354511; cv=none; d=google.com; s=arc-20160816; b=Ycw8r14O5uo6huuVM5AVLhkyOgyWt9zccBm9/qF1l4R+gr9K+MQYfYXBfG12+0vCW9 9+p+DOmli6A5pAvDYO6oJbzh5SibgGBIZvJhmoBqhNOLoBuWT5LzCOVUpBbznUvArU3f JJHO3xt46zDwu6ickSr+EfSM4yzoOAnT2h8QDlX0STWL+IebkInNtq2pTpNPbFehuvb0 FpMPrKmREY1Kqy6KZxAYIfXx2m30cnsJDHtEFjndhWuQijh7cVVb7a+05fBX+3z6wPxD ZTW/PvIlDibC0JVAoEN0eMhO8hDJI0KB7BXoGq4smTyADtezc+R50ZUN58pUeateQ7iB jWag== 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; bh=5kQ786y92DaVLywI25lctfsNDTwZRlW2Evlso192L90=; b=M/UP8HODjZwriiq0L9hJbs+mw9QxPZbfUbQ5Blpey1HynGpDP6caYYwYlJERuM5Efu 36Cv0XbK0558w/WG1P99fXLM6/W3k6eZTlbDpJgv/iijZG03iajzhBOT32wP+YJ0sHfZ 42ry0dmCIoiNeMz88A3rH8gjtEBF+QgD7n/4pMmRcT33/+48WO7bPItGr1JYDHk3bJWh onqoqr4KD3wMSQBeXuygJC/JUGdof4aPOkFIPGxvNme5tIHkTHgzJw784kNYDFLFfAM0 IhC97OGLndlh0Uyj8i4CuTyIGVJhIhyWjxYvQRBPyASbDqsYYbl++zcvDaj6NlFOH1kX GSvg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2488-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2488-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id k1si1914395pfu.102.2021.11.19.12.41.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Nov 2021 12:41:51 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2488-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2488-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2488-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (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 9A0191C0F2B for ; Fri, 19 Nov 2021 20:41:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5302D2C88; Fri, 19 Nov 2021 20:41:49 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 4C1A92C81 for ; Fri, 19 Nov 2021 20:41:48 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10173"; a="295303538" X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="295303538" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:47 -0800 X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="506889214" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.14.166]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:44 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Poorva Sonparote , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 1/4] ipv4: Exposing __ip_sock_set_tos() in ip.h Date: Fri, 19 Nov 2021 12:41:34 -0800 Message-Id: <20211119204137.415733-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211119204137.415733-1-mathew.j.martineau@linux.intel.com> References: <20211119204137.415733-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" From: Poorva Sonparote Making the static function __ip_sock_set_tos() from net/ipv4/ip_sockglue.c accessible by declaring it in include/net/ip.h The reason for doing this is to use this function to set IP_TOS value in mptcp_setsockopt() without the lock. Signed-off-by: Poorva Sonparote Signed-off-by: Mat Martineau --- include/net/ip.h | 1 + net/ipv4/ip_sockglue.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/net/ip.h b/include/net/ip.h index 7d1088888c10..81e23a102a0d 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -783,5 +783,6 @@ int ip_sock_set_mtu_discover(struct sock *sk, int val); void ip_sock_set_pktinfo(struct sock *sk); void ip_sock_set_recverr(struct sock *sk); void ip_sock_set_tos(struct sock *sk, int val); +void __ip_sock_set_tos(struct sock *sk, int val); =20 #endif /* _IP_H */ diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 38d29b175ca6..445a9ecaefa1 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -576,7 +576,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, = int len, int *addr_len) return err; } =20 -static void __ip_sock_set_tos(struct sock *sk, int val) +void __ip_sock_set_tos(struct sock *sk, int val) { if (sk->sk_type =3D=3D SOCK_STREAM) { val &=3D ~INET_ECN_MASK; --=20 2.34.0 From nobody Sat Apr 20 04:42:34 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp2669042jap; Fri, 19 Nov 2021 12:41:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJxTbahE8Vj0LqKLLQMy8vQ2MvALENotupZF0qtwNgqqniBHMLcrsGOqyV/EuMF95VL//ju7 X-Received: by 2002:a17:90b:4f92:: with SMTP id qe18mr3225195pjb.83.1637354512023; Fri, 19 Nov 2021 12:41:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637354512; cv=none; d=google.com; s=arc-20160816; b=I6lXyBVe0UJjBkXg28Pn1J8NlOEasUQV0yecLKKM6PLV7wIznWC5gBfn/brcsxNS16 +fjW1KSP2eFofoSah1CZgv4ke0f5rd2EWwEZRtJTcuQtuTCD7pWkcp6wgHeWrRTMQ+hi 1tfKZleCeLLPX/DdR3PD/L9yp7j7lSO21MfQyn3KCcI8wgFVqZDIAFCpxWEreCEoJcq2 nyp0xw+0XV8LTXOm9uGYib4jDv+AR1LWUi1Ib8AxuaZD52Fx8wD/+xrqDQn0CIwNKJJN TdRGYOCXCEXGRCRfIQIpIrt2KWT2YpYyVyaqY71Q4xbYruAEFoFX30jSZEY7ARYxRwHj NMtg== 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; bh=x/+2XEqUCx1mVttOKHsl+8195H3OheDG0TGerN5tjts=; b=fO2s/jHxqbkQik2v1beQlqPrM5i2uRfz7H0ot5vqkOCq15OEUmq868oO5t76VyJuwN Ss2534bk8iQdf9ilb4IpAFNeBaPQk/04BKKmFcb9T3i5T0fzpiKjSd7pLx0v8vxdAUfX 3NwITKUGeKUV0urgf9Gx8cVeDy1dXVBRo62x3pW+HeRjhHZqEXVZ8wsp+B543DSXqGLD PHwQcwdaP0fPQQZIotMd4E/VDXyibD2DhSU3XKjGhv7PbCWt/G0u31M9UA4tFxHsuEh6 k+o/HXAzJDlIlH8jl7X1gy/7tk5Me3u7OZOzLUBePlVK2D5fIbz2D/zEUt8UGzgvzcG6 DsAQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2489-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2489-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id j190si1458592pge.505.2021.11.19.12.41.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Nov 2021 12:41:52 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2489-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2489-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2489-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (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 7411D3E1053 for ; Fri, 19 Nov 2021 20:41:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5F2EF2C83; Fri, 19 Nov 2021 20:41:50 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 5EF572C81 for ; Fri, 19 Nov 2021 20:41:49 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10173"; a="295303539" X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="295303539" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:49 -0800 X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="506889219" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.14.166]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:46 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Poorva Sonparote , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 2/4] mptcp: Support for IP_TOS for MPTCP setsockopt() Date: Fri, 19 Nov 2021 12:41:35 -0800 Message-Id: <20211119204137.415733-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211119204137.415733-1-mathew.j.martineau@linux.intel.com> References: <20211119204137.415733-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" From: Poorva Sonparote SOL_IP provides a way to configure network layer attributes in a socket. This patch adds support for IP_TOS for setsockopt(.. ,SOL_IP, ..) Support for SOL_IP is added in mptcp_setsockopt() and IP_TOS is handled in a private function. The idea here is to take in the value passed for IP_TOS and set it to the current subflow, open subflows as well new subflows that might be created after the initial call to setsockopt(). This sync is done using sync_socket_options(.., ssk) and setting the value of tos using __ip_sock_set_tos(ssk,..). The patch has been tested using the packetdrill script here - https://github.com/multipath-tcp/mptcp_net-next/issues/220#issuecomment-947= 863717 Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/220 Signed-off-by: Poorva Sonparote Signed-off-by: Mat Martineau --- net/mptcp/sockopt.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 0f1e661c2032..b452571e8d9b 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -598,6 +598,42 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct = mptcp_sock *msk, sockptr_t return ret; } =20 +static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname, + sockptr_t optval, unsigned int optlen) +{ + struct mptcp_subflow_context *subflow; + struct sock *sk =3D (struct sock *)msk; + int err, val; + + err =3D ip_setsockopt(sk, SOL_IP, optname, optval, optlen); + + if (err !=3D 0) + return err; + + lock_sock(sk); + sockopt_seq_inc(msk); + val =3D inet_sk(sk)->tos; + mptcp_for_each_subflow(msk, subflow) { + struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); + + __ip_sock_set_tos(ssk, val); + } + release_sock(sk); + + return err; +} + +static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname, + sockptr_t optval, unsigned int optlen) +{ + switch (optname) { + case IP_TOS: + return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen); + } + + return -EOPNOTSUPP; +} + static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname, sockptr_t optval, unsigned int optlen) { @@ -637,6 +673,9 @@ int mptcp_setsockopt(struct sock *sk, int level, int op= tname, if (ssk) return tcp_setsockopt(ssk, level, optname, optval, optlen); =20 + if (level =3D=3D SOL_IP) + return mptcp_setsockopt_v4(msk, optname, optval, optlen); + if (level =3D=3D SOL_IPV6) return mptcp_setsockopt_v6(msk, optname, optval, optlen); =20 @@ -1003,6 +1042,7 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) ssk->sk_priority =3D sk->sk_priority; ssk->sk_bound_dev_if =3D sk->sk_bound_dev_if; ssk->sk_incoming_cpu =3D sk->sk_incoming_cpu; + __ip_sock_set_tos(ssk, inet_sk(sk)->tos); =20 if (sk->sk_userlocks & tx_rx_locks) { ssk->sk_userlocks |=3D sk->sk_userlocks & tx_rx_locks; --=20 2.34.0 From nobody Sat Apr 20 04:42:34 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp2669071jap; Fri, 19 Nov 2021 12:41:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJzuTqavrSZaczmLxqXX0RCJ+kOnaudpQVpJjUu0eZgNyFrWxbfqeQkblSCwU/Y83Q+6rCk8 X-Received: by 2002:a05:6a00:783:b0:4a3:25c8:afcb with SMTP id g3-20020a056a00078300b004a325c8afcbmr18277151pfu.33.1637354513613; Fri, 19 Nov 2021 12:41:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637354513; cv=none; d=google.com; s=arc-20160816; b=ePV45YDGCyD/pBHbSAPW/5lSk5BjZhRALrC/YOGVRTGf56hGn6zygMHOoCpCPFWULA yn/kC6TaPfYlD50g9hGoOe9cg7s1tQ2bQF4P/UZFxU+o3kHOBvdty5AotywHf/iH94sa GHNNOqGAWAG3V9DUuKsIyswM2EwXKG3r1hp8vopE+TZvpLBqPzvyLcu/zMFADSAZ5vXU b4dBN70O7sHDboRAPh/3I2ke4FYyO+nS448IdbfqFD+Cf3Tw2580eGniw4QDWA3X5k0c y+IXIMi4RdtY3LX9cw4ZUZ8B88FxPRvqBf7lExNmMyoJRG+epeAW3rdYuvKSc2YkhmlH +rOg== 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; bh=zcfFz8HFnvUpOiFYGhvPyWeZedxI5hzocPSu+DwRK00=; b=I97QmJ1qdZJBZIih6hPRtpuEuXHi7l9h62EGq8BZIZ2lbiew5rdvd5IThqN5OjsAMi PZ1HNVgV7XY+lB/P9DvfsZ/lYmxt/K9RwwxG0ODi/cuTRD4jFxoWhaxsLCMnjxDjGDZM lSCMhDY5kPKoHWfaGlycJXmUzbelmPGbSTSDc5RN0sED3RLTDoCUaoPxBt4nBTOHswOi ETKTa35cpdr4R/a6SQjHT0oYLQoaEt+Qn23CXU6tm8wCun9yOeVkizIo/VIT4UNy/sWd U7gTSWy4lhmohcX/mvH1qOHhKB7KzWqKDkzYCzCd6aupdLCQPwIcm/6FEqoMB1TeUdkQ qPfw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2490-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2490-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id r18si1242471plr.160.2021.11.19.12.41.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Nov 2021 12:41:53 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2490-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2490-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2490-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (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 E0A9F1C0F31 for ; Fri, 19 Nov 2021 20:41:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4E5AF2C81; Fri, 19 Nov 2021 20:41:51 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 21B862C8B for ; Fri, 19 Nov 2021 20:41:50 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10173"; a="295303541" X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="295303541" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:49 -0800 X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="506889225" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.14.166]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:48 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Florian Westphal , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 3/4] mptcp: sockopt: add SOL_IP freebind & transparent options Date: Fri, 19 Nov 2021 12:41:36 -0800 Message-Id: <20211119204137.415733-4-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211119204137.415733-1-mathew.j.martineau@linux.intel.com> References: <20211119204137.415733-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" From: Florian Westphal These options also need to be set before bind, so do the sync of msk to new ssk socket a bit earlier. Signed-off-by: Florian Westphal Signed-off-by: Mat Martineau --- net/mptcp/sockopt.c | 66 ++++++++++++++++++++++++++++++++++++++++++++- net/mptcp/subflow.c | 3 ++- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index b452571e8d9b..fb43e145cb57 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -390,6 +390,8 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk, = int optname, =20 switch (optname) { case IPV6_V6ONLY: + case IPV6_TRANSPARENT: + case IPV6_FREEBIND: lock_sock(sk); ssock =3D __mptcp_nmpc_socket(msk); if (!ssock) { @@ -398,8 +400,24 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk,= int optname, } =20 ret =3D tcp_setsockopt(ssock->sk, SOL_IPV6, optname, optval, optlen); - if (ret =3D=3D 0) + if (ret !=3D 0) { + release_sock(sk); + return ret; + } + + sockopt_seq_inc(msk); + + switch (optname) { + case IPV6_V6ONLY: sk->sk_ipv6only =3D ssock->sk->sk_ipv6only; + break; + case IPV6_TRANSPARENT: + inet_sk(sk)->transparent =3D inet_sk(ssock->sk)->transparent; + break; + case IPV6_FREEBIND: + inet_sk(sk)->freebind =3D inet_sk(ssock->sk)->freebind; + break; + } =20 release_sock(sk); break; @@ -598,6 +616,46 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct = mptcp_sock *msk, sockptr_t return ret; } =20 +static int mptcp_setsockopt_sol_ip_set_transparent(struct mptcp_sock *msk,= int optname, + sockptr_t optval, unsigned int optlen) +{ + struct sock *sk =3D (struct sock *)msk; + struct inet_sock *issk; + struct socket *ssock; + int err; + + err =3D ip_setsockopt(sk, SOL_IP, optname, optval, optlen); + if (err !=3D 0) + return err; + + lock_sock(sk); + + ssock =3D __mptcp_nmpc_socket(msk); + if (!ssock) { + release_sock(sk); + return -EINVAL; + } + + issk =3D inet_sk(ssock->sk); + + switch (optname) { + case IP_FREEBIND: + issk->freebind =3D inet_sk(sk)->freebind; + break; + case IP_TRANSPARENT: + issk->transparent =3D inet_sk(sk)->transparent; + break; + default: + release_sock(sk); + WARN_ON_ONCE(1); + return -EOPNOTSUPP; + } + + sockopt_seq_inc(msk); + release_sock(sk); + return 0; +} + static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname, sockptr_t optval, unsigned int optlen) { @@ -627,6 +685,9 @@ static int mptcp_setsockopt_v4(struct mptcp_sock *msk, = int optname, sockptr_t optval, unsigned int optlen) { switch (optname) { + case IP_FREEBIND: + case IP_TRANSPARENT: + return mptcp_setsockopt_sol_ip_set_transparent(msk, optname, optval, opt= len); case IP_TOS: return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen); } @@ -1068,6 +1129,9 @@ static void sync_socket_options(struct mptcp_sock *ms= k, struct sock *ssk) =20 if (inet_csk(sk)->icsk_ca_ops !=3D inet_csk(ssk)->icsk_ca_ops) tcp_set_congestion_control(ssk, msk->ca_name, false, true); + + inet_sk(ssk)->transparent =3D inet_sk(sk)->transparent; + inet_sk(ssk)->freebind =3D inet_sk(sk)->freebind; } =20 static void __mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 49787a1d7b34..b8dd3441f7d0 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1425,6 +1425,8 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_addr_info *loc, if (addr.ss_family =3D=3D AF_INET6) addrlen =3D sizeof(struct sockaddr_in6); #endif + mptcp_sockopt_sync(msk, ssk); + ssk->sk_bound_dev_if =3D ifindex; err =3D kernel_bind(sf, (struct sockaddr *)&addr, addrlen); if (err) @@ -1441,7 +1443,6 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_addr_info *loc, mptcp_info2sockaddr(remote, &addr, ssk->sk_family); =20 mptcp_add_pending_subflow(msk, subflow); - mptcp_sockopt_sync(msk, ssk); err =3D kernel_connect(sf, (struct sockaddr *)&addr, addrlen, O_NONBLOCK); if (err && err !=3D -EINPROGRESS) goto failed_unlink; --=20 2.34.0 From nobody Sat Apr 20 04:42:34 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp2669081jap; Fri, 19 Nov 2021 12:41:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJxZNdwRsCR68LSoXKTnIqMfOep72BznmnCsCr7GORdY14KrynhJrAFyVjM+GJLEKa3TuoxJ X-Received: by 2002:a17:902:d2cd:b0:141:fbe2:b658 with SMTP id n13-20020a170902d2cd00b00141fbe2b658mr80405796plc.49.1637354514001; Fri, 19 Nov 2021 12:41:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1637354513; cv=none; d=google.com; s=arc-20160816; b=g9v4LSGAfwiAw8q/yar3dTXK6g5C1bZZQfRtWDuNMikIFMCz0FSGzfBE/ET7g81BDR 8cxdEbaFHvuzQ/hTc3Y9NMYG9D6N5ubJOcUgyTTHgfDsfyisj+L/djWgRLgyZvdZ6K7A WsBSAdAVYi6o634I02aMDBGzu1Kqwm1vReZ0rqkTP+kIL5XlQs4/v4yUAKF+gzfPYVmM sTn/rqfdyJbXmQqRh+sJ5EhLJ13yezXjikdvy04iTO26u6db9GQiFEpj6BLxJtM58Nia VzsuD3pAUivB26gPN7+psqqWyt+wKw3eO7yuM1I+3UBuvMDSEgGLyTYrJ/xuAo3cmG3j 6QkQ== 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; bh=CMz14MYF5n2AMDmTBvpq+tWsuYS8l78s6PMnXI7AaVU=; b=p5Nuyu22ux94EZJGxPEPsAlVYdd7fIa+I+EbZFpIM9mq78u9aws5dWbfGbMLq4hcV6 +Jc6Di+83uH3O51jUH+yvHHFdONn4JWiZkI26qTSgEyTsZl2jXWuSRhXUiCLWRtDFZRD u5t4LGdb2b2ZFWiRVvwgXNLHp3JIXbr2CHcYGBbUIkhEpMMe+3aeyE+4ykF9wINx+zSM nhBWDKTqzEm35sACGYiR3BSHbWuP3VuE4TsyHMmU6as2gByDcpNjI1T1lMTJdMiCJiLO dHSgAvcY380JlBF3Yu1R/Ag38q8coJoNk0eRAvBd1FIIoY9o2xa8bNXuVcyEwxOvHv4M HOxw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2491-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2491-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (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 oc17si1901047pjb.103.2021.11.19.12.41.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 Nov 2021 12:41:53 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2491-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; spf=pass (google.com: domain of mptcp+bounces-2491-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2491-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=fail (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 9B4CE3E1048 for ; Fri, 19 Nov 2021 20:41:53 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1BB9F2C83; Fri, 19 Nov 2021 20:41:53 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 00DC52C8B for ; Fri, 19 Nov 2021 20:41:51 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10173"; a="295303545" X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="295303545" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:51 -0800 X-IronPort-AV: E=Sophos;i="5.87,248,1631602800"; d="scan'208";a="506889230" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.14.166]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2021 12:41:49 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Florian Westphal , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 4/4] selftests: mptcp: add tproxy test case Date: Fri, 19 Nov 2021 12:41:37 -0800 Message-Id: <20211119204137.415733-5-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211119204137.415733-1-mathew.j.martineau@linux.intel.com> References: <20211119204137.415733-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" From: Florian Westphal No hard dependencies here, just skip if test environ lacks nft binary or the needed kernel config options. The test case spawns listener in ns2 but ns1 will connect to the ip address of ns4. policy routing + tproxy rule will redirect packets to ns2 instead of forward. v3: - update mptcp/config (Mat Martineau) - more verbose SKIP messages in mptcp_connect.sh Signed-off-by: Florian Westphal Signed-off-by: Mat Martineau --- tools/testing/selftests/net/mptcp/config | 8 +- .../selftests/net/mptcp/mptcp_connect.c | 51 +++++++++++- .../selftests/net/mptcp/mptcp_connect.sh | 80 +++++++++++++++++++ 3 files changed, 136 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/config b/tools/testing/selft= ests/net/mptcp/config index 0faaccd21447..419e71560fd1 100644 --- a/tools/testing/selftests/net/mptcp/config +++ b/tools/testing/selftests/net/mptcp/config @@ -13,5 +13,9 @@ CONFIG_NFT_COUNTER=3Dm CONFIG_NFT_COMPAT=3Dm CONFIG_NETFILTER_XTABLES=3Dm CONFIG_NETFILTER_XT_MATCH_BPF=3Dm -CONFIG_NF_TABLES_IPV4=3Dy -CONFIG_NF_TABLES_IPV6=3Dy +CONFIG_NF_TABLES_INET=3Dy +CONFIG_NFT_TPROXY=3Dm +CONFIG_NFT_SOCKET=3Dm +CONFIG_IP_ADVANCED_ROUTER=3Dy +CONFIG_IP_MULTIPLE_TABLES=3Dy +CONFIG_IPV6_MULTIPLE_TABLES=3Dy diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/test= ing/selftests/net/mptcp/mptcp_connect.c index 95e81d557b08..ada9b80774d4 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.c +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c @@ -75,7 +75,12 @@ struct cfg_cmsg_types { unsigned int timestampns:1; }; =20 +struct cfg_sockopt_types { + unsigned int transparent:1; +}; + static struct cfg_cmsg_types cfg_cmsg_types; +static struct cfg_sockopt_types cfg_sockopt_types; =20 static void die_usage(void) { @@ -93,6 +98,7 @@ static void die_usage(void) fprintf(stderr, "\t-u -- check mptcp ulp\n"); fprintf(stderr, "\t-w num -- wait num sec before closing the socket\n"); fprintf(stderr, "\t-c cmsg -- test cmsg type \n"); + fprintf(stderr, "\t-o option -- test sockopt