Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
tcp.h
Go to the documentation of this file.
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, <
[email protected]
>
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
21
#include <
linux/skbuff.h
>
22
#include <
linux/dmaengine.h
>
23
#include <
net/sock.h
>
24
#include <
net/inet_connection_sock.h
>
25
#include <
net/inet_timewait_sock.h
>
26
#include <
uapi/linux/tcp.h
>
27
28
static
inline
struct
tcphdr
*tcp_hdr(
const
struct
sk_buff
*
skb
)
29
{
30
return
(
struct
tcphdr
*)skb_transport_header(skb);
31
}
32
33
static
inline
unsigned
int
tcp_hdrlen(
const
struct
sk_buff
*skb)
34
{
35
return
tcp_hdr(skb)->doff * 4;
36
}
37
38
static
inline
unsigned
int
tcp_optlen(
const
struct
sk_buff
*skb)
39
{
40
return
(tcp_hdr(skb)->doff - 5) * 4;
41
}
42
43
/* TCP Fast Open */
44
#define TCP_FASTOPEN_COOKIE_MIN 4
/* Min Fast Open Cookie size in bytes */
45
#define TCP_FASTOPEN_COOKIE_MAX 16
/* Max Fast Open Cookie size in bytes */
46
#define TCP_FASTOPEN_COOKIE_SIZE 8
/* the size employed by this impl. */
47
48
/* TCP Fast Open Cookie as stored in memory */
49
struct
tcp_fastopen_cookie
{
50
s8
len
;
51
u8
val
[
TCP_FASTOPEN_COOKIE_MAX
];
52
};
53
54
/* This defines a selective acknowledgement block. */
55
struct
tcp_sack_block_wire
{
56
__be32
start_seq
;
57
__be32
end_seq
;
58
};
59
60
struct
tcp_sack_block
{
61
u32
start_seq
;
62
u32
end_seq
;
63
};
64
65
/*These are used to set the sack_ok field in struct tcp_options_received */
66
#define TCP_SACK_SEEN (1 << 0)
/*1 = peer is SACK capable, */
67
#define TCP_FACK_ENABLED (1 << 1)
/*1 = FACK is enabled locally*/
68
#define TCP_DSACK_SEEN (1 << 2)
/*1 = DSACK was received from peer*/
69
70
struct
tcp_options_received
{
71
/* PAWS/RTTM data */
72
long
ts_recent_stamp
;
/* Time we stored ts_recent (for aging) */
73
u32
ts_recent
;
/* Time stamp to echo next */
74
u32
rcv_tsval
;
/* Time stamp value */
75
u32
rcv_tsecr
;
/* Time stamp echo reply */
76
u16
saw_tstamp
: 1,
/* Saw TIMESTAMP on last packet */
77
tstamp_ok
: 1,
/* TIMESTAMP seen on SYN packet */
78
dsack
: 1,
/* D-SACK is scheduled */
79
wscale_ok
: 1,
/* Wscale seen on SYN packet */
80
sack_ok
: 4,
/* SACK seen on SYN packet */
81
snd_wscale
: 4,
/* Window scaling received from sender */
82
rcv_wscale
: 4;
/* Window scaling to send to receiver */
83
u8
cookie_plus
:6,
/* bytes in authenticator/cookie option */
84
cookie_out_never
:1,
85
cookie_in_always
:1;
86
u8
num_sacks
;
/* Number of SACK blocks */
87
u16
user_mss
;
/* mss requested by user in ioctl */
88
u16
mss_clamp
;
/* Maximal mss, negotiated at connection setup */
89
};
90
91
static
inline
void
tcp_clear_options(
struct
tcp_options_received
*rx_opt)
92
{
93
rx_opt->
tstamp_ok
= rx_opt->
sack_ok
= 0;
94
rx_opt->
wscale_ok
= rx_opt->
snd_wscale
= 0;
95
rx_opt->
cookie_plus
= 0;
96
}
97
98
/* This is the max number of SACKS that we'll generate and process. It's safe
99
* to increase this, although since:
100
* size = TCPOLEN_SACK_BASE_ALIGNED (4) + n * TCPOLEN_SACK_PERBLOCK (8)
101
* only four options will fit in a standard TCP header */
102
#define TCP_NUM_SACKS 4
103
104
struct
tcp_cookie_values
;
105
struct
tcp_request_sock_ops
;
106
107
struct
tcp_request_sock
{
108
struct
inet_request_sock
req
;
109
#ifdef CONFIG_TCP_MD5SIG
110
/* Only used by TCP MD5 Signature so far. */
111
const
struct
tcp_request_sock_ops
*af_specific;
112
#endif
113
struct
sock
*
listener
;
/* needed for TFO */
114
u32
rcv_isn
;
115
u32
snt_isn
;
116
u32
snt_synack
;
/* synack sent time */
117
u32
rcv_nxt
;
/* the ack # by SYNACK. For
118
* FastOpen it's the seq#
119
* after data-in-SYN.
120
*/
121
};
122
123
static
inline
struct
tcp_request_sock
*tcp_rsk(
const
struct
request_sock
*
req
)
124
{
125
return
(
struct
tcp_request_sock
*)
req
;
126
}
127
128
struct
tcp_sock
{
129
/* inet_connection_sock has to be the first member of tcp_sock */
130
struct
inet_connection_sock
inet_conn
;
131
u16
tcp_header_len
;
/* Bytes of tcp header to send */
132
u16
xmit_size_goal_segs
;
/* Goal for segmenting output packets */
133
134
/*
135
* Header prediction flags
136
* 0x5?10 << 16 + snd_wnd in net byte order
137
*/
138
__be32
pred_flags
;
139
140
/*
141
* RFC793 variables by their proper names. This means you can
142
* read the code and the spec side by side (and laugh ...)
143
* See RFC793 and RFC1122. The RFC writes these in capitals.
144
*/
145
u32
rcv_nxt
;
/* What we want to receive next */
146
u32
copied_seq
;
/* Head of yet unread data */
147
u32
rcv_wup
;
/* rcv_nxt on last window update sent */
148
u32
snd_nxt
;
/* Next sequence we send */
149
150
u32
snd_una
;
/* First byte we want an ack for */
151
u32
snd_sml
;
/* Last byte of the most recently transmitted small packet */
152
u32
rcv_tstamp
;
/* timestamp of last received ACK (for keepalives) */
153
u32
lsndtime
;
/* timestamp of last sent data packet (for restart window) */
154
155
struct
list_head
tsq_node
;
/* anchor in tsq_tasklet.head list */
156
unsigned
long
tsq_flags
;
157
158
/* Data for direct copy to user */
159
struct
{
160
struct
sk_buff_head
prequeue
;
161
struct
task_struct
*
task
;
162
struct
iovec
*
iov
;
163
int
memory
;
164
int
len
;
165
#ifdef CONFIG_NET_DMA
166
/* members for async copy */
167
struct
dma_chan
*
dma_chan
;
168
int
wakeup;
169
struct
dma_pinned_list
*pinned_list;
170
dma_cookie_t
dma_cookie;
171
#endif
172
}
ucopy
;
173
174
u32
snd_wl1
;
/* Sequence for window update */
175
u32
snd_wnd
;
/* The window we expect to receive */
176
u32
max_window
;
/* Maximal window ever seen from peer */
177
u32
mss_cache
;
/* Cached effective mss, not including SACKS */
178
179
u32
window_clamp
;
/* Maximal window to advertise */
180
u32
rcv_ssthresh
;
/* Current window clamp */
181
182
u32
frto_highmark
;
/* snd_nxt when RTO occurred */
183
u16
advmss
;
/* Advertised MSS */
184
u8
frto_counter
;
/* Number of new acks after RTO */
185
u8
nonagle
: 4,
/* Disable Nagle algorithm? */
186
thin_lto
: 1,
/* Use linear timeouts for thin streams */
187
thin_dupack
: 1,
/* Fast retransmit on first dupack */
188
repair
: 1,
189
unused
: 1;
190
u8
repair_queue
;
191
u8
do_early_retrans
:1,
/* Enable RFC5827 early-retransmit */
192
early_retrans_delayed
:1,
/* Delayed ER timer installed */
193
syn_data
:1,
/* SYN includes data */
194
syn_fastopen
:1,
/* SYN includes Fast Open option */
195
syn_data_acked
:1;
/* data in SYN is acked by SYN-ACK */
196
197
/* RTT measurement */
198
u32
srtt
;
/* smoothed round trip time << 3 */
199
u32
mdev
;
/* medium deviation */
200
u32
mdev_max
;
/* maximal mdev for the last rtt period */
201
u32
rttvar
;
/* smoothed mdev_max */
202
u32
rtt_seq
;
/* sequence number to update rttvar */
203
204
u32
packets_out
;
/* Packets which are "in flight" */
205
u32
retrans_out
;
/* Retransmitted packets out */
206
207
u16
urg_data
;
/* Saved octet of OOB data and control flags */
208
u8
ecn_flags
;
/* ECN status bits. */
209
u8
reordering
;
/* Packet reordering metric. */
210
u32
snd_up
;
/* Urgent pointer */
211
212
u8
keepalive_probes
;
/* num of allowed keep alive probes */
213
/*
214
* Options received (usually on last packet, some only on SYN packets).
215
*/
216
struct
tcp_options_received
rx_opt
;
217
218
/*
219
* Slow start and congestion control (see also Nagle, and Karn & Partridge)
220
*/
221
u32
snd_ssthresh
;
/* Slow start size threshold */
222
u32
snd_cwnd
;
/* Sending congestion window */
223
u32
snd_cwnd_cnt
;
/* Linear increase counter */
224
u32
snd_cwnd_clamp
;
/* Do not allow snd_cwnd to grow above this */
225
u32
snd_cwnd_used
;
226
u32
snd_cwnd_stamp
;
227
u32
prior_cwnd
;
/* Congestion window at start of Recovery. */
228
u32
prr_delivered
;
/* Number of newly delivered packets to
229
* receiver in Recovery. */
230
u32
prr_out
;
/* Total number of pkts sent during Recovery. */
231
232
u32
rcv_wnd
;
/* Current receiver window */
233
u32
write_seq
;
/* Tail(+1) of data held in tcp send buffer */
234
u32
pushed_seq
;
/* Last pushed seq, required to talk to windows */
235
u32
lost_out
;
/* Lost packets */
236
u32
sacked_out
;
/* SACK'd packets */
237
u32
fackets_out
;
/* FACK'd packets */
238
u32
tso_deferred
;
239
u32
bytes_acked
;
/* Appropriate Byte Counting - RFC3465 */
240
241
/* from STCP, retrans queue hinting */
242
struct
sk_buff
*
lost_skb_hint
;
243
struct
sk_buff
*
scoreboard_skb_hint
;
244
struct
sk_buff
*
retransmit_skb_hint
;
245
246
struct
sk_buff_head
out_of_order_queue
;
/* Out of order segments go here */
247
248
/* SACKs data, these 2 need to be together (see tcp_options_write) */
249
struct
tcp_sack_block
duplicate_sack
[1];
/* D-SACK block */
250
struct
tcp_sack_block
selective_acks
[4];
/* The SACKS themselves*/
251
252
struct
tcp_sack_block
recv_sack_cache
[4];
253
254
struct
sk_buff
*
highest_sack
;
/* skb just after the highest
255
* skb with SACKed bit set
256
* (validity guaranteed only if
257
* sacked_out > 0)
258
*/
259
260
int
lost_cnt_hint
;
261
u32
retransmit_high
;
/* L-bits may be on up to this seqno */
262
263
u32
lost_retrans_low
;
/* Sent seq after any rxmit (lowest) */
264
265
u32
prior_ssthresh
;
/* ssthresh saved at recovery start */
266
u32
high_seq
;
/* snd_nxt at onset of congestion */
267
268
u32
retrans_stamp
;
/* Timestamp of the last retransmit,
269
* also used in SYN-SENT to remember stamp of
270
* the first SYN. */
271
u32
undo_marker
;
/* tracking retrans started here. */
272
int
undo_retrans
;
/* number of undoable retransmissions. */
273
u32
total_retrans
;
/* Total retransmits for entire connection */
274
275
u32
urg_seq
;
/* Seq of received urgent pointer */
276
unsigned
int
keepalive_time
;
/* time before keep alive takes place */
277
unsigned
int
keepalive_intvl
;
/* time interval between keep alive probes */
278
279
int
linger2
;
280
281
/* Receiver side RTT estimation */
282
struct
{
283
u32
rtt
;
284
u32
seq
;
285
u32
time
;
286
}
rcv_rtt_est
;
287
288
/* Receiver queue space */
289
struct
{
290
int
space
;
291
u32
seq
;
292
u32
time
;
293
}
rcvq_space
;
294
295
/* TCP-specific MTU probe information. */
296
struct
{
297
u32
probe_seq_start
;
298
u32
probe_seq_end
;
299
}
mtu_probe
;
300
u32
mtu_info
;
/* We received an ICMP_FRAG_NEEDED / ICMPV6_PKT_TOOBIG
301
* while socket was owned by user.
302
*/
303
304
#ifdef CONFIG_TCP_MD5SIG
305
/* TCP AF-Specific parts; only used by MD5 Signature support so far */
306
const
struct
tcp_sock_af_ops
*af_specific;
307
308
/* TCP MD5 Signature Option information */
309
struct
tcp_md5sig_info
__rcu
*md5sig_info;
310
#endif
311
312
/* When the cookie options are generated and exchanged, then this
313
* object holds a reference to them (cookie_values->kref). Also
314
* contains related tcp_cookie_transactions fields.
315
*/
316
struct
tcp_cookie_values
*
cookie_values
;
317
318
/* TCP fastopen related information */
319
struct
tcp_fastopen_request
*
fastopen_req
;
320
/* fastopen_rsk points to request_sock that resulted in this big
321
* socket. Used to retransmit SYNACKs etc.
322
*/
323
struct
request_sock
*
fastopen_rsk
;
324
};
325
326
enum
tsq_flags
{
327
TSQ_THROTTLED
,
328
TSQ_QUEUED
,
329
TCP_TSQ_DEFERRED
,
/* tcp_tasklet_func() found socket was owned */
330
TCP_WRITE_TIMER_DEFERRED
,
/* tcp_write_timer() found socket was owned */
331
TCP_DELACK_TIMER_DEFERRED
,
/* tcp_delack_timer() found socket was owned */
332
TCP_MTU_REDUCED_DEFERRED
,
/* tcp_v{4|6}_err() could not call
333
* tcp_v{4|6}_mtu_reduced()
334
*/
335
};
336
337
static
inline
struct
tcp_sock
*tcp_sk(
const
struct
sock
*
sk
)
338
{
339
return
(
struct
tcp_sock
*)
sk
;
340
}
341
342
struct
tcp_timewait_sock
{
343
struct
inet_timewait_sock
tw_sk
;
344
u32
tw_rcv_nxt
;
345
u32
tw_snd_nxt
;
346
u32
tw_rcv_wnd
;
347
u32
tw_ts_recent
;
348
long
tw_ts_recent_stamp
;
349
#ifdef CONFIG_TCP_MD5SIG
350
struct
tcp_md5sig_key
*tw_md5_key;
351
#endif
352
/* Few sockets in timewait have cookies; in that case, then this
353
* object holds a reference to them (tw_cookie_values->kref).
354
*/
355
struct
tcp_cookie_values
*
tw_cookie_values
;
356
};
357
358
static
inline
struct
tcp_timewait_sock
*tcp_twsk(
const
struct
sock
*
sk
)
359
{
360
return
(
struct
tcp_timewait_sock
*)
sk
;
361
}
362
363
static
inline
bool
tcp_passive_fastopen(
const
struct
sock
*
sk
)
364
{
365
return
(sk->sk_state ==
TCP_SYN_RECV
&&
366
tcp_sk(sk)->fastopen_rsk !=
NULL
);
367
}
368
369
static
inline
bool
fastopen_cookie_present(
struct
tcp_fastopen_cookie
*foc)
370
{
371
return
foc->
len
!= -1;
372
}
373
374
extern
void
tcp_sock_destruct
(
struct
sock
*sk);
375
376
static
inline
int
fastopen_init_queue(
struct
sock
*sk,
int
backlog
)
377
{
378
struct
request_sock_queue
*
queue
=
379
&inet_csk(sk)->icsk_accept_queue;
380
381
if
(queue->
fastopenq
==
NULL
) {
382
queue->
fastopenq
= kzalloc(
383
sizeof
(
struct
fastopen_queue
),
384
sk->
sk_allocation
);
385
if
(queue->
fastopenq
==
NULL
)
386
return
-
ENOMEM
;
387
388
sk->
sk_destruct
=
tcp_sock_destruct
;
389
spin_lock_init
(&queue->
fastopenq
->lock);
390
}
391
queue->
fastopenq
->max_qlen =
backlog
;
392
return
0;
393
}
394
395
#endif
/* _LINUX_TCP_H */
Generated on Thu Jan 10 2013 14:30:13 for Linux Kernel by
1.8.2