xref: /OK3568_Linux_fs/kernel/include/uapi/linux/tcp.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * INET		An implementation of the TCP/IP protocol suite for the LINUX
4*4882a593Smuzhiyun  *		operating system.  INET is implemented using the  BSD Socket
5*4882a593Smuzhiyun  *		interface as the means of communication with the user level.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *		Definitions for the TCP protocol.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Version:	@(#)tcp.h	1.0.2	04/28/93
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  *		This program is free software; you can redistribute it and/or
14*4882a593Smuzhiyun  *		modify it under the terms of the GNU General Public License
15*4882a593Smuzhiyun  *		as published by the Free Software Foundation; either version
16*4882a593Smuzhiyun  *		2 of the License, or (at your option) any later version.
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun #ifndef _UAPI_LINUX_TCP_H
19*4882a593Smuzhiyun #define _UAPI_LINUX_TCP_H
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #include <linux/types.h>
22*4882a593Smuzhiyun #include <asm/byteorder.h>
23*4882a593Smuzhiyun #include <linux/socket.h>
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun struct tcphdr {
26*4882a593Smuzhiyun 	__be16	source;
27*4882a593Smuzhiyun 	__be16	dest;
28*4882a593Smuzhiyun 	__be32	seq;
29*4882a593Smuzhiyun 	__be32	ack_seq;
30*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
31*4882a593Smuzhiyun 	__u16	res1:4,
32*4882a593Smuzhiyun 		doff:4,
33*4882a593Smuzhiyun 		fin:1,
34*4882a593Smuzhiyun 		syn:1,
35*4882a593Smuzhiyun 		rst:1,
36*4882a593Smuzhiyun 		psh:1,
37*4882a593Smuzhiyun 		ack:1,
38*4882a593Smuzhiyun 		urg:1,
39*4882a593Smuzhiyun 		ece:1,
40*4882a593Smuzhiyun 		cwr:1;
41*4882a593Smuzhiyun #elif defined(__BIG_ENDIAN_BITFIELD)
42*4882a593Smuzhiyun 	__u16	doff:4,
43*4882a593Smuzhiyun 		res1:4,
44*4882a593Smuzhiyun 		cwr:1,
45*4882a593Smuzhiyun 		ece:1,
46*4882a593Smuzhiyun 		urg:1,
47*4882a593Smuzhiyun 		ack:1,
48*4882a593Smuzhiyun 		psh:1,
49*4882a593Smuzhiyun 		rst:1,
50*4882a593Smuzhiyun 		syn:1,
51*4882a593Smuzhiyun 		fin:1;
52*4882a593Smuzhiyun #else
53*4882a593Smuzhiyun #error	"Adjust your <asm/byteorder.h> defines"
54*4882a593Smuzhiyun #endif
55*4882a593Smuzhiyun 	__be16	window;
56*4882a593Smuzhiyun 	__sum16	check;
57*4882a593Smuzhiyun 	__be16	urg_ptr;
58*4882a593Smuzhiyun };
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /*
61*4882a593Smuzhiyun  *	The union cast uses a gcc extension to avoid aliasing problems
62*4882a593Smuzhiyun  *  (union is compatible to any of its members)
63*4882a593Smuzhiyun  *  This means this part of the code is -fstrict-aliasing safe now.
64*4882a593Smuzhiyun  */
65*4882a593Smuzhiyun union tcp_word_hdr {
66*4882a593Smuzhiyun 	struct tcphdr hdr;
67*4882a593Smuzhiyun 	__be32 		  words[5];
68*4882a593Smuzhiyun };
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3])
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun enum {
73*4882a593Smuzhiyun 	TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000),
74*4882a593Smuzhiyun 	TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000),
75*4882a593Smuzhiyun 	TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000),
76*4882a593Smuzhiyun 	TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000),
77*4882a593Smuzhiyun 	TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000),
78*4882a593Smuzhiyun 	TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000),
79*4882a593Smuzhiyun 	TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000),
80*4882a593Smuzhiyun 	TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000),
81*4882a593Smuzhiyun 	TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000),
82*4882a593Smuzhiyun 	TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000)
83*4882a593Smuzhiyun };
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /*
86*4882a593Smuzhiyun  * TCP general constants
87*4882a593Smuzhiyun  */
88*4882a593Smuzhiyun #define TCP_MSS_DEFAULT		 536U	/* IPv4 (RFC1122, RFC2581) */
89*4882a593Smuzhiyun #define TCP_MSS_DESIRED		1220U	/* IPv6 (tunneled), EDNS0 (RFC3226) */
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun /* TCP socket options */
92*4882a593Smuzhiyun #define TCP_NODELAY		1	/* Turn off Nagle's algorithm. */
93*4882a593Smuzhiyun #define TCP_MAXSEG		2	/* Limit MSS */
94*4882a593Smuzhiyun #define TCP_CORK		3	/* Never send partially complete segments */
95*4882a593Smuzhiyun #define TCP_KEEPIDLE		4	/* Start keeplives after this period */
96*4882a593Smuzhiyun #define TCP_KEEPINTVL		5	/* Interval between keepalives */
97*4882a593Smuzhiyun #define TCP_KEEPCNT		6	/* Number of keepalives before death */
98*4882a593Smuzhiyun #define TCP_SYNCNT		7	/* Number of SYN retransmits */
99*4882a593Smuzhiyun #define TCP_LINGER2		8	/* Life time of orphaned FIN-WAIT-2 state */
100*4882a593Smuzhiyun #define TCP_DEFER_ACCEPT	9	/* Wake up listener only when data arrive */
101*4882a593Smuzhiyun #define TCP_WINDOW_CLAMP	10	/* Bound advertised window */
102*4882a593Smuzhiyun #define TCP_INFO		11	/* Information about this connection. */
103*4882a593Smuzhiyun #define TCP_QUICKACK		12	/* Block/reenable quick acks */
104*4882a593Smuzhiyun #define TCP_CONGESTION		13	/* Congestion control algorithm */
105*4882a593Smuzhiyun #define TCP_MD5SIG		14	/* TCP MD5 Signature (RFC2385) */
106*4882a593Smuzhiyun #define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/
107*4882a593Smuzhiyun #define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */
108*4882a593Smuzhiyun #define TCP_USER_TIMEOUT	18	/* How long for loss retry before timeout */
109*4882a593Smuzhiyun #define TCP_REPAIR		19	/* TCP sock is under repair right now */
110*4882a593Smuzhiyun #define TCP_REPAIR_QUEUE	20
111*4882a593Smuzhiyun #define TCP_QUEUE_SEQ		21
112*4882a593Smuzhiyun #define TCP_REPAIR_OPTIONS	22
113*4882a593Smuzhiyun #define TCP_FASTOPEN		23	/* Enable FastOpen on listeners */
114*4882a593Smuzhiyun #define TCP_TIMESTAMP		24
115*4882a593Smuzhiyun #define TCP_NOTSENT_LOWAT	25	/* limit number of unsent bytes in write queue */
116*4882a593Smuzhiyun #define TCP_CC_INFO		26	/* Get Congestion Control (optional) info */
117*4882a593Smuzhiyun #define TCP_SAVE_SYN		27	/* Record SYN headers for new connections */
118*4882a593Smuzhiyun #define TCP_SAVED_SYN		28	/* Get SYN headers recorded for connection */
119*4882a593Smuzhiyun #define TCP_REPAIR_WINDOW	29	/* Get/set window parameters */
120*4882a593Smuzhiyun #define TCP_FASTOPEN_CONNECT	30	/* Attempt FastOpen with connect */
121*4882a593Smuzhiyun #define TCP_ULP			31	/* Attach a ULP to a TCP connection */
122*4882a593Smuzhiyun #define TCP_MD5SIG_EXT		32	/* TCP MD5 Signature with extensions */
123*4882a593Smuzhiyun #define TCP_FASTOPEN_KEY	33	/* Set the key for Fast Open (cookie) */
124*4882a593Smuzhiyun #define TCP_FASTOPEN_NO_COOKIE	34	/* Enable TFO without a TFO cookie */
125*4882a593Smuzhiyun #define TCP_ZEROCOPY_RECEIVE	35
126*4882a593Smuzhiyun #define TCP_INQ			36	/* Notify bytes available to read as a cmsg on read */
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define TCP_CM_INQ		TCP_INQ
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #define TCP_TX_DELAY		37	/* delay outgoing packets by XX usec */
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun #define TCP_REPAIR_ON		1
134*4882a593Smuzhiyun #define TCP_REPAIR_OFF		0
135*4882a593Smuzhiyun #define TCP_REPAIR_OFF_NO_WP	-1	/* Turn off without window probes */
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun struct tcp_repair_opt {
138*4882a593Smuzhiyun 	__u32	opt_code;
139*4882a593Smuzhiyun 	__u32	opt_val;
140*4882a593Smuzhiyun };
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun struct tcp_repair_window {
143*4882a593Smuzhiyun 	__u32	snd_wl1;
144*4882a593Smuzhiyun 	__u32	snd_wnd;
145*4882a593Smuzhiyun 	__u32	max_window;
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun 	__u32	rcv_wnd;
148*4882a593Smuzhiyun 	__u32	rcv_wup;
149*4882a593Smuzhiyun };
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun enum {
152*4882a593Smuzhiyun 	TCP_NO_QUEUE,
153*4882a593Smuzhiyun 	TCP_RECV_QUEUE,
154*4882a593Smuzhiyun 	TCP_SEND_QUEUE,
155*4882a593Smuzhiyun 	TCP_QUEUES_NR,
156*4882a593Smuzhiyun };
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /* why fastopen failed from client perspective */
159*4882a593Smuzhiyun enum tcp_fastopen_client_fail {
160*4882a593Smuzhiyun 	TFO_STATUS_UNSPEC, /* catch-all */
161*4882a593Smuzhiyun 	TFO_COOKIE_UNAVAILABLE, /* if not in TFO_CLIENT_NO_COOKIE mode */
162*4882a593Smuzhiyun 	TFO_DATA_NOT_ACKED, /* SYN-ACK did not ack SYN data */
163*4882a593Smuzhiyun 	TFO_SYN_RETRANSMITTED, /* SYN-ACK did not ack SYN data after timeout */
164*4882a593Smuzhiyun };
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /* for TCP_INFO socket option */
167*4882a593Smuzhiyun #define TCPI_OPT_TIMESTAMPS	1
168*4882a593Smuzhiyun #define TCPI_OPT_SACK		2
169*4882a593Smuzhiyun #define TCPI_OPT_WSCALE		4
170*4882a593Smuzhiyun #define TCPI_OPT_ECN		8 /* ECN was negociated at TCP session init */
171*4882a593Smuzhiyun #define TCPI_OPT_ECN_SEEN	16 /* we received at least one packet with ECT */
172*4882a593Smuzhiyun #define TCPI_OPT_SYN_DATA	32 /* SYN-ACK acked data in SYN sent or rcvd */
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun /*
175*4882a593Smuzhiyun  * Sender's congestion state indicating normal or abnormal situations
176*4882a593Smuzhiyun  * in the last round of packets sent. The state is driven by the ACK
177*4882a593Smuzhiyun  * information and timer events.
178*4882a593Smuzhiyun  */
179*4882a593Smuzhiyun enum tcp_ca_state {
180*4882a593Smuzhiyun 	/*
181*4882a593Smuzhiyun 	 * Nothing bad has been observed recently.
182*4882a593Smuzhiyun 	 * No apparent reordering, packet loss, or ECN marks.
183*4882a593Smuzhiyun 	 */
184*4882a593Smuzhiyun 	TCP_CA_Open = 0,
185*4882a593Smuzhiyun #define TCPF_CA_Open	(1<<TCP_CA_Open)
186*4882a593Smuzhiyun 	/*
187*4882a593Smuzhiyun 	 * The sender enters disordered state when it has received DUPACKs or
188*4882a593Smuzhiyun 	 * SACKs in the last round of packets sent. This could be due to packet
189*4882a593Smuzhiyun 	 * loss or reordering but needs further information to confirm packets
190*4882a593Smuzhiyun 	 * have been lost.
191*4882a593Smuzhiyun 	 */
192*4882a593Smuzhiyun 	TCP_CA_Disorder = 1,
193*4882a593Smuzhiyun #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
194*4882a593Smuzhiyun 	/*
195*4882a593Smuzhiyun 	 * The sender enters Congestion Window Reduction (CWR) state when it
196*4882a593Smuzhiyun 	 * has received ACKs with ECN-ECE marks, or has experienced congestion
197*4882a593Smuzhiyun 	 * or packet discard on the sender host (e.g. qdisc).
198*4882a593Smuzhiyun 	 */
199*4882a593Smuzhiyun 	TCP_CA_CWR = 2,
200*4882a593Smuzhiyun #define TCPF_CA_CWR	(1<<TCP_CA_CWR)
201*4882a593Smuzhiyun 	/*
202*4882a593Smuzhiyun 	 * The sender is in fast recovery and retransmitting lost packets,
203*4882a593Smuzhiyun 	 * typically triggered by ACK events.
204*4882a593Smuzhiyun 	 */
205*4882a593Smuzhiyun 	TCP_CA_Recovery = 3,
206*4882a593Smuzhiyun #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
207*4882a593Smuzhiyun 	/*
208*4882a593Smuzhiyun 	 * The sender is in loss recovery triggered by retransmission timeout.
209*4882a593Smuzhiyun 	 */
210*4882a593Smuzhiyun 	TCP_CA_Loss = 4
211*4882a593Smuzhiyun #define TCPF_CA_Loss	(1<<TCP_CA_Loss)
212*4882a593Smuzhiyun };
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun struct tcp_info {
215*4882a593Smuzhiyun 	__u8	tcpi_state;
216*4882a593Smuzhiyun 	__u8	tcpi_ca_state;
217*4882a593Smuzhiyun 	__u8	tcpi_retransmits;
218*4882a593Smuzhiyun 	__u8	tcpi_probes;
219*4882a593Smuzhiyun 	__u8	tcpi_backoff;
220*4882a593Smuzhiyun 	__u8	tcpi_options;
221*4882a593Smuzhiyun 	__u8	tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
222*4882a593Smuzhiyun 	__u8	tcpi_delivery_rate_app_limited:1, tcpi_fastopen_client_fail:2;
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun 	__u32	tcpi_rto;
225*4882a593Smuzhiyun 	__u32	tcpi_ato;
226*4882a593Smuzhiyun 	__u32	tcpi_snd_mss;
227*4882a593Smuzhiyun 	__u32	tcpi_rcv_mss;
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun 	__u32	tcpi_unacked;
230*4882a593Smuzhiyun 	__u32	tcpi_sacked;
231*4882a593Smuzhiyun 	__u32	tcpi_lost;
232*4882a593Smuzhiyun 	__u32	tcpi_retrans;
233*4882a593Smuzhiyun 	__u32	tcpi_fackets;
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun 	/* Times. */
236*4882a593Smuzhiyun 	__u32	tcpi_last_data_sent;
237*4882a593Smuzhiyun 	__u32	tcpi_last_ack_sent;     /* Not remembered, sorry. */
238*4882a593Smuzhiyun 	__u32	tcpi_last_data_recv;
239*4882a593Smuzhiyun 	__u32	tcpi_last_ack_recv;
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun 	/* Metrics. */
242*4882a593Smuzhiyun 	__u32	tcpi_pmtu;
243*4882a593Smuzhiyun 	__u32	tcpi_rcv_ssthresh;
244*4882a593Smuzhiyun 	__u32	tcpi_rtt;
245*4882a593Smuzhiyun 	__u32	tcpi_rttvar;
246*4882a593Smuzhiyun 	__u32	tcpi_snd_ssthresh;
247*4882a593Smuzhiyun 	__u32	tcpi_snd_cwnd;
248*4882a593Smuzhiyun 	__u32	tcpi_advmss;
249*4882a593Smuzhiyun 	__u32	tcpi_reordering;
250*4882a593Smuzhiyun 
251*4882a593Smuzhiyun 	__u32	tcpi_rcv_rtt;
252*4882a593Smuzhiyun 	__u32	tcpi_rcv_space;
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun 	__u32	tcpi_total_retrans;
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun 	__u64	tcpi_pacing_rate;
257*4882a593Smuzhiyun 	__u64	tcpi_max_pacing_rate;
258*4882a593Smuzhiyun 	__u64	tcpi_bytes_acked;    /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
259*4882a593Smuzhiyun 	__u64	tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
260*4882a593Smuzhiyun 	__u32	tcpi_segs_out;	     /* RFC4898 tcpEStatsPerfSegsOut */
261*4882a593Smuzhiyun 	__u32	tcpi_segs_in;	     /* RFC4898 tcpEStatsPerfSegsIn */
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun 	__u32	tcpi_notsent_bytes;
264*4882a593Smuzhiyun 	__u32	tcpi_min_rtt;
265*4882a593Smuzhiyun 	__u32	tcpi_data_segs_in;	/* RFC4898 tcpEStatsDataSegsIn */
266*4882a593Smuzhiyun 	__u32	tcpi_data_segs_out;	/* RFC4898 tcpEStatsDataSegsOut */
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun 	__u64   tcpi_delivery_rate;
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun 	__u64	tcpi_busy_time;      /* Time (usec) busy sending data */
271*4882a593Smuzhiyun 	__u64	tcpi_rwnd_limited;   /* Time (usec) limited by receive window */
272*4882a593Smuzhiyun 	__u64	tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun 	__u32	tcpi_delivered;
275*4882a593Smuzhiyun 	__u32	tcpi_delivered_ce;
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun 	__u64	tcpi_bytes_sent;     /* RFC4898 tcpEStatsPerfHCDataOctetsOut */
278*4882a593Smuzhiyun 	__u64	tcpi_bytes_retrans;  /* RFC4898 tcpEStatsPerfOctetsRetrans */
279*4882a593Smuzhiyun 	__u32	tcpi_dsack_dups;     /* RFC4898 tcpEStatsStackDSACKDups */
280*4882a593Smuzhiyun 	__u32	tcpi_reord_seen;     /* reordering events seen */
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun 	__u32	tcpi_rcv_ooopack;    /* Out-of-order packets received */
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun 	__u32	tcpi_snd_wnd;	     /* peer's advertised receive window after
285*4882a593Smuzhiyun 				      * scaling (bytes)
286*4882a593Smuzhiyun 				      */
287*4882a593Smuzhiyun };
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun /* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */
290*4882a593Smuzhiyun enum {
291*4882a593Smuzhiyun 	TCP_NLA_PAD,
292*4882a593Smuzhiyun 	TCP_NLA_BUSY,		/* Time (usec) busy sending data */
293*4882a593Smuzhiyun 	TCP_NLA_RWND_LIMITED,	/* Time (usec) limited by receive window */
294*4882a593Smuzhiyun 	TCP_NLA_SNDBUF_LIMITED,	/* Time (usec) limited by send buffer */
295*4882a593Smuzhiyun 	TCP_NLA_DATA_SEGS_OUT,	/* Data pkts sent including retransmission */
296*4882a593Smuzhiyun 	TCP_NLA_TOTAL_RETRANS,	/* Data pkts retransmitted */
297*4882a593Smuzhiyun 	TCP_NLA_PACING_RATE,    /* Pacing rate in bytes per second */
298*4882a593Smuzhiyun 	TCP_NLA_DELIVERY_RATE,  /* Delivery rate in bytes per second */
299*4882a593Smuzhiyun 	TCP_NLA_SND_CWND,       /* Sending congestion window */
300*4882a593Smuzhiyun 	TCP_NLA_REORDERING,     /* Reordering metric */
301*4882a593Smuzhiyun 	TCP_NLA_MIN_RTT,        /* minimum RTT */
302*4882a593Smuzhiyun 	TCP_NLA_RECUR_RETRANS,  /* Recurring retransmits for the current pkt */
303*4882a593Smuzhiyun 	TCP_NLA_DELIVERY_RATE_APP_LMT, /* delivery rate application limited ? */
304*4882a593Smuzhiyun 	TCP_NLA_SNDQ_SIZE,	/* Data (bytes) pending in send queue */
305*4882a593Smuzhiyun 	TCP_NLA_CA_STATE,	/* ca_state of socket */
306*4882a593Smuzhiyun 	TCP_NLA_SND_SSTHRESH,	/* Slow start size threshold */
307*4882a593Smuzhiyun 	TCP_NLA_DELIVERED,	/* Data pkts delivered incl. out-of-order */
308*4882a593Smuzhiyun 	TCP_NLA_DELIVERED_CE,	/* Like above but only ones w/ CE marks */
309*4882a593Smuzhiyun 	TCP_NLA_BYTES_SENT,	/* Data bytes sent including retransmission */
310*4882a593Smuzhiyun 	TCP_NLA_BYTES_RETRANS,	/* Data bytes retransmitted */
311*4882a593Smuzhiyun 	TCP_NLA_DSACK_DUPS,	/* DSACK blocks received */
312*4882a593Smuzhiyun 	TCP_NLA_REORD_SEEN,	/* reordering events seen */
313*4882a593Smuzhiyun 	TCP_NLA_SRTT,		/* smoothed RTT in usecs */
314*4882a593Smuzhiyun 	TCP_NLA_TIMEOUT_REHASH, /* Timeout-triggered rehash attempts */
315*4882a593Smuzhiyun 	TCP_NLA_BYTES_NOTSENT,	/* Bytes in write queue not yet sent */
316*4882a593Smuzhiyun 	TCP_NLA_EDT,		/* Earliest departure time (CLOCK_MONOTONIC) */
317*4882a593Smuzhiyun };
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun /* for TCP_MD5SIG socket option */
320*4882a593Smuzhiyun #define TCP_MD5SIG_MAXKEYLEN	80
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun /* tcp_md5sig extension flags for TCP_MD5SIG_EXT */
323*4882a593Smuzhiyun #define TCP_MD5SIG_FLAG_PREFIX		0x1	/* address prefix length */
324*4882a593Smuzhiyun #define TCP_MD5SIG_FLAG_IFINDEX		0x2	/* ifindex set */
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun struct tcp_md5sig {
327*4882a593Smuzhiyun 	struct __kernel_sockaddr_storage tcpm_addr;	/* address associated */
328*4882a593Smuzhiyun 	__u8	tcpm_flags;				/* extension flags */
329*4882a593Smuzhiyun 	__u8	tcpm_prefixlen;				/* address prefix */
330*4882a593Smuzhiyun 	__u16	tcpm_keylen;				/* key length */
331*4882a593Smuzhiyun 	int	tcpm_ifindex;				/* device index for scope */
332*4882a593Smuzhiyun 	__u8	tcpm_key[TCP_MD5SIG_MAXKEYLEN];		/* key (binary) */
333*4882a593Smuzhiyun };
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun /* INET_DIAG_MD5SIG */
336*4882a593Smuzhiyun struct tcp_diag_md5sig {
337*4882a593Smuzhiyun 	__u8	tcpm_family;
338*4882a593Smuzhiyun 	__u8	tcpm_prefixlen;
339*4882a593Smuzhiyun 	__u16	tcpm_keylen;
340*4882a593Smuzhiyun 	__be32	tcpm_addr[4];
341*4882a593Smuzhiyun 	__u8	tcpm_key[TCP_MD5SIG_MAXKEYLEN];
342*4882a593Smuzhiyun };
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun /* setsockopt(fd, IPPROTO_TCP, TCP_ZEROCOPY_RECEIVE, ...) */
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun struct tcp_zerocopy_receive {
347*4882a593Smuzhiyun 	__u64 address;		/* in: address of mapping */
348*4882a593Smuzhiyun 	__u32 length;		/* in/out: number of bytes to map/mapped */
349*4882a593Smuzhiyun 	__u32 recv_skip_hint;	/* out: amount of bytes to skip */
350*4882a593Smuzhiyun 	__u32 inq; /* out: amount of bytes in read queue */
351*4882a593Smuzhiyun 	__s32 err; /* out: socket error */
352*4882a593Smuzhiyun 	__u64 copybuf_address;	/* in: copybuf address (small reads) */
353*4882a593Smuzhiyun 	__s32 copybuf_len; /* in/out: copybuf bytes avail/used or error */
354*4882a593Smuzhiyun };
355*4882a593Smuzhiyun #endif /* _UAPI_LINUX_TCP_H */
356