]>
Commit | Line | Data |
---|---|---|
320054e8 DG |
1 | #ifndef _NETINET_TCP_H |
2 | #define _NETINET_TCP_H | |
3 | ||
4 | #include <features.h> | |
5 | ||
6 | #define TCP_NODELAY 1 | |
7 | #define TCP_MAXSEG 2 | |
8 | #define TCP_CORK 3 | |
9 | #define TCP_KEEPIDLE 4 | |
10 | #define TCP_KEEPINTVL 5 | |
11 | #define TCP_KEEPCNT 6 | |
12 | #define TCP_SYNCNT 7 | |
13 | #define TCP_LINGER2 8 | |
14 | #define TCP_DEFER_ACCEPT 9 | |
15 | #define TCP_WINDOW_CLAMP 10 | |
16 | #define TCP_INFO 11 | |
17 | #define TCP_QUICKACK 12 | |
18 | #define TCP_CONGESTION 13 | |
19 | #define TCP_MD5SIG 14 | |
20 | #define TCP_THIN_LINEAR_TIMEOUTS 16 | |
21 | #define TCP_THIN_DUPACK 17 | |
22 | #define TCP_USER_TIMEOUT 18 | |
23 | #define TCP_REPAIR 19 | |
24 | #define TCP_REPAIR_QUEUE 20 | |
25 | #define TCP_QUEUE_SEQ 21 | |
26 | #define TCP_REPAIR_OPTIONS 22 | |
27 | #define TCP_FASTOPEN 23 | |
28 | #define TCP_TIMESTAMP 24 | |
29 | #define TCP_NOTSENT_LOWAT 25 | |
30 | #define TCP_CC_INFO 26 | |
31 | #define TCP_SAVE_SYN 27 | |
32 | #define TCP_SAVED_SYN 28 | |
33 | #define TCP_REPAIR_WINDOW 29 | |
34 | #define TCP_FASTOPEN_CONNECT 30 | |
35 | #define TCP_ULP 31 | |
36 | #define TCP_MD5SIG_EXT 32 | |
37 | #define TCP_FASTOPEN_KEY 33 | |
38 | #define TCP_FASTOPEN_NO_COOKIE 34 | |
39 | #define TCP_ZEROCOPY_RECEIVE 35 | |
40 | #define TCP_INQ 36 | |
575e1579 | 41 | #define TCP_TX_DELAY 37 |
320054e8 DG |
42 | |
43 | #define TCP_CM_INQ TCP_INQ | |
44 | ||
45 | #define TCP_ESTABLISHED 1 | |
46 | #define TCP_SYN_SENT 2 | |
47 | #define TCP_SYN_RECV 3 | |
48 | #define TCP_FIN_WAIT1 4 | |
49 | #define TCP_FIN_WAIT2 5 | |
50 | #define TCP_TIME_WAIT 6 | |
51 | #define TCP_CLOSE 7 | |
52 | #define TCP_CLOSE_WAIT 8 | |
53 | #define TCP_LAST_ACK 9 | |
54 | #define TCP_LISTEN 10 | |
55 | #define TCP_CLOSING 11 | |
56 | ||
57 | enum { | |
58 | TCP_NLA_PAD, | |
59 | TCP_NLA_BUSY, | |
60 | TCP_NLA_RWND_LIMITED, | |
61 | TCP_NLA_SNDBUF_LIMITED, | |
62 | TCP_NLA_DATA_SEGS_OUT, | |
63 | TCP_NLA_TOTAL_RETRANS, | |
64 | TCP_NLA_PACING_RATE, | |
65 | TCP_NLA_DELIVERY_RATE, | |
66 | TCP_NLA_SND_CWND, | |
67 | TCP_NLA_REORDERING, | |
68 | TCP_NLA_MIN_RTT, | |
69 | TCP_NLA_RECUR_RETRANS, | |
70 | TCP_NLA_DELIVERY_RATE_APP_LMT, | |
71 | TCP_NLA_SNDQ_SIZE, | |
72 | TCP_NLA_CA_STATE, | |
73 | TCP_NLA_SND_SSTHRESH, | |
74 | TCP_NLA_DELIVERED, | |
75 | TCP_NLA_DELIVERED_CE, | |
f41256b6 DG |
76 | TCP_NLA_BYTES_SENT, |
77 | TCP_NLA_BYTES_RETRANS, | |
78 | TCP_NLA_DSACK_DUPS, | |
79 | TCP_NLA_REORD_SEEN, | |
80 | TCP_NLA_SRTT, | |
322bd4ff DG |
81 | TCP_NLA_TIMEOUT_REHASH, |
82 | TCP_NLA_BYTES_NOTSENT, | |
320054e8 DG |
83 | }; |
84 | ||
85 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | |
86 | #define TCPOPT_EOL 0 | |
87 | #define TCPOPT_NOP 1 | |
88 | #define TCPOPT_MAXSEG 2 | |
89 | #define TCPOPT_WINDOW 3 | |
90 | #define TCPOPT_SACK_PERMITTED 4 | |
91 | #define TCPOPT_SACK 5 | |
92 | #define TCPOPT_TIMESTAMP 8 | |
93 | #define TCPOLEN_SACK_PERMITTED 2 | |
94 | #define TCPOLEN_WINDOW 3 | |
95 | #define TCPOLEN_MAXSEG 4 | |
96 | #define TCPOLEN_TIMESTAMP 10 | |
97 | ||
98 | #define SOL_TCP 6 | |
99 | ||
100 | #include <sys/types.h> | |
101 | #include <sys/socket.h> | |
102 | #include <stdint.h> | |
320054e8 DG |
103 | |
104 | typedef uint32_t tcp_seq; | |
105 | ||
106 | #define TH_FIN 0x01 | |
107 | #define TH_SYN 0x02 | |
108 | #define TH_RST 0x04 | |
109 | #define TH_PUSH 0x08 | |
110 | #define TH_ACK 0x10 | |
111 | #define TH_URG 0x20 | |
112 | ||
113 | struct tcphdr { | |
114 | #ifdef _GNU_SOURCE | |
115 | #ifdef __GNUC__ | |
116 | __extension__ | |
117 | #endif | |
118 | union { struct { | |
119 | ||
120 | uint16_t source; | |
121 | uint16_t dest; | |
122 | uint32_t seq; | |
123 | uint32_t ack_seq; | |
124 | #if __BYTE_ORDER == __LITTLE_ENDIAN | |
125 | uint16_t res1:4; | |
126 | uint16_t doff:4; | |
127 | uint16_t fin:1; | |
128 | uint16_t syn:1; | |
129 | uint16_t rst:1; | |
130 | uint16_t psh:1; | |
131 | uint16_t ack:1; | |
132 | uint16_t urg:1; | |
133 | uint16_t res2:2; | |
134 | #else | |
135 | uint16_t doff:4; | |
136 | uint16_t res1:4; | |
137 | uint16_t res2:2; | |
138 | uint16_t urg:1; | |
139 | uint16_t ack:1; | |
140 | uint16_t psh:1; | |
141 | uint16_t rst:1; | |
142 | uint16_t syn:1; | |
143 | uint16_t fin:1; | |
144 | #endif | |
145 | uint16_t window; | |
146 | uint16_t check; | |
147 | uint16_t urg_ptr; | |
148 | ||
149 | }; struct { | |
150 | #endif | |
151 | ||
152 | uint16_t th_sport; | |
153 | uint16_t th_dport; | |
154 | uint32_t th_seq; | |
155 | uint32_t th_ack; | |
156 | #if __BYTE_ORDER == __LITTLE_ENDIAN | |
157 | uint8_t th_x2:4; | |
158 | uint8_t th_off:4; | |
159 | #else | |
160 | uint8_t th_off:4; | |
161 | uint8_t th_x2:4; | |
162 | #endif | |
163 | uint8_t th_flags; | |
164 | uint16_t th_win; | |
165 | uint16_t th_sum; | |
166 | uint16_t th_urp; | |
167 | ||
168 | #ifdef _GNU_SOURCE | |
169 | }; }; | |
170 | #endif | |
171 | }; | |
172 | #endif | |
173 | ||
174 | #ifdef _GNU_SOURCE | |
175 | #define TCPI_OPT_TIMESTAMPS 1 | |
176 | #define TCPI_OPT_SACK 2 | |
177 | #define TCPI_OPT_WSCALE 4 | |
178 | #define TCPI_OPT_ECN 8 | |
179 | ||
180 | #define TCP_CA_Open 0 | |
181 | #define TCP_CA_Disorder 1 | |
182 | #define TCP_CA_CWR 2 | |
183 | #define TCP_CA_Recovery 3 | |
184 | #define TCP_CA_Loss 4 | |
185 | ||
322bd4ff DG |
186 | enum tcp_fastopen_client_fail { |
187 | TFO_STATUS_UNSPEC, | |
188 | TFO_COOKIE_UNAVAILABLE, | |
189 | TFO_DATA_NOT_ACKED, | |
190 | TFO_SYN_RETRANSMITTED, | |
191 | }; | |
192 | ||
320054e8 DG |
193 | struct tcp_info { |
194 | uint8_t tcpi_state; | |
195 | uint8_t tcpi_ca_state; | |
196 | uint8_t tcpi_retransmits; | |
197 | uint8_t tcpi_probes; | |
198 | uint8_t tcpi_backoff; | |
199 | uint8_t tcpi_options; | |
200 | uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; | |
322bd4ff | 201 | uint8_t tcpi_delivery_rate_app_limited : 1, tcpi_fastopen_client_fail : 2; |
320054e8 DG |
202 | uint32_t tcpi_rto; |
203 | uint32_t tcpi_ato; | |
204 | uint32_t tcpi_snd_mss; | |
205 | uint32_t tcpi_rcv_mss; | |
206 | uint32_t tcpi_unacked; | |
207 | uint32_t tcpi_sacked; | |
208 | uint32_t tcpi_lost; | |
209 | uint32_t tcpi_retrans; | |
210 | uint32_t tcpi_fackets; | |
211 | uint32_t tcpi_last_data_sent; | |
212 | uint32_t tcpi_last_ack_sent; | |
213 | uint32_t tcpi_last_data_recv; | |
214 | uint32_t tcpi_last_ack_recv; | |
215 | uint32_t tcpi_pmtu; | |
216 | uint32_t tcpi_rcv_ssthresh; | |
217 | uint32_t tcpi_rtt; | |
218 | uint32_t tcpi_rttvar; | |
219 | uint32_t tcpi_snd_ssthresh; | |
220 | uint32_t tcpi_snd_cwnd; | |
221 | uint32_t tcpi_advmss; | |
222 | uint32_t tcpi_reordering; | |
223 | uint32_t tcpi_rcv_rtt; | |
224 | uint32_t tcpi_rcv_space; | |
225 | uint32_t tcpi_total_retrans; | |
226 | uint64_t tcpi_pacing_rate; | |
227 | uint64_t tcpi_max_pacing_rate; | |
228 | uint64_t tcpi_bytes_acked; | |
229 | uint64_t tcpi_bytes_received; | |
230 | uint32_t tcpi_segs_out; | |
231 | uint32_t tcpi_segs_in; | |
232 | uint32_t tcpi_notsent_bytes; | |
233 | uint32_t tcpi_min_rtt; | |
234 | uint32_t tcpi_data_segs_in; | |
235 | uint32_t tcpi_data_segs_out; | |
236 | uint64_t tcpi_delivery_rate; | |
237 | uint64_t tcpi_busy_time; | |
238 | uint64_t tcpi_rwnd_limited; | |
239 | uint64_t tcpi_sndbuf_limited; | |
240 | uint32_t tcpi_delivered; | |
241 | uint32_t tcpi_delivered_ce; | |
f41256b6 DG |
242 | uint64_t tcpi_bytes_sent; |
243 | uint64_t tcpi_bytes_retrans; | |
244 | uint32_t tcpi_dsack_dups; | |
245 | uint32_t tcpi_reord_seen; | |
575e1579 DG |
246 | uint32_t tcpi_rcv_ooopack; |
247 | uint32_t tcpi_snd_wnd; | |
320054e8 DG |
248 | }; |
249 | ||
250 | #define TCP_MD5SIG_MAXKEYLEN 80 | |
251 | ||
322bd4ff DG |
252 | #define TCP_MD5SIG_FLAG_PREFIX 0x1 |
253 | #define TCP_MD5SIG_FLAG_IFINDEX 0x2 | |
320054e8 DG |
254 | |
255 | struct tcp_md5sig { | |
256 | struct sockaddr_storage tcpm_addr; | |
257 | uint8_t tcpm_flags; | |
258 | uint8_t tcpm_prefixlen; | |
259 | uint16_t tcpm_keylen; | |
322bd4ff | 260 | int tcpm_ifindex; |
320054e8 DG |
261 | uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; |
262 | }; | |
263 | ||
264 | struct tcp_diag_md5sig { | |
265 | uint8_t tcpm_family; | |
266 | uint8_t tcpm_prefixlen; | |
267 | uint16_t tcpm_keylen; | |
268 | uint32_t tcpm_addr[4]; | |
269 | uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; | |
270 | }; | |
271 | ||
272 | #define TCP_REPAIR_ON 1 | |
273 | #define TCP_REPAIR_OFF 0 | |
274 | #define TCP_REPAIR_OFF_NO_WP -1 | |
275 | ||
276 | struct tcp_repair_window { | |
277 | uint32_t snd_wl1; | |
278 | uint32_t snd_wnd; | |
279 | uint32_t max_window; | |
280 | uint32_t rcv_wnd; | |
281 | uint32_t rcv_wup; | |
282 | }; | |
283 | ||
284 | struct tcp_zerocopy_receive { | |
285 | uint64_t address; | |
286 | uint32_t length; | |
287 | uint32_t recv_skip_hint; | |
322bd4ff DG |
288 | uint32_t inq; |
289 | int32_t err; | |
320054e8 DG |
290 | }; |
291 | ||
292 | #endif | |
293 | ||
294 | #endif |