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 *);