I'm very pleased to announce the release of our new website and documentation using the new toolchain with Hugo and AsciiDoctor. To get more information about the new toolchain please read the FreeBSD Documentation Project Primer[1], Hugo docs[2] and AsciiDoctor docs[3]. Acknowledgment: Benedict Reuschling <bcr@> Glen Barber <gjb@> Hiroki Sato <hrs@> Li-Wen Hsu <lwhsu@> Sean Chittenden <seanc@> The FreeBSD Foundation [1] https://docs.FreeBSD.org/en/books/fdp-primer/ [2] https://gohugo.io/documentation/ [3] https://docs.asciidoctor.org/home/ Approved by: doceng, core
58 lines
2.1 KiB
Diff
58 lines
2.1 KiB
Diff
--- share/man/man4/tcp.4.orig
|
|
+++ share/man/man4/tcp.4
|
|
@@ -436,6 +436,20 @@
|
|
Reseeding should not be necessary, and will break
|
|
.Dv TIME_WAIT
|
|
recycling for a few minutes.
|
|
+.It Va reass.cursegments
|
|
+The current total number of segments present in all reassembly queues.
|
|
+.It Va reass.maxsegments
|
|
+The maximum limit on the total number of segments across all reassembly
|
|
+queues.
|
|
+The limit can be adjusted as a tunable.
|
|
+.It Va reass.maxqueuelen
|
|
+The maximum number of segments allowed in each reassembly queue.
|
|
+By default, the system chooses a limit based on each TCP connection's
|
|
+receive buffer size and maximum segment size (MSS).
|
|
+The actual limit applied to a session's reassembly queue will be the lower of
|
|
+the system-calculated automatic limit and the user-specified
|
|
+.Va reass.maxqueuelen
|
|
+limit.
|
|
.It Va rexmit_min , rexmit_slop
|
|
Adjust the retransmit timer calculation for
|
|
.Tn TCP .
|
|
--- sys/netinet/tcp_reass.c.orig
|
|
+++ sys/netinet/tcp_reass.c
|
|
@@ -96,6 +96,11 @@
|
|
|
|
static uma_zone_t tcp_reass_zone;
|
|
|
|
+static u_int tcp_reass_maxqueuelen = 100;
|
|
+SYSCTL_UINT(_net_inet_tcp_reass, OID_AUTO, maxqueuelen, CTLFLAG_RWTUN,
|
|
+ &tcp_reass_maxqueuelen, 0,
|
|
+ "Maximum number of TCP Segments per Reassembly Queue");
|
|
+
|
|
/* Initialize TCP reassembly queue */
|
|
static void
|
|
tcp_reass_zone_change(void *tag)
|
|
@@ -184,6 +189,10 @@
|
|
* socket receive buffer determines our advertised window and grows
|
|
* automatically when socket buffer autotuning is enabled. Use it as the
|
|
* basis for our queue limit.
|
|
+ *
|
|
+ * However, allow the user to specify a ceiling for the number of
|
|
+ * segments in each queue.
|
|
+ *
|
|
* Always let the missing segment through which caused this queue.
|
|
* NB: Access to the socket buffer is left intentionally unlocked as we
|
|
* can tolerate stale information here.
|
|
@@ -194,7 +203,8 @@
|
|
* is understood.
|
|
*/
|
|
if ((th->th_seq != tp->rcv_nxt || !TCPS_HAVEESTABLISHED(tp->t_state)) &&
|
|
- tp->t_segqlen >= (so->so_rcv.sb_hiwat / tp->t_maxseg) + 1) {
|
|
+ tp->t_segqlen >= min((so->so_rcv.sb_hiwat / tp->t_maxseg) + 1,
|
|
+ tcp_reass_maxqueuelen)) {
|
|
tcp_reass_overflows++;
|
|
TCPSTAT_INC(tcps_rcvmemdrop);
|
|
m_freem(m);
|