git: 76f1499ff5e7 - main - tcp: retire net.inet.tcp.tcp_require_unique_port

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Fri, 03 Feb 2023 19:34:18 UTC
The branch main has been updated by glebius:

URL: https://cgit.FreeBSD.org/src/commit/?id=76f1499ff5e7b6a2d558d8cb576de5f77b35a7dc

commit 76f1499ff5e7b6a2d558d8cb576de5f77b35a7dc
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2023-02-03 19:33:35 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2023-02-03 19:33:35 +0000

    tcp: retire net.inet.tcp.tcp_require_unique_port
    
    It was a safe belt just in case if the new port allocation
    behaviour introduced in 25102351509 would cause a problem.
    
    Reviewed by:            markj, rscheff, tuexen
    Differential revision:  https://reviews.freebsd.org/D38353
---
 share/man/man4/tcp.4     |  6 +-----
 sys/netinet/tcp_usrreq.c | 35 +++++------------------------------
 2 files changed, 6 insertions(+), 35 deletions(-)

diff --git a/share/man/man4/tcp.4 b/share/man/man4/tcp.4
index dea7da9054d0..ce27705f7eda 100644
--- a/share/man/man4/tcp.4
+++ b/share/man/man4/tcp.4
@@ -34,7 +34,7 @@
 .\"     From: @(#)tcp.4	8.1 (Berkeley) 6/5/93
 .\" $FreeBSD$
 .\"
-.Dd November 7, 2022
+.Dd February 3, 2023
 .Dt TCP 4
 .Os
 .Sh NAME
@@ -843,10 +843,6 @@ Maximum size of automatic receive buffer.
 Initial
 .Tn TCP
 receive window (buffer size).
-.It Va require_unique_port
-Require unique ephemeral port for outgoing connections;
-otherwise, the 4-tuple of local and remote ports and addresses must be unique.
-Requiring a unique port limits the number of outgoing connections.
 .It Va rexmit_drop_options
 Drop TCP options from third and later retransmitted SYN segments
 of a connection.
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index 47e635ba1faa..8cc5894171de 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -131,16 +131,6 @@ static void	tcp_fill_info(struct tcpcb *, struct tcp_info *);
 
 static int	tcp_pru_options_support(struct tcpcb *tp, int flags);
 
-/*
- * tcp_require_unique port requires a globally-unique source port for each
- * outgoing connection.  The default is to require the 4-tuple to be unique.
- */
-VNET_DEFINE(int, tcp_require_unique_port) = 0;
-SYSCTL_INT(_net_inet_tcp, OID_AUTO, require_unique_port,
-    CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(tcp_require_unique_port), 0,
-    "Require globally-unique ephemeral port for outgoing connections");
-#define	V_tcp_require_unique_port	VNET(tcp_require_unique_port)
-
 /*
  * TCP attaches to socket via pru_attach(), reserving space,
  * and an internet control block.
@@ -1421,14 +1411,8 @@ tcp_connect(struct tcpcb *tp, struct sockaddr *nam, struct thread *td)
 
 	NET_EPOCH_ASSERT();
 	INP_WLOCK_ASSERT(inp);
-	INP_HASH_WLOCK(&V_tcbinfo);
-
-	if (V_tcp_require_unique_port && inp->inp_lport == 0) {
-		error = in_pcbbind(inp, (struct sockaddr *)0, td->td_ucred);
-		if (error)
-			goto out;
-	}
 
+	INP_HASH_WLOCK(&V_tcbinfo);
 	/*
 	 * Cannot simply call in_pcbconnect, because there might be an
 	 * earlier incarnation of this same connection still in
@@ -1490,17 +1474,12 @@ tcp6_connect(struct tcpcb *tp, struct sockaddr *nam, struct thread *td)
 	int error;
 
 	INP_WLOCK_ASSERT(inp);
-	INP_HASH_WLOCK(&V_tcbinfo);
 
-	if (V_tcp_require_unique_port && inp->inp_lport == 0) {
-		error = in6_pcbbind(inp, (struct sockaddr *)0, td->td_ucred);
-		if (error)
-			goto out;
-	}
+	INP_HASH_WLOCK(&V_tcbinfo);
 	error = in6_pcbconnect(inp, nam, td->td_ucred);
-	if (error != 0)
-		goto out;
 	INP_HASH_WUNLOCK(&V_tcbinfo);
+	if (error != 0)
+		return (error);
 
 	/* Compute window scaling to request.  */
 	while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
@@ -1515,11 +1494,7 @@ tcp6_connect(struct tcpcb *tp, struct sockaddr *nam, struct thread *td)
 		tp->ts_offset = tcp_new_ts_offset(&inp->inp_inc);
 	tcp_sendseqinit(tp);
 
-	return 0;
-
-out:
-	INP_HASH_WUNLOCK(&V_tcbinfo);
-	return error;
+	return (0);
 }
 #endif /* INET6 */