From nobody Thu Apr 25 23:16:39 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:3394:0:0:0:0 with SMTP id h20csp171540jav; Mon, 25 Oct 2021 14:01:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfl6d9skz/2gvqg3il/yDSW8Y43c3y346E4qB3O95RnXlIk/v2pGt+eBa1bJlmX4ZAIW+4 X-Received: by 2002:a9d:353:: with SMTP id 77mr15982308otv.143.1635195708001; Mon, 25 Oct 2021 14:01:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635195707; cv=none; d=google.com; s=arc-20160816; b=jLEfR2paEqsLMU/s4qrNLiggLS9uc185IZKzVs6VEPxJPyYWguu3WiEteXjjkmv1f7 xTLQMhWpzkq5b99cYnADOWW/TxFuz5C1eyjeBV4KZ8DAzdJS/7FGZf+bC4DRMgstaqu7 HXbsQqiUVsdTuzWj6pTKTHhK/bZktBuTVCiNkfNIH8vZGqVjmNS1XdWSy5SSJm5kSA6z 7piyVh3GPw/Sk8S9Y2CoowEOFXYwqdLj5Hv7vdr8EXzNiSFvdvWzPbsQAJmr+dIBtawl cSvnS1YeJIZNzlLCYzTSTVZ9q896Oz86x9+1t5+zXFJxBoYIiNH7vLSnsVsY/XJFcZYD owXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-id:precedence:message-id:date :subject:cc:to:from:dkim-signature; bh=2GO6xheU21esJu6DY6RrdtjAs3t0Hw2eK3xrXM+6ODw=; b=IU9+9kEV5djjbOYwUEVboxT0PUfUVl88BrBFkKOXlKF/ErJ4rY9oq/i46DE9VvluDK cueQZXJ9cbWZfXh1REzqnUPQhaJTG69dQjQDpFsPIk+gtL1f+1DT+XNY4f1pjvr0xW3X u1+nagWJ+D3v+WjiJGPsbfcQuI9K/9zqRWovlkx0BMqQf/bwcm1wcr/3mcbnIej5nmRb M2jwLzxX4MOWYKKAqep5cUFT36dVv1AEsgUJu2fkymwyv2LHePioPpY9eAIYScIkc2cR OgG/Iz3yJuAmIYTBp+F/hIDxDsCJFmHPPJlnGC7q0COhDYXqE0Fe1oLGVOkkymE257H8 5qfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=NvbAXQMk; spf=pass (google.com: domain of mptcp+bounces-2253-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2253-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 q40si26976162otv.94.2021.10.25.14.01.47 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Oct 2021 14:01:47 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-2253-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=@redhat.com header.s=mimecast20190719 header.b=NvbAXQMk; spf=pass (google.com: domain of mptcp+bounces-2253-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2253-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 00F271C06AE for ; Mon, 25 Oct 2021 21:01:47 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B18DE2C98; Mon, 25 Oct 2021 21:01:45 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) (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 BA9EE2C8B for ; Mon, 25 Oct 2021 21:01:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1635195702; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type; bh=2GO6xheU21esJu6DY6RrdtjAs3t0Hw2eK3xrXM+6ODw=; b=NvbAXQMkI3Rn+93mYcZ/pE/cjcdwiLLG4XdGx0l2T6geHyLEGZhORx2m1DDzP6qdg2mDAE FQYYN/YDgS2DS1AzONYTQ0HP1dmzh41DWkRTROL8mmoCNOt/BB5e3OC+y02/41Zao6C1Wz bDnGl+XSs3d40Opbz64NHY0vNgPoiy4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-411-Hd5NXc9VMD2C5Zgajt3wng-1; Mon, 25 Oct 2021 17:01:38 -0400 X-MC-Unique: Hd5NXc9VMD2C5Zgajt3wng-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 51C008066F6; Mon, 25 Oct 2021 21:01:37 +0000 (UTC) Received: from nst.lab.eng.brq.redhat.com (nst.lab.eng.brq.redhat.com [10.37.153.171]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9D0B75F4EC; Mon, 25 Oct 2021 21:01:36 +0000 (UTC) From: Poorva Sonparote To: mptcp@lists.linux.dev Cc: mathew.j.martineau@linux.intel.com Subject: [PATCH mptcp net-next] Support for SOL_IP for MPTCP setsockopt Date: Mon, 25 Oct 2021 21:01:12 +0000 Message-Id: <51fa50ca9158e5b72a8f41ba9fcd1e449638dbc5.1635194315.git.psonparo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=psonparo@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch adds support for IP_TOS for setsockopt(.. ,SOL_IP, ..) https://github.com/multipath-tcp/mptcp_net-next/issues/220 Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/220 Signed-off-by: Poorva Sonparote Reported-by: kernel test robot --- Notes: - This patch addresses previous suggestions. - The TOS value is now being set successfully for subflows created after setsockopt(). include/net/ip.h | 3 +-- net/ipv4/ip_sockglue.c | 2 +- net/mptcp/sockopt.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/include/net/ip.h b/include/net/ip.h index cf229a531194..a40501fe89de 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -762,7 +762,6 @@ void ip_icmp_error(struct sock *sk, struct sk_buff *skb= , int err, __be16 port, u32 info, u8 *payload); void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport, u32 info); - static inline void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb) { ip_cmsg_recv_offset(msg, skb->sk, skb, 0, 0); @@ -789,5 +788,5 @@ 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); #endif /* _IP_H */ diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index b297bb28556e..7fd83f14daae 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; diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 8137cc3a4296..3967e1b8455c 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -598,6 +598,43 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct = mptcp_sock *msk, sockptr_t return ret; } =20 +static int mptcp_setsockopt_sol_ip_set_tos(struct mptcp_sock *msk, int opt= name, + sockptr_t optval, unsigned int optlen) +{ + struct mptcp_subflow_context *subflow; + struct sock *sk =3D (struct sock *)msk; + int ret, val =3D 0; + int err; + + err =3D ip_setsockopt(sk, SOL_IP, optname, optval, optlen); + val =3D inet_sk(sk)->tos; + + if (err !=3D 0) + return err; + + lock_sock(sk); + sockopt_seq_inc(msk); + 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 ret; +} + +static int mptcp_setsockopt_sol_ip(struct mptcp_sock *msk, int optname, + sockptr_t optval, unsigned int optlen) +{ + switch (optname) { + case IP_TOS: + return mptcp_setsockopt_sol_ip_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 +674,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_sol_ip(msk, optname, optval, optlen); + if (level =3D=3D SOL_IPV6) return mptcp_setsockopt_v6(msk, optname, optval, optlen); =20 @@ -1000,6 +1040,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.18.2