1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef _LINUX_TCP_H
18#define _LINUX_TCP_H
19
20#include <linux/types.h>
21#include <asm/byteorder.h>
22
23struct 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
59enum {
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,
71
72 TCP_MAX_STATES
73};
74
75#define TCP_STATE_MASK 0xF
76#define TCP_ACTION_FIN (1 << 7)
77
78enum {
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
94
95
96
97union 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
104enum {
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(0x0F000000),
114 TCP_DATA_OFFSET = __constant_htonl(0xF0000000)
115};
116
117
118#define TCP_NODELAY 1
119#define TCP_MAXSEG 2
120#define TCP_CORK 3
121#define TCP_KEEPIDLE 4
122#define TCP_KEEPINTVL 5
123#define TCP_KEEPCNT 6
124#define TCP_SYNCNT 7
125#define TCP_LINGER2 8
126#define TCP_DEFER_ACCEPT 9
127#define TCP_WINDOW_CLAMP 10
128#define TCP_INFO 11
129#define TCP_QUICKACK 12
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
136enum 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
150struct 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
172 __u32 tcpi_last_data_sent;
173 __u32 tcpi_last_ack_sent;
174 __u32 tcpi_last_data_recv;
175 __u32 tcpi_last_ack_recv;
176
177
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
189