From nobody Tue Jun 17 15:54:35 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bMBJW6Dyyz5yTmG; Tue, 17 Jun 2025 15:54:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bMBJW2jdLz3sKv; Tue, 17 Jun 2025 15:54:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750175675; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=SMAbZanhQaz7but9WF6DGOFFB6jTzX7Nr+PBLwfghYE=; b=tuW3CewdZjnqY/MLEyulsrPdM9E5RgIP8s+mEDcFV2Ds8c3Yrwx6lJs8AoPyZAh7hqhzxW obQpUwSVbdgEmM6pWgrm8KKvp5u4bITsvAEQhaopCLN5Z6rkUdtZkx1G81k2c23TUBxZwu BNpEzM7jVKUhd7Qw25WJ92Bb7DewXUXTWp1rbn0CeqnS75YkXfl0dWi/N4KIbt4LXHRiAg xTCk5vau+xvV6M2riJQIQQZM+kLZSCvDXLy6tHyfP0iNvphH2djLl9vI53+9R1tnT7hyXp E8NLabg5zsoB7iev6aNN+pgtLTGLybNogQEn016Nz90UMCtPFSyfGKoKxyXLbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750175675; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=SMAbZanhQaz7but9WF6DGOFFB6jTzX7Nr+PBLwfghYE=; b=nyvAN5+ud/n8QhvPqaMt2cHlOGe1Rg0dISKYLKKo1vTeMlZ8chFjuj8IDb7Wmac6Ri8lLd pEy+OGG7XTUlNf55r+9ctrFhrDJ97xm9x9XxT6KLceDD6o+YavA4x5aUY0HvV3Gn2DvKss qgn2hysMkF0J2xAGeFhyzt0Sadr6hh74kpaq2U56y4TIhZSzZYBFq2yIcpcSeb3oHfwQY9 o9zQrzrSAC9ngrBX2aBOaVD3YN/jXnX+viAsy4sbYtBfyiqkm745m6AHI0yv1m2u7gJP+A sLOzxcON60NqAj/MFPjg0Vx8J6maJPLX+/hYhgF2s7RR2+Se4aIgjnUKoY0gvA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1750175675; a=rsa-sha256; cv=none; b=jz39D73hegTGZXfzjX1e733rqm/wskoqLbvD2Xn+tkjJ7ujG9OyuYmmDZ9pMIRxW/JU9M3 /e3Om7ZfVBHd0xgay6w3Cg+g3JTut/ekMXwDjfbZpugbVEzSDSNteLRzwP2eu5OfL9OTcN 5nBhslB5p3YHhqUD0uwzDEszmzms+Vgn/YSPjt6+oCD6+PmFD7kErgOrAGVNUQkOQp03Ry TS/sDoKzJJHBddB5v3WbLjEgs5Wq7p+v2yDwp8u9o7u45oN3MZZhjW5Jk0paDzAhpJj2b6 CQam3Mxwat6yEO0h1DTysTy/WVlaJUysOW0p2WlJzfJArmWxeVpRFD7HpGibFw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bMBJW2GPjzqmF; Tue, 17 Jun 2025 15:54:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 55HFsZJe038394; Tue, 17 Jun 2025 15:54:35 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55HFsZR8038391; Tue, 17 Jun 2025 15:54:35 GMT (envelope-from git) Date: Tue, 17 Jun 2025 15:54:35 GMT Message-Id: <202506171554.55HFsZR8038391@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 552d17804629 - main - tcp: provide sysctl for the maximum retransmission timeout List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 552d17804629685a5b6b8fdc01f17e97d77e716c Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=552d17804629685a5b6b8fdc01f17e97d77e716c commit 552d17804629685a5b6b8fdc01f17e97d77e716c Author: Gleb Smirnoff AuthorDate: 2025-06-17 15:53:41 +0000 Commit: Gleb Smirnoff CommitDate: 2025-06-17 15:54:18 +0000 tcp: provide sysctl for the maximum retransmission timeout Reviewed by: tuexen Differential Revision: https://reviews.freebsd.org/D50891 --- share/man/man4/tcp.4 | 14 +++++++++++--- sys/netinet/tcp_input.c | 4 ++-- sys/netinet/tcp_stacks/bbr.c | 2 +- sys/netinet/tcp_stacks/rack.c | 2 +- sys/netinet/tcp_subr.c | 4 +++- sys/netinet/tcp_syncache.c | 2 +- sys/netinet/tcp_timer.c | 8 ++++++-- sys/netinet/tcp_timer.h | 1 + 8 files changed, 26 insertions(+), 11 deletions(-) diff --git a/share/man/man4/tcp.4 b/share/man/man4/tcp.4 index d53d8086e8c0..4c00c78bb2b1 100644 --- a/share/man/man4/tcp.4 +++ b/share/man/man4/tcp.4 @@ -31,7 +31,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd January 10, 2025 +.Dd June 16, 2025 .Dt TCP 4 .Os .Sh NAME @@ -871,10 +871,13 @@ segment is lost (default and maximum is 12). .It Va rexmit_drop_options Drop TCP options from third and later retransmitted SYN segments of a connection. -.It Va rexmit_initial , rexmit_min , rexmit_slop +.It Va rexmit_initial , rexmit_min , rexmit_slop , rexmit_max Adjust the retransmit timer calculation for .Tn TCP . -The slop is +A new connection starts with timer set to +.Va rexmit_initial . +The +.Va rexmit_slop typically added to the raw calculation to take into account occasional variances that the .Tn SRTT @@ -894,6 +897,11 @@ For this reason, we use 200ms of slop and a near-0 minimum, which gives us an effective minimum of 200ms (similar to .Tn Linux ) . The initial value is used before an RTT measurement has been performed. +The +.Va rexmit_min +and +.Va rexmit_max +set minimum and maximum timer values that a connection may have. .It Va rfc1323 Implement the window scaling and timestamp options of RFC 1323/RFC 7323 (default is 1). diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 1c617b85ef89..7c032e13f37a 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -383,7 +383,7 @@ cc_conn_init(struct tcpcb *tp) } TCPT_RANGESET(tp->t_rxtcur, ((tp->t_srtt >> 2) + tp->t_rttvar) >> 1, - tp->t_rttmin, TCPTV_REXMTMAX); + tp->t_rttmin, tcp_rexmit_max); } if (metrics.hc_ssthresh) { /* @@ -3732,7 +3732,7 @@ tcp_xmit_timer(struct tcpcb *tp, int rtt) * the minimum feasible timer (which is 2 ticks). */ TCPT_RANGESET(tp->t_rxtcur, TCP_REXMTVAL(tp), - max(tp->t_rttmin, rtt + 2), TCPTV_REXMTMAX); + max(tp->t_rttmin, rtt + 2), tcp_rexmit_max); /* * We received an ack for a packet that wasn't retransmitted; diff --git a/sys/netinet/tcp_stacks/bbr.c b/sys/netinet/tcp_stacks/bbr.c index 17a0744961ce..e2cfec5c9275 100644 --- a/sys/netinet/tcp_stacks/bbr.c +++ b/sys/netinet/tcp_stacks/bbr.c @@ -10150,7 +10150,7 @@ bbr_init(struct tcpcb *tp, void **ptr) tcp_change_time_units(tp, TCP_TMR_GRANULARITY_TICKS); TCPT_RANGESET(tp->t_rxtcur, ((tp->t_srtt >> 2) + tp->t_rttvar) >> 1, - tp->t_rttmin, TCPTV_REXMTMAX); + tp->t_rttmin, tcp_rexmit_max); bbr_start_hpts_timer(bbr, tp, cts, 5, 0, 0); return (0); } diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c index 1d4bc3124058..0388d73098a0 100644 --- a/sys/netinet/tcp_stacks/rack.c +++ b/sys/netinet/tcp_stacks/rack.c @@ -6347,7 +6347,7 @@ activate_tlp: if (to < rack_tlp_min) { to = rack_tlp_min; } - if (to > TICKS_2_USEC(TCPTV_REXMTMAX)) { + if (to > TICKS_2_USEC(tcp_rexmit_max)) { /* * If the TLP time works out to larger than the max * RTO lets not do TLP.. just RTO. diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index f766bf25ad66..7cd2168d262b 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -1052,7 +1052,8 @@ tcp_default_fb_init(struct tcpcb *tp, void **ptr) if (tp->t_rxtshift == 0) tp->t_rxtcur = rexmt; else - TCPT_RANGESET(tp->t_rxtcur, rexmt, tp->t_rttmin, TCPTV_REXMTMAX); + TCPT_RANGESET(tp->t_rxtcur, rexmt, tp->t_rttmin, + tcp_rexmit_max); /* * Nothing to do for ESTABLISHED or LISTEN states. And, we don't @@ -1478,6 +1479,7 @@ tcp_init(void *arg __unused) tcp_rexmit_min = TCPTV_MIN; if (tcp_rexmit_min < 1) tcp_rexmit_min = 1; + tcp_rexmit_max = TCPTV_REXMTMAX; tcp_persmin = TCPTV_PERSMIN; tcp_persmax = TCPTV_PERSMAX; tcp_rexmit_slop = TCPTV_CPU_VAR; diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c index 69217ca39ee4..80e6b53d10df 100644 --- a/sys/netinet/tcp_syncache.c +++ b/sys/netinet/tcp_syncache.c @@ -443,7 +443,7 @@ syncache_timeout(struct syncache *sc, struct syncache_head *sch, int docallout) else TCPT_RANGESET(rexmt, tcp_rexmit_initial * tcp_backoff[sc->sc_rxmits], - tcp_rexmit_min, TCPTV_REXMTMAX); + tcp_rexmit_min, tcp_rexmit_max); sc->sc_rxttime = ticks + rexmt; sc->sc_rxmits++; if (TSTMP_LT(sc->sc_rxttime, sch->sch_nextc)) { diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c index f1d864d33bd6..a9046e5725d5 100644 --- a/sys/netinet/tcp_timer.c +++ b/sys/netinet/tcp_timer.c @@ -119,6 +119,11 @@ SYSCTL_PROC(_net_inet_tcp, OID_AUTO, rexmit_min, CTLTYPE_INT | CTLFLAG_RW, &tcp_rexmit_min, 0, sysctl_msec_to_ticks, "I", "Minimum Retransmission Timeout"); +int tcp_rexmit_max; +SYSCTL_PROC(_net_inet_tcp, OID_AUTO, rexmit_max, CTLTYPE_INT | CTLFLAG_RW, + &tcp_rexmit_max, 0, sysctl_msec_to_ticks, "I", + "Maximum Retransmission Timeout"); + int tcp_rexmit_slop; SYSCTL_PROC(_net_inet_tcp, OID_AUTO, rexmit_slop, CTLTYPE_INT | CTLFLAG_RW, &tcp_rexmit_slop, 0, sysctl_msec_to_ticks, "I", @@ -618,8 +623,7 @@ tcp_timer_rexmt(struct tcpcb *tp) rexmt = tcp_rexmit_initial * tcp_backoff[tp->t_rxtshift]; else rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift]; - TCPT_RANGESET(tp->t_rxtcur, rexmt, - tp->t_rttmin, TCPTV_REXMTMAX); + TCPT_RANGESET(tp->t_rxtcur, rexmt, tp->t_rttmin, tcp_rexmit_max); /* * We enter the path for PLMTUD if connection is established or, if diff --git a/sys/netinet/tcp_timer.h b/sys/netinet/tcp_timer.h index 52994c43e8e7..875f1584988c 100644 --- a/sys/netinet/tcp_timer.h +++ b/sys/netinet/tcp_timer.h @@ -163,6 +163,7 @@ extern int tcp_maxunacktime; /* max time without making progress */ extern int tcp_maxpersistidle; extern int tcp_rexmit_initial; extern int tcp_rexmit_min; +extern int tcp_rexmit_max; extern int tcp_rexmit_slop; extern int tcp_ttl; /* time to live for TCP segs */ extern int tcp_backoff[];