1 /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
2 /*
3  * include/uapi/linux/ethtool_netlink.h - netlink interface for ethtool
4  *
5  * See Documentation/networking/ethtool-netlink.txt in kernel source tree for
6  * doucumentation of the interface.
7  */
8 
9 #ifndef _UAPI_LINUX_ETHTOOL_NETLINK_H_
10 #define _UAPI_LINUX_ETHTOOL_NETLINK_H_
11 
12 #include <linux/ethtool.h>
13 
14 /* message types - userspace to kernel */
15 enum {
16 	ETHTOOL_MSG_USER_NONE,
17 	ETHTOOL_MSG_STRSET_GET,
18 	ETHTOOL_MSG_LINKINFO_GET,
19 	ETHTOOL_MSG_LINKINFO_SET,
20 	ETHTOOL_MSG_LINKMODES_GET,
21 	ETHTOOL_MSG_LINKMODES_SET,
22 	ETHTOOL_MSG_LINKSTATE_GET,
23 	ETHTOOL_MSG_DEBUG_GET,
24 	ETHTOOL_MSG_DEBUG_SET,
25 	ETHTOOL_MSG_WOL_GET,
26 	ETHTOOL_MSG_WOL_SET,
27 	ETHTOOL_MSG_FEATURES_GET,
28 	ETHTOOL_MSG_FEATURES_SET,
29 	ETHTOOL_MSG_PRIVFLAGS_GET,
30 	ETHTOOL_MSG_PRIVFLAGS_SET,
31 	ETHTOOL_MSG_RINGS_GET,
32 	ETHTOOL_MSG_RINGS_SET,
33 	ETHTOOL_MSG_CHANNELS_GET,
34 	ETHTOOL_MSG_CHANNELS_SET,
35 	ETHTOOL_MSG_COALESCE_GET,
36 	ETHTOOL_MSG_COALESCE_SET,
37 	ETHTOOL_MSG_PAUSE_GET,
38 	ETHTOOL_MSG_PAUSE_SET,
39 	ETHTOOL_MSG_EEE_GET,
40 	ETHTOOL_MSG_EEE_SET,
41 	ETHTOOL_MSG_TSINFO_GET,
42 
43 	/* add new constants above here */
44 	__ETHTOOL_MSG_USER_CNT,
45 	ETHTOOL_MSG_USER_MAX = __ETHTOOL_MSG_USER_CNT - 1
46 };
47 
48 /* message types - kernel to userspace */
49 enum {
50 	ETHTOOL_MSG_KERNEL_NONE,
51 	ETHTOOL_MSG_STRSET_GET_REPLY,
52 	ETHTOOL_MSG_LINKINFO_GET_REPLY,
53 	ETHTOOL_MSG_LINKINFO_NTF,
54 	ETHTOOL_MSG_LINKMODES_GET_REPLY,
55 	ETHTOOL_MSG_LINKMODES_NTF,
56 	ETHTOOL_MSG_LINKSTATE_GET_REPLY,
57 	ETHTOOL_MSG_DEBUG_GET_REPLY,
58 	ETHTOOL_MSG_DEBUG_NTF,
59 	ETHTOOL_MSG_WOL_GET_REPLY,
60 	ETHTOOL_MSG_WOL_NTF,
61 	ETHTOOL_MSG_FEATURES_GET_REPLY,
62 	ETHTOOL_MSG_FEATURES_SET_REPLY,
63 	ETHTOOL_MSG_FEATURES_NTF,
64 	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY,
65 	ETHTOOL_MSG_PRIVFLAGS_NTF,
66 	ETHTOOL_MSG_RINGS_GET_REPLY,
67 	ETHTOOL_MSG_RINGS_NTF,
68 	ETHTOOL_MSG_CHANNELS_GET_REPLY,
69 	ETHTOOL_MSG_CHANNELS_NTF,
70 	ETHTOOL_MSG_COALESCE_GET_REPLY,
71 	ETHTOOL_MSG_COALESCE_NTF,
72 	ETHTOOL_MSG_PAUSE_GET_REPLY,
73 	ETHTOOL_MSG_PAUSE_NTF,
74 	ETHTOOL_MSG_EEE_GET_REPLY,
75 	ETHTOOL_MSG_EEE_NTF,
76 	ETHTOOL_MSG_TSINFO_GET_REPLY,
77 
78 	/* add new constants above here */
79 	__ETHTOOL_MSG_KERNEL_CNT,
80 	ETHTOOL_MSG_KERNEL_MAX = __ETHTOOL_MSG_KERNEL_CNT - 1
81 };
82 
83 /* request header */
84 
85 /* use compact bitsets in reply */
86 #define ETHTOOL_FLAG_COMPACT_BITSETS	(1 << 0)
87 /* provide optional reply for SET or ACT requests */
88 #define ETHTOOL_FLAG_OMIT_REPLY	(1 << 1)
89 
90 #define ETHTOOL_FLAG_ALL (ETHTOOL_FLAG_COMPACT_BITSETS | \
91 			  ETHTOOL_FLAG_OMIT_REPLY)
92 
93 enum {
94 	ETHTOOL_A_HEADER_UNSPEC,
95 	ETHTOOL_A_HEADER_DEV_INDEX,		/* u32 */
96 	ETHTOOL_A_HEADER_DEV_NAME,		/* string */
97 	ETHTOOL_A_HEADER_FLAGS,			/* u32 - ETHTOOL_FLAG_* */
98 
99 	/* add new constants above here */
100 	__ETHTOOL_A_HEADER_CNT,
101 	ETHTOOL_A_HEADER_MAX = __ETHTOOL_A_HEADER_CNT - 1
102 };
103 
104 /* bit sets */
105 
106 enum {
107 	ETHTOOL_A_BITSET_BIT_UNSPEC,
108 	ETHTOOL_A_BITSET_BIT_INDEX,		/* u32 */
109 	ETHTOOL_A_BITSET_BIT_NAME,		/* string */
110 	ETHTOOL_A_BITSET_BIT_VALUE,		/* flag */
111 
112 	/* add new constants above here */
113 	__ETHTOOL_A_BITSET_BIT_CNT,
114 	ETHTOOL_A_BITSET_BIT_MAX = __ETHTOOL_A_BITSET_BIT_CNT - 1
115 };
116 
117 enum {
118 	ETHTOOL_A_BITSET_BITS_UNSPEC,
119 	ETHTOOL_A_BITSET_BITS_BIT,		/* nest - _A_BITSET_BIT_* */
120 
121 	/* add new constants above here */
122 	__ETHTOOL_A_BITSET_BITS_CNT,
123 	ETHTOOL_A_BITSET_BITS_MAX = __ETHTOOL_A_BITSET_BITS_CNT - 1
124 };
125 
126 enum {
127 	ETHTOOL_A_BITSET_UNSPEC,
128 	ETHTOOL_A_BITSET_NOMASK,		/* flag */
129 	ETHTOOL_A_BITSET_SIZE,			/* u32 */
130 	ETHTOOL_A_BITSET_BITS,			/* nest - _A_BITSET_BITS_* */
131 	ETHTOOL_A_BITSET_VALUE,			/* binary */
132 	ETHTOOL_A_BITSET_MASK,			/* binary */
133 
134 	/* add new constants above here */
135 	__ETHTOOL_A_BITSET_CNT,
136 	ETHTOOL_A_BITSET_MAX = __ETHTOOL_A_BITSET_CNT - 1
137 };
138 
139 /* string sets */
140 
141 enum {
142 	ETHTOOL_A_STRING_UNSPEC,
143 	ETHTOOL_A_STRING_INDEX,			/* u32 */
144 	ETHTOOL_A_STRING_VALUE,			/* string */
145 
146 	/* add new constants above here */
147 	__ETHTOOL_A_STRING_CNT,
148 	ETHTOOL_A_STRING_MAX = __ETHTOOL_A_STRING_CNT - 1
149 };
150 
151 enum {
152 	ETHTOOL_A_STRINGS_UNSPEC,
153 	ETHTOOL_A_STRINGS_STRING,		/* nest - _A_STRINGS_* */
154 
155 	/* add new constants above here */
156 	__ETHTOOL_A_STRINGS_CNT,
157 	ETHTOOL_A_STRINGS_MAX = __ETHTOOL_A_STRINGS_CNT - 1
158 };
159 
160 enum {
161 	ETHTOOL_A_STRINGSET_UNSPEC,
162 	ETHTOOL_A_STRINGSET_ID,			/* u32 */
163 	ETHTOOL_A_STRINGSET_COUNT,		/* u32 */
164 	ETHTOOL_A_STRINGSET_STRINGS,		/* nest - _A_STRINGS_* */
165 
166 	/* add new constants above here */
167 	__ETHTOOL_A_STRINGSET_CNT,
168 	ETHTOOL_A_STRINGSET_MAX = __ETHTOOL_A_STRINGSET_CNT - 1
169 };
170 
171 enum {
172 	ETHTOOL_A_STRINGSETS_UNSPEC,
173 	ETHTOOL_A_STRINGSETS_STRINGSET,		/* nest - _A_STRINGSET_* */
174 
175 	/* add new constants above here */
176 	__ETHTOOL_A_STRINGSETS_CNT,
177 	ETHTOOL_A_STRINGSETS_MAX = __ETHTOOL_A_STRINGSETS_CNT - 1
178 };
179 
180 /* STRSET */
181 
182 enum {
183 	ETHTOOL_A_STRSET_UNSPEC,
184 	ETHTOOL_A_STRSET_HEADER,		/* nest - _A_HEADER_* */
185 	ETHTOOL_A_STRSET_STRINGSETS,		/* nest - _A_STRINGSETS_* */
186 	ETHTOOL_A_STRSET_COUNTS_ONLY,		/* flag */
187 
188 	/* add new constants above here */
189 	__ETHTOOL_A_STRSET_CNT,
190 	ETHTOOL_A_STRSET_MAX = __ETHTOOL_A_STRSET_CNT - 1
191 };
192 
193 /* LINKINFO */
194 
195 enum {
196 	ETHTOOL_A_LINKINFO_UNSPEC,
197 	ETHTOOL_A_LINKINFO_HEADER,		/* nest - _A_HEADER_* */
198 	ETHTOOL_A_LINKINFO_PORT,		/* u8 */
199 	ETHTOOL_A_LINKINFO_PHYADDR,		/* u8 */
200 	ETHTOOL_A_LINKINFO_TP_MDIX,		/* u8 */
201 	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL,	/* u8 */
202 	ETHTOOL_A_LINKINFO_TRANSCEIVER,		/* u8 */
203 
204 	/* add new constants above here */
205 	__ETHTOOL_A_LINKINFO_CNT,
206 	ETHTOOL_A_LINKINFO_MAX = __ETHTOOL_A_LINKINFO_CNT - 1
207 };
208 
209 /* LINKMODES */
210 
211 enum {
212 	ETHTOOL_A_LINKMODES_UNSPEC,
213 	ETHTOOL_A_LINKMODES_HEADER,		/* nest - _A_HEADER_* */
214 	ETHTOOL_A_LINKMODES_AUTONEG,		/* u8 */
215 	ETHTOOL_A_LINKMODES_OURS,		/* bitset */
216 	ETHTOOL_A_LINKMODES_PEER,		/* bitset */
217 	ETHTOOL_A_LINKMODES_SPEED,		/* u32 */
218 	ETHTOOL_A_LINKMODES_DUPLEX,		/* u8 */
219 
220 	/* add new constants above here */
221 	__ETHTOOL_A_LINKMODES_CNT,
222 	ETHTOOL_A_LINKMODES_MAX = __ETHTOOL_A_LINKMODES_CNT - 1
223 };
224 
225 /* LINKSTATE */
226 
227 enum {
228 	ETHTOOL_A_LINKSTATE_UNSPEC,
229 	ETHTOOL_A_LINKSTATE_HEADER,		/* nest - _A_HEADER_* */
230 	ETHTOOL_A_LINKSTATE_LINK,		/* u8 */
231 
232 	/* add new constants above here */
233 	__ETHTOOL_A_LINKSTATE_CNT,
234 	ETHTOOL_A_LINKSTATE_MAX = __ETHTOOL_A_LINKSTATE_CNT - 1
235 };
236 
237 /* DEBUG */
238 
239 enum {
240 	ETHTOOL_A_DEBUG_UNSPEC,
241 	ETHTOOL_A_DEBUG_HEADER,			/* nest - _A_HEADER_* */
242 	ETHTOOL_A_DEBUG_MSGMASK,		/* bitset */
243 
244 	/* add new constants above here */
245 	__ETHTOOL_A_DEBUG_CNT,
246 	ETHTOOL_A_DEBUG_MAX = __ETHTOOL_A_DEBUG_CNT - 1
247 };
248 
249 /* WOL */
250 
251 enum {
252 	ETHTOOL_A_WOL_UNSPEC,
253 	ETHTOOL_A_WOL_HEADER,			/* nest - _A_HEADER_* */
254 	ETHTOOL_A_WOL_MODES,			/* bitset */
255 	ETHTOOL_A_WOL_SOPASS,			/* binary */
256 
257 	/* add new constants above here */
258 	__ETHTOOL_A_WOL_CNT,
259 	ETHTOOL_A_WOL_MAX = __ETHTOOL_A_WOL_CNT - 1
260 };
261 
262 /* FEATURES */
263 
264 enum {
265 	ETHTOOL_A_FEATURES_UNSPEC,
266 	ETHTOOL_A_FEATURES_HEADER,			/* nest - _A_HEADER_* */
267 	ETHTOOL_A_FEATURES_HW,				/* bitset */
268 	ETHTOOL_A_FEATURES_WANTED,			/* bitset */
269 	ETHTOOL_A_FEATURES_ACTIVE,			/* bitset */
270 	ETHTOOL_A_FEATURES_NOCHANGE,			/* bitset */
271 
272 	/* add new constants above here */
273 	__ETHTOOL_A_FEATURES_CNT,
274 	ETHTOOL_A_FEATURES_MAX = __ETHTOOL_A_FEATURES_CNT - 1
275 };
276 
277 /* PRIVFLAGS */
278 
279 enum {
280 	ETHTOOL_A_PRIVFLAGS_UNSPEC,
281 	ETHTOOL_A_PRIVFLAGS_HEADER,			/* nest - _A_HEADER_* */
282 	ETHTOOL_A_PRIVFLAGS_FLAGS,			/* bitset */
283 
284 	/* add new constants above here */
285 	__ETHTOOL_A_PRIVFLAGS_CNT,
286 	ETHTOOL_A_PRIVFLAGS_MAX = __ETHTOOL_A_PRIVFLAGS_CNT - 1
287 };
288 
289 /* RINGS */
290 
291 enum {
292 	ETHTOOL_A_RINGS_UNSPEC,
293 	ETHTOOL_A_RINGS_HEADER,				/* nest - _A_HEADER_* */
294 	ETHTOOL_A_RINGS_RX_MAX,				/* u32 */
295 	ETHTOOL_A_RINGS_RX_MINI_MAX,			/* u32 */
296 	ETHTOOL_A_RINGS_RX_JUMBO_MAX,			/* u32 */
297 	ETHTOOL_A_RINGS_TX_MAX,				/* u32 */
298 	ETHTOOL_A_RINGS_RX,				/* u32 */
299 	ETHTOOL_A_RINGS_RX_MINI,			/* u32 */
300 	ETHTOOL_A_RINGS_RX_JUMBO,			/* u32 */
301 	ETHTOOL_A_RINGS_TX,				/* u32 */
302 
303 	/* add new constants above here */
304 	__ETHTOOL_A_RINGS_CNT,
305 	ETHTOOL_A_RINGS_MAX = (__ETHTOOL_A_RINGS_CNT - 1)
306 };
307 
308 /* CHANNELS */
309 
310 enum {
311 	ETHTOOL_A_CHANNELS_UNSPEC,
312 	ETHTOOL_A_CHANNELS_HEADER,			/* nest - _A_HEADER_* */
313 	ETHTOOL_A_CHANNELS_RX_MAX,			/* u32 */
314 	ETHTOOL_A_CHANNELS_TX_MAX,			/* u32 */
315 	ETHTOOL_A_CHANNELS_OTHER_MAX,			/* u32 */
316 	ETHTOOL_A_CHANNELS_COMBINED_MAX,		/* u32 */
317 	ETHTOOL_A_CHANNELS_RX_COUNT,			/* u32 */
318 	ETHTOOL_A_CHANNELS_TX_COUNT,			/* u32 */
319 	ETHTOOL_A_CHANNELS_OTHER_COUNT,			/* u32 */
320 	ETHTOOL_A_CHANNELS_COMBINED_COUNT,		/* u32 */
321 
322 	/* add new constants above here */
323 	__ETHTOOL_A_CHANNELS_CNT,
324 	ETHTOOL_A_CHANNELS_MAX = (__ETHTOOL_A_CHANNELS_CNT - 1)
325 };
326 
327 /* COALESCE */
328 
329 enum {
330 	ETHTOOL_A_COALESCE_UNSPEC,
331 	ETHTOOL_A_COALESCE_HEADER,			/* nest - _A_HEADER_* */
332 	ETHTOOL_A_COALESCE_RX_USECS,			/* u32 */
333 	ETHTOOL_A_COALESCE_RX_MAX_FRAMES,		/* u32 */
334 	ETHTOOL_A_COALESCE_RX_USECS_IRQ,		/* u32 */
335 	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ,		/* u32 */
336 	ETHTOOL_A_COALESCE_TX_USECS,			/* u32 */
337 	ETHTOOL_A_COALESCE_TX_MAX_FRAMES,		/* u32 */
338 	ETHTOOL_A_COALESCE_TX_USECS_IRQ,		/* u32 */
339 	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ,		/* u32 */
340 	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS,		/* u32 */
341 	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX,		/* u8 */
342 	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX,		/* u8 */
343 	ETHTOOL_A_COALESCE_PKT_RATE_LOW,		/* u32 */
344 	ETHTOOL_A_COALESCE_RX_USECS_LOW,		/* u32 */
345 	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW,		/* u32 */
346 	ETHTOOL_A_COALESCE_TX_USECS_LOW,		/* u32 */
347 	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW,		/* u32 */
348 	ETHTOOL_A_COALESCE_PKT_RATE_HIGH,		/* u32 */
349 	ETHTOOL_A_COALESCE_RX_USECS_HIGH,		/* u32 */
350 	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH,		/* u32 */
351 	ETHTOOL_A_COALESCE_TX_USECS_HIGH,		/* u32 */
352 	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH,		/* u32 */
353 	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL,	/* u32 */
354 
355 	/* add new constants above here */
356 	__ETHTOOL_A_COALESCE_CNT,
357 	ETHTOOL_A_COALESCE_MAX = (__ETHTOOL_A_COALESCE_CNT - 1)
358 };
359 
360 /* PAUSE */
361 
362 enum {
363 	ETHTOOL_A_PAUSE_UNSPEC,
364 	ETHTOOL_A_PAUSE_HEADER,				/* nest - _A_HEADER_* */
365 	ETHTOOL_A_PAUSE_AUTONEG,			/* u8 */
366 	ETHTOOL_A_PAUSE_RX,				/* u8 */
367 	ETHTOOL_A_PAUSE_TX,				/* u8 */
368 
369 	/* add new constants above here */
370 	__ETHTOOL_A_PAUSE_CNT,
371 	ETHTOOL_A_PAUSE_MAX = (__ETHTOOL_A_PAUSE_CNT - 1)
372 };
373 
374 /* EEE */
375 
376 enum {
377 	ETHTOOL_A_EEE_UNSPEC,
378 	ETHTOOL_A_EEE_HEADER,				/* nest - _A_HEADER_* */
379 	ETHTOOL_A_EEE_MODES_OURS,			/* bitset */
380 	ETHTOOL_A_EEE_MODES_PEER,			/* bitset */
381 	ETHTOOL_A_EEE_ACTIVE,				/* u8 */
382 	ETHTOOL_A_EEE_ENABLED,				/* u8 */
383 	ETHTOOL_A_EEE_TX_LPI_ENABLED,			/* u8 */
384 	ETHTOOL_A_EEE_TX_LPI_TIMER,			/* u32 */
385 
386 	/* add new constants above here */
387 	__ETHTOOL_A_EEE_CNT,
388 	ETHTOOL_A_EEE_MAX = (__ETHTOOL_A_EEE_CNT - 1)
389 };
390 
391 /* TSINFO */
392 
393 enum {
394 	ETHTOOL_A_TSINFO_UNSPEC,
395 	ETHTOOL_A_TSINFO_HEADER,			/* nest - _A_HEADER_* */
396 	ETHTOOL_A_TSINFO_TIMESTAMPING,			/* bitset */
397 	ETHTOOL_A_TSINFO_TX_TYPES,			/* bitset */
398 	ETHTOOL_A_TSINFO_RX_FILTERS,			/* bitset */
399 	ETHTOOL_A_TSINFO_PHC_INDEX,			/* u32 */
400 
401 	/* add new constants above here */
402 	__ETHTOOL_A_TSINFO_CNT,
403 	ETHTOOL_A_TSINFO_MAX = (__ETHTOOL_A_TSINFO_CNT - 1)
404 };
405 
406 /* generic netlink info */
407 #define ETHTOOL_GENL_NAME "ethtool"
408 #define ETHTOOL_GENL_VERSION 1
409 
410 #define ETHTOOL_MCGRP_MONITOR_NAME "monitor"
411 
412 #endif /* _UAPI_LINUX_ETHTOOL_NETLINK_H_ */
413