From nobody Mon Feb 9 00:54:37 2026 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