]>
Commit | Line | Data |
---|---|---|
607ca46e DH |
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 _UAPI_LINUX_TCP_H | |
18 | #define _UAPI_LINUX_TCP_H | |
19 | ||
20 | #include <linux/types.h> | |
21 | #include <asm/byteorder.h> | |
22 | #include <linux/socket.h> | |
23 | ||
24 | struct tcphdr { | |
25 | __be16 source; | |
26 | __be16 dest; | |
27 | __be32 seq; | |
28 | __be32 ack_seq; | |
29 | #if defined(__LITTLE_ENDIAN_BITFIELD) | |
30 | __u16 res1:4, | |
31 | doff:4, | |
32 | fin:1, | |
33 | syn:1, | |
34 | rst:1, | |
35 | psh:1, | |
36 | ack:1, | |
37 | urg:1, | |
38 | ece:1, | |
39 | cwr:1; | |
40 | #elif defined(__BIG_ENDIAN_BITFIELD) | |
41 | __u16 doff:4, | |
42 | res1:4, | |
43 | cwr:1, | |
44 | ece:1, | |
45 | urg:1, | |
46 | ack:1, | |
47 | psh:1, | |
48 | rst:1, | |
49 | syn:1, | |
50 | fin:1; | |
51 | #else | |
52 | #error "Adjust your <asm/byteorder.h> defines" | |
53 | #endif | |
54 | __be16 window; | |
55 | __sum16 check; | |
56 | __be16 urg_ptr; | |
57 | }; | |
58 | ||
59 | /* | |
60 | * The union cast uses a gcc extension to avoid aliasing problems | |
61 | * (union is compatible to any of its members) | |
62 | * This means this part of the code is -fstrict-aliasing safe now. | |
63 | */ | |
64 | union tcp_word_hdr { | |
65 | struct tcphdr hdr; | |
66 | __be32 words[5]; | |
67 | }; | |
68 | ||
69 | #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) | |
70 | ||
71 | enum { | |
72 | TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000), | |
73 | TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000), | |
74 | TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000), | |
75 | TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000), | |
76 | TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000), | |
77 | TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000), | |
78 | TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000), | |
79 | TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000), | |
80 | TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000), | |
81 | TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000) | |
82 | }; | |
83 | ||
84 | /* | |
85 | * TCP general constants | |
86 | */ | |
87 | #define TCP_MSS_DEFAULT 536U /* IPv4 (RFC1122, RFC2581) */ | |
88 | #define TCP_MSS_DESIRED 1220U /* IPv6 (tunneled), EDNS0 (RFC3226) */ | |
89 | ||
90 | /* TCP socket options */ | |
91 | #define TCP_NODELAY 1 /* Turn off Nagle's algorithm. */ | |
92 | #define TCP_MAXSEG 2 /* Limit MSS */ | |
93 | #define TCP_CORK 3 /* Never send partially complete segments */ | |
94 | #define TCP_KEEPIDLE 4 /* Start keeplives after this period */ | |
95 | #define TCP_KEEPINTVL 5 /* Interval between keepalives */ | |
96 | #define TCP_KEEPCNT 6 /* Number of keepalives before death */ | |
97 | #define TCP_SYNCNT 7 /* Number of SYN retransmits */ | |
98 | #define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */ | |
99 | #define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */ | |
100 | #define TCP_WINDOW_CLAMP 10 /* Bound advertised window */ | |
101 | #define TCP_INFO 11 /* Information about this connection. */ | |
102 | #define TCP_QUICKACK 12 /* Block/reenable quick acks */ | |
103 | #define TCP_CONGESTION 13 /* Congestion control algorithm */ | |
104 | #define TCP_MD5SIG 14 /* TCP MD5 Signature (RFC2385) */ | |
607ca46e DH |
105 | #define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/ |
106 | #define TCP_THIN_DUPACK 17 /* Fast retrans. after 1 dupack */ | |
107 | #define TCP_USER_TIMEOUT 18 /* How long for loss retry before timeout */ | |
108 | #define TCP_REPAIR 19 /* TCP sock is under repair right now */ | |
109 | #define TCP_REPAIR_QUEUE 20 | |
110 | #define TCP_QUEUE_SEQ 21 | |
111 | #define TCP_REPAIR_OPTIONS 22 | |
112 | #define TCP_FASTOPEN 23 /* Enable FastOpen on listeners */ | |
93be6ce0 | 113 | #define TCP_TIMESTAMP 24 |
c9bee3b7 | 114 | #define TCP_NOTSENT_LOWAT 25 /* limit number of unsent bytes in write queue */ |
6e9250f5 | 115 | #define TCP_CC_INFO 26 /* Get Congestion Control (optional) info */ |
cd8ae852 ED |
116 | #define TCP_SAVE_SYN 27 /* Record SYN headers for new connections */ |
117 | #define TCP_SAVED_SYN 28 /* Get SYN headers recorded for connection */ | |
b1ed4c4f | 118 | #define TCP_REPAIR_WINDOW 29 /* Get/set window parameters */ |
607ca46e DH |
119 | |
120 | struct tcp_repair_opt { | |
121 | __u32 opt_code; | |
122 | __u32 opt_val; | |
123 | }; | |
124 | ||
b1ed4c4f AV |
125 | struct tcp_repair_window { |
126 | __u32 snd_wl1; | |
127 | __u32 snd_wnd; | |
128 | __u32 max_window; | |
129 | ||
130 | __u32 rcv_wnd; | |
131 | __u32 rcv_wup; | |
132 | }; | |
133 | ||
607ca46e DH |
134 | enum { |
135 | TCP_NO_QUEUE, | |
136 | TCP_RECV_QUEUE, | |
137 | TCP_SEND_QUEUE, | |
138 | TCP_QUEUES_NR, | |
139 | }; | |
140 | ||
141 | /* for TCP_INFO socket option */ | |
142 | #define TCPI_OPT_TIMESTAMPS 1 | |
143 | #define TCPI_OPT_SACK 2 | |
144 | #define TCPI_OPT_WSCALE 4 | |
145 | #define TCPI_OPT_ECN 8 /* ECN was negociated at TCP session init */ | |
146 | #define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ | |
6f73601e | 147 | #define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */ |
607ca46e DH |
148 | |
149 | enum tcp_ca_state { | |
150 | TCP_CA_Open = 0, | |
151 | #define TCPF_CA_Open (1<<TCP_CA_Open) | |
152 | TCP_CA_Disorder = 1, | |
153 | #define TCPF_CA_Disorder (1<<TCP_CA_Disorder) | |
154 | TCP_CA_CWR = 2, | |
155 | #define TCPF_CA_CWR (1<<TCP_CA_CWR) | |
156 | TCP_CA_Recovery = 3, | |
157 | #define TCPF_CA_Recovery (1<<TCP_CA_Recovery) | |
158 | TCP_CA_Loss = 4 | |
159 | #define TCPF_CA_Loss (1<<TCP_CA_Loss) | |
160 | }; | |
161 | ||
162 | struct tcp_info { | |
163 | __u8 tcpi_state; | |
164 | __u8 tcpi_ca_state; | |
165 | __u8 tcpi_retransmits; | |
166 | __u8 tcpi_probes; | |
167 | __u8 tcpi_backoff; | |
168 | __u8 tcpi_options; | |
169 | __u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; | |
170 | ||
171 | __u32 tcpi_rto; | |
172 | __u32 tcpi_ato; | |
173 | __u32 tcpi_snd_mss; | |
174 | __u32 tcpi_rcv_mss; | |
175 | ||
176 | __u32 tcpi_unacked; | |
177 | __u32 tcpi_sacked; | |
178 | __u32 tcpi_lost; | |
179 | __u32 tcpi_retrans; | |
180 | __u32 tcpi_fackets; | |
181 | ||
182 | /* Times. */ | |
183 | __u32 tcpi_last_data_sent; | |
184 | __u32 tcpi_last_ack_sent; /* Not remembered, sorry. */ | |
185 | __u32 tcpi_last_data_recv; | |
186 | __u32 tcpi_last_ack_recv; | |
187 | ||
188 | /* Metrics. */ | |
189 | __u32 tcpi_pmtu; | |
190 | __u32 tcpi_rcv_ssthresh; | |
191 | __u32 tcpi_rtt; | |
192 | __u32 tcpi_rttvar; | |
193 | __u32 tcpi_snd_ssthresh; | |
194 | __u32 tcpi_snd_cwnd; | |
195 | __u32 tcpi_advmss; | |
196 | __u32 tcpi_reordering; | |
197 | ||
198 | __u32 tcpi_rcv_rtt; | |
199 | __u32 tcpi_rcv_space; | |
200 | ||
201 | __u32 tcpi_total_retrans; | |
977cb0ec ED |
202 | |
203 | __u64 tcpi_pacing_rate; | |
204 | __u64 tcpi_max_pacing_rate; | |
2efd055c | 205 | __u64 tcpi_bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked */ |
bdd1f9ed | 206 | __u64 tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */ |
2efd055c MRL |
207 | __u32 tcpi_segs_out; /* RFC4898 tcpEStatsPerfSegsOut */ |
208 | __u32 tcpi_segs_in; /* RFC4898 tcpEStatsPerfSegsIn */ | |
cd9b2660 ED |
209 | |
210 | __u32 tcpi_notsent_bytes; | |
211 | __u32 tcpi_min_rtt; | |
a44d6eac MKL |
212 | __u32 tcpi_data_segs_in; /* RFC4898 tcpEStatsDataSegsIn */ |
213 | __u32 tcpi_data_segs_out; /* RFC4898 tcpEStatsDataSegsOut */ | |
607ca46e DH |
214 | }; |
215 | ||
216 | /* for TCP_MD5SIG socket option */ | |
217 | #define TCP_MD5SIG_MAXKEYLEN 80 | |
218 | ||
219 | struct tcp_md5sig { | |
220 | struct __kernel_sockaddr_storage tcpm_addr; /* address associated */ | |
221 | __u16 __tcpm_pad1; /* zero */ | |
222 | __u16 tcpm_keylen; /* key length */ | |
223 | __u32 __tcpm_pad2; /* zero */ | |
224 | __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* key (binary) */ | |
225 | }; | |
226 | ||
607ca46e | 227 | #endif /* _UAPI_LINUX_TCP_H */ |