File: /usr/include/linux/tcp.h

1     /*
2      * INET		An implementation of the TCP/IP protocol suite for the LINUX
3      *		operating system.  INET is implemented using the  BSD Socket
4      *		interface as the means of communication with the user level.
5      *
6      *		Definitions for the TCP protocol.
7      *
8      * Version:	@(#)tcp.h	1.0.2	04/28/93
9      *
10      * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
11      *
12      *		This program is free software; you can redistribute it and/or
13      *		modify it under the terms of the GNU General Public License
14      *		as published by the Free Software Foundation; either version
15      *		2 of the License, or (at your option) any later version.
16      */
17     #ifndef _LINUX_TCP_H
18     #define _LINUX_TCP_H
19     
20     #include <linux/types.h>
21     #include <asm/byteorder.h>
22     
23     struct tcphdr {
24     	__u16	source;
25     	__u16	dest;
26     	__u32	seq;
27     	__u32	ack_seq;
28     #if defined(__LITTLE_ENDIAN_BITFIELD)
29     	__u16	res1:4,
30     		doff:4,
31     		fin:1,
32     		syn:1,
33     		rst:1,
34     		psh:1,
35     		ack:1,
36     		urg:1,
37     		ece:1,
38     		cwr:1;
39     #elif defined(__BIG_ENDIAN_BITFIELD)
40     	__u16	doff:4,
41     		res1:4,
42     		cwr:1,
43     		ece:1,
44     		urg:1,
45     		ack:1,
46     		psh:1,
47     		rst:1,
48     		syn:1,
49     		fin:1;
50     #else
51     #error	"Adjust your <asm/byteorder.h> defines"
52     #endif	
53     	__u16	window;
54     	__u16	check;
55     	__u16	urg_ptr;
56     };
57     
58     
59     enum {
60       TCP_ESTABLISHED = 1,
61       TCP_SYN_SENT,
62       TCP_SYN_RECV,
63       TCP_FIN_WAIT1,
64       TCP_FIN_WAIT2,
65       TCP_TIME_WAIT,
66       TCP_CLOSE,
67       TCP_CLOSE_WAIT,
68       TCP_LAST_ACK,
69       TCP_LISTEN,
70       TCP_CLOSING,	 /* now a valid state */
71     
72       TCP_MAX_STATES /* Leave at the end! */
73     };
74     
75     #define TCP_STATE_MASK	0xF
76     #define TCP_ACTION_FIN	(1 << 7)
77     
78     enum {
79       TCPF_ESTABLISHED = (1 << 1),
80       TCPF_SYN_SENT  = (1 << 2),
81       TCPF_SYN_RECV  = (1 << 3),
82       TCPF_FIN_WAIT1 = (1 << 4),
83       TCPF_FIN_WAIT2 = (1 << 5),
84       TCPF_TIME_WAIT = (1 << 6),
85       TCPF_CLOSE     = (1 << 7),
86       TCPF_CLOSE_WAIT = (1 << 8),
87       TCPF_LAST_ACK  = (1 << 9),
88       TCPF_LISTEN    = (1 << 10),
89       TCPF_CLOSING   = (1 << 11) 
90     };
91     
92     /*
93      *	The union cast uses a gcc extension to avoid aliasing problems
94      *  (union is compatible to any of its members)
95      *  This means this part of the code is -fstrict-aliasing safe now.
96      */
97     union tcp_word_hdr { 
98     	struct tcphdr hdr;
99     	__u32 		  words[5];
100     }; 
101     
102     #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 
103     
104     enum { 
105     	TCP_FLAG_CWR = __constant_htonl(0x00800000), 
106     	TCP_FLAG_ECE = __constant_htonl(0x00400000), 
107     	TCP_FLAG_URG = __constant_htonl(0x00200000), 
108     	TCP_FLAG_ACK = __constant_htonl(0x00100000), 
109     	TCP_FLAG_PSH = __constant_htonl(0x00080000), 
110     	TCP_FLAG_RST = __constant_htonl(0x00040000), 
111     	TCP_FLAG_SYN = __constant_htonl(0x00020000), 
112     	TCP_FLAG_FIN = __constant_htonl(0x00010000),
113     	TCP_RESERVED_BITS = __constant_htonl(0x0FC00000),
114     	TCP_DATA_OFFSET = __constant_htonl(0xF0000000)
115     }; 
116     
117     /* TCP socket options */
118     #define TCP_NODELAY		1	/* Turn off Nagle's algorithm. */
119     #define TCP_MAXSEG		2	/* Limit MSS */
120     #define TCP_CORK		3	/* Never send partially complete segments */
121     #define TCP_KEEPIDLE		4	/* Start keeplives after this period */
122     #define TCP_KEEPINTVL		5	/* Interval between keepalives */
123     #define TCP_KEEPCNT		6	/* Number of keepalives before death */
124     #define TCP_SYNCNT		7	/* Number of SYN retransmits */
125     #define TCP_LINGER2		8	/* Life time of orphaned FIN-WAIT-2 state */
126     #define TCP_DEFER_ACCEPT	9	/* Wake up listener only when data arrive */
127     #define TCP_WINDOW_CLAMP	10	/* Bound advertised window */
128     #define TCP_INFO		11	/* Information about this connection. */
129     #define TCP_QUICKACK		12	/* Block/reenable quick acks */
130     
131     #define TCPI_OPT_TIMESTAMPS	1
132     #define TCPI_OPT_SACK		2
133     #define TCPI_OPT_WSCALE		4
134     #define TCPI_OPT_ECN		8
135     
136     enum tcp_ca_state
137     {
138     	TCP_CA_Open = 0,
139     #define TCPF_CA_Open	(1<<TCP_CA_Open)
140     	TCP_CA_Disorder = 1,
141     #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
142     	TCP_CA_CWR = 2,
143     #define TCPF_CA_CWR	(1<<TCP_CA_CWR)
144     	TCP_CA_Recovery = 3,
145     #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
146     	TCP_CA_Loss = 4
147     #define TCPF_CA_Loss	(1<<TCP_CA_Loss)
148     };
149     
150     struct tcp_info
151     {
152     	__u8	tcpi_state;
153     	__u8	tcpi_ca_state;
154     	__u8	tcpi_retransmits;
155     	__u8	tcpi_probes;
156     	__u8	tcpi_backoff;
157     	__u8	tcpi_options;
158     	__u8	tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
159     
160     	__u32	tcpi_rto;
161     	__u32	tcpi_ato;
162     	__u32	tcpi_snd_mss;
163     	__u32	tcpi_rcv_mss;
164     
165     	__u32	tcpi_unacked;
166     	__u32	tcpi_sacked;
167     	__u32	tcpi_lost;
168     	__u32	tcpi_retrans;
169     	__u32	tcpi_fackets;
170     
171     	/* Times. */
172     	__u32	tcpi_last_data_sent;
173     	__u32	tcpi_last_ack_sent;     /* Not remembered, sorry. */
174     	__u32	tcpi_last_data_recv;
175     	__u32	tcpi_last_ack_recv;
176     
177     	/* Metrics. */
178     	__u32	tcpi_pmtu;
179     	__u32	tcpi_rcv_ssthresh;
180     	__u32	tcpi_rtt;
181     	__u32	tcpi_rttvar;
182     	__u32	tcpi_snd_ssthresh;
183     	__u32	tcpi_snd_cwnd;
184     	__u32	tcpi_advmss;
185     	__u32	tcpi_reordering;
186     };
187     
188     #endif	/* _LINUX_TCP_H */
189