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