xref: /aosp_15_r20/external/iproute2/include/uapi/linux/inet_diag.h (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*de1e4e89SAndroid Build Coastguard Worker #ifndef _INET_DIAG_H_
3*de1e4e89SAndroid Build Coastguard Worker #define _INET_DIAG_H_
4*de1e4e89SAndroid Build Coastguard Worker 
5*de1e4e89SAndroid Build Coastguard Worker #include <linux/types.h>
6*de1e4e89SAndroid Build Coastguard Worker 
7*de1e4e89SAndroid Build Coastguard Worker /* Just some random number */
8*de1e4e89SAndroid Build Coastguard Worker #define TCPDIAG_GETSOCK 18
9*de1e4e89SAndroid Build Coastguard Worker #define DCCPDIAG_GETSOCK 19
10*de1e4e89SAndroid Build Coastguard Worker 
11*de1e4e89SAndroid Build Coastguard Worker #define INET_DIAG_GETSOCK_MAX 24
12*de1e4e89SAndroid Build Coastguard Worker 
13*de1e4e89SAndroid Build Coastguard Worker /* Socket identity */
14*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_sockid {
15*de1e4e89SAndroid Build Coastguard Worker 	__be16	idiag_sport;
16*de1e4e89SAndroid Build Coastguard Worker 	__be16	idiag_dport;
17*de1e4e89SAndroid Build Coastguard Worker 	__be32	idiag_src[4];
18*de1e4e89SAndroid Build Coastguard Worker 	__be32	idiag_dst[4];
19*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_if;
20*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_cookie[2];
21*de1e4e89SAndroid Build Coastguard Worker #define INET_DIAG_NOCOOKIE (~0U)
22*de1e4e89SAndroid Build Coastguard Worker };
23*de1e4e89SAndroid Build Coastguard Worker 
24*de1e4e89SAndroid Build Coastguard Worker /* Request structure */
25*de1e4e89SAndroid Build Coastguard Worker 
26*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_req {
27*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_family;		/* Family of addresses. */
28*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_src_len;
29*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_dst_len;
30*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_ext;		/* Query extended information */
31*de1e4e89SAndroid Build Coastguard Worker 
32*de1e4e89SAndroid Build Coastguard Worker 	struct inet_diag_sockid id;
33*de1e4e89SAndroid Build Coastguard Worker 
34*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_states;		/* States to dump */
35*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_dbs;		/* Tables to dump (NI) */
36*de1e4e89SAndroid Build Coastguard Worker };
37*de1e4e89SAndroid Build Coastguard Worker 
38*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_req_v2 {
39*de1e4e89SAndroid Build Coastguard Worker 	__u8	sdiag_family;
40*de1e4e89SAndroid Build Coastguard Worker 	__u8	sdiag_protocol;
41*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_ext;
42*de1e4e89SAndroid Build Coastguard Worker 	__u8	pad;
43*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_states;
44*de1e4e89SAndroid Build Coastguard Worker 	struct inet_diag_sockid id;
45*de1e4e89SAndroid Build Coastguard Worker };
46*de1e4e89SAndroid Build Coastguard Worker 
47*de1e4e89SAndroid Build Coastguard Worker /*
48*de1e4e89SAndroid Build Coastguard Worker  * SOCK_RAW sockets require the underlied protocol to be
49*de1e4e89SAndroid Build Coastguard Worker  * additionally specified so we can use @pad member for
50*de1e4e89SAndroid Build Coastguard Worker  * this, but we can't rename it because userspace programs
51*de1e4e89SAndroid Build Coastguard Worker  * still may depend on this name. Instead lets use another
52*de1e4e89SAndroid Build Coastguard Worker  * structure definition as an alias for struct
53*de1e4e89SAndroid Build Coastguard Worker  * @inet_diag_req_v2.
54*de1e4e89SAndroid Build Coastguard Worker  */
55*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_req_raw {
56*de1e4e89SAndroid Build Coastguard Worker 	__u8	sdiag_family;
57*de1e4e89SAndroid Build Coastguard Worker 	__u8	sdiag_protocol;
58*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_ext;
59*de1e4e89SAndroid Build Coastguard Worker 	__u8	sdiag_raw_protocol;
60*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_states;
61*de1e4e89SAndroid Build Coastguard Worker 	struct inet_diag_sockid id;
62*de1e4e89SAndroid Build Coastguard Worker };
63*de1e4e89SAndroid Build Coastguard Worker 
64*de1e4e89SAndroid Build Coastguard Worker enum {
65*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_REQ_NONE,
66*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_REQ_BYTECODE,
67*de1e4e89SAndroid Build Coastguard Worker };
68*de1e4e89SAndroid Build Coastguard Worker 
69*de1e4e89SAndroid Build Coastguard Worker #define INET_DIAG_REQ_MAX INET_DIAG_REQ_BYTECODE
70*de1e4e89SAndroid Build Coastguard Worker 
71*de1e4e89SAndroid Build Coastguard Worker /* Bytecode is sequence of 4 byte commands followed by variable arguments.
72*de1e4e89SAndroid Build Coastguard Worker  * All the commands identified by "code" are conditional jumps forward:
73*de1e4e89SAndroid Build Coastguard Worker  * to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be
74*de1e4e89SAndroid Build Coastguard Worker  * length of the command and its arguments.
75*de1e4e89SAndroid Build Coastguard Worker  */
76*de1e4e89SAndroid Build Coastguard Worker 
77*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_bc_op {
78*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	code;
79*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	yes;
80*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	no;
81*de1e4e89SAndroid Build Coastguard Worker };
82*de1e4e89SAndroid Build Coastguard Worker 
83*de1e4e89SAndroid Build Coastguard Worker enum {
84*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_NOP,
85*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_JMP,
86*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_S_GE,
87*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_S_LE,
88*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_D_GE,
89*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_D_LE,
90*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_AUTO,
91*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_S_COND,
92*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_D_COND,
93*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_DEV_COND,   /* u32 ifindex */
94*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BC_MARK_COND,
95*de1e4e89SAndroid Build Coastguard Worker };
96*de1e4e89SAndroid Build Coastguard Worker 
97*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_hostcond {
98*de1e4e89SAndroid Build Coastguard Worker 	__u8	family;
99*de1e4e89SAndroid Build Coastguard Worker 	__u8	prefix_len;
100*de1e4e89SAndroid Build Coastguard Worker 	int	port;
101*de1e4e89SAndroid Build Coastguard Worker 	__be32	addr[0];
102*de1e4e89SAndroid Build Coastguard Worker };
103*de1e4e89SAndroid Build Coastguard Worker 
104*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_markcond {
105*de1e4e89SAndroid Build Coastguard Worker 	__u32 mark;
106*de1e4e89SAndroid Build Coastguard Worker 	__u32 mask;
107*de1e4e89SAndroid Build Coastguard Worker };
108*de1e4e89SAndroid Build Coastguard Worker 
109*de1e4e89SAndroid Build Coastguard Worker /* Base info structure. It contains socket identity (addrs/ports/cookie)
110*de1e4e89SAndroid Build Coastguard Worker  * and, alas, the information shown by netstat. */
111*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_msg {
112*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_family;
113*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_state;
114*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_timer;
115*de1e4e89SAndroid Build Coastguard Worker 	__u8	idiag_retrans;
116*de1e4e89SAndroid Build Coastguard Worker 
117*de1e4e89SAndroid Build Coastguard Worker 	struct inet_diag_sockid id;
118*de1e4e89SAndroid Build Coastguard Worker 
119*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_expires;
120*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_rqueue;
121*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_wqueue;
122*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_uid;
123*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_inode;
124*de1e4e89SAndroid Build Coastguard Worker };
125*de1e4e89SAndroid Build Coastguard Worker 
126*de1e4e89SAndroid Build Coastguard Worker /* Extensions */
127*de1e4e89SAndroid Build Coastguard Worker 
128*de1e4e89SAndroid Build Coastguard Worker enum {
129*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_NONE,
130*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_MEMINFO,
131*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_INFO,
132*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_VEGASINFO,
133*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_CONG,
134*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_TOS,
135*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_TCLASS,
136*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_SKMEMINFO,
137*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_SHUTDOWN,
138*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_DCTCPINFO,
139*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_PROTOCOL,  /* response attribute only */
140*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_SKV6ONLY,
141*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_LOCALS,
142*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_PEERS,
143*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_PAD,
144*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_MARK,
145*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_BBRINFO,
146*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_CLASS_ID,
147*de1e4e89SAndroid Build Coastguard Worker 	INET_DIAG_MD5SIG,
148*de1e4e89SAndroid Build Coastguard Worker 	__INET_DIAG_MAX,
149*de1e4e89SAndroid Build Coastguard Worker };
150*de1e4e89SAndroid Build Coastguard Worker 
151*de1e4e89SAndroid Build Coastguard Worker #define INET_DIAG_MAX (__INET_DIAG_MAX - 1)
152*de1e4e89SAndroid Build Coastguard Worker 
153*de1e4e89SAndroid Build Coastguard Worker /* INET_DIAG_MEM */
154*de1e4e89SAndroid Build Coastguard Worker 
155*de1e4e89SAndroid Build Coastguard Worker struct inet_diag_meminfo {
156*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_rmem;
157*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_wmem;
158*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_fmem;
159*de1e4e89SAndroid Build Coastguard Worker 	__u32	idiag_tmem;
160*de1e4e89SAndroid Build Coastguard Worker };
161*de1e4e89SAndroid Build Coastguard Worker 
162*de1e4e89SAndroid Build Coastguard Worker /* INET_DIAG_VEGASINFO */
163*de1e4e89SAndroid Build Coastguard Worker 
164*de1e4e89SAndroid Build Coastguard Worker struct tcpvegas_info {
165*de1e4e89SAndroid Build Coastguard Worker 	__u32	tcpv_enabled;
166*de1e4e89SAndroid Build Coastguard Worker 	__u32	tcpv_rttcnt;
167*de1e4e89SAndroid Build Coastguard Worker 	__u32	tcpv_rtt;
168*de1e4e89SAndroid Build Coastguard Worker 	__u32	tcpv_minrtt;
169*de1e4e89SAndroid Build Coastguard Worker };
170*de1e4e89SAndroid Build Coastguard Worker 
171*de1e4e89SAndroid Build Coastguard Worker /* INET_DIAG_DCTCPINFO */
172*de1e4e89SAndroid Build Coastguard Worker 
173*de1e4e89SAndroid Build Coastguard Worker struct tcp_dctcp_info {
174*de1e4e89SAndroid Build Coastguard Worker 	__u16	dctcp_enabled;
175*de1e4e89SAndroid Build Coastguard Worker 	__u16	dctcp_ce_state;
176*de1e4e89SAndroid Build Coastguard Worker 	__u32	dctcp_alpha;
177*de1e4e89SAndroid Build Coastguard Worker 	__u32	dctcp_ab_ecn;
178*de1e4e89SAndroid Build Coastguard Worker 	__u32	dctcp_ab_tot;
179*de1e4e89SAndroid Build Coastguard Worker };
180*de1e4e89SAndroid Build Coastguard Worker 
181*de1e4e89SAndroid Build Coastguard Worker /* INET_DIAG_BBRINFO */
182*de1e4e89SAndroid Build Coastguard Worker 
183*de1e4e89SAndroid Build Coastguard Worker struct tcp_bbr_info {
184*de1e4e89SAndroid Build Coastguard Worker 	/* u64 bw: max-filtered BW (app throughput) estimate in Byte per sec: */
185*de1e4e89SAndroid Build Coastguard Worker 	__u32	bbr_bw_lo;		/* lower 32 bits of bw */
186*de1e4e89SAndroid Build Coastguard Worker 	__u32	bbr_bw_hi;		/* upper 32 bits of bw */
187*de1e4e89SAndroid Build Coastguard Worker 	__u32	bbr_min_rtt;		/* min-filtered RTT in uSec */
188*de1e4e89SAndroid Build Coastguard Worker 	__u32	bbr_pacing_gain;	/* pacing gain shifted left 8 bits */
189*de1e4e89SAndroid Build Coastguard Worker 	__u32	bbr_cwnd_gain;		/* cwnd gain shifted left 8 bits */
190*de1e4e89SAndroid Build Coastguard Worker };
191*de1e4e89SAndroid Build Coastguard Worker 
192*de1e4e89SAndroid Build Coastguard Worker union tcp_cc_info {
193*de1e4e89SAndroid Build Coastguard Worker 	struct tcpvegas_info	vegas;
194*de1e4e89SAndroid Build Coastguard Worker 	struct tcp_dctcp_info	dctcp;
195*de1e4e89SAndroid Build Coastguard Worker 	struct tcp_bbr_info	bbr;
196*de1e4e89SAndroid Build Coastguard Worker };
197*de1e4e89SAndroid Build Coastguard Worker #endif /* _INET_DIAG_H_ */
198