xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/tcp.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker /*
3*f80ad8b4SAndroid Build Coastguard Worker  * INET		An implementation of the TCP/IP protocol suite for the LINUX
4*f80ad8b4SAndroid Build Coastguard Worker  *		operating system.  INET is implemented using the  BSD Socket
5*f80ad8b4SAndroid Build Coastguard Worker  *		interface as the means of communication with the user level.
6*f80ad8b4SAndroid Build Coastguard Worker  *
7*f80ad8b4SAndroid Build Coastguard Worker  *		Definitions for the TCP protocol.
8*f80ad8b4SAndroid Build Coastguard Worker  *
9*f80ad8b4SAndroid Build Coastguard Worker  * Version:	@(#)tcp.h	1.0.2	04/28/93
10*f80ad8b4SAndroid Build Coastguard Worker  *
11*f80ad8b4SAndroid Build Coastguard Worker  * Author:	Fred N. van Kempen, <[email protected]>
12*f80ad8b4SAndroid Build Coastguard Worker  *
13*f80ad8b4SAndroid Build Coastguard Worker  *		This program is free software; you can redistribute it and/or
14*f80ad8b4SAndroid Build Coastguard Worker  *		modify it under the terms of the GNU General Public License
15*f80ad8b4SAndroid Build Coastguard Worker  *		as published by the Free Software Foundation; either version
16*f80ad8b4SAndroid Build Coastguard Worker  *		2 of the License, or (at your option) any later version.
17*f80ad8b4SAndroid Build Coastguard Worker  */
18*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_TCP_H
19*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_TCP_H
20*f80ad8b4SAndroid Build Coastguard Worker 
21*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
22*f80ad8b4SAndroid Build Coastguard Worker #include <asm/byteorder.h>
23*f80ad8b4SAndroid Build Coastguard Worker #include <linux/socket.h>
24*f80ad8b4SAndroid Build Coastguard Worker 
25*f80ad8b4SAndroid Build Coastguard Worker struct tcphdr {
26*f80ad8b4SAndroid Build Coastguard Worker 	__be16	source;
27*f80ad8b4SAndroid Build Coastguard Worker 	__be16	dest;
28*f80ad8b4SAndroid Build Coastguard Worker 	__be32	seq;
29*f80ad8b4SAndroid Build Coastguard Worker 	__be32	ack_seq;
30*f80ad8b4SAndroid Build Coastguard Worker #if defined(__LITTLE_ENDIAN_BITFIELD)
31*f80ad8b4SAndroid Build Coastguard Worker 	__u16	res1:4,
32*f80ad8b4SAndroid Build Coastguard Worker 		doff:4,
33*f80ad8b4SAndroid Build Coastguard Worker 		fin:1,
34*f80ad8b4SAndroid Build Coastguard Worker 		syn:1,
35*f80ad8b4SAndroid Build Coastguard Worker 		rst:1,
36*f80ad8b4SAndroid Build Coastguard Worker 		psh:1,
37*f80ad8b4SAndroid Build Coastguard Worker 		ack:1,
38*f80ad8b4SAndroid Build Coastguard Worker 		urg:1,
39*f80ad8b4SAndroid Build Coastguard Worker 		ece:1,
40*f80ad8b4SAndroid Build Coastguard Worker 		cwr:1;
41*f80ad8b4SAndroid Build Coastguard Worker #elif defined(__BIG_ENDIAN_BITFIELD)
42*f80ad8b4SAndroid Build Coastguard Worker 	__u16	doff:4,
43*f80ad8b4SAndroid Build Coastguard Worker 		res1:4,
44*f80ad8b4SAndroid Build Coastguard Worker 		cwr:1,
45*f80ad8b4SAndroid Build Coastguard Worker 		ece:1,
46*f80ad8b4SAndroid Build Coastguard Worker 		urg:1,
47*f80ad8b4SAndroid Build Coastguard Worker 		ack:1,
48*f80ad8b4SAndroid Build Coastguard Worker 		psh:1,
49*f80ad8b4SAndroid Build Coastguard Worker 		rst:1,
50*f80ad8b4SAndroid Build Coastguard Worker 		syn:1,
51*f80ad8b4SAndroid Build Coastguard Worker 		fin:1;
52*f80ad8b4SAndroid Build Coastguard Worker #else
53*f80ad8b4SAndroid Build Coastguard Worker #error	"Adjust your <asm/byteorder.h> defines"
54*f80ad8b4SAndroid Build Coastguard Worker #endif
55*f80ad8b4SAndroid Build Coastguard Worker 	__be16	window;
56*f80ad8b4SAndroid Build Coastguard Worker 	__sum16	check;
57*f80ad8b4SAndroid Build Coastguard Worker 	__be16	urg_ptr;
58*f80ad8b4SAndroid Build Coastguard Worker };
59*f80ad8b4SAndroid Build Coastguard Worker 
60*f80ad8b4SAndroid Build Coastguard Worker /*
61*f80ad8b4SAndroid Build Coastguard Worker  *	The union cast uses a gcc extension to avoid aliasing problems
62*f80ad8b4SAndroid Build Coastguard Worker  *  (union is compatible to any of its members)
63*f80ad8b4SAndroid Build Coastguard Worker  *  This means this part of the code is -fstrict-aliasing safe now.
64*f80ad8b4SAndroid Build Coastguard Worker  */
65*f80ad8b4SAndroid Build Coastguard Worker union tcp_word_hdr {
66*f80ad8b4SAndroid Build Coastguard Worker 	struct tcphdr hdr;
67*f80ad8b4SAndroid Build Coastguard Worker 	__be32        words[5];
68*f80ad8b4SAndroid Build Coastguard Worker };
69*f80ad8b4SAndroid Build Coastguard Worker 
70*f80ad8b4SAndroid Build Coastguard Worker #define tcp_flag_word(tp) (((union tcp_word_hdr *)(tp))->words[3])
71*f80ad8b4SAndroid Build Coastguard Worker 
72*f80ad8b4SAndroid Build Coastguard Worker enum {
73*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000),
74*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000),
75*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000),
76*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000),
77*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000),
78*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000),
79*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000),
80*f80ad8b4SAndroid Build Coastguard Worker 	TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000),
81*f80ad8b4SAndroid Build Coastguard Worker 	TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000),
82*f80ad8b4SAndroid Build Coastguard Worker 	TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000)
83*f80ad8b4SAndroid Build Coastguard Worker };
84*f80ad8b4SAndroid Build Coastguard Worker 
85*f80ad8b4SAndroid Build Coastguard Worker /*
86*f80ad8b4SAndroid Build Coastguard Worker  * TCP general constants
87*f80ad8b4SAndroid Build Coastguard Worker  */
88*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MSS_DEFAULT		 536U	/* IPv4 (RFC1122, RFC2581) */
89*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MSS_DESIRED		1220U	/* IPv6 (tunneled), EDNS0 (RFC3226) */
90*f80ad8b4SAndroid Build Coastguard Worker 
91*f80ad8b4SAndroid Build Coastguard Worker /* TCP socket options */
92*f80ad8b4SAndroid Build Coastguard Worker #define TCP_NODELAY		1	/* Turn off Nagle's algorithm. */
93*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MAXSEG		2	/* Limit MSS */
94*f80ad8b4SAndroid Build Coastguard Worker #define TCP_CORK		3	/* Never send partially complete segments */
95*f80ad8b4SAndroid Build Coastguard Worker #define TCP_KEEPIDLE		4	/* Start keeplives after this period */
96*f80ad8b4SAndroid Build Coastguard Worker #define TCP_KEEPINTVL		5	/* Interval between keepalives */
97*f80ad8b4SAndroid Build Coastguard Worker #define TCP_KEEPCNT		6	/* Number of keepalives before death */
98*f80ad8b4SAndroid Build Coastguard Worker #define TCP_SYNCNT		7	/* Number of SYN retransmits */
99*f80ad8b4SAndroid Build Coastguard Worker #define TCP_LINGER2		8	/* Life time of orphaned FIN-WAIT-2 state */
100*f80ad8b4SAndroid Build Coastguard Worker #define TCP_DEFER_ACCEPT	9	/* Wake up listener only when data arrive */
101*f80ad8b4SAndroid Build Coastguard Worker #define TCP_WINDOW_CLAMP	10	/* Bound advertised window */
102*f80ad8b4SAndroid Build Coastguard Worker #define TCP_INFO		11	/* Information about this connection. */
103*f80ad8b4SAndroid Build Coastguard Worker #define TCP_QUICKACK		12	/* Block/reenable quick acks */
104*f80ad8b4SAndroid Build Coastguard Worker #define TCP_CONGESTION		13	/* Congestion control algorithm */
105*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MD5SIG		14	/* TCP MD5 Signature (RFC2385) */
106*f80ad8b4SAndroid Build Coastguard Worker #define TCP_THIN_LINEAR_TIMEOUTS 16	/* Use linear timeouts for thin streams*/
107*f80ad8b4SAndroid Build Coastguard Worker #define TCP_THIN_DUPACK		17	/* Fast retrans. after 1 dupack */
108*f80ad8b4SAndroid Build Coastguard Worker #define TCP_USER_TIMEOUT	18	/* How long for loss retry before timeout */
109*f80ad8b4SAndroid Build Coastguard Worker #define TCP_REPAIR		19	/* TCP sock is under repair right now */
110*f80ad8b4SAndroid Build Coastguard Worker #define TCP_REPAIR_QUEUE	20
111*f80ad8b4SAndroid Build Coastguard Worker #define TCP_QUEUE_SEQ		21
112*f80ad8b4SAndroid Build Coastguard Worker #define TCP_REPAIR_OPTIONS	22
113*f80ad8b4SAndroid Build Coastguard Worker #define TCP_FASTOPEN		23	/* Enable FastOpen on listeners */
114*f80ad8b4SAndroid Build Coastguard Worker #define TCP_TIMESTAMP		24
115*f80ad8b4SAndroid Build Coastguard Worker #define TCP_NOTSENT_LOWAT	25	/* limit number of unsent bytes in write queue */
116*f80ad8b4SAndroid Build Coastguard Worker #define TCP_CC_INFO		26	/* Get Congestion Control (optional) info */
117*f80ad8b4SAndroid Build Coastguard Worker #define TCP_SAVE_SYN		27	/* Record SYN headers for new connections */
118*f80ad8b4SAndroid Build Coastguard Worker #define TCP_SAVED_SYN		28	/* Get SYN headers recorded for connection */
119*f80ad8b4SAndroid Build Coastguard Worker #define TCP_REPAIR_WINDOW	29	/* Get/set window parameters */
120*f80ad8b4SAndroid Build Coastguard Worker #define TCP_FASTOPEN_CONNECT	30	/* Attempt FastOpen with connect */
121*f80ad8b4SAndroid Build Coastguard Worker #define TCP_ULP			31	/* Attach a ULP to a TCP connection */
122*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MD5SIG_EXT		32	/* TCP MD5 Signature with extensions */
123*f80ad8b4SAndroid Build Coastguard Worker #define TCP_FASTOPEN_KEY	33	/* Set the key for Fast Open (cookie) */
124*f80ad8b4SAndroid Build Coastguard Worker #define TCP_FASTOPEN_NO_COOKIE	34	/* Enable TFO without a TFO cookie */
125*f80ad8b4SAndroid Build Coastguard Worker #define TCP_ZEROCOPY_RECEIVE	35
126*f80ad8b4SAndroid Build Coastguard Worker #define TCP_INQ			36	/* Notify bytes available to read as a cmsg on read */
127*f80ad8b4SAndroid Build Coastguard Worker 
128*f80ad8b4SAndroid Build Coastguard Worker #define TCP_CM_INQ		TCP_INQ
129*f80ad8b4SAndroid Build Coastguard Worker 
130*f80ad8b4SAndroid Build Coastguard Worker #define TCP_TX_DELAY		37	/* delay outgoing packets by XX usec */
131*f80ad8b4SAndroid Build Coastguard Worker 
132*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_ADD_KEY		38	/* Add/Set MKT */
133*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_DEL_KEY		39	/* Delete MKT */
134*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_INFO		40	/* Set/list TCP-AO per-socket options */
135*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_GET_KEYS		41	/* List MKT(s) */
136*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_REPAIR		42	/* Get/Set SNEs and ISNs */
137*f80ad8b4SAndroid Build Coastguard Worker 
138*f80ad8b4SAndroid Build Coastguard Worker #define TCP_IS_MPTCP		43	/* Is MPTCP being used? */
139*f80ad8b4SAndroid Build Coastguard Worker 
140*f80ad8b4SAndroid Build Coastguard Worker #define TCP_REPAIR_ON		1
141*f80ad8b4SAndroid Build Coastguard Worker #define TCP_REPAIR_OFF		0
142*f80ad8b4SAndroid Build Coastguard Worker #define TCP_REPAIR_OFF_NO_WP	-1	/* Turn off without window probes */
143*f80ad8b4SAndroid Build Coastguard Worker 
144*f80ad8b4SAndroid Build Coastguard Worker struct tcp_repair_opt {
145*f80ad8b4SAndroid Build Coastguard Worker 	__u32	opt_code;
146*f80ad8b4SAndroid Build Coastguard Worker 	__u32	opt_val;
147*f80ad8b4SAndroid Build Coastguard Worker };
148*f80ad8b4SAndroid Build Coastguard Worker 
149*f80ad8b4SAndroid Build Coastguard Worker struct tcp_repair_window {
150*f80ad8b4SAndroid Build Coastguard Worker 	__u32	snd_wl1;
151*f80ad8b4SAndroid Build Coastguard Worker 	__u32	snd_wnd;
152*f80ad8b4SAndroid Build Coastguard Worker 	__u32	max_window;
153*f80ad8b4SAndroid Build Coastguard Worker 
154*f80ad8b4SAndroid Build Coastguard Worker 	__u32	rcv_wnd;
155*f80ad8b4SAndroid Build Coastguard Worker 	__u32	rcv_wup;
156*f80ad8b4SAndroid Build Coastguard Worker };
157*f80ad8b4SAndroid Build Coastguard Worker 
158*f80ad8b4SAndroid Build Coastguard Worker enum {
159*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NO_QUEUE,
160*f80ad8b4SAndroid Build Coastguard Worker 	TCP_RECV_QUEUE,
161*f80ad8b4SAndroid Build Coastguard Worker 	TCP_SEND_QUEUE,
162*f80ad8b4SAndroid Build Coastguard Worker 	TCP_QUEUES_NR,
163*f80ad8b4SAndroid Build Coastguard Worker };
164*f80ad8b4SAndroid Build Coastguard Worker 
165*f80ad8b4SAndroid Build Coastguard Worker /* why fastopen failed from client perspective */
166*f80ad8b4SAndroid Build Coastguard Worker enum tcp_fastopen_client_fail {
167*f80ad8b4SAndroid Build Coastguard Worker 	TFO_STATUS_UNSPEC, /* catch-all */
168*f80ad8b4SAndroid Build Coastguard Worker 	TFO_COOKIE_UNAVAILABLE, /* if not in TFO_CLIENT_NO_COOKIE mode */
169*f80ad8b4SAndroid Build Coastguard Worker 	TFO_DATA_NOT_ACKED, /* SYN-ACK did not ack SYN data */
170*f80ad8b4SAndroid Build Coastguard Worker 	TFO_SYN_RETRANSMITTED, /* SYN-ACK did not ack SYN data after timeout */
171*f80ad8b4SAndroid Build Coastguard Worker };
172*f80ad8b4SAndroid Build Coastguard Worker 
173*f80ad8b4SAndroid Build Coastguard Worker /* for TCP_INFO socket option */
174*f80ad8b4SAndroid Build Coastguard Worker #define TCPI_OPT_TIMESTAMPS	1
175*f80ad8b4SAndroid Build Coastguard Worker #define TCPI_OPT_SACK		2
176*f80ad8b4SAndroid Build Coastguard Worker #define TCPI_OPT_WSCALE		4
177*f80ad8b4SAndroid Build Coastguard Worker #define TCPI_OPT_ECN		8 /* ECN was negociated at TCP session init */
178*f80ad8b4SAndroid Build Coastguard Worker #define TCPI_OPT_ECN_SEEN	16 /* we received at least one packet with ECT */
179*f80ad8b4SAndroid Build Coastguard Worker #define TCPI_OPT_SYN_DATA	32 /* SYN-ACK acked data in SYN sent or rcvd */
180*f80ad8b4SAndroid Build Coastguard Worker #define TCPI_OPT_USEC_TS	64 /* usec timestamps */
181*f80ad8b4SAndroid Build Coastguard Worker 
182*f80ad8b4SAndroid Build Coastguard Worker /*
183*f80ad8b4SAndroid Build Coastguard Worker  * Sender's congestion state indicating normal or abnormal situations
184*f80ad8b4SAndroid Build Coastguard Worker  * in the last round of packets sent. The state is driven by the ACK
185*f80ad8b4SAndroid Build Coastguard Worker  * information and timer events.
186*f80ad8b4SAndroid Build Coastguard Worker  */
187*f80ad8b4SAndroid Build Coastguard Worker enum tcp_ca_state {
188*f80ad8b4SAndroid Build Coastguard Worker 	/*
189*f80ad8b4SAndroid Build Coastguard Worker 	 * Nothing bad has been observed recently.
190*f80ad8b4SAndroid Build Coastguard Worker 	 * No apparent reordering, packet loss, or ECN marks.
191*f80ad8b4SAndroid Build Coastguard Worker 	 */
192*f80ad8b4SAndroid Build Coastguard Worker 	TCP_CA_Open = 0,
193*f80ad8b4SAndroid Build Coastguard Worker #define TCPF_CA_Open	(1<<TCP_CA_Open)
194*f80ad8b4SAndroid Build Coastguard Worker 	/*
195*f80ad8b4SAndroid Build Coastguard Worker 	 * The sender enters disordered state when it has received DUPACKs or
196*f80ad8b4SAndroid Build Coastguard Worker 	 * SACKs in the last round of packets sent. This could be due to packet
197*f80ad8b4SAndroid Build Coastguard Worker 	 * loss or reordering but needs further information to confirm packets
198*f80ad8b4SAndroid Build Coastguard Worker 	 * have been lost.
199*f80ad8b4SAndroid Build Coastguard Worker 	 */
200*f80ad8b4SAndroid Build Coastguard Worker 	TCP_CA_Disorder = 1,
201*f80ad8b4SAndroid Build Coastguard Worker #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
202*f80ad8b4SAndroid Build Coastguard Worker 	/*
203*f80ad8b4SAndroid Build Coastguard Worker 	 * The sender enters Congestion Window Reduction (CWR) state when it
204*f80ad8b4SAndroid Build Coastguard Worker 	 * has received ACKs with ECN-ECE marks, or has experienced congestion
205*f80ad8b4SAndroid Build Coastguard Worker 	 * or packet discard on the sender host (e.g. qdisc).
206*f80ad8b4SAndroid Build Coastguard Worker 	 */
207*f80ad8b4SAndroid Build Coastguard Worker 	TCP_CA_CWR = 2,
208*f80ad8b4SAndroid Build Coastguard Worker #define TCPF_CA_CWR	(1<<TCP_CA_CWR)
209*f80ad8b4SAndroid Build Coastguard Worker 	/*
210*f80ad8b4SAndroid Build Coastguard Worker 	 * The sender is in fast recovery and retransmitting lost packets,
211*f80ad8b4SAndroid Build Coastguard Worker 	 * typically triggered by ACK events.
212*f80ad8b4SAndroid Build Coastguard Worker 	 */
213*f80ad8b4SAndroid Build Coastguard Worker 	TCP_CA_Recovery = 3,
214*f80ad8b4SAndroid Build Coastguard Worker #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
215*f80ad8b4SAndroid Build Coastguard Worker 	/*
216*f80ad8b4SAndroid Build Coastguard Worker 	 * The sender is in loss recovery triggered by retransmission timeout.
217*f80ad8b4SAndroid Build Coastguard Worker 	 */
218*f80ad8b4SAndroid Build Coastguard Worker 	TCP_CA_Loss = 4
219*f80ad8b4SAndroid Build Coastguard Worker #define TCPF_CA_Loss	(1<<TCP_CA_Loss)
220*f80ad8b4SAndroid Build Coastguard Worker };
221*f80ad8b4SAndroid Build Coastguard Worker 
222*f80ad8b4SAndroid Build Coastguard Worker struct tcp_info {
223*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_state;
224*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_ca_state;
225*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_retransmits;
226*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_probes;
227*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_backoff;
228*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_options;
229*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
230*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpi_delivery_rate_app_limited:1, tcpi_fastopen_client_fail:2;
231*f80ad8b4SAndroid Build Coastguard Worker 
232*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rto;
233*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_ato;
234*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_snd_mss;
235*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rcv_mss;
236*f80ad8b4SAndroid Build Coastguard Worker 
237*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_unacked;
238*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_sacked;
239*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_lost;
240*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_retrans;
241*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_fackets;
242*f80ad8b4SAndroid Build Coastguard Worker 
243*f80ad8b4SAndroid Build Coastguard Worker 	/* Times. */
244*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_last_data_sent;
245*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_last_ack_sent;     /* Not remembered, sorry. */
246*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_last_data_recv;
247*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_last_ack_recv;
248*f80ad8b4SAndroid Build Coastguard Worker 
249*f80ad8b4SAndroid Build Coastguard Worker 	/* Metrics. */
250*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_pmtu;
251*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rcv_ssthresh;
252*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rtt;
253*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rttvar;
254*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_snd_ssthresh;
255*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_snd_cwnd;
256*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_advmss;
257*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_reordering;
258*f80ad8b4SAndroid Build Coastguard Worker 
259*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rcv_rtt;
260*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rcv_space;
261*f80ad8b4SAndroid Build Coastguard Worker 
262*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_total_retrans;
263*f80ad8b4SAndroid Build Coastguard Worker 
264*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_pacing_rate;
265*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_max_pacing_rate;
266*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_bytes_acked;    /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
267*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
268*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_segs_out;	     /* RFC4898 tcpEStatsPerfSegsOut */
269*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_segs_in;	     /* RFC4898 tcpEStatsPerfSegsIn */
270*f80ad8b4SAndroid Build Coastguard Worker 
271*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_notsent_bytes;
272*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_min_rtt;
273*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_data_segs_in;	/* RFC4898 tcpEStatsDataSegsIn */
274*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_data_segs_out;	/* RFC4898 tcpEStatsDataSegsOut */
275*f80ad8b4SAndroid Build Coastguard Worker 
276*f80ad8b4SAndroid Build Coastguard Worker 	__u64   tcpi_delivery_rate;
277*f80ad8b4SAndroid Build Coastguard Worker 
278*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_busy_time;      /* Time (usec) busy sending data */
279*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_rwnd_limited;   /* Time (usec) limited by receive window */
280*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */
281*f80ad8b4SAndroid Build Coastguard Worker 
282*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_delivered;
283*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_delivered_ce;
284*f80ad8b4SAndroid Build Coastguard Worker 
285*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_bytes_sent;     /* RFC4898 tcpEStatsPerfHCDataOctetsOut */
286*f80ad8b4SAndroid Build Coastguard Worker 	__u64	tcpi_bytes_retrans;  /* RFC4898 tcpEStatsPerfOctetsRetrans */
287*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_dsack_dups;     /* RFC4898 tcpEStatsStackDSACKDups */
288*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_reord_seen;     /* reordering events seen */
289*f80ad8b4SAndroid Build Coastguard Worker 
290*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rcv_ooopack;    /* Out-of-order packets received */
291*f80ad8b4SAndroid Build Coastguard Worker 
292*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_snd_wnd;	     /* peer's advertised receive window after
293*f80ad8b4SAndroid Build Coastguard Worker 				      * scaling (bytes)
294*f80ad8b4SAndroid Build Coastguard Worker 				      */
295*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_rcv_wnd;	     /* local advertised receive window after
296*f80ad8b4SAndroid Build Coastguard Worker 				      * scaling (bytes)
297*f80ad8b4SAndroid Build Coastguard Worker 				      */
298*f80ad8b4SAndroid Build Coastguard Worker 
299*f80ad8b4SAndroid Build Coastguard Worker 	__u32   tcpi_rehash;         /* PLB or timeout triggered rehash attempts */
300*f80ad8b4SAndroid Build Coastguard Worker 
301*f80ad8b4SAndroid Build Coastguard Worker 	__u16	tcpi_total_rto;	/* Total number of RTO timeouts, including
302*f80ad8b4SAndroid Build Coastguard Worker 				 * SYN/SYN-ACK and recurring timeouts.
303*f80ad8b4SAndroid Build Coastguard Worker 				 */
304*f80ad8b4SAndroid Build Coastguard Worker 	__u16	tcpi_total_rto_recoveries;	/* Total number of RTO
305*f80ad8b4SAndroid Build Coastguard Worker 						 * recoveries, including any
306*f80ad8b4SAndroid Build Coastguard Worker 						 * unfinished recovery.
307*f80ad8b4SAndroid Build Coastguard Worker 						 */
308*f80ad8b4SAndroid Build Coastguard Worker 	__u32	tcpi_total_rto_time;	/* Total time spent in RTO recoveries
309*f80ad8b4SAndroid Build Coastguard Worker 					 * in milliseconds, including any
310*f80ad8b4SAndroid Build Coastguard Worker 					 * unfinished recovery.
311*f80ad8b4SAndroid Build Coastguard Worker 					 */
312*f80ad8b4SAndroid Build Coastguard Worker };
313*f80ad8b4SAndroid Build Coastguard Worker 
314*f80ad8b4SAndroid Build Coastguard Worker /* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */
315*f80ad8b4SAndroid Build Coastguard Worker enum {
316*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_PAD,
317*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_BUSY,		/* Time (usec) busy sending data */
318*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_RWND_LIMITED,	/* Time (usec) limited by receive window */
319*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_SNDBUF_LIMITED,	/* Time (usec) limited by send buffer */
320*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_DATA_SEGS_OUT,	/* Data pkts sent including retransmission */
321*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_TOTAL_RETRANS,	/* Data pkts retransmitted */
322*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_PACING_RATE,    /* Pacing rate in bytes per second */
323*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_DELIVERY_RATE,  /* Delivery rate in bytes per second */
324*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_SND_CWND,       /* Sending congestion window */
325*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_REORDERING,     /* Reordering metric */
326*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_MIN_RTT,        /* minimum RTT */
327*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_RECUR_RETRANS,  /* Recurring retransmits for the current pkt */
328*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_DELIVERY_RATE_APP_LMT, /* delivery rate application limited ? */
329*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_SNDQ_SIZE,	/* Data (bytes) pending in send queue */
330*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_CA_STATE,	/* ca_state of socket */
331*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_SND_SSTHRESH,	/* Slow start size threshold */
332*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_DELIVERED,	/* Data pkts delivered incl. out-of-order */
333*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_DELIVERED_CE,	/* Like above but only ones w/ CE marks */
334*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_BYTES_SENT,	/* Data bytes sent including retransmission */
335*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_BYTES_RETRANS,	/* Data bytes retransmitted */
336*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_DSACK_DUPS,	/* DSACK blocks received */
337*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_REORD_SEEN,	/* reordering events seen */
338*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_SRTT,		/* smoothed RTT in usecs */
339*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_TIMEOUT_REHASH, /* Timeout-triggered rehash attempts */
340*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_BYTES_NOTSENT,	/* Bytes in write queue not yet sent */
341*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_EDT,		/* Earliest departure time (CLOCK_MONOTONIC) */
342*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_TTL,		/* TTL or hop limit of a packet received */
343*f80ad8b4SAndroid Build Coastguard Worker 	TCP_NLA_REHASH,         /* PLB and timeout triggered rehash attempts */
344*f80ad8b4SAndroid Build Coastguard Worker };
345*f80ad8b4SAndroid Build Coastguard Worker 
346*f80ad8b4SAndroid Build Coastguard Worker /* for TCP_MD5SIG socket option */
347*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MD5SIG_MAXKEYLEN	80
348*f80ad8b4SAndroid Build Coastguard Worker 
349*f80ad8b4SAndroid Build Coastguard Worker /* tcp_md5sig extension flags for TCP_MD5SIG_EXT */
350*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MD5SIG_FLAG_PREFIX		0x1	/* address prefix length */
351*f80ad8b4SAndroid Build Coastguard Worker #define TCP_MD5SIG_FLAG_IFINDEX		0x2	/* ifindex set */
352*f80ad8b4SAndroid Build Coastguard Worker 
353*f80ad8b4SAndroid Build Coastguard Worker struct tcp_md5sig {
354*f80ad8b4SAndroid Build Coastguard Worker 	struct __kernel_sockaddr_storage tcpm_addr;	/* address associated */
355*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpm_flags;				/* extension flags */
356*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpm_prefixlen;				/* address prefix */
357*f80ad8b4SAndroid Build Coastguard Worker 	__u16	tcpm_keylen;				/* key length */
358*f80ad8b4SAndroid Build Coastguard Worker 	int	tcpm_ifindex;				/* device index for scope */
359*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpm_key[TCP_MD5SIG_MAXKEYLEN];		/* key (binary) */
360*f80ad8b4SAndroid Build Coastguard Worker };
361*f80ad8b4SAndroid Build Coastguard Worker 
362*f80ad8b4SAndroid Build Coastguard Worker /* INET_DIAG_MD5SIG */
363*f80ad8b4SAndroid Build Coastguard Worker struct tcp_diag_md5sig {
364*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpm_family;
365*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpm_prefixlen;
366*f80ad8b4SAndroid Build Coastguard Worker 	__u16	tcpm_keylen;
367*f80ad8b4SAndroid Build Coastguard Worker 	__be32	tcpm_addr[4];
368*f80ad8b4SAndroid Build Coastguard Worker 	__u8	tcpm_key[TCP_MD5SIG_MAXKEYLEN];
369*f80ad8b4SAndroid Build Coastguard Worker };
370*f80ad8b4SAndroid Build Coastguard Worker 
371*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_MAXKEYLEN	80
372*f80ad8b4SAndroid Build Coastguard Worker 
373*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_KEYF_IFINDEX	(1 << 0)	/* L3 ifindex for VRF */
374*f80ad8b4SAndroid Build Coastguard Worker #define TCP_AO_KEYF_EXCLUDE_OPT	(1 << 1)	/* "Indicates whether TCP
375*f80ad8b4SAndroid Build Coastguard Worker 						 *  options other than TCP-AO
376*f80ad8b4SAndroid Build Coastguard Worker 						 *  are included in the MAC
377*f80ad8b4SAndroid Build Coastguard Worker 						 *  calculation"
378*f80ad8b4SAndroid Build Coastguard Worker 						 */
379*f80ad8b4SAndroid Build Coastguard Worker 
380*f80ad8b4SAndroid Build Coastguard Worker struct tcp_ao_add { /* setsockopt(TCP_AO_ADD_KEY) */
381*f80ad8b4SAndroid Build Coastguard Worker 	struct __kernel_sockaddr_storage addr;	/* peer's address for the key */
382*f80ad8b4SAndroid Build Coastguard Worker 	char	alg_name[64];		/* crypto hash algorithm to use */
383*f80ad8b4SAndroid Build Coastguard Worker 	__s32	ifindex;		/* L3 dev index for VRF */
384*f80ad8b4SAndroid Build Coastguard Worker 	__u32   set_current	:1,	/* set key as Current_key at once */
385*f80ad8b4SAndroid Build Coastguard Worker 		set_rnext	:1,	/* request it from peer with RNext_key */
386*f80ad8b4SAndroid Build Coastguard Worker 		reserved	:30;	/* must be 0 */
387*f80ad8b4SAndroid Build Coastguard Worker 	__u16	reserved2;		/* padding, must be 0 */
388*f80ad8b4SAndroid Build Coastguard Worker 	__u8	prefix;			/* peer's address prefix */
389*f80ad8b4SAndroid Build Coastguard Worker 	__u8	sndid;			/* SendID for outgoing segments */
390*f80ad8b4SAndroid Build Coastguard Worker 	__u8	rcvid;			/* RecvID to match for incoming seg */
391*f80ad8b4SAndroid Build Coastguard Worker 	__u8	maclen;			/* length of authentication code (hash) */
392*f80ad8b4SAndroid Build Coastguard Worker 	__u8	keyflags;		/* see TCP_AO_KEYF_ */
393*f80ad8b4SAndroid Build Coastguard Worker 	__u8	keylen;			/* length of ::key */
394*f80ad8b4SAndroid Build Coastguard Worker 	__u8	key[TCP_AO_MAXKEYLEN];
395*f80ad8b4SAndroid Build Coastguard Worker } __attribute__((aligned(8)));
396*f80ad8b4SAndroid Build Coastguard Worker 
397*f80ad8b4SAndroid Build Coastguard Worker struct tcp_ao_del { /* setsockopt(TCP_AO_DEL_KEY) */
398*f80ad8b4SAndroid Build Coastguard Worker 	struct __kernel_sockaddr_storage addr;	/* peer's address for the key */
399*f80ad8b4SAndroid Build Coastguard Worker 	__s32	ifindex;		/* L3 dev index for VRF */
400*f80ad8b4SAndroid Build Coastguard Worker 	__u32   set_current	:1,	/* corresponding ::current_key */
401*f80ad8b4SAndroid Build Coastguard Worker 		set_rnext	:1,	/* corresponding ::rnext */
402*f80ad8b4SAndroid Build Coastguard Worker 		del_async	:1,	/* only valid for listen sockets */
403*f80ad8b4SAndroid Build Coastguard Worker 		reserved	:29;	/* must be 0 */
404*f80ad8b4SAndroid Build Coastguard Worker 	__u16	reserved2;		/* padding, must be 0 */
405*f80ad8b4SAndroid Build Coastguard Worker 	__u8	prefix;			/* peer's address prefix */
406*f80ad8b4SAndroid Build Coastguard Worker 	__u8	sndid;			/* SendID for outgoing segments */
407*f80ad8b4SAndroid Build Coastguard Worker 	__u8	rcvid;			/* RecvID to match for incoming seg */
408*f80ad8b4SAndroid Build Coastguard Worker 	__u8	current_key;		/* KeyID to set as Current_key */
409*f80ad8b4SAndroid Build Coastguard Worker 	__u8	rnext;			/* KeyID to set as Rnext_key */
410*f80ad8b4SAndroid Build Coastguard Worker 	__u8	keyflags;		/* see TCP_AO_KEYF_ */
411*f80ad8b4SAndroid Build Coastguard Worker } __attribute__((aligned(8)));
412*f80ad8b4SAndroid Build Coastguard Worker 
413*f80ad8b4SAndroid Build Coastguard Worker struct tcp_ao_info_opt { /* setsockopt(TCP_AO_INFO), getsockopt(TCP_AO_INFO) */
414*f80ad8b4SAndroid Build Coastguard Worker 	/* Here 'in' is for setsockopt(), 'out' is for getsockopt() */
415*f80ad8b4SAndroid Build Coastguard Worker 	__u32   set_current	:1,	/* in/out: corresponding ::current_key */
416*f80ad8b4SAndroid Build Coastguard Worker 		set_rnext	:1,	/* in/out: corresponding ::rnext */
417*f80ad8b4SAndroid Build Coastguard Worker 		ao_required	:1,	/* in/out: don't accept non-AO connects */
418*f80ad8b4SAndroid Build Coastguard Worker 		set_counters	:1,	/* in: set/clear ::pkt_* counters */
419*f80ad8b4SAndroid Build Coastguard Worker 		accept_icmps	:1,	/* in/out: accept incoming ICMPs */
420*f80ad8b4SAndroid Build Coastguard Worker 		reserved	:27;	/* must be 0 */
421*f80ad8b4SAndroid Build Coastguard Worker 	__u16	reserved2;		/* padding, must be 0 */
422*f80ad8b4SAndroid Build Coastguard Worker 	__u8	current_key;		/* in/out: KeyID of Current_key */
423*f80ad8b4SAndroid Build Coastguard Worker 	__u8	rnext;			/* in/out: keyid of RNext_key */
424*f80ad8b4SAndroid Build Coastguard Worker 	__u64	pkt_good;		/* in/out: verified segments */
425*f80ad8b4SAndroid Build Coastguard Worker 	__u64	pkt_bad;		/* in/out: failed verification */
426*f80ad8b4SAndroid Build Coastguard Worker 	__u64	pkt_key_not_found;	/* in/out: could not find a key to verify */
427*f80ad8b4SAndroid Build Coastguard Worker 	__u64	pkt_ao_required;	/* in/out: segments missing TCP-AO sign */
428*f80ad8b4SAndroid Build Coastguard Worker 	__u64	pkt_dropped_icmp;	/* in/out: ICMPs that were ignored */
429*f80ad8b4SAndroid Build Coastguard Worker } __attribute__((aligned(8)));
430*f80ad8b4SAndroid Build Coastguard Worker 
431*f80ad8b4SAndroid Build Coastguard Worker struct tcp_ao_getsockopt { /* getsockopt(TCP_AO_GET_KEYS) */
432*f80ad8b4SAndroid Build Coastguard Worker 	struct __kernel_sockaddr_storage addr;	/* in/out: dump keys for peer
433*f80ad8b4SAndroid Build Coastguard Worker 						 * with this address/prefix
434*f80ad8b4SAndroid Build Coastguard Worker 						 */
435*f80ad8b4SAndroid Build Coastguard Worker 	char	alg_name[64];		/* out: crypto hash algorithm */
436*f80ad8b4SAndroid Build Coastguard Worker 	__u8	key[TCP_AO_MAXKEYLEN];
437*f80ad8b4SAndroid Build Coastguard Worker 	__u32	nkeys;			/* in: size of the userspace buffer
438*f80ad8b4SAndroid Build Coastguard Worker 					 * @optval, measured in @optlen - the
439*f80ad8b4SAndroid Build Coastguard Worker 					 * sizeof(struct tcp_ao_getsockopt)
440*f80ad8b4SAndroid Build Coastguard Worker 					 * out: number of keys that matched
441*f80ad8b4SAndroid Build Coastguard Worker 					 */
442*f80ad8b4SAndroid Build Coastguard Worker 	__u16   is_current	:1,	/* in: match and dump Current_key,
443*f80ad8b4SAndroid Build Coastguard Worker 					 * out: the dumped key is Current_key
444*f80ad8b4SAndroid Build Coastguard Worker 					 */
445*f80ad8b4SAndroid Build Coastguard Worker 
446*f80ad8b4SAndroid Build Coastguard Worker 		is_rnext	:1,	/* in: match and dump RNext_key,
447*f80ad8b4SAndroid Build Coastguard Worker 					 * out: the dumped key is RNext_key
448*f80ad8b4SAndroid Build Coastguard Worker 					 */
449*f80ad8b4SAndroid Build Coastguard Worker 		get_all		:1,	/* in: dump all keys */
450*f80ad8b4SAndroid Build Coastguard Worker 		reserved	:13;	/* padding, must be 0 */
451*f80ad8b4SAndroid Build Coastguard Worker 	__u8	sndid;			/* in/out: dump keys with SendID */
452*f80ad8b4SAndroid Build Coastguard Worker 	__u8	rcvid;			/* in/out: dump keys with RecvID */
453*f80ad8b4SAndroid Build Coastguard Worker 	__u8	prefix;			/* in/out: dump keys with address/prefix */
454*f80ad8b4SAndroid Build Coastguard Worker 	__u8	maclen;			/* out: key's length of authentication
455*f80ad8b4SAndroid Build Coastguard Worker 					 * code (hash)
456*f80ad8b4SAndroid Build Coastguard Worker 					 */
457*f80ad8b4SAndroid Build Coastguard Worker 	__u8	keyflags;		/* in/out: see TCP_AO_KEYF_ */
458*f80ad8b4SAndroid Build Coastguard Worker 	__u8	keylen;			/* out: length of ::key */
459*f80ad8b4SAndroid Build Coastguard Worker 	__s32	ifindex;		/* in/out: L3 dev index for VRF */
460*f80ad8b4SAndroid Build Coastguard Worker 	__u64	pkt_good;		/* out: verified segments */
461*f80ad8b4SAndroid Build Coastguard Worker 	__u64	pkt_bad;		/* out: segments that failed verification */
462*f80ad8b4SAndroid Build Coastguard Worker } __attribute__((aligned(8)));
463*f80ad8b4SAndroid Build Coastguard Worker 
464*f80ad8b4SAndroid Build Coastguard Worker struct tcp_ao_repair { /* {s,g}etsockopt(TCP_AO_REPAIR) */
465*f80ad8b4SAndroid Build Coastguard Worker 	__be32			snt_isn;
466*f80ad8b4SAndroid Build Coastguard Worker 	__be32			rcv_isn;
467*f80ad8b4SAndroid Build Coastguard Worker 	__u32			snd_sne;
468*f80ad8b4SAndroid Build Coastguard Worker 	__u32			rcv_sne;
469*f80ad8b4SAndroid Build Coastguard Worker } __attribute__((aligned(8)));
470*f80ad8b4SAndroid Build Coastguard Worker 
471*f80ad8b4SAndroid Build Coastguard Worker /* setsockopt(fd, IPPROTO_TCP, TCP_ZEROCOPY_RECEIVE, ...) */
472*f80ad8b4SAndroid Build Coastguard Worker 
473*f80ad8b4SAndroid Build Coastguard Worker #define TCP_RECEIVE_ZEROCOPY_FLAG_TLB_CLEAN_HINT 0x1
474*f80ad8b4SAndroid Build Coastguard Worker struct tcp_zerocopy_receive {
475*f80ad8b4SAndroid Build Coastguard Worker 	__u64 address;		/* in: address of mapping */
476*f80ad8b4SAndroid Build Coastguard Worker 	__u32 length;		/* in/out: number of bytes to map/mapped */
477*f80ad8b4SAndroid Build Coastguard Worker 	__u32 recv_skip_hint;	/* out: amount of bytes to skip */
478*f80ad8b4SAndroid Build Coastguard Worker 	__u32 inq; /* out: amount of bytes in read queue */
479*f80ad8b4SAndroid Build Coastguard Worker 	__s32 err; /* out: socket error */
480*f80ad8b4SAndroid Build Coastguard Worker 	__u64 copybuf_address;	/* in: copybuf address (small reads) */
481*f80ad8b4SAndroid Build Coastguard Worker 	__s32 copybuf_len; /* in/out: copybuf bytes avail/used or error */
482*f80ad8b4SAndroid Build Coastguard Worker 	__u32 flags; /* in: flags */
483*f80ad8b4SAndroid Build Coastguard Worker 	__u64 msg_control; /* ancillary data */
484*f80ad8b4SAndroid Build Coastguard Worker 	__u64 msg_controllen;
485*f80ad8b4SAndroid Build Coastguard Worker 	__u32 msg_flags;
486*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved; /* set to 0 for now */
487*f80ad8b4SAndroid Build Coastguard Worker };
488*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_TCP_H */
489