summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp/tcp_output.c
diff options
context:
space:
mode:
authorSebastien Roy <seb@delphix.com>2017-08-01 13:21:40 -0400
committerCody Peter Mello <melloc@writev.io>2019-08-09 22:54:08 +0000
commit9cba20af356f81a5f469ca8aa89ed17ee827b6a6 (patch)
treebbd75aad827348f90befdc813aac7f66f4a9565a /usr/src/uts/common/inet/tcp/tcp_output.c
parentb456ecdeb57b9ceefc89cd60f374f8fff83acf91 (diff)
downloadillumos-joyent-9cba20af356f81a5f469ca8aa89ed17ee827b6a6.tar.gz
OS-7329 Want pluggable TCP congestion control algorithms
Reviewed by: Dan McDonald <danmcd@joyent.com> Reviewed by: Robert Mustacchi <robert.mustacchi@joyent.com> Approved by: Robert Mustacchi <robert.mustacchi@joyent.com>
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp_output.c')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp_output.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp_output.c b/usr/src/uts/common/inet/tcp/tcp_output.c
index f54ab3fb33..ae9efe863d 100644
--- a/usr/src/uts/common/inet/tcp/tcp_output.c
+++ b/usr/src/uts/common/inet/tcp/tcp_output.c
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2014, 2016 by Delphix. All rights reserved.
+ * Copyright (c) 2014, 2017 by Delphix. All rights reserved.
* Copyright 2019 Joyent, Inc.
*/
@@ -81,6 +81,18 @@ static void tcp_wput_proto(void *, mblk_t *, void *, ip_recv_attr_t *);
*/
static int tcp_tx_pull_len = 16;
+static void
+cc_after_idle(tcp_t *tcp)
+{
+ uint32_t old_cwnd = tcp->tcp_cwnd;
+
+ if (CC_ALGO(tcp)->after_idle != NULL)
+ CC_ALGO(tcp)->after_idle(&tcp->tcp_ccv);
+
+ DTRACE_PROBE3(cwnd__cc__after__idle, tcp_t *, tcp, uint32_t, old_cwnd,
+ uint32_t, tcp->tcp_cwnd);
+}
+
int
tcp_wput(queue_t *q, mblk_t *mp)
{
@@ -219,7 +231,6 @@ tcp_wput_data(tcp_t *tcp, mblk_t *mp, boolean_t urgent)
int32_t total_hdr_len;
int32_t tcp_hdr_len;
int rc;
- tcp_stack_t *tcps = tcp->tcp_tcps;
conn_t *connp = tcp->tcp_connp;
clock_t now = LBOLT_FASTPATH;
@@ -374,7 +385,7 @@ data_null:
if ((tcp->tcp_suna == snxt) && !tcp->tcp_localnet &&
(TICK_TO_MSEC(now - tcp->tcp_last_recv_time) >= tcp->tcp_rto)) {
- TCP_SET_INIT_CWND(tcp, mss, tcps->tcps_slow_start_after_idle);
+ cc_after_idle(tcp);
}
if (tcpstate == TCPS_SYN_RCVD) {
/*
@@ -1195,7 +1206,7 @@ tcp_output(void *arg, mblk_t *mp, void *arg2, ip_recv_attr_t *dummy)
now = LBOLT_FASTPATH;
if ((tcp->tcp_suna == snxt) && !tcp->tcp_localnet &&
(TICK_TO_MSEC(now - tcp->tcp_last_recv_time) >= tcp->tcp_rto)) {
- TCP_SET_INIT_CWND(tcp, mss, tcps->tcps_slow_start_after_idle);
+ cc_after_idle(tcp);
}
usable = tcp->tcp_swnd; /* tcp window size */