Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
2/* Do not edit directly, auto-generated from: */
3/* Documentation/netlink/specs/devlink.yaml */
4/* YNL-GEN kernel source */
5
6#include <net/netlink.h>
7#include <net/genetlink.h>
8
9#include "netlink_gen.h"
10
11#include <uapi/linux/devlink.h>
12
13/* DEVLINK_CMD_GET - do */
14static const struct nla_policy devlink_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
15 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
16 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
17};
18
19/* DEVLINK_CMD_PORT_GET - do */
20static const struct nla_policy devlink_port_get_do_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
21 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
22 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
23 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
24};
25
26/* DEVLINK_CMD_PORT_GET - dump */
27static const struct nla_policy devlink_port_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
28 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
29 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
30};
31
32/* DEVLINK_CMD_SB_GET - do */
33static const struct nla_policy devlink_sb_get_do_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = {
34 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
35 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
36 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
37};
38
39/* DEVLINK_CMD_SB_GET - dump */
40static const struct nla_policy devlink_sb_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
41 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
42 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
43};
44
45/* DEVLINK_CMD_SB_POOL_GET - do */
46static const struct nla_policy devlink_sb_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 1] = {
47 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
48 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
49 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
50 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
51};
52
53/* DEVLINK_CMD_SB_POOL_GET - dump */
54static const struct nla_policy devlink_sb_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
55 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
56 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
57};
58
59/* DEVLINK_CMD_SB_PORT_POOL_GET - do */
60static const struct nla_policy devlink_sb_port_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 1] = {
61 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
62 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
63 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
64 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
65 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
66};
67
68/* DEVLINK_CMD_SB_PORT_POOL_GET - dump */
69static const struct nla_policy devlink_sb_port_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
70 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
71 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
72};
73
74/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - do */
75static const struct nla_policy devlink_sb_tc_pool_bind_get_do_nl_policy[DEVLINK_ATTR_SB_TC_INDEX + 1] = {
76 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
77 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
78 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
79 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
80 [DEVLINK_ATTR_SB_POOL_TYPE] = NLA_POLICY_MAX(NLA_U8, 1),
81 [DEVLINK_ATTR_SB_TC_INDEX] = { .type = NLA_U16, },
82};
83
84/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - dump */
85static const struct nla_policy devlink_sb_tc_pool_bind_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
86 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
87 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
88};
89
90/* DEVLINK_CMD_PARAM_GET - do */
91static const struct nla_policy devlink_param_get_do_nl_policy[DEVLINK_ATTR_PARAM_NAME + 1] = {
92 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
93 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
94 [DEVLINK_ATTR_PARAM_NAME] = { .type = NLA_NUL_STRING, },
95};
96
97/* DEVLINK_CMD_PARAM_GET - dump */
98static const struct nla_policy devlink_param_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
99 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
100 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
101};
102
103/* DEVLINK_CMD_REGION_GET - do */
104static const struct nla_policy devlink_region_get_do_nl_policy[DEVLINK_ATTR_REGION_NAME + 1] = {
105 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
106 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
107 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
108 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
109};
110
111/* DEVLINK_CMD_REGION_GET - dump */
112static const struct nla_policy devlink_region_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
113 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
114 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
115};
116
117/* DEVLINK_CMD_INFO_GET - do */
118static const struct nla_policy devlink_info_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
119 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
120 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
121};
122
123/* DEVLINK_CMD_HEALTH_REPORTER_GET - do */
124static const struct nla_policy devlink_health_reporter_get_do_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
125 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
126 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
127 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
128 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
129};
130
131/* DEVLINK_CMD_HEALTH_REPORTER_GET - dump */
132static const struct nla_policy devlink_health_reporter_get_dump_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
133 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
134 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
135 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
136};
137
138/* DEVLINK_CMD_TRAP_GET - do */
139static const struct nla_policy devlink_trap_get_do_nl_policy[DEVLINK_ATTR_TRAP_NAME + 1] = {
140 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
141 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
142 [DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, },
143};
144
145/* DEVLINK_CMD_TRAP_GET - dump */
146static const struct nla_policy devlink_trap_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
147 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
148 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
149};
150
151/* DEVLINK_CMD_TRAP_GROUP_GET - do */
152static const struct nla_policy devlink_trap_group_get_do_nl_policy[DEVLINK_ATTR_TRAP_GROUP_NAME + 1] = {
153 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
154 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
155 [DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, },
156};
157
158/* DEVLINK_CMD_TRAP_GROUP_GET - dump */
159static const struct nla_policy devlink_trap_group_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
160 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
161 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
162};
163
164/* DEVLINK_CMD_TRAP_POLICER_GET - do */
165static const struct nla_policy devlink_trap_policer_get_do_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = {
166 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
167 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
168 [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
169};
170
171/* DEVLINK_CMD_TRAP_POLICER_GET - dump */
172static const struct nla_policy devlink_trap_policer_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
173 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
174 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
175};
176
177/* DEVLINK_CMD_RATE_GET - do */
178static const struct nla_policy devlink_rate_get_do_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = {
179 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
180 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
181 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
182 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
183};
184
185/* DEVLINK_CMD_RATE_GET - dump */
186static const struct nla_policy devlink_rate_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
187 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
188 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
189};
190
191/* DEVLINK_CMD_LINECARD_GET - do */
192static const struct nla_policy devlink_linecard_get_do_nl_policy[DEVLINK_ATTR_LINECARD_INDEX + 1] = {
193 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
194 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
195 [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, },
196};
197
198/* DEVLINK_CMD_LINECARD_GET - dump */
199static const struct nla_policy devlink_linecard_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
200 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
201 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
202};
203
204/* DEVLINK_CMD_SELFTESTS_GET - do */
205static const struct nla_policy devlink_selftests_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
206 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
207 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
208};
209
210/* Ops table for devlink */
211const struct genl_split_ops devlink_nl_ops[32] = {
212 {
213 .cmd = DEVLINK_CMD_GET,
214 .validate = GENL_DONT_VALIDATE_STRICT,
215 .pre_doit = devlink_nl_pre_doit,
216 .doit = devlink_nl_get_doit,
217 .post_doit = devlink_nl_post_doit,
218 .policy = devlink_get_nl_policy,
219 .maxattr = DEVLINK_ATTR_DEV_NAME,
220 .flags = GENL_CMD_CAP_DO,
221 },
222 {
223 .cmd = DEVLINK_CMD_GET,
224 .validate = GENL_DONT_VALIDATE_DUMP,
225 .dumpit = devlink_nl_get_dumpit,
226 .flags = GENL_CMD_CAP_DUMP,
227 },
228 {
229 .cmd = DEVLINK_CMD_PORT_GET,
230 .validate = GENL_DONT_VALIDATE_STRICT,
231 .pre_doit = devlink_nl_pre_doit_port,
232 .doit = devlink_nl_port_get_doit,
233 .post_doit = devlink_nl_post_doit,
234 .policy = devlink_port_get_do_nl_policy,
235 .maxattr = DEVLINK_ATTR_PORT_INDEX,
236 .flags = GENL_CMD_CAP_DO,
237 },
238 {
239 .cmd = DEVLINK_CMD_PORT_GET,
240 .dumpit = devlink_nl_port_get_dumpit,
241 .policy = devlink_port_get_dump_nl_policy,
242 .maxattr = DEVLINK_ATTR_DEV_NAME,
243 .flags = GENL_CMD_CAP_DUMP,
244 },
245 {
246 .cmd = DEVLINK_CMD_SB_GET,
247 .validate = GENL_DONT_VALIDATE_STRICT,
248 .pre_doit = devlink_nl_pre_doit,
249 .doit = devlink_nl_sb_get_doit,
250 .post_doit = devlink_nl_post_doit,
251 .policy = devlink_sb_get_do_nl_policy,
252 .maxattr = DEVLINK_ATTR_SB_INDEX,
253 .flags = GENL_CMD_CAP_DO,
254 },
255 {
256 .cmd = DEVLINK_CMD_SB_GET,
257 .dumpit = devlink_nl_sb_get_dumpit,
258 .policy = devlink_sb_get_dump_nl_policy,
259 .maxattr = DEVLINK_ATTR_DEV_NAME,
260 .flags = GENL_CMD_CAP_DUMP,
261 },
262 {
263 .cmd = DEVLINK_CMD_SB_POOL_GET,
264 .validate = GENL_DONT_VALIDATE_STRICT,
265 .pre_doit = devlink_nl_pre_doit,
266 .doit = devlink_nl_sb_pool_get_doit,
267 .post_doit = devlink_nl_post_doit,
268 .policy = devlink_sb_pool_get_do_nl_policy,
269 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
270 .flags = GENL_CMD_CAP_DO,
271 },
272 {
273 .cmd = DEVLINK_CMD_SB_POOL_GET,
274 .dumpit = devlink_nl_sb_pool_get_dumpit,
275 .policy = devlink_sb_pool_get_dump_nl_policy,
276 .maxattr = DEVLINK_ATTR_DEV_NAME,
277 .flags = GENL_CMD_CAP_DUMP,
278 },
279 {
280 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
281 .validate = GENL_DONT_VALIDATE_STRICT,
282 .pre_doit = devlink_nl_pre_doit_port,
283 .doit = devlink_nl_sb_port_pool_get_doit,
284 .post_doit = devlink_nl_post_doit,
285 .policy = devlink_sb_port_pool_get_do_nl_policy,
286 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
287 .flags = GENL_CMD_CAP_DO,
288 },
289 {
290 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
291 .dumpit = devlink_nl_sb_port_pool_get_dumpit,
292 .policy = devlink_sb_port_pool_get_dump_nl_policy,
293 .maxattr = DEVLINK_ATTR_DEV_NAME,
294 .flags = GENL_CMD_CAP_DUMP,
295 },
296 {
297 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
298 .validate = GENL_DONT_VALIDATE_STRICT,
299 .pre_doit = devlink_nl_pre_doit_port,
300 .doit = devlink_nl_sb_tc_pool_bind_get_doit,
301 .post_doit = devlink_nl_post_doit,
302 .policy = devlink_sb_tc_pool_bind_get_do_nl_policy,
303 .maxattr = DEVLINK_ATTR_SB_TC_INDEX,
304 .flags = GENL_CMD_CAP_DO,
305 },
306 {
307 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
308 .dumpit = devlink_nl_sb_tc_pool_bind_get_dumpit,
309 .policy = devlink_sb_tc_pool_bind_get_dump_nl_policy,
310 .maxattr = DEVLINK_ATTR_DEV_NAME,
311 .flags = GENL_CMD_CAP_DUMP,
312 },
313 {
314 .cmd = DEVLINK_CMD_PARAM_GET,
315 .validate = GENL_DONT_VALIDATE_STRICT,
316 .pre_doit = devlink_nl_pre_doit,
317 .doit = devlink_nl_param_get_doit,
318 .post_doit = devlink_nl_post_doit,
319 .policy = devlink_param_get_do_nl_policy,
320 .maxattr = DEVLINK_ATTR_PARAM_NAME,
321 .flags = GENL_CMD_CAP_DO,
322 },
323 {
324 .cmd = DEVLINK_CMD_PARAM_GET,
325 .dumpit = devlink_nl_param_get_dumpit,
326 .policy = devlink_param_get_dump_nl_policy,
327 .maxattr = DEVLINK_ATTR_DEV_NAME,
328 .flags = GENL_CMD_CAP_DUMP,
329 },
330 {
331 .cmd = DEVLINK_CMD_REGION_GET,
332 .validate = GENL_DONT_VALIDATE_STRICT,
333 .pre_doit = devlink_nl_pre_doit_port_optional,
334 .doit = devlink_nl_region_get_doit,
335 .post_doit = devlink_nl_post_doit,
336 .policy = devlink_region_get_do_nl_policy,
337 .maxattr = DEVLINK_ATTR_REGION_NAME,
338 .flags = GENL_CMD_CAP_DO,
339 },
340 {
341 .cmd = DEVLINK_CMD_REGION_GET,
342 .dumpit = devlink_nl_region_get_dumpit,
343 .policy = devlink_region_get_dump_nl_policy,
344 .maxattr = DEVLINK_ATTR_DEV_NAME,
345 .flags = GENL_CMD_CAP_DUMP,
346 },
347 {
348 .cmd = DEVLINK_CMD_INFO_GET,
349 .validate = GENL_DONT_VALIDATE_STRICT,
350 .pre_doit = devlink_nl_pre_doit,
351 .doit = devlink_nl_info_get_doit,
352 .post_doit = devlink_nl_post_doit,
353 .policy = devlink_info_get_nl_policy,
354 .maxattr = DEVLINK_ATTR_DEV_NAME,
355 .flags = GENL_CMD_CAP_DO,
356 },
357 {
358 .cmd = DEVLINK_CMD_INFO_GET,
359 .validate = GENL_DONT_VALIDATE_DUMP,
360 .dumpit = devlink_nl_info_get_dumpit,
361 .flags = GENL_CMD_CAP_DUMP,
362 },
363 {
364 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
365 .validate = GENL_DONT_VALIDATE_STRICT,
366 .pre_doit = devlink_nl_pre_doit_port_optional,
367 .doit = devlink_nl_health_reporter_get_doit,
368 .post_doit = devlink_nl_post_doit,
369 .policy = devlink_health_reporter_get_do_nl_policy,
370 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
371 .flags = GENL_CMD_CAP_DO,
372 },
373 {
374 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
375 .dumpit = devlink_nl_health_reporter_get_dumpit,
376 .policy = devlink_health_reporter_get_dump_nl_policy,
377 .maxattr = DEVLINK_ATTR_PORT_INDEX,
378 .flags = GENL_CMD_CAP_DUMP,
379 },
380 {
381 .cmd = DEVLINK_CMD_TRAP_GET,
382 .validate = GENL_DONT_VALIDATE_STRICT,
383 .pre_doit = devlink_nl_pre_doit,
384 .doit = devlink_nl_trap_get_doit,
385 .post_doit = devlink_nl_post_doit,
386 .policy = devlink_trap_get_do_nl_policy,
387 .maxattr = DEVLINK_ATTR_TRAP_NAME,
388 .flags = GENL_CMD_CAP_DO,
389 },
390 {
391 .cmd = DEVLINK_CMD_TRAP_GET,
392 .dumpit = devlink_nl_trap_get_dumpit,
393 .policy = devlink_trap_get_dump_nl_policy,
394 .maxattr = DEVLINK_ATTR_DEV_NAME,
395 .flags = GENL_CMD_CAP_DUMP,
396 },
397 {
398 .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
399 .validate = GENL_DONT_VALIDATE_STRICT,
400 .pre_doit = devlink_nl_pre_doit,
401 .doit = devlink_nl_trap_group_get_doit,
402 .post_doit = devlink_nl_post_doit,
403 .policy = devlink_trap_group_get_do_nl_policy,
404 .maxattr = DEVLINK_ATTR_TRAP_GROUP_NAME,
405 .flags = GENL_CMD_CAP_DO,
406 },
407 {
408 .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
409 .dumpit = devlink_nl_trap_group_get_dumpit,
410 .policy = devlink_trap_group_get_dump_nl_policy,
411 .maxattr = DEVLINK_ATTR_DEV_NAME,
412 .flags = GENL_CMD_CAP_DUMP,
413 },
414 {
415 .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
416 .validate = GENL_DONT_VALIDATE_STRICT,
417 .pre_doit = devlink_nl_pre_doit,
418 .doit = devlink_nl_trap_policer_get_doit,
419 .post_doit = devlink_nl_post_doit,
420 .policy = devlink_trap_policer_get_do_nl_policy,
421 .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
422 .flags = GENL_CMD_CAP_DO,
423 },
424 {
425 .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
426 .dumpit = devlink_nl_trap_policer_get_dumpit,
427 .policy = devlink_trap_policer_get_dump_nl_policy,
428 .maxattr = DEVLINK_ATTR_DEV_NAME,
429 .flags = GENL_CMD_CAP_DUMP,
430 },
431 {
432 .cmd = DEVLINK_CMD_RATE_GET,
433 .validate = GENL_DONT_VALIDATE_STRICT,
434 .pre_doit = devlink_nl_pre_doit,
435 .doit = devlink_nl_rate_get_doit,
436 .post_doit = devlink_nl_post_doit,
437 .policy = devlink_rate_get_do_nl_policy,
438 .maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
439 .flags = GENL_CMD_CAP_DO,
440 },
441 {
442 .cmd = DEVLINK_CMD_RATE_GET,
443 .dumpit = devlink_nl_rate_get_dumpit,
444 .policy = devlink_rate_get_dump_nl_policy,
445 .maxattr = DEVLINK_ATTR_DEV_NAME,
446 .flags = GENL_CMD_CAP_DUMP,
447 },
448 {
449 .cmd = DEVLINK_CMD_LINECARD_GET,
450 .validate = GENL_DONT_VALIDATE_STRICT,
451 .pre_doit = devlink_nl_pre_doit,
452 .doit = devlink_nl_linecard_get_doit,
453 .post_doit = devlink_nl_post_doit,
454 .policy = devlink_linecard_get_do_nl_policy,
455 .maxattr = DEVLINK_ATTR_LINECARD_INDEX,
456 .flags = GENL_CMD_CAP_DO,
457 },
458 {
459 .cmd = DEVLINK_CMD_LINECARD_GET,
460 .dumpit = devlink_nl_linecard_get_dumpit,
461 .policy = devlink_linecard_get_dump_nl_policy,
462 .maxattr = DEVLINK_ATTR_DEV_NAME,
463 .flags = GENL_CMD_CAP_DUMP,
464 },
465 {
466 .cmd = DEVLINK_CMD_SELFTESTS_GET,
467 .validate = GENL_DONT_VALIDATE_STRICT,
468 .pre_doit = devlink_nl_pre_doit,
469 .doit = devlink_nl_selftests_get_doit,
470 .post_doit = devlink_nl_post_doit,
471 .policy = devlink_selftests_get_nl_policy,
472 .maxattr = DEVLINK_ATTR_DEV_NAME,
473 .flags = GENL_CMD_CAP_DO,
474 },
475 {
476 .cmd = DEVLINK_CMD_SELFTESTS_GET,
477 .validate = GENL_DONT_VALIDATE_DUMP,
478 .dumpit = devlink_nl_selftests_get_dumpit,
479 .flags = GENL_CMD_CAP_DUMP,
480 },
481};