Print this page
DLPX-25998 TCP congestion control is inadequate
Reviewed at: http://reviews.delphix.com/r/34808/
DLPX-43064 include high-resolution round-trip times in connstat (EP-652)
DLPX-42721 Create inline function for TCP RTO calculation

@@ -20,11 +20,11 @@
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2017 Joyent, Inc.
  * Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved.
- * Copyright (c) 2013, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2013, 2017 by Delphix. All rights reserved.
  */
 
 #ifndef _INET_TCP_IMPL_H
 #define _INET_TCP_IMPL_H
 

@@ -298,21 +298,10 @@
                 ((ip6_t *)(iph))->ip6_vcf &= htonl(0xFFCFFFFF); \
                 ((ip6_t *)(iph))->ip6_vcf |= htonl(IPH_ECN_ECT0 << 20); \
         }
 
 /*
- * Set tcp_rto with boundary checking.
- */
-#define TCP_SET_RTO(tcp, rto) \
-        if ((rto) < (tcp)->tcp_rto_min)                 \
-                (tcp)->tcp_rto = (tcp)->tcp_rto_min;    \
-        else if ((rto) > (tcp)->tcp_rto_max)            \
-                (tcp)->tcp_rto = (tcp)->tcp_rto_max;    \
-        else                                            \
-                (tcp)->tcp_rto = (rto);
-
-/*
  * TCP options struct returned from tcp_parse_options.
  */
 typedef struct tcp_opt_s {
         uint32_t        tcp_opt_mss;
         uint32_t        tcp_opt_wscale;

@@ -587,10 +576,12 @@
                                         tcps_propinfo_tbl[56].prop_min_uval
 #define tcps_wroff_xtra                 tcps_propinfo_tbl[57].prop_cur_uval
 #define tcps_dev_flow_ctl               tcps_propinfo_tbl[58].prop_cur_bval
 #define tcps_reass_timeout              tcps_propinfo_tbl[59].prop_cur_uval
 #define tcps_iss_incr                   tcps_propinfo_tbl[65].prop_cur_uval
+#define tcps_abc                        tcps_propinfo_tbl[67].prop_cur_bval
+#define tcps_abc_l_var                  tcps_propinfo_tbl[68].prop_cur_uval
 
 extern struct qinit tcp_rinitv4, tcp_rinitv6;
 extern boolean_t do_tcp_fusion;
 
 /*

@@ -611,10 +602,11 @@
 extern void     tcp_acceptor_hash_insert(t_uscalar_t, tcp_t *);
 extern tcp_t    *tcp_acceptor_hash_lookup(t_uscalar_t, tcp_stack_t *);
 extern void     tcp_acceptor_hash_remove(tcp_t *);
 extern mblk_t   *tcp_ack_mp(tcp_t *);
 extern int      tcp_build_hdrs(tcp_t *);
+extern clock_t  tcp_calculate_rto(tcp_t *, tcp_stack_t *);
 extern void     tcp_cleanup(tcp_t *);
 extern int      tcp_clean_death(tcp_t *, int);
 extern void     tcp_clean_death_wrapper(void *, mblk_t *, void *,
                     ip_recv_attr_t *);
 extern void     tcp_close_common(conn_t *, int);

@@ -707,10 +699,11 @@
                     mblk_t **, uint32_t, boolean_t, uint32_t *, boolean_t);
 
 /*
  * Input related functions in tcp_input.c.
  */
+extern void     cc_cong_signal(tcp_t *, uint32_t, uint32_t);
 extern void     tcp_icmp_input(void *, mblk_t *, void *, ip_recv_attr_t *);
 extern void     tcp_input_data(void *, mblk_t *, void *, ip_recv_attr_t *);
 extern void     tcp_input_listener_unbound(void *, mblk_t *, void *,
                     ip_recv_attr_t *);
 extern boolean_t        tcp_paws_check(tcp_t *, const tcp_opt_t *);