diff mbox series

[net-next,2/2] sock: add SO_REUSEADDR values to include/uapi/linux/socket.h

Message ID 03e136d47995efafaa575031b1ddd2f4bc2194e7.1694523876.git.jbaron@akamai.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series export SO_REUSEADDR and SO_REUSEPORT via sock_diag | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next, async
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 6982 this patch: 6982
netdev/cc_maintainers warning 39 maintainers not CCed: drbd-dev@lists.linbit.com linux-rdma@vger.kernel.org anna@kernel.org chuck.lever@oracle.com open-iscsi@googlegroups.com linux-scsi@vger.kernel.org kuniyu@amazon.com dhowells@redhat.com horms@verge.net.au ja@ssi.bg lars.ellenberg@linbit.com lvs-devel@vger.kernel.org linux-nfs@vger.kernel.org jejb@linux.ibm.com mark@fasheh.com trond.myklebust@hammerspace.com neilb@suse.de rds-devel@oss.oracle.com fw@strlen.de netfilter-devel@vger.kernel.org Dai.Ngo@oracle.com jlbec@evilplan.org lduncan@suse.com martin.petersen@oracle.com christoph.boehmwalder@linbit.com kolga@netapp.com santosh.shilimkar@oracle.com axboe@kernel.dk tom@talpey.com linux-block@vger.kernel.org michael.christie@oracle.com cleech@redhat.com kadlec@netfilter.org philipp.reisner@linbit.com coreteam@netfilter.org joseph.qi@linux.alibaba.com pablo@netfilter.org ocfs2-devel@lists.linux.dev jlayton@kernel.org
netdev/build_clang success Errors and warnings before: 2965 this patch: 2965
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 12072 this patch: 12072
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 156 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Jason Baron Sept. 12, 2023, 2:31 p.m. UTC
The settings for SO_REUSEADDR are now available via sock_diag. To
help userspace understand it's meaning let's add the values to
include/uapi/linux/socket.h. Also, rename them from SK_* to SOCK_*
to match the convention. These can also be used to interpret the
getsockopt() return value from SO_REUSEADDR.

Signed-off-by: Jason Baron <jbaron@akamai.com>
---
 drivers/block/drbd/drbd_receiver.c |  6 +++---
 drivers/scsi/iscsi_tcp.c           |  2 +-
 fs/ocfs2/cluster/tcp.c             |  2 +-
 include/net/sock.h                 | 11 -----------
 include/uapi/linux/socket.h        | 11 +++++++++++
 net/core/sock.c                    |  4 ++--
 net/ipv4/af_inet.c                 |  2 +-
 net/ipv4/inet_connection_sock.c    |  4 ++--
 net/ipv4/tcp.c                     |  6 +++---
 net/ipv6/af_inet6.c                |  2 +-
 net/netfilter/ipvs/ip_vs_sync.c    |  2 +-
 net/rds/tcp_listen.c               |  2 +-
 net/sunrpc/svcsock.c               |  2 +-
 13 files changed, 28 insertions(+), 28 deletions(-)
diff mbox series

Patch

diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 0c9f54197768..315c3a1de0ff 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -721,7 +721,7 @@  static int prepare_listen_socket(struct drbd_connection *connection, struct acce
 		goto out;
 	}
 
-	s_listen->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
+	s_listen->sk->sk_reuse = SOCK_CAN_REUSE; /* SO_REUSEADDR */
 	drbd_setbufsize(s_listen, sndbuf_size, rcvbuf_size);
 
 	what = "bind before listen";
@@ -1023,8 +1023,8 @@  static int conn_connect(struct drbd_connection *connection)
 	if (ad.s_listen)
 		sock_release(ad.s_listen);
 
-	sock.socket->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
-	msock.socket->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
+	sock.socket->sk->sk_reuse = SOCK_CAN_REUSE; /* SO_REUSEADDR */
+	msock.socket->sk->sk_reuse = SOCK_CAN_REUSE; /* SO_REUSEADDR */
 
 	sock.socket->sk->sk_allocation = GFP_NOIO;
 	msock.socket->sk->sk_allocation = GFP_NOIO;
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index 9ab8555180a3..163964207fa2 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -735,7 +735,7 @@  iscsi_sw_tcp_conn_bind(struct iscsi_cls_session *cls_session,
 
 	/* setup Socket parameters */
 	sk = sock->sk;
-	sk->sk_reuse = SK_CAN_REUSE;
+	sk->sk_reuse = SOCK_CAN_REUSE;
 	sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
 	sk->sk_allocation = GFP_ATOMIC;
 	sk->sk_use_task_frag = false;
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index 960080753d3b..f2a7da6ea48a 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -1997,7 +1997,7 @@  static int o2net_open_listening_sock(__be32 addr, __be16 port)
 	o2net_listen_sock = sock;
 	INIT_WORK(&o2net_listen_work, o2net_accept_many);
 
-	sock->sk->sk_reuse = SK_CAN_REUSE;
+	sock->sk->sk_reuse = SOCK_CAN_REUSE;
 	ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
 	if (ret < 0) {
 		printk(KERN_ERR "o2net: Error %d while binding socket at "
diff --git a/include/net/sock.h b/include/net/sock.h
index b770261fbdaf..a3b760ebf3f8 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -657,17 +657,6 @@  void sock_net_set(struct sock *sk, struct net *net)
 	write_pnet(&sk->sk_net, net);
 }
 
-/*
- * SK_CAN_REUSE and SK_NO_REUSE on a socket mean that the socket is OK
- * or not whether his port will be reused by someone else. SK_FORCE_REUSE
- * on a socket means that the socket will reuse everybody else's port
- * without looking at the other's sk_reuse value.
- */
-
-#define SK_NO_REUSE	0
-#define SK_CAN_REUSE	1
-#define SK_FORCE_REUSE	2
-
 int sk_set_peek_off(struct sock *sk, int val);
 
 static inline int sk_peek_offset(const struct sock *sk, int flags)
diff --git a/include/uapi/linux/socket.h b/include/uapi/linux/socket.h
index d3fcd3b5ec53..635ceabefada 100644
--- a/include/uapi/linux/socket.h
+++ b/include/uapi/linux/socket.h
@@ -35,4 +35,15 @@  struct __kernel_sockaddr_storage {
 #define SOCK_TXREHASH_DISABLED	0
 #define SOCK_TXREHASH_ENABLED	1
 
+/*
+ * SOCK_CAN_REUSE and SOCK_NO_REUSE on a socket mean that the socket is OK
+ * or not whether his port will be reused by someone else. SOCK_FORCE_REUSE
+ * on a socket means that the socket will reuse everybody else's port
+ * without looking at the other's sk_reuse value.
+ */
+
+#define SOCK_NO_REUSE     0
+#define SOCK_CAN_REUSE    1
+#define SOCK_FORCE_REUSE  2
+
 #endif /* _UAPI_LINUX_SOCKET_H */
diff --git a/net/core/sock.c b/net/core/sock.c
index 16584e2dd648..2a14f29c8cac 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -782,7 +782,7 @@  EXPORT_SYMBOL(sk_mc_loop);
 void sock_set_reuseaddr(struct sock *sk)
 {
 	lock_sock(sk);
-	sk->sk_reuse = SK_CAN_REUSE;
+	sk->sk_reuse = SOCK_CAN_REUSE;
 	release_sock(sk);
 }
 EXPORT_SYMBOL(sock_set_reuseaddr);
@@ -1128,7 +1128,7 @@  int sk_setsockopt(struct sock *sk, int level, int optname,
 			sock_valbool_flag(sk, SOCK_DBG, valbool);
 		break;
 	case SO_REUSEADDR:
-		sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
+		sk->sk_reuse = (valbool ? SOCK_CAN_REUSE : SOCK_NO_REUSE);
 		break;
 	case SO_REUSEPORT:
 		sk->sk_reuseport = valbool;
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 3d2e30e20473..1abce1f1d026 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -328,7 +328,7 @@  static int inet_create(struct net *net, struct socket *sock, int protocol,
 
 	err = 0;
 	if (INET_PROTOSW_REUSE & answer_flags)
-		sk->sk_reuse = SK_CAN_REUSE;
+		sk->sk_reuse = SOCK_CAN_REUSE;
 
 	inet = inet_sk(sk);
 	inet_assign_bit(IS_ICSK, sk, INET_PROTOSW_ICSK & answer_flags);
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index aeebe8816689..70bcd996b2e6 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -335,7 +335,7 @@  inet_csk_find_open_port(const struct sock *sk, struct inet_bind_bucket **tb_ret,
 
 	l3mdev = inet_sk_bound_l3mdev(sk);
 ports_exhausted:
-	attempt_half = (sk->sk_reuse == SK_CAN_REUSE) ? 1 : 0;
+	attempt_half = (sk->sk_reuse == SOCK_CAN_REUSE) ? 1 : 0;
 other_half_scan:
 	inet_sk_get_local_port_range(sk, &low, &high);
 	high++; /* [32768, 60999] -> [32768, 61000[ */
@@ -548,7 +548,7 @@  int inet_csk_get_port(struct sock *sk, unsigned short snum)
 
 	if (!found_port) {
 		if (!hlist_empty(&tb->owners)) {
-			if (sk->sk_reuse == SK_FORCE_REUSE ||
+			if (sk->sk_reuse == SOCK_FORCE_REUSE ||
 			    (tb->fastreuse > 0 && reuse) ||
 			    sk_reuseport_match(tb, sk))
 				check_bind_conflict = false;
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 0c3040a63ebd..fcf69377d4cd 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -3522,15 +3522,15 @@  int do_tcp_setsockopt(struct sock *sk, int level, int optname,
 			err = -EPERM;
 		else if (val == TCP_REPAIR_ON) {
 			tp->repair = 1;
-			sk->sk_reuse = SK_FORCE_REUSE;
+			sk->sk_reuse = SOCK_FORCE_REUSE;
 			tp->repair_queue = TCP_NO_QUEUE;
 		} else if (val == TCP_REPAIR_OFF) {
 			tp->repair = 0;
-			sk->sk_reuse = SK_NO_REUSE;
+			sk->sk_reuse = SOCK_NO_REUSE;
 			tcp_send_window_probe(sk);
 		} else if (val == TCP_REPAIR_OFF_NO_WP) {
 			tp->repair = 0;
-			sk->sk_reuse = SK_NO_REUSE;
+			sk->sk_reuse = SOCK_NO_REUSE;
 		} else
 			err = -EINVAL;
 
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 368824fe9719..cf66fe3c35b0 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -197,7 +197,7 @@  static int inet6_create(struct net *net, struct socket *sock, int protocol,
 
 	err = 0;
 	if (INET_PROTOSW_REUSE & answer_flags)
-		sk->sk_reuse = SK_CAN_REUSE;
+		sk->sk_reuse = SOCK_CAN_REUSE;
 
 	inet = inet_sk(sk);
 	inet_assign_bit(IS_ICSK, sk, INET_PROTOSW_ICSK & answer_flags);
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
index da5af28ff57b..d3a2a88d1688 100644
--- a/net/netfilter/ipvs/ip_vs_sync.c
+++ b/net/netfilter/ipvs/ip_vs_sync.c
@@ -1539,7 +1539,7 @@  static int make_receive_sock(struct netns_ipvs *ipvs, int id,
 	}
 	*sock_ret = sock;
 	/* it is equivalent to the REUSEADDR option in user-space */
-	sock->sk->sk_reuse = SK_CAN_REUSE;
+	sock->sk->sk_reuse = SOCK_CAN_REUSE;
 	result = sysctl_sync_sock_size(ipvs);
 	if (result > 0)
 		set_sock_size(sock->sk, 0, result);
diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
index 014fa24418c1..4f3c4d7936b4 100644
--- a/net/rds/tcp_listen.c
+++ b/net/rds/tcp_listen.c
@@ -282,7 +282,7 @@  struct socket *rds_tcp_listen_init(struct net *net, bool isv6)
 		goto out;
 	}
 
-	sock->sk->sk_reuse = SK_CAN_REUSE;
+	sock->sk->sk_reuse = SOCK_CAN_REUSE;
 	tcp_sock_set_nodelay(sock->sk);
 
 	write_lock_bh(&sock->sk->sk_callback_lock);
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 998687421fa6..bd9580900ccf 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -1559,7 +1559,7 @@  static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
 	if (family == PF_INET6)
 		ip6_sock_set_v6only(sock->sk);
 	if (type == SOCK_STREAM)
-		sock->sk->sk_reuse = SK_CAN_REUSE; /* allow address reuse */
+		sock->sk->sk_reuse = SOCK_CAN_REUSE; /* allow address reuse */
 	error = kernel_bind(sock, sin, len);
 	if (error < 0)
 		goto bummer;