summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Oppermann <andre@FreeBSD.org>2012-10-28 17:16:09 +0000
committerAndre Oppermann <andre@FreeBSD.org>2012-10-28 17:16:09 +0000
commit22efabd40c4ad415dbdf68a105a3fa654ac35f7f (patch)
tree8602c0442ae6fd81ed0da1922e05cad0e77eb54e
parentb4380da796387d8104b15b50022e8e817ef471ac (diff)
Notes
-rw-r--r--sys/netinet/tcp_input.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 1d56dfd9b4ea..62819cfd6d1d 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -351,8 +351,15 @@ cc_conn_init(struct tcpcb *tp)
if (V_tcp_do_rfc3390)
tp->snd_cwnd = min(4 * tp->t_maxseg,
max(2 * tp->t_maxseg, 4380));
- else
- tp->snd_cwnd = tp->t_maxseg;
+ else {
+ /* Per RFC5681 Section 3.1 */
+ if (tp->t_maxseg > 2190)
+ tp->snd_cwnd = 2 * tp->t_maxseg;
+ else if (tp->t_maxseg > 1095)
+ tp->snd_cwnd = 3 * tp->t_maxseg;
+ else
+ tp->snd_cwnd = 4 * tp->t_maxseg;
+ }
if (CC_ALGO(tp)->conn_init != NULL)
CC_ALGO(tp)->conn_init(tp->ccv);