Print this page
11553 Want pluggable TCP congestion control algorithms
Portions contributed by: Cody Peter Mello <cody.mello@joyent.com>
Reviewed by: Dan McDonald <danmcd@joyent.com>
Reviewed by: Robert Mustacchi <robert.mustacchi@joyent.com>

*** 21,31 **** /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved. * Copyright 2011 Joyent, Inc. All rights reserved. ! * Copyright (c) 2014, 2016 by Delphix. All rights reserved. */ #include <sys/types.h> #include <sys/strlog.h> #include <sys/strsun.h> --- 21,31 ---- /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved. * Copyright 2011 Joyent, Inc. All rights reserved. ! * Copyright (c) 2014, 2017 by Delphix. All rights reserved. */ #include <sys/types.h> #include <sys/strlog.h> #include <sys/strsun.h>
*** 782,822 **** if (connp->conn_debug) { (void) strlog(TCP_MOD_ID, 0, 1, SL_TRACE, "tcp_timer: zero win"); } } else { ! /* ! * After retransmission, we need to do ! * slow start. Set the ssthresh to one ! * half of current effective window and ! * cwnd to one MSS. Also reset ! * tcp_cwnd_cnt. ! * ! * Note that if tcp_ssthresh is reduced because ! * of ECN, do not reduce it again unless it is ! * already one window of data away (tcp_cwr ! * should then be cleared) or this is a ! * timeout for a retransmitted segment. ! */ ! uint32_t npkt; ! ! if (!tcp->tcp_cwr || tcp->tcp_rexmit) { ! npkt = ((tcp->tcp_timer_backoff ? ! tcp->tcp_cwnd_ssthresh : ! tcp->tcp_snxt - ! tcp->tcp_suna) >> 1) / tcp->tcp_mss; ! tcp->tcp_cwnd_ssthresh = MAX(npkt, 2) * ! tcp->tcp_mss; } - tcp->tcp_cwnd = tcp->tcp_mss; - tcp->tcp_cwnd_cnt = 0; - if (tcp->tcp_ecn_ok) { - tcp->tcp_cwr = B_TRUE; - tcp->tcp_cwr_snd_max = tcp->tcp_snxt; - tcp->tcp_ecn_cwr_sent = B_FALSE; - } - } break; } /* * We have something to send yet we cannot send. The * reason can be: --- 782,793 ---- if (connp->conn_debug) { (void) strlog(TCP_MOD_ID, 0, 1, SL_TRACE, "tcp_timer: zero win"); } } else { ! cc_cong_signal(tcp, NULL, CC_RTO); } break; } /* * We have something to send yet we cannot send. The * reason can be: