1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
<table class="head">
<tr>
<td class="head-ltitle">CC_NEWRENO(4)</td>
<td class="head-vol">Device Drivers Manual</td>
<td class="head-rtitle">CC_NEWRENO(4)</td>
</tr>
</table>
<div class="manual-text">
<section class="Sh">
<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
<p class="Pp"><code class="Nm">cc_newreno</code> —
<span class="Nd">NewReno Congestion Control Algorithm</span></p>
</section>
<section class="Sh">
<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
<p class="Pp"><code class="In">#include
<<a class="In">netinet/cc/cc_newreno.h</a>></code></p>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">Details about the algorithm can be found in RFC5681.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="Socket_Options"><a class="permalink" href="#Socket_Options">Socket
Options</a></h1>
<p class="Pp">The <code class="Nm">cc_newreno</code> module supports a number of
socket options under TCP_CCALGOOPT (refer to <a class="Xr">tcp(4)</a> and
<a class="Xr">mod_cc(9)</a> for details) which can be set with
<a class="Xr">setsockopt(2)</a> and tested with
<a class="Xr">getsockopt(2)</a>. The <code class="Nm">cc_newreno</code>
socket options use this structure defined in
<sys/netinet/cc/cc_newreno.h>:</p>
<div class="Bd Pp Li">
<pre>struct cc_newreno_opts {
int name;
uint32_t val;
}</pre>
</div>
<dl class="Bl-tag">
<dt id="CC_NEWRENO_BETA"><var class="Va">CC_NEWRENO_BETA</var></dt>
<dd>Multiplicative window decrease factor, specified as a percentage, applied
to the congestion window in response to a congestion signal per: cwnd =
(cwnd * CC_NEWRENO_BETA) / 100. Default is 50.</dd>
<dt id="CC_NEWRENO_BETA_ECN"><var class="Va">CC_NEWRENO_BETA_ECN</var></dt>
<dd>Multiplicative window decrease factor, specified as a percentage, applied
to the congestion window in response to an ECN congestion signal when
<var class="Va">net.inet.tcp.cc.abe=1</var> per: cwnd = (cwnd *
CC_NEWRENO_BETA_ECN) / 100. Default is 80.
<p class="Pp">Note that currently the only way to enable hystart++ is to
enable it via socket option. When enabling it a value of 1 will enable
precise internet-draft (version 4) behavior (subject to any MIB variable
settings), other setting (2 and 3) are experimental.</p>
</dd>
</dl>
<p class="Pp">Note that hystart++ requires the TCP stack be able to call to the
congestion controller with both the <var class="Va">newround</var> function
as well as the <var class="Va">rttsample</var> function. Currently the only
TCP stacks that provide this feedback to the congestion controller is
rack.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="MIB_Variables"><a class="permalink" href="#MIB_Variables">MIB
Variables</a></h1>
<p class="Pp">The algorithm exposes these variables in the
<var class="Va">net.inet.tcp.cc.newreno</var> branch of the
<a class="Xr">sysctl(3)</a> MIB:</p>
<dl class="Bl-tag">
<dt id="beta"><var class="Va">beta</var></dt>
<dd>Multiplicative window decrease factor, specified as a percentage, applied
to the congestion window in response to a congestion signal per: cwnd =
(cwnd * beta) / 100. Default is 50.</dd>
<dt id="beta_ecn"><var class="Va">beta_ecn</var></dt>
<dd>Multiplicative window decrease factor, specified as a percentage, applied
to the congestion window in response to an ECN congestion signal when
<var class="Va">net.inet.tcp.cc.abe=1</var> per: cwnd = (cwnd * beta_ecn)
/ 100. Default is 80.</dd>
</dl>
</section>
<section class="Sh">
<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
ALSO</a></h1>
<p class="Pp"><a class="Xr">cc_cdg(4)</a>, <a class="Xr">cc_chd(4)</a>,
<a class="Xr">cc_cubic(4)</a>, <a class="Xr">cc_dctcp(4)</a>,
<a class="Xr">cc_hd(4)</a>, <a class="Xr">cc_htcp(4)</a>,
<a class="Xr">cc_vegas(4)</a>, <a class="Xr">mod_cc(4)</a>,
<a class="Xr">tcp(4)</a>, <a class="Xr">mod_cc(9)</a></p>
<p class="Pp"><cite class="Rs"><span class="RsA">Mark Allman</span>,
<span class="RsA">Vern Paxson</span>, and <span class="RsA">Ethan
Blanton</span>, <span class="RsT">TCP Congestion Control</span>,
<span class="RsO">RFC 5681</span>.</cite></p>
<p class="Pp"><cite class="Rs"><span class="RsA">Naeem Khademi</span>,
<span class="RsA">Michael Welzl</span>, <span class="RsA">Grenville
Armitage</span>, and <span class="RsA">Gorry Fairhurst</span>,
<span class="RsT">TCP Alternative Backoff with ECN (ABE)</span>,
<span class="RsO">RFC 8511</span>.</cite></p>
</section>
<section class="Sh">
<h1 class="Sh" id="ACKNOWLEDGEMENTS"><a class="permalink" href="#ACKNOWLEDGEMENTS">ACKNOWLEDGEMENTS</a></h1>
<p class="Pp">Development and testing of this software were made possible in
part by grants from the FreeBSD Foundation and Cisco University Research
Program Fund at Community Foundation Silicon Valley.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
<p class="Pp">The <code class="Nm">cc_newreno</code> congestion control
algorithm first appeared in its modular form in <span class="Ux">FreeBSD
9.0</span>.</p>
<p class="Pp">This was the default congestion control algorithm in FreeBSD
before version <span class="Ux">FreeBSD 14.0</span>, after which
<a class="Xr">cc_cubic(4)</a> replaced it.</p>
<p class="Pp">The module was first released in 2007 by James Healy and Lawrence
Stewart whilst working on the NewTCP research project at Swinburne
University of Technology's Centre for Advanced Internet Architectures,
Melbourne, Australia, which was made possible in part by a grant from the
Cisco University Research Program Fund at Community Foundation Silicon
Valley. More details are available at:</p>
<p class="Pp">http://caia.swin.edu.au/urp/newtcp/</p>
</section>
<section class="Sh">
<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
<p class="Pp">The <code class="Nm">cc_newreno</code> congestion control module
was written by <span class="An">James Healy</span>
<<a class="Mt" href="mailto:jimmy@deefa.com">jimmy@deefa.com</a>>,
<span class="An">Lawrence Stewart</span>
<<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>
and <span class="An">David Hayes</span>
<<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>>.</p>
<p class="Pp">Support for TCP ABE was added by <span class="An">Tom Jones</span>
<<a class="Mt" href="mailto:tj@enoti.me">tj@enoti.me</a>>.</p>
<p class="Pp">This manual page was written by <span class="An">Lawrence
Stewart</span>
<<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>.</p>
</section>
</div>
<table class="foot">
<tr>
<td class="foot-date">February 4, 2023</td>
<td class="foot-os">FreeBSD 15.0</td>
</tr>
</table>
|