xref: /aosp_15_r20/external/iproute2/include/netinet/tcp.h (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker /*
2*de1e4e89SAndroid Build Coastguard Worker  * Copyright (c) 1982, 1986, 1993
3*de1e4e89SAndroid Build Coastguard Worker  *	The Regents of the University of California.  All rights reserved.
4*de1e4e89SAndroid Build Coastguard Worker  *
5*de1e4e89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
6*de1e4e89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
7*de1e4e89SAndroid Build Coastguard Worker  * are met:
8*de1e4e89SAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
9*de1e4e89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
10*de1e4e89SAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
11*de1e4e89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
12*de1e4e89SAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
13*de1e4e89SAndroid Build Coastguard Worker  * 4. Neither the name of the University nor the names of its contributors
14*de1e4e89SAndroid Build Coastguard Worker  *    may be used to endorse or promote products derived from this software
15*de1e4e89SAndroid Build Coastguard Worker  *    without specific prior written permission.
16*de1e4e89SAndroid Build Coastguard Worker  *
17*de1e4e89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18*de1e4e89SAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*de1e4e89SAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*de1e4e89SAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21*de1e4e89SAndroid Build Coastguard Worker  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*de1e4e89SAndroid Build Coastguard Worker  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*de1e4e89SAndroid Build Coastguard Worker  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*de1e4e89SAndroid Build Coastguard Worker  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25*de1e4e89SAndroid Build Coastguard Worker  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*de1e4e89SAndroid Build Coastguard Worker  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*de1e4e89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
28*de1e4e89SAndroid Build Coastguard Worker  *
29*de1e4e89SAndroid Build Coastguard Worker  *	@(#)tcp.h	8.1 (Berkeley) 6/10/93
30*de1e4e89SAndroid Build Coastguard Worker  */
31*de1e4e89SAndroid Build Coastguard Worker 
32*de1e4e89SAndroid Build Coastguard Worker #ifndef _NETINET_TCP_H
33*de1e4e89SAndroid Build Coastguard Worker #define _NETINET_TCP_H	1
34*de1e4e89SAndroid Build Coastguard Worker 
35*de1e4e89SAndroid Build Coastguard Worker #include <features.h>
36*de1e4e89SAndroid Build Coastguard Worker 
37*de1e4e89SAndroid Build Coastguard Worker /*
38*de1e4e89SAndroid Build Coastguard Worker  * User-settable options (used with setsockopt).
39*de1e4e89SAndroid Build Coastguard Worker  */
40*de1e4e89SAndroid Build Coastguard Worker #define	TCP_NODELAY	 1	/* Don't delay send to coalesce packets  */
41*de1e4e89SAndroid Build Coastguard Worker #define	TCP_MAXSEG	 2	/* Set maximum segment size  */
42*de1e4e89SAndroid Build Coastguard Worker #define TCP_CORK	 3	/* Control sending of partial frames  */
43*de1e4e89SAndroid Build Coastguard Worker #define TCP_KEEPIDLE	 4	/* Start keeplives after this period */
44*de1e4e89SAndroid Build Coastguard Worker #define TCP_KEEPINTVL	 5	/* Interval between keepalives */
45*de1e4e89SAndroid Build Coastguard Worker #define TCP_KEEPCNT	 6	/* Number of keepalives before death */
46*de1e4e89SAndroid Build Coastguard Worker #define TCP_SYNCNT	 7	/* Number of SYN retransmits */
47*de1e4e89SAndroid Build Coastguard Worker #define TCP_LINGER2	 8	/* Life time of orphaned FIN-WAIT-2 state */
48*de1e4e89SAndroid Build Coastguard Worker #define TCP_DEFER_ACCEPT 9	/* Wake up listener only when data arrive */
49*de1e4e89SAndroid Build Coastguard Worker #define TCP_WINDOW_CLAMP 10	/* Bound advertised window */
50*de1e4e89SAndroid Build Coastguard Worker #define TCP_INFO	 11	/* Information about this connection. */
51*de1e4e89SAndroid Build Coastguard Worker #define	TCP_QUICKACK	 12	/* Bock/reenable quick ACKs.  */
52*de1e4e89SAndroid Build Coastguard Worker #define TCP_CONGESTION	 13	/* Congestion control algorithm.  */
53*de1e4e89SAndroid Build Coastguard Worker 
54*de1e4e89SAndroid Build Coastguard Worker #ifdef __USE_MISC
55*de1e4e89SAndroid Build Coastguard Worker # include <sys/types.h>
56*de1e4e89SAndroid Build Coastguard Worker 
57*de1e4e89SAndroid Build Coastguard Worker # ifdef __FAVOR_BSD
58*de1e4e89SAndroid Build Coastguard Worker typedef	u_int32_t tcp_seq;
59*de1e4e89SAndroid Build Coastguard Worker /*
60*de1e4e89SAndroid Build Coastguard Worker  * TCP header.
61*de1e4e89SAndroid Build Coastguard Worker  * Per RFC 793, September, 1981.
62*de1e4e89SAndroid Build Coastguard Worker  */
63*de1e4e89SAndroid Build Coastguard Worker struct tcphdr
64*de1e4e89SAndroid Build Coastguard Worker   {
65*de1e4e89SAndroid Build Coastguard Worker     u_int16_t th_sport;		/* source port */
66*de1e4e89SAndroid Build Coastguard Worker     u_int16_t th_dport;		/* destination port */
67*de1e4e89SAndroid Build Coastguard Worker     tcp_seq th_seq;		/* sequence number */
68*de1e4e89SAndroid Build Coastguard Worker     tcp_seq th_ack;		/* acknowledgement number */
69*de1e4e89SAndroid Build Coastguard Worker #  if __BYTE_ORDER == __LITTLE_ENDIAN
70*de1e4e89SAndroid Build Coastguard Worker     u_int8_t th_x2:4;		/* (unused) */
71*de1e4e89SAndroid Build Coastguard Worker     u_int8_t th_off:4;		/* data offset */
72*de1e4e89SAndroid Build Coastguard Worker #  endif
73*de1e4e89SAndroid Build Coastguard Worker #  if __BYTE_ORDER == __BIG_ENDIAN
74*de1e4e89SAndroid Build Coastguard Worker     u_int8_t th_off:4;		/* data offset */
75*de1e4e89SAndroid Build Coastguard Worker     u_int8_t th_x2:4;		/* (unused) */
76*de1e4e89SAndroid Build Coastguard Worker #  endif
77*de1e4e89SAndroid Build Coastguard Worker     u_int8_t th_flags;
78*de1e4e89SAndroid Build Coastguard Worker #  define TH_FIN	0x01
79*de1e4e89SAndroid Build Coastguard Worker #  define TH_SYN	0x02
80*de1e4e89SAndroid Build Coastguard Worker #  define TH_RST	0x04
81*de1e4e89SAndroid Build Coastguard Worker #  define TH_PUSH	0x08
82*de1e4e89SAndroid Build Coastguard Worker #  define TH_ACK	0x10
83*de1e4e89SAndroid Build Coastguard Worker #  define TH_URG	0x20
84*de1e4e89SAndroid Build Coastguard Worker     u_int16_t th_win;		/* window */
85*de1e4e89SAndroid Build Coastguard Worker     u_int16_t th_sum;		/* checksum */
86*de1e4e89SAndroid Build Coastguard Worker     u_int16_t th_urp;		/* urgent pointer */
87*de1e4e89SAndroid Build Coastguard Worker };
88*de1e4e89SAndroid Build Coastguard Worker 
89*de1e4e89SAndroid Build Coastguard Worker # else /* !__FAVOR_BSD */
90*de1e4e89SAndroid Build Coastguard Worker struct tcphdr
91*de1e4e89SAndroid Build Coastguard Worker   {
92*de1e4e89SAndroid Build Coastguard Worker     u_int16_t source;
93*de1e4e89SAndroid Build Coastguard Worker     u_int16_t dest;
94*de1e4e89SAndroid Build Coastguard Worker     u_int32_t seq;
95*de1e4e89SAndroid Build Coastguard Worker     u_int32_t ack_seq;
96*de1e4e89SAndroid Build Coastguard Worker #  if __BYTE_ORDER == __LITTLE_ENDIAN
97*de1e4e89SAndroid Build Coastguard Worker     u_int16_t res1:4;
98*de1e4e89SAndroid Build Coastguard Worker     u_int16_t doff:4;
99*de1e4e89SAndroid Build Coastguard Worker     u_int16_t fin:1;
100*de1e4e89SAndroid Build Coastguard Worker     u_int16_t syn:1;
101*de1e4e89SAndroid Build Coastguard Worker     u_int16_t rst:1;
102*de1e4e89SAndroid Build Coastguard Worker     u_int16_t psh:1;
103*de1e4e89SAndroid Build Coastguard Worker     u_int16_t ack:1;
104*de1e4e89SAndroid Build Coastguard Worker     u_int16_t urg:1;
105*de1e4e89SAndroid Build Coastguard Worker     u_int16_t res2:2;
106*de1e4e89SAndroid Build Coastguard Worker #  elif __BYTE_ORDER == __BIG_ENDIAN
107*de1e4e89SAndroid Build Coastguard Worker     u_int16_t doff:4;
108*de1e4e89SAndroid Build Coastguard Worker     u_int16_t res1:4;
109*de1e4e89SAndroid Build Coastguard Worker     u_int16_t res2:2;
110*de1e4e89SAndroid Build Coastguard Worker     u_int16_t urg:1;
111*de1e4e89SAndroid Build Coastguard Worker     u_int16_t ack:1;
112*de1e4e89SAndroid Build Coastguard Worker     u_int16_t psh:1;
113*de1e4e89SAndroid Build Coastguard Worker     u_int16_t rst:1;
114*de1e4e89SAndroid Build Coastguard Worker     u_int16_t syn:1;
115*de1e4e89SAndroid Build Coastguard Worker     u_int16_t fin:1;
116*de1e4e89SAndroid Build Coastguard Worker #  else
117*de1e4e89SAndroid Build Coastguard Worker #   error "Adjust your <bits/endian.h> defines"
118*de1e4e89SAndroid Build Coastguard Worker #  endif
119*de1e4e89SAndroid Build Coastguard Worker     u_int16_t window;
120*de1e4e89SAndroid Build Coastguard Worker     u_int16_t check;
121*de1e4e89SAndroid Build Coastguard Worker     u_int16_t urg_ptr;
122*de1e4e89SAndroid Build Coastguard Worker };
123*de1e4e89SAndroid Build Coastguard Worker # endif /* __FAVOR_BSD */
124*de1e4e89SAndroid Build Coastguard Worker 
125*de1e4e89SAndroid Build Coastguard Worker enum
126*de1e4e89SAndroid Build Coastguard Worker {
127*de1e4e89SAndroid Build Coastguard Worker   TCP_ESTABLISHED = 1,
128*de1e4e89SAndroid Build Coastguard Worker   TCP_SYN_SENT,
129*de1e4e89SAndroid Build Coastguard Worker   TCP_SYN_RECV,
130*de1e4e89SAndroid Build Coastguard Worker   TCP_FIN_WAIT1,
131*de1e4e89SAndroid Build Coastguard Worker   TCP_FIN_WAIT2,
132*de1e4e89SAndroid Build Coastguard Worker   TCP_TIME_WAIT,
133*de1e4e89SAndroid Build Coastguard Worker   TCP_CLOSE,
134*de1e4e89SAndroid Build Coastguard Worker   TCP_CLOSE_WAIT,
135*de1e4e89SAndroid Build Coastguard Worker   TCP_LAST_ACK,
136*de1e4e89SAndroid Build Coastguard Worker   TCP_LISTEN,
137*de1e4e89SAndroid Build Coastguard Worker   TCP_CLOSING   /* now a valid state */
138*de1e4e89SAndroid Build Coastguard Worker };
139*de1e4e89SAndroid Build Coastguard Worker 
140*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_EOL		0
141*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_NOP		1
142*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_MAXSEG		2
143*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_MAXSEG		4
144*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_WINDOW		3
145*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_WINDOW		3
146*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_SACK_PERMITTED	4		/* Experimental */
147*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_SACK_PERMITTED	2
148*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_SACK		5		/* Experimental */
149*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_TIMESTAMP	8
150*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_TIMESTAMP	10
151*de1e4e89SAndroid Build Coastguard Worker # define TCPOLEN_TSTAMP_APPA	(TCPOLEN_TIMESTAMP+2) /* appendix A */
152*de1e4e89SAndroid Build Coastguard Worker 
153*de1e4e89SAndroid Build Coastguard Worker # define TCPOPT_TSTAMP_HDR	\
154*de1e4e89SAndroid Build Coastguard Worker     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
155*de1e4e89SAndroid Build Coastguard Worker 
156*de1e4e89SAndroid Build Coastguard Worker /*
157*de1e4e89SAndroid Build Coastguard Worker  * Default maximum segment size for TCP.
158*de1e4e89SAndroid Build Coastguard Worker  * With an IP MSS of 576, this is 536,
159*de1e4e89SAndroid Build Coastguard Worker  * but 512 is probably more convenient.
160*de1e4e89SAndroid Build Coastguard Worker  * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
161*de1e4e89SAndroid Build Coastguard Worker  */
162*de1e4e89SAndroid Build Coastguard Worker # define TCP_MSS	512
163*de1e4e89SAndroid Build Coastguard Worker 
164*de1e4e89SAndroid Build Coastguard Worker # define TCP_MAXWIN	65535	/* largest value for (unscaled) window */
165*de1e4e89SAndroid Build Coastguard Worker 
166*de1e4e89SAndroid Build Coastguard Worker # define TCP_MAX_WINSHIFT	14	/* maximum window shift */
167*de1e4e89SAndroid Build Coastguard Worker 
168*de1e4e89SAndroid Build Coastguard Worker # define SOL_TCP		6	/* TCP level */
169*de1e4e89SAndroid Build Coastguard Worker 
170*de1e4e89SAndroid Build Coastguard Worker 
171*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_TIMESTAMPS	1
172*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_SACK		2
173*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_WSCALE	4
174*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_ECN		8
175*de1e4e89SAndroid Build Coastguard Worker # define TCPI_OPT_ECN_SEEN	16
176*de1e4e89SAndroid Build Coastguard Worker 
177*de1e4e89SAndroid Build Coastguard Worker /* Values for tcpi_state.  */
178*de1e4e89SAndroid Build Coastguard Worker enum tcp_ca_state
179*de1e4e89SAndroid Build Coastguard Worker {
180*de1e4e89SAndroid Build Coastguard Worker   TCP_CA_Open = 0,
181*de1e4e89SAndroid Build Coastguard Worker   TCP_CA_Disorder = 1,
182*de1e4e89SAndroid Build Coastguard Worker   TCP_CA_CWR = 2,
183*de1e4e89SAndroid Build Coastguard Worker   TCP_CA_Recovery = 3,
184*de1e4e89SAndroid Build Coastguard Worker   TCP_CA_Loss = 4
185*de1e4e89SAndroid Build Coastguard Worker };
186*de1e4e89SAndroid Build Coastguard Worker 
187*de1e4e89SAndroid Build Coastguard Worker struct tcp_info
188*de1e4e89SAndroid Build Coastguard Worker {
189*de1e4e89SAndroid Build Coastguard Worker   u_int8_t	tcpi_state;
190*de1e4e89SAndroid Build Coastguard Worker   u_int8_t	tcpi_ca_state;
191*de1e4e89SAndroid Build Coastguard Worker   u_int8_t	tcpi_retransmits;
192*de1e4e89SAndroid Build Coastguard Worker   u_int8_t	tcpi_probes;
193*de1e4e89SAndroid Build Coastguard Worker   u_int8_t	tcpi_backoff;
194*de1e4e89SAndroid Build Coastguard Worker   u_int8_t	tcpi_options;
195*de1e4e89SAndroid Build Coastguard Worker   u_int8_t	tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
196*de1e4e89SAndroid Build Coastguard Worker 
197*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_rto;
198*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_ato;
199*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_snd_mss;
200*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_rcv_mss;
201*de1e4e89SAndroid Build Coastguard Worker 
202*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_unacked;
203*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_sacked;
204*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_lost;
205*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_retrans;
206*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_fackets;
207*de1e4e89SAndroid Build Coastguard Worker 
208*de1e4e89SAndroid Build Coastguard Worker   /* Times. */
209*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_last_data_sent;
210*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_last_ack_sent;	/* Not remembered, sorry.  */
211*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_last_data_recv;
212*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_last_ack_recv;
213*de1e4e89SAndroid Build Coastguard Worker 
214*de1e4e89SAndroid Build Coastguard Worker   /* Metrics. */
215*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_pmtu;
216*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_rcv_ssthresh;
217*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_rtt;
218*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_rttvar;
219*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_snd_ssthresh;
220*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_snd_cwnd;
221*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_advmss;
222*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_reordering;
223*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_rcv_rtt;
224*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_rcv_space;
225*de1e4e89SAndroid Build Coastguard Worker   u_int32_t	tcpi_total_retrans;
226*de1e4e89SAndroid Build Coastguard Worker 
227*de1e4e89SAndroid Build Coastguard Worker };
228*de1e4e89SAndroid Build Coastguard Worker 
229*de1e4e89SAndroid Build Coastguard Worker #endif /* Misc.  */
230*de1e4e89SAndroid Build Coastguard Worker 
231*de1e4e89SAndroid Build Coastguard Worker #endif /* netinet/tcp.h */
232