176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger/* 276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * Copyright (c) 1982, 1986, 1993 376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * The Regents of the University of California. All rights reserved. 476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * 576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * Redistribution and use in source and binary forms, with or without 676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * modification, are permitted provided that the following conditions 776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * are met: 876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * 1. Redistributions of source code must retain the above copyright 976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * notice, this list of conditions and the following disclaimer. 1076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * 2. Redistributions in binary form must reproduce the above copyright 1176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * notice, this list of conditions and the following disclaimer in the 1276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * documentation and/or other materials provided with the distribution. 1376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * 4. Neither the name of the University nor the names of its contributors 1476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * may be used to endorse or promote products derived from this software 1576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * without specific prior written permission. 1676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * 1776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 1876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * SUCH DAMAGE. 2876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * 2976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * @(#)tcp.h 8.1 (Berkeley) 6/10/93 3076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger */ 3176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 3276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#ifndef _NETINET_TCP_H 3376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define _NETINET_TCP_H 1 3476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 3576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#include <features.h> 3676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 3776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger/* 3876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * User-settable options (used with setsockopt). 3976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger */ 4076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_NODELAY 1 /* Don't delay send to coalesce packets */ 4176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_MAXSEG 2 /* Set maximum segment size */ 4276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_CORK 3 /* Control sending of partial frames */ 4376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_KEEPIDLE 4 /* Start keeplives after this period */ 4476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_KEEPINTVL 5 /* Interval between keepalives */ 4576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_KEEPCNT 6 /* Number of keepalives before death */ 4676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_SYNCNT 7 /* Number of SYN retransmits */ 4776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */ 4876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */ 4976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_WINDOW_CLAMP 10 /* Bound advertised window */ 5076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_INFO 11 /* Information about this connection. */ 5176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_QUICKACK 12 /* Bock/reenable quick ACKs. */ 5276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#define TCP_CONGESTION 13 /* Congestion control algorithm. */ 5376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 5476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#ifdef __USE_MISC 5576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# include <sys/types.h> 5676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 5776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# ifdef __FAVOR_BSD 5876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemmingertypedef u_int32_t tcp_seq; 5976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger/* 6076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * TCP header. 6176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * Per RFC 793, September, 1981. 6276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger */ 6376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemmingerstruct tcphdr 6476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger { 6576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t th_sport; /* source port */ 6676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t th_dport; /* destination port */ 6776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger tcp_seq th_seq; /* sequence number */ 6876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger tcp_seq th_ack; /* acknowledgement number */ 6976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# if __BYTE_ORDER == __LITTLE_ENDIAN 7076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t th_x2:4; /* (unused) */ 7176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t th_off:4; /* data offset */ 7276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# endif 7376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# if __BYTE_ORDER == __BIG_ENDIAN 7476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t th_off:4; /* data offset */ 7576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t th_x2:4; /* (unused) */ 7676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# endif 7776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t th_flags; 7876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TH_FIN 0x01 7976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TH_SYN 0x02 8076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TH_RST 0x04 8176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TH_PUSH 0x08 8276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TH_ACK 0x10 8376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TH_URG 0x20 8476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t th_win; /* window */ 8576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t th_sum; /* checksum */ 8676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t th_urp; /* urgent pointer */ 8776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger}; 8876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 8976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# else /* !__FAVOR_BSD */ 9076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemmingerstruct tcphdr 9176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger { 9276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t source; 9376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t dest; 9476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t seq; 9576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t ack_seq; 9676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# if __BYTE_ORDER == __LITTLE_ENDIAN 9776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t res1:4; 9876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t doff:4; 9976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t fin:1; 10076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t syn:1; 10176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t rst:1; 10276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t psh:1; 10376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t ack:1; 10476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t urg:1; 10576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t res2:2; 10676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# elif __BYTE_ORDER == __BIG_ENDIAN 10776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t doff:4; 10876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t res1:4; 10976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t res2:2; 11076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t urg:1; 11176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t ack:1; 11276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t psh:1; 11376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t rst:1; 11476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t syn:1; 11576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t fin:1; 11676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# else 11776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# error "Adjust your <bits/endian.h> defines" 11876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# endif 11976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t window; 12076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t check; 12176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int16_t urg_ptr; 12276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger}; 12376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# endif /* __FAVOR_BSD */ 12476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 12576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemmingerenum 12676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger{ 12776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_ESTABLISHED = 1, 12876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_SYN_SENT, 12976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_SYN_RECV, 13076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_FIN_WAIT1, 13176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_FIN_WAIT2, 13276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_TIME_WAIT, 13376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CLOSE, 13476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CLOSE_WAIT, 13576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_LAST_ACK, 13676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_LISTEN, 13776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CLOSING /* now a valid state */ 13876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger}; 13976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 14076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_EOL 0 14176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_NOP 1 14276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_MAXSEG 2 14376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOLEN_MAXSEG 4 14476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_WINDOW 3 14576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOLEN_WINDOW 3 14676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_SACK_PERMITTED 4 /* Experimental */ 14776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOLEN_SACK_PERMITTED 2 14876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_SACK 5 /* Experimental */ 14976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_TIMESTAMP 8 15076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOLEN_TIMESTAMP 10 15176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ 15276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 15376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPOPT_TSTAMP_HDR \ 15476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) 15576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 15676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger/* 15776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * Default maximum segment size for TCP. 15876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * With an IP MSS of 576, this is 536, 15976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * but 512 is probably more convenient. 16076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)). 16176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger */ 16276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCP_MSS 512 16376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 16476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ 16576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 16676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCP_MAX_WINSHIFT 14 /* maximum window shift */ 16776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 16876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define SOL_TCP 6 /* TCP level */ 16976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 17076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 17176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPI_OPT_TIMESTAMPS 1 17276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPI_OPT_SACK 2 17376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPI_OPT_WSCALE 4 17476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger# define TCPI_OPT_ECN 8 175719b958bbdfd1cb85d4b59826c503d0982322a9dEric Dumazet# define TCPI_OPT_ECN_SEEN 16 17676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 17776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger/* Values for tcpi_state. */ 17876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemmingerenum tcp_ca_state 17976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger{ 18076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CA_Open = 0, 18176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CA_Disorder = 1, 18276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CA_CWR = 2, 18376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CA_Recovery = 3, 18476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger TCP_CA_Loss = 4 18576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger}; 18676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 18776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemmingerstruct tcp_info 18876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger{ 18976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t tcpi_state; 19076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t tcpi_ca_state; 19176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t tcpi_retransmits; 19276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t tcpi_probes; 19376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t tcpi_backoff; 19476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t tcpi_options; 19576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; 19676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 19776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_rto; 19876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_ato; 19976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_snd_mss; 20076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_rcv_mss; 20176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 20276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_unacked; 20376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_sacked; 20476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_lost; 20576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_retrans; 20676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_fackets; 20776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 20876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger /* Times. */ 20976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_last_data_sent; 21076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_last_ack_sent; /* Not remembered, sorry. */ 21176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_last_data_recv; 21276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_last_ack_recv; 21376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 21476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger /* Metrics. */ 21576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_pmtu; 21676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_rcv_ssthresh; 21776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_rtt; 21876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_rttvar; 21976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_snd_ssthresh; 22076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_snd_cwnd; 22176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_advmss; 22276e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_reordering; 22376e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_rcv_rtt; 22476e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_rcv_space; 22576e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger u_int32_t tcpi_total_retrans; 22676e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 22776e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger}; 22876e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 22976e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#endif /* Misc. */ 23076e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger 23176e5d2c39201fa0dcf77d09ca780e155982370f9Stephen Hemminger#endif /* netinet/tcp.h */ 232