forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-02-15 e6ab316063efe269dbc459a0a7939fb55abd8c44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#ifndef _INET_DIAG_H_
#define _INET_DIAG_H_
 
#include <linux/types.h>
 
/* Just some random number */
#define TCPDIAG_GETSOCK 18
#define DCCPDIAG_GETSOCK 19
 
#define INET_DIAG_GETSOCK_MAX 24
 
/* Socket identity */
struct inet_diag_sockid {
   __be16    idiag_sport;
   __be16    idiag_dport;
   __be32    idiag_src[4];
   __be32    idiag_dst[4];
   __u32    idiag_if;
   __u32    idiag_cookie[2];
#define INET_DIAG_NOCOOKIE (~0U)
};
 
/* Request structure */
 
struct inet_diag_req {
   __u8    idiag_family;        /* Family of addresses. */
   __u8    idiag_src_len;
   __u8    idiag_dst_len;
   __u8    idiag_ext;        /* Query extended information */
 
   struct inet_diag_sockid id;
 
   __u32    idiag_states;        /* States to dump */
   __u32    idiag_dbs;        /* Tables to dump (NI) */
};
 
struct inet_diag_req_v2 {
   __u8    sdiag_family;
   __u8    sdiag_protocol;
   __u8    idiag_ext;
   __u8    pad;
   __u32    idiag_states;
   struct inet_diag_sockid id;
};
 
enum {
   INET_DIAG_REQ_NONE,
   INET_DIAG_REQ_BYTECODE,
};
 
#define INET_DIAG_REQ_MAX INET_DIAG_REQ_BYTECODE
 
/* Bytecode is sequence of 4 byte commands followed by variable arguments.
 * All the commands identified by "code" are conditional jumps forward:
 * to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be
 * length of the command and its arguments.
 */
 
struct inet_diag_bc_op {
   unsigned char    code;
   unsigned char    yes;
   unsigned short    no;
};
 
enum {
   INET_DIAG_BC_NOP,
   INET_DIAG_BC_JMP,
   INET_DIAG_BC_S_GE,
   INET_DIAG_BC_S_LE,
   INET_DIAG_BC_D_GE,
   INET_DIAG_BC_D_LE,
   INET_DIAG_BC_AUTO,
   INET_DIAG_BC_S_COND,
   INET_DIAG_BC_D_COND,
};
 
struct inet_diag_hostcond {
   __u8    family;
   __u8    prefix_len;
   int    port;
   __be32    addr[0];
};
 
/* Base info structure. It contains socket identity (addrs/ports/cookie)
 * and, alas, the information shown by netstat. */
struct inet_diag_msg {
   __u8    idiag_family;
   __u8    idiag_state;
   __u8    idiag_timer;
   __u8    idiag_retrans;
 
   struct inet_diag_sockid id;
 
   __u32    idiag_expires;
   __u32    idiag_rqueue;
   __u32    idiag_wqueue;
   __u32    idiag_uid;
   __u32    idiag_inode;
};
 
/* Extensions */
 
enum {
   INET_DIAG_NONE,
   INET_DIAG_MEMINFO,
   INET_DIAG_INFO,
   INET_DIAG_VEGASINFO,
   INET_DIAG_CONG,
   INET_DIAG_TOS,
   INET_DIAG_TCLASS,
   INET_DIAG_SKMEMINFO,
   INET_DIAG_SHUTDOWN,
   INET_DIAG_DCTCPINFO,
   INET_DIAG_PROTOCOL,  /* response attribute only */
   INET_DIAG_SKV6ONLY,
};
 
#define INET_DIAG_MAX INET_DIAG_SKV6ONLY
 
/* INET_DIAG_MEM */
 
struct inet_diag_meminfo {
   __u32    idiag_rmem;
   __u32    idiag_wmem;
   __u32    idiag_fmem;
   __u32    idiag_tmem;
};
 
/* INET_DIAG_VEGASINFO */
 
struct tcpvegas_info {
   __u32    tcpv_enabled;
   __u32    tcpv_rttcnt;
   __u32    tcpv_rtt;
   __u32    tcpv_minrtt;
};
 
/* INET_DIAG_DCTCPINFO */
 
struct tcp_dctcp_info {
   __u16    dctcp_enabled;
   __u16    dctcp_ce_state;
   __u32    dctcp_alpha;
   __u32    dctcp_ab_ecn;
   __u32    dctcp_ab_tot;
};
 
union tcp_cc_info {
   struct tcpvegas_info    vegas;
   struct tcp_dctcp_info    dctcp;
};
#endif /* _INET_DIAG_H_ */