Print this page
11546 Track TCP round-trip time in nanoseconds
Portions contributed by: Cody Peter Mello <cody.mello@joyent.com>
Portions contributed by: Brandon Baker <bbaker@delphix.com>
Reviewed by: Jason King <jason.king@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Dan McDonald <danmcd@joyent.com>


   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright (c) 2011, Joyent, Inc. All rights reserved.
  24  * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved.
  25  * Copyright (c) 2014 by Delphix. All rights reserved.
  26  */
  27 /* Copyright (c) 1990 Mentat Inc. */
  28 
  29 #ifndef _INET_TCP_H
  30 #define _INET_TCP_H
  31 
  32 #ifdef  __cplusplus
  33 extern "C" {
  34 #endif
  35 
  36 #include <sys/inttypes.h>
  37 #include <netinet/ip6.h>
  38 #include <netinet/tcp.h>
  39 #include <sys/socket.h>
  40 #include <sys/socket_proto.h>
  41 #include <sys/md5.h>
  42 #include <inet/common.h>
  43 #include <inet/ip.h>
  44 #include <inet/ip6.h>
  45 #include <inet/mi.h>


 265 
 266 #define tcp_pipe                tcp_sack_info.tcp_pipe
 267 #define tcp_fack                tcp_sack_info.tcp_fack
 268 #define tcp_sack_snxt           tcp_sack_info.tcp_sack_snxt
 269 #define tcp_max_sack_blk        tcp_sack_info.tcp_max_sack_blk
 270 #define tcp_num_sack_blk        tcp_sack_info.tcp_num_sack_blk
 271 #define tcp_sack_list           tcp_sack_info.tcp_sack_list
 272 #define tcp_num_notsack_blk     tcp_sack_info.tcp_num_notsack_blk
 273 #define tcp_cnt_notsack_list    tcp_sack_info.tcp_cnt_notsack_list
 274 #define tcp_notsack_list        tcp_sack_info.tcp_notsack_list
 275 
 276         mblk_t  *tcp_rcv_list;          /* Queued until push, urgent data, */
 277         mblk_t  *tcp_rcv_last_head;     /* optdata, or the count exceeds */
 278         mblk_t  *tcp_rcv_last_tail;     /* tcp_rcv_push_wait. */
 279         uint32_t tcp_rcv_cnt;           /* tcp_rcv_list is b_next chain. */
 280 
 281         uint32_t tcp_cwnd_ssthresh;     /* Congestion window */
 282         uint32_t tcp_cwnd_max;
 283         uint32_t tcp_csuna;             /* Clear (no rexmits in window) suna */
 284 
 285         clock_t tcp_rtt_sa;             /* Round trip smoothed average */
 286         clock_t tcp_rtt_sd;             /* Round trip smoothed deviation */
 287         clock_t tcp_rtt_update;         /* Round trip update(s) */
 288         clock_t tcp_ms_we_have_waited;  /* Total retrans time */
 289 
 290         uint32_t tcp_swl1;              /* These help us avoid using stale */
 291         uint32_t tcp_swl2;              /*  packets to update state */
 292 
 293         uint32_t tcp_rack;              /* Seq # we have acked */
 294         uint32_t tcp_rack_cnt;          /* # of segs we have deferred ack */
 295         uint32_t tcp_rack_cur_max;      /* # of segs we may defer ack for now */
 296         uint32_t tcp_rack_abs_max;      /* # of segs we may defer ack ever */
 297         timeout_id_t    tcp_ack_tid;    /* Delayed ACK timer ID */
 298         timeout_id_t    tcp_push_tid;   /* Push timer ID */
 299 
 300         uint32_t tcp_max_swnd;          /* Maximum swnd we have seen */
 301 
 302         struct tcp_s *tcp_listener;     /* Our listener */
 303 
 304         uint32_t tcp_irs;               /* Initial recv seq num */
 305         uint32_t tcp_fss;               /* Final/fin send seq num */
 306         uint32_t tcp_urg;               /* Urgent data seq num */
 307 




   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright (c) 2011, Joyent, Inc. All rights reserved.
  24  * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved.
  25  * Copyright (c) 2014, 2016 by Delphix. All rights reserved.
  26  */
  27 /* Copyright (c) 1990 Mentat Inc. */
  28 
  29 #ifndef _INET_TCP_H
  30 #define _INET_TCP_H
  31 
  32 #ifdef  __cplusplus
  33 extern "C" {
  34 #endif
  35 
  36 #include <sys/inttypes.h>
  37 #include <netinet/ip6.h>
  38 #include <netinet/tcp.h>
  39 #include <sys/socket.h>
  40 #include <sys/socket_proto.h>
  41 #include <sys/md5.h>
  42 #include <inet/common.h>
  43 #include <inet/ip.h>
  44 #include <inet/ip6.h>
  45 #include <inet/mi.h>


 265 
 266 #define tcp_pipe                tcp_sack_info.tcp_pipe
 267 #define tcp_fack                tcp_sack_info.tcp_fack
 268 #define tcp_sack_snxt           tcp_sack_info.tcp_sack_snxt
 269 #define tcp_max_sack_blk        tcp_sack_info.tcp_max_sack_blk
 270 #define tcp_num_sack_blk        tcp_sack_info.tcp_num_sack_blk
 271 #define tcp_sack_list           tcp_sack_info.tcp_sack_list
 272 #define tcp_num_notsack_blk     tcp_sack_info.tcp_num_notsack_blk
 273 #define tcp_cnt_notsack_list    tcp_sack_info.tcp_cnt_notsack_list
 274 #define tcp_notsack_list        tcp_sack_info.tcp_notsack_list
 275 
 276         mblk_t  *tcp_rcv_list;          /* Queued until push, urgent data, */
 277         mblk_t  *tcp_rcv_last_head;     /* optdata, or the count exceeds */
 278         mblk_t  *tcp_rcv_last_tail;     /* tcp_rcv_push_wait. */
 279         uint32_t tcp_rcv_cnt;           /* tcp_rcv_list is b_next chain. */
 280 
 281         uint32_t tcp_cwnd_ssthresh;     /* Congestion window */
 282         uint32_t tcp_cwnd_max;
 283         uint32_t tcp_csuna;             /* Clear (no rexmits in window) suna */
 284 
 285         hrtime_t tcp_rtt_sa;            /* Round trip smoothed average */
 286         hrtime_t tcp_rtt_sd;            /* Round trip smoothed deviation */
 287         uint32_t tcp_rtt_update;        /* Round trip update(s) */
 288         clock_t tcp_ms_we_have_waited;  /* Total retrans time */
 289 
 290         uint32_t tcp_swl1;              /* These help us avoid using stale */
 291         uint32_t tcp_swl2;              /*  packets to update state */
 292 
 293         uint32_t tcp_rack;              /* Seq # we have acked */
 294         uint32_t tcp_rack_cnt;          /* # of segs we have deferred ack */
 295         uint32_t tcp_rack_cur_max;      /* # of segs we may defer ack for now */
 296         uint32_t tcp_rack_abs_max;      /* # of segs we may defer ack ever */
 297         timeout_id_t    tcp_ack_tid;    /* Delayed ACK timer ID */
 298         timeout_id_t    tcp_push_tid;   /* Push timer ID */
 299 
 300         uint32_t tcp_max_swnd;          /* Maximum swnd we have seen */
 301 
 302         struct tcp_s *tcp_listener;     /* Our listener */
 303 
 304         uint32_t tcp_irs;               /* Initial recv seq num */
 305         uint32_t tcp_fss;               /* Final/fin send seq num */
 306         uint32_t tcp_urg;               /* Urgent data seq num */
 307