From nobody Fri Mar 29 05:53:47 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:956b:0:0:0:0:0 with SMTP id y98csp85775jah; Thu, 28 Oct 2021 02:39:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy1B7OUO/Qo0YDq056zCFoKp3dcpUtYtO4mIBbVFBeWh4MMDuiFyPFxjRmGueKO0oTcoLYa X-Received: by 2002:aa7:8a53:0:b0:47b:e1e1:6405 with SMTP id n19-20020aa78a53000000b0047be1e16405mr3169933pfa.37.1635413959680; Thu, 28 Oct 2021 02:39:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635413959; cv=none; d=google.com; s=arc-20160816; b=Wav6K37g9YmAaOr6lyYtxd9jvx8/DakxQS+uMmjrS1t0xkmJnscuFvQSHLoaRWB05k 5dhrWNPOUG0W0GBGSpnDvt7EuuLjjkbKrwkbPL7TIAXz0PbKD9jKpww2qqUnuRj5NVP6 jAMN/VClSvt94WjA7az1qVPca5BNsGBG4IpVPOE+9jdfZs+UMFPuuAFtd2KEHVlNCtcU uZ7YiNwHOJobdK2CGaCRFJEFdtJF3BH0VdDYH92bkZlr6Y9K0+q3DMCDCiiEg3L2Azr4 YPHaJlacc7GZNhbstikoS//fYnLPeeqWB72HaiF2IVgJvWBt/j6mN3YG9Rjb5IN5g6Dy qOcQ== 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=K4dpuq2TMVbZ7RbmhpOW/BwWFyHpVqdDlJTlMw7ohL0=; b=TahkSu0ZoWnlqKT9KGOsd3v2E/CA28ZHIrS6MHCLqZPGva36cyZRqX04z10Gzapkin FpgfZdzPOgkABQJPgqYkwXJURG+gFtJs0S2wbBmvrCbF9bsfB3FRfTvn3eLxCYPZKPiO aZy8uIqDEUbk8l2RpwZdIFwTfyd54JhsphEGRIe+z1rtf7TmZorzyqfxMABzODIOfFWD xu8jwUNNUQJiO0eaXa7f8rLDQHQ0gRgD0KKXXCbcYX0HUbevdEdRcwK9rS/j53kP2vP6 KALcUYkAwEVZAv5Lfv4K6Jo9gPKwZP68NykWwrgjB+C83C0gNNcn7vqH0OqO2cDdpnsZ VWLg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2301-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2301-wpasupplicant.patchew=gmail.com@lists.linux.dev" Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id b11si3137058pgq.626.2021.10.28.02.39.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Oct 2021 02:39:19 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-2301-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-2301-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2301-wpasupplicant.patchew=gmail.com@lists.linux.dev" 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 36DAA3E0FB0 for ; Thu, 28 Oct 2021 09:39:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 220082C83; Thu, 28 Oct 2021 09:39:18 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from Chamillionaire.breakpoint.cc (Chamillionaire.breakpoint.cc [193.142.43.52]) (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 EF0A472 for ; Thu, 28 Oct 2021 09:39:16 +0000 (UTC) Received: from fw by Chamillionaire.breakpoint.cc with local (Exim 4.92) (envelope-from ) id 1mg1sR-0001g6-93; Thu, 28 Oct 2021 11:39:15 +0200 From: Florian Westphal To: Cc: Florian Westphal Subject: [PATCH mptcp-next v2 1/2] mptcp: sockopt: add SOL_IP freebind & transparent options Date: Thu, 28 Oct 2021 11:39:01 +0200 Message-Id: <20211028093902.8685-2-fw@strlen.de> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211028093902.8685-1-fw@strlen.de> References: <20211028093902.8685-1-fw@strlen.de> 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" 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 --- no changes 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..b818e91f2e09 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 ret, 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 ret; +} + 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 6172f380dfb7..72ccbd85941b 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.32.0 From nobody Fri Mar 29 05:53:47 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:956b:0:0:0:0:0 with SMTP id y98csp85833jah; Thu, 28 Oct 2021 02:39:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy1oIIV84L7goXtrfKeMeMWIn5E5cVxSiOATMzO8WziTp0QyXe5anrY4SIVQfeKjV054D6t X-Received: by 2002:a05:6808:f8f:: with SMTP id o15mr7420000oiw.38.1635413964355; Thu, 28 Oct 2021 02:39:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635413964; cv=none; d=google.com; s=arc-20160816; b=R/+X1lqYa8Z0YEs0QeJw9ge8jJm6VdEMfqFRCsn24lw8ls+YE+9xoDTZ1zUH9Nsrdz wqbaZTG7BVelwnqfU9iLXHfBdcK8FrGfsgxhcbqBH3wReywsjtOV4p/Ts7RJoe4Sm8ds Jd4A5p3m6k0QNhaUB9nAQ3E6a4fg4WNh5eCQIeXU/SftzxypGILRUGJe9jhlpUrx6fw+ QUTRrZfDjroUpCvtsYNMvD4wB/Pz5QeibbosUZEEP5F/P9+pbPMRz6IrklZrwi81xTm1 0/9kiHH255RCGZ4yVOTPF38YdXepT78MB4SRghe6Fn2KjJ/bntYUCYtfyme3xinVdlpS YGuQ== 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=lnQpGhkQGTzIInbZNEXSVI6Os+DExVg+Q2lyM21lNGM=; b=LLWMrHW1XyAHQUYzsb71Eyd1mBM2e6po9xZ/qp8CuhKeyMjvvI6slOJg0BoE/G2IZ/ jiLl4hw9lQ+9TLz/kcRvQMxeXuwhBEI6O5q1sxEvS2E6uJwsqape/xKVc6Twk/eB7R2V pATn++6Ihnv0t/7zLz8xomhucIFXkIgw+NWwvCE1CXWdj7u8HrAk4mDrm8D1qJsGT0e6 p9znXqoj8hQ5x72oaiFCbQ6It1xn8s7XBqzfmwD47noZzvGYQL16UrXy8EoZBk52O9X2 lzJM/Sz7xdTxwJaspvrTMcIlVMBVO1JJCaGkjklwLTqi6EmwJBV145e2O1XFvXore60X 8g3g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mptcp+bounces-2302-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2302-wpasupplicant.patchew=gmail.com@lists.linux.dev" Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id r133si2541672oie.301.2021.10.28.02.39.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Oct 2021 02:39:24 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-2302-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-2302-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2302-wpasupplicant.patchew=gmail.com@lists.linux.dev" 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 D119B1C0BA1 for ; Thu, 28 Oct 2021 09:39:23 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6F0D62C83; Thu, 28 Oct 2021 09:39:22 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from Chamillionaire.breakpoint.cc (Chamillionaire.breakpoint.cc [193.142.43.52]) (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 2336772 for ; Thu, 28 Oct 2021 09:39:21 +0000 (UTC) Received: from fw by Chamillionaire.breakpoint.cc with local (Exim 4.92) (envelope-from ) id 1mg1sV-0001gG-EX; Thu, 28 Oct 2021 11:39:19 +0200 From: Florian Westphal To: Cc: Florian Westphal Subject: [PATCH mptcp-next v2 2/2] selftests: mptcp: add tproxy test case Date: Thu, 28 Oct 2021 11:39:02 +0200 Message-Id: <20211028093902.8685-3-fw@strlen.de> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211028093902.8685-1-fw@strlen.de> References: <20211028093902.8685-1-fw@strlen.de> 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" 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. v2: update mptcp/config (Mat Martineau) Signed-off-by: Florian Westphal --- tools/testing/selftests/net/mptcp/config | 7 +- .../selftests/net/mptcp/mptcp_connect.c | 51 +++++++++++- .../selftests/net/mptcp/mptcp_connect.sh | 80 +++++++++++++++++++ 3 files changed, 135 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/config b/tools/testing/selft= ests/net/mptcp/config index 0faaccd21447..8a45ee6b54e8 100644 --- a/tools/testing/selftests/net/mptcp/config +++ b/tools/testing/selftests/net/mptcp/config @@ -13,5 +13,8 @@ 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 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