summaryrefslogtreecommitdiff
path: root/static/freebsd/man4/cc_newreno.4 3.html
blob: 3328b3c4434d033500b3666bcb9a131c681dfe3e (plain)
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> &#x2014;
    <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
    &lt;<a class="In">netinet/cc/cc_newreno.h</a>&gt;</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
    &lt;sys/netinet/cc/cc_newreno.h&gt;:</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>
    &lt;<a class="Mt" href="mailto:jimmy@deefa.com">jimmy@deefa.com</a>&gt;,
    <span class="An">Lawrence Stewart</span>
    &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;
    and <span class="An">David Hayes</span>
    &lt;<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>&gt;.</p>
<p class="Pp">Support for TCP ABE was added by <span class="An">Tom Jones</span>
    &lt;<a class="Mt" href="mailto:tj@enoti.me">tj@enoti.me</a>&gt;.</p>
<p class="Pp">This manual page was written by <span class="An">Lawrence
    Stewart</span>
    &lt;<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>&gt;.</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>