Loading...
Note: File does not exist in v4.10.11.
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/* Common nested types */
14const struct nla_policy devlink_dl_port_function_nl_policy[DEVLINK_PORT_FN_ATTR_CAPS + 1] = {
15 [DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] = { .type = NLA_BINARY, },
16 [DEVLINK_PORT_FN_ATTR_STATE] = NLA_POLICY_MAX(NLA_U8, 1),
17 [DEVLINK_PORT_FN_ATTR_OPSTATE] = NLA_POLICY_MAX(NLA_U8, 1),
18 [DEVLINK_PORT_FN_ATTR_CAPS] = NLA_POLICY_BITFIELD32(15),
19};
20
21const struct nla_policy devlink_dl_selftest_id_nl_policy[DEVLINK_ATTR_SELFTEST_ID_FLASH + 1] = {
22 [DEVLINK_ATTR_SELFTEST_ID_FLASH] = { .type = NLA_FLAG, },
23};
24
25/* DEVLINK_CMD_GET - do */
26static const struct nla_policy devlink_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
27 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
28 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
29};
30
31/* DEVLINK_CMD_PORT_GET - do */
32static const struct nla_policy devlink_port_get_do_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
33 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
34 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
35 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
36};
37
38/* DEVLINK_CMD_PORT_GET - dump */
39static const struct nla_policy devlink_port_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
40 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
41 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
42};
43
44/* DEVLINK_CMD_PORT_SET - do */
45static const struct nla_policy devlink_port_set_nl_policy[DEVLINK_ATTR_PORT_FUNCTION + 1] = {
46 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
47 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
48 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
49 [DEVLINK_ATTR_PORT_TYPE] = NLA_POLICY_MAX(NLA_U16, 3),
50 [DEVLINK_ATTR_PORT_FUNCTION] = NLA_POLICY_NESTED(devlink_dl_port_function_nl_policy),
51};
52
53/* DEVLINK_CMD_PORT_NEW - do */
54static const struct nla_policy devlink_port_new_nl_policy[DEVLINK_ATTR_PORT_PCI_SF_NUMBER + 1] = {
55 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
56 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
57 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
58 [DEVLINK_ATTR_PORT_FLAVOUR] = NLA_POLICY_MAX(NLA_U16, 7),
59 [DEVLINK_ATTR_PORT_PCI_PF_NUMBER] = { .type = NLA_U16, },
60 [DEVLINK_ATTR_PORT_PCI_SF_NUMBER] = { .type = NLA_U32, },
61 [DEVLINK_ATTR_PORT_CONTROLLER_NUMBER] = { .type = NLA_U32, },
62};
63
64/* DEVLINK_CMD_PORT_DEL - do */
65static const struct nla_policy devlink_port_del_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
66 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
67 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
68 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
69};
70
71/* DEVLINK_CMD_PORT_SPLIT - do */
72static const struct nla_policy devlink_port_split_nl_policy[DEVLINK_ATTR_PORT_SPLIT_COUNT + 1] = {
73 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
74 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
75 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
76 [DEVLINK_ATTR_PORT_SPLIT_COUNT] = { .type = NLA_U32, },
77};
78
79/* DEVLINK_CMD_PORT_UNSPLIT - do */
80static const struct nla_policy devlink_port_unsplit_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
81 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
82 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
83 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
84};
85
86/* DEVLINK_CMD_SB_GET - do */
87static const struct nla_policy devlink_sb_get_do_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = {
88 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
89 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
90 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
91};
92
93/* DEVLINK_CMD_SB_GET - dump */
94static const struct nla_policy devlink_sb_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
95 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
96 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
97};
98
99/* DEVLINK_CMD_SB_POOL_GET - do */
100static const struct nla_policy devlink_sb_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 1] = {
101 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
102 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
103 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
104 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
105};
106
107/* DEVLINK_CMD_SB_POOL_GET - dump */
108static const struct nla_policy devlink_sb_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
109 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
110 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
111};
112
113/* DEVLINK_CMD_SB_POOL_SET - do */
114static const struct nla_policy devlink_sb_pool_set_nl_policy[DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE + 1] = {
115 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
116 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
117 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
118 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
119 [DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE] = NLA_POLICY_MAX(NLA_U8, 1),
120 [DEVLINK_ATTR_SB_POOL_SIZE] = { .type = NLA_U32, },
121};
122
123/* DEVLINK_CMD_SB_PORT_POOL_GET - do */
124static const struct nla_policy devlink_sb_port_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 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_SB_INDEX] = { .type = NLA_U32, },
129 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
130};
131
132/* DEVLINK_CMD_SB_PORT_POOL_GET - dump */
133static const struct nla_policy devlink_sb_port_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
134 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
135 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
136};
137
138/* DEVLINK_CMD_SB_PORT_POOL_SET - do */
139static const struct nla_policy devlink_sb_port_pool_set_nl_policy[DEVLINK_ATTR_SB_THRESHOLD + 1] = {
140 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
141 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
142 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
143 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
144 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
145 [DEVLINK_ATTR_SB_THRESHOLD] = { .type = NLA_U32, },
146};
147
148/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - do */
149static const struct nla_policy devlink_sb_tc_pool_bind_get_do_nl_policy[DEVLINK_ATTR_SB_TC_INDEX + 1] = {
150 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
151 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
152 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
153 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
154 [DEVLINK_ATTR_SB_POOL_TYPE] = NLA_POLICY_MAX(NLA_U8, 1),
155 [DEVLINK_ATTR_SB_TC_INDEX] = { .type = NLA_U16, },
156};
157
158/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - dump */
159static const struct nla_policy devlink_sb_tc_pool_bind_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_SB_TC_POOL_BIND_SET - do */
165static const struct nla_policy devlink_sb_tc_pool_bind_set_nl_policy[DEVLINK_ATTR_SB_TC_INDEX + 1] = {
166 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
167 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
168 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
169 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
170 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, },
171 [DEVLINK_ATTR_SB_POOL_TYPE] = NLA_POLICY_MAX(NLA_U8, 1),
172 [DEVLINK_ATTR_SB_TC_INDEX] = { .type = NLA_U16, },
173 [DEVLINK_ATTR_SB_THRESHOLD] = { .type = NLA_U32, },
174};
175
176/* DEVLINK_CMD_SB_OCC_SNAPSHOT - do */
177static const struct nla_policy devlink_sb_occ_snapshot_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = {
178 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
179 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
180 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
181};
182
183/* DEVLINK_CMD_SB_OCC_MAX_CLEAR - do */
184static const struct nla_policy devlink_sb_occ_max_clear_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = {
185 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
186 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
187 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, },
188};
189
190/* DEVLINK_CMD_ESWITCH_GET - do */
191static const struct nla_policy devlink_eswitch_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
192 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
193 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
194};
195
196/* DEVLINK_CMD_ESWITCH_SET - do */
197static const struct nla_policy devlink_eswitch_set_nl_policy[DEVLINK_ATTR_ESWITCH_ENCAP_MODE + 1] = {
198 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
199 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
200 [DEVLINK_ATTR_ESWITCH_MODE] = NLA_POLICY_MAX(NLA_U16, 1),
201 [DEVLINK_ATTR_ESWITCH_INLINE_MODE] = NLA_POLICY_MAX(NLA_U8, 3),
202 [DEVLINK_ATTR_ESWITCH_ENCAP_MODE] = NLA_POLICY_MAX(NLA_U8, 1),
203};
204
205/* DEVLINK_CMD_DPIPE_TABLE_GET - do */
206static const struct nla_policy devlink_dpipe_table_get_nl_policy[DEVLINK_ATTR_DPIPE_TABLE_NAME + 1] = {
207 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
208 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
209 [DEVLINK_ATTR_DPIPE_TABLE_NAME] = { .type = NLA_NUL_STRING, },
210};
211
212/* DEVLINK_CMD_DPIPE_ENTRIES_GET - do */
213static const struct nla_policy devlink_dpipe_entries_get_nl_policy[DEVLINK_ATTR_DPIPE_TABLE_NAME + 1] = {
214 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
215 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
216 [DEVLINK_ATTR_DPIPE_TABLE_NAME] = { .type = NLA_NUL_STRING, },
217};
218
219/* DEVLINK_CMD_DPIPE_HEADERS_GET - do */
220static const struct nla_policy devlink_dpipe_headers_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
221 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
222 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
223};
224
225/* DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET - do */
226static const struct nla_policy devlink_dpipe_table_counters_set_nl_policy[DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED + 1] = {
227 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
228 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
229 [DEVLINK_ATTR_DPIPE_TABLE_NAME] = { .type = NLA_NUL_STRING, },
230 [DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED] = { .type = NLA_U8, },
231};
232
233/* DEVLINK_CMD_RESOURCE_SET - do */
234static const struct nla_policy devlink_resource_set_nl_policy[DEVLINK_ATTR_RESOURCE_SIZE + 1] = {
235 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
236 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
237 [DEVLINK_ATTR_RESOURCE_ID] = { .type = NLA_U64, },
238 [DEVLINK_ATTR_RESOURCE_SIZE] = { .type = NLA_U64, },
239};
240
241/* DEVLINK_CMD_RESOURCE_DUMP - do */
242static const struct nla_policy devlink_resource_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
243 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
244 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
245};
246
247/* DEVLINK_CMD_RELOAD - do */
248static const struct nla_policy devlink_reload_nl_policy[DEVLINK_ATTR_RELOAD_LIMITS + 1] = {
249 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
250 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
251 [DEVLINK_ATTR_RELOAD_ACTION] = NLA_POLICY_RANGE(NLA_U8, 1, 2),
252 [DEVLINK_ATTR_RELOAD_LIMITS] = NLA_POLICY_BITFIELD32(6),
253 [DEVLINK_ATTR_NETNS_PID] = { .type = NLA_U32, },
254 [DEVLINK_ATTR_NETNS_FD] = { .type = NLA_U32, },
255 [DEVLINK_ATTR_NETNS_ID] = { .type = NLA_U32, },
256};
257
258/* DEVLINK_CMD_PARAM_GET - do */
259static const struct nla_policy devlink_param_get_do_nl_policy[DEVLINK_ATTR_PARAM_NAME + 1] = {
260 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
261 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
262 [DEVLINK_ATTR_PARAM_NAME] = { .type = NLA_NUL_STRING, },
263};
264
265/* DEVLINK_CMD_PARAM_GET - dump */
266static const struct nla_policy devlink_param_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
267 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
268 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
269};
270
271/* DEVLINK_CMD_PARAM_SET - do */
272static const struct nla_policy devlink_param_set_nl_policy[DEVLINK_ATTR_PARAM_VALUE_CMODE + 1] = {
273 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
274 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
275 [DEVLINK_ATTR_PARAM_NAME] = { .type = NLA_NUL_STRING, },
276 [DEVLINK_ATTR_PARAM_TYPE] = { .type = NLA_U8, },
277 [DEVLINK_ATTR_PARAM_VALUE_CMODE] = NLA_POLICY_MAX(NLA_U8, 2),
278};
279
280/* DEVLINK_CMD_REGION_GET - do */
281static const struct nla_policy devlink_region_get_do_nl_policy[DEVLINK_ATTR_REGION_NAME + 1] = {
282 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
283 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
284 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
285 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
286};
287
288/* DEVLINK_CMD_REGION_GET - dump */
289static const struct nla_policy devlink_region_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
290 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
291 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
292};
293
294/* DEVLINK_CMD_REGION_NEW - do */
295static const struct nla_policy devlink_region_new_nl_policy[DEVLINK_ATTR_REGION_SNAPSHOT_ID + 1] = {
296 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
297 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
298 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
299 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
300 [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32, },
301};
302
303/* DEVLINK_CMD_REGION_DEL - do */
304static const struct nla_policy devlink_region_del_nl_policy[DEVLINK_ATTR_REGION_SNAPSHOT_ID + 1] = {
305 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
306 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
307 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
308 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
309 [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32, },
310};
311
312/* DEVLINK_CMD_REGION_READ - dump */
313static const struct nla_policy devlink_region_read_nl_policy[DEVLINK_ATTR_REGION_DIRECT + 1] = {
314 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
315 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
316 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
317 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING, },
318 [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32, },
319 [DEVLINK_ATTR_REGION_DIRECT] = { .type = NLA_FLAG, },
320 [DEVLINK_ATTR_REGION_CHUNK_ADDR] = { .type = NLA_U64, },
321 [DEVLINK_ATTR_REGION_CHUNK_LEN] = { .type = NLA_U64, },
322};
323
324/* DEVLINK_CMD_PORT_PARAM_GET - do */
325static const struct nla_policy devlink_port_param_get_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
326 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
327 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
328 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
329};
330
331/* DEVLINK_CMD_PORT_PARAM_SET - do */
332static const struct nla_policy devlink_port_param_set_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
333 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
334 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
335 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
336};
337
338/* DEVLINK_CMD_INFO_GET - do */
339static const struct nla_policy devlink_info_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
340 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
341 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
342};
343
344/* DEVLINK_CMD_HEALTH_REPORTER_GET - do */
345static const struct nla_policy devlink_health_reporter_get_do_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
346 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
347 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
348 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
349 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
350};
351
352/* DEVLINK_CMD_HEALTH_REPORTER_GET - dump */
353static const struct nla_policy devlink_health_reporter_get_dump_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
354 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
355 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
356 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
357};
358
359/* DEVLINK_CMD_HEALTH_REPORTER_SET - do */
360static const struct nla_policy devlink_health_reporter_set_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP + 1] = {
361 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
362 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
363 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
364 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
365 [DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = { .type = NLA_U64, },
366 [DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER] = { .type = NLA_U8, },
367 [DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP] = { .type = NLA_U8, },
368};
369
370/* DEVLINK_CMD_HEALTH_REPORTER_RECOVER - do */
371static const struct nla_policy devlink_health_reporter_recover_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
372 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
373 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
374 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
375 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
376};
377
378/* DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE - do */
379static const struct nla_policy devlink_health_reporter_diagnose_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
380 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
381 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
382 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
383 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
384};
385
386/* DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET - dump */
387static const struct nla_policy devlink_health_reporter_dump_get_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
388 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
389 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
390 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
391 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
392};
393
394/* DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR - do */
395static const struct nla_policy devlink_health_reporter_dump_clear_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
396 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
397 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
398 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
399 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
400};
401
402/* DEVLINK_CMD_FLASH_UPDATE - do */
403static const struct nla_policy devlink_flash_update_nl_policy[DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK + 1] = {
404 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
405 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
406 [DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME] = { .type = NLA_NUL_STRING, },
407 [DEVLINK_ATTR_FLASH_UPDATE_COMPONENT] = { .type = NLA_NUL_STRING, },
408 [DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK] = NLA_POLICY_BITFIELD32(3),
409};
410
411/* DEVLINK_CMD_TRAP_GET - do */
412static const struct nla_policy devlink_trap_get_do_nl_policy[DEVLINK_ATTR_TRAP_NAME + 1] = {
413 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
414 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
415 [DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, },
416};
417
418/* DEVLINK_CMD_TRAP_GET - dump */
419static const struct nla_policy devlink_trap_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
420 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
421 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
422};
423
424/* DEVLINK_CMD_TRAP_SET - do */
425static const struct nla_policy devlink_trap_set_nl_policy[DEVLINK_ATTR_TRAP_ACTION + 1] = {
426 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
427 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
428 [DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, },
429 [DEVLINK_ATTR_TRAP_ACTION] = NLA_POLICY_MAX(NLA_U8, 2),
430};
431
432/* DEVLINK_CMD_TRAP_GROUP_GET - do */
433static const struct nla_policy devlink_trap_group_get_do_nl_policy[DEVLINK_ATTR_TRAP_GROUP_NAME + 1] = {
434 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
435 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
436 [DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, },
437};
438
439/* DEVLINK_CMD_TRAP_GROUP_GET - dump */
440static const struct nla_policy devlink_trap_group_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
441 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
442 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
443};
444
445/* DEVLINK_CMD_TRAP_GROUP_SET - do */
446static const struct nla_policy devlink_trap_group_set_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = {
447 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
448 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
449 [DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, },
450 [DEVLINK_ATTR_TRAP_ACTION] = NLA_POLICY_MAX(NLA_U8, 2),
451 [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
452};
453
454/* DEVLINK_CMD_TRAP_POLICER_GET - do */
455static const struct nla_policy devlink_trap_policer_get_do_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = {
456 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
457 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
458 [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
459};
460
461/* DEVLINK_CMD_TRAP_POLICER_GET - dump */
462static const struct nla_policy devlink_trap_policer_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
463 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
464 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
465};
466
467/* DEVLINK_CMD_TRAP_POLICER_SET - do */
468static const struct nla_policy devlink_trap_policer_set_nl_policy[DEVLINK_ATTR_TRAP_POLICER_BURST + 1] = {
469 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
470 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
471 [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
472 [DEVLINK_ATTR_TRAP_POLICER_RATE] = { .type = NLA_U64, },
473 [DEVLINK_ATTR_TRAP_POLICER_BURST] = { .type = NLA_U64, },
474};
475
476/* DEVLINK_CMD_HEALTH_REPORTER_TEST - do */
477static const struct nla_policy devlink_health_reporter_test_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
478 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
479 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
480 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
481 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
482};
483
484/* DEVLINK_CMD_RATE_GET - do */
485static const struct nla_policy devlink_rate_get_do_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = {
486 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
487 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
488 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
489 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
490};
491
492/* DEVLINK_CMD_RATE_GET - dump */
493static const struct nla_policy devlink_rate_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
494 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
495 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
496};
497
498/* DEVLINK_CMD_RATE_SET - do */
499static const struct nla_policy devlink_rate_set_nl_policy[DEVLINK_ATTR_RATE_TX_WEIGHT + 1] = {
500 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
501 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
502 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
503 [DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, },
504 [DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, },
505 [DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, },
506 [DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, },
507 [DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, },
508};
509
510/* DEVLINK_CMD_RATE_NEW - do */
511static const struct nla_policy devlink_rate_new_nl_policy[DEVLINK_ATTR_RATE_TX_WEIGHT + 1] = {
512 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
513 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
514 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
515 [DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, },
516 [DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, },
517 [DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, },
518 [DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, },
519 [DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, },
520};
521
522/* DEVLINK_CMD_RATE_DEL - do */
523static const struct nla_policy devlink_rate_del_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = {
524 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
525 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
526 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
527};
528
529/* DEVLINK_CMD_LINECARD_GET - do */
530static const struct nla_policy devlink_linecard_get_do_nl_policy[DEVLINK_ATTR_LINECARD_INDEX + 1] = {
531 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
532 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
533 [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, },
534};
535
536/* DEVLINK_CMD_LINECARD_GET - dump */
537static const struct nla_policy devlink_linecard_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
538 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
539 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
540};
541
542/* DEVLINK_CMD_LINECARD_SET - do */
543static const struct nla_policy devlink_linecard_set_nl_policy[DEVLINK_ATTR_LINECARD_TYPE + 1] = {
544 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
545 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
546 [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, },
547 [DEVLINK_ATTR_LINECARD_TYPE] = { .type = NLA_NUL_STRING, },
548};
549
550/* DEVLINK_CMD_SELFTESTS_GET - do */
551static const struct nla_policy devlink_selftests_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
552 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
553 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
554};
555
556/* DEVLINK_CMD_SELFTESTS_RUN - do */
557static const struct nla_policy devlink_selftests_run_nl_policy[DEVLINK_ATTR_SELFTESTS + 1] = {
558 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
559 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
560 [DEVLINK_ATTR_SELFTESTS] = NLA_POLICY_NESTED(devlink_dl_selftest_id_nl_policy),
561};
562
563/* DEVLINK_CMD_NOTIFY_FILTER_SET - do */
564static const struct nla_policy devlink_notify_filter_set_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
565 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
566 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
567 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
568};
569
570/* Ops table for devlink */
571const struct genl_split_ops devlink_nl_ops[74] = {
572 {
573 .cmd = DEVLINK_CMD_GET,
574 .validate = GENL_DONT_VALIDATE_STRICT,
575 .pre_doit = devlink_nl_pre_doit,
576 .doit = devlink_nl_get_doit,
577 .post_doit = devlink_nl_post_doit,
578 .policy = devlink_get_nl_policy,
579 .maxattr = DEVLINK_ATTR_DEV_NAME,
580 .flags = GENL_CMD_CAP_DO,
581 },
582 {
583 .cmd = DEVLINK_CMD_GET,
584 .validate = GENL_DONT_VALIDATE_DUMP,
585 .dumpit = devlink_nl_get_dumpit,
586 .flags = GENL_CMD_CAP_DUMP,
587 },
588 {
589 .cmd = DEVLINK_CMD_PORT_GET,
590 .validate = GENL_DONT_VALIDATE_STRICT,
591 .pre_doit = devlink_nl_pre_doit_port,
592 .doit = devlink_nl_port_get_doit,
593 .post_doit = devlink_nl_post_doit,
594 .policy = devlink_port_get_do_nl_policy,
595 .maxattr = DEVLINK_ATTR_PORT_INDEX,
596 .flags = GENL_CMD_CAP_DO,
597 },
598 {
599 .cmd = DEVLINK_CMD_PORT_GET,
600 .dumpit = devlink_nl_port_get_dumpit,
601 .policy = devlink_port_get_dump_nl_policy,
602 .maxattr = DEVLINK_ATTR_DEV_NAME,
603 .flags = GENL_CMD_CAP_DUMP,
604 },
605 {
606 .cmd = DEVLINK_CMD_PORT_SET,
607 .validate = GENL_DONT_VALIDATE_STRICT,
608 .pre_doit = devlink_nl_pre_doit_port,
609 .doit = devlink_nl_port_set_doit,
610 .post_doit = devlink_nl_post_doit,
611 .policy = devlink_port_set_nl_policy,
612 .maxattr = DEVLINK_ATTR_PORT_FUNCTION,
613 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
614 },
615 {
616 .cmd = DEVLINK_CMD_PORT_NEW,
617 .validate = GENL_DONT_VALIDATE_STRICT,
618 .pre_doit = devlink_nl_pre_doit,
619 .doit = devlink_nl_port_new_doit,
620 .post_doit = devlink_nl_post_doit,
621 .policy = devlink_port_new_nl_policy,
622 .maxattr = DEVLINK_ATTR_PORT_PCI_SF_NUMBER,
623 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
624 },
625 {
626 .cmd = DEVLINK_CMD_PORT_DEL,
627 .validate = GENL_DONT_VALIDATE_STRICT,
628 .pre_doit = devlink_nl_pre_doit_port,
629 .doit = devlink_nl_port_del_doit,
630 .post_doit = devlink_nl_post_doit,
631 .policy = devlink_port_del_nl_policy,
632 .maxattr = DEVLINK_ATTR_PORT_INDEX,
633 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
634 },
635 {
636 .cmd = DEVLINK_CMD_PORT_SPLIT,
637 .validate = GENL_DONT_VALIDATE_STRICT,
638 .pre_doit = devlink_nl_pre_doit_port,
639 .doit = devlink_nl_port_split_doit,
640 .post_doit = devlink_nl_post_doit,
641 .policy = devlink_port_split_nl_policy,
642 .maxattr = DEVLINK_ATTR_PORT_SPLIT_COUNT,
643 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
644 },
645 {
646 .cmd = DEVLINK_CMD_PORT_UNSPLIT,
647 .validate = GENL_DONT_VALIDATE_STRICT,
648 .pre_doit = devlink_nl_pre_doit_port,
649 .doit = devlink_nl_port_unsplit_doit,
650 .post_doit = devlink_nl_post_doit,
651 .policy = devlink_port_unsplit_nl_policy,
652 .maxattr = DEVLINK_ATTR_PORT_INDEX,
653 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
654 },
655 {
656 .cmd = DEVLINK_CMD_SB_GET,
657 .validate = GENL_DONT_VALIDATE_STRICT,
658 .pre_doit = devlink_nl_pre_doit,
659 .doit = devlink_nl_sb_get_doit,
660 .post_doit = devlink_nl_post_doit,
661 .policy = devlink_sb_get_do_nl_policy,
662 .maxattr = DEVLINK_ATTR_SB_INDEX,
663 .flags = GENL_CMD_CAP_DO,
664 },
665 {
666 .cmd = DEVLINK_CMD_SB_GET,
667 .dumpit = devlink_nl_sb_get_dumpit,
668 .policy = devlink_sb_get_dump_nl_policy,
669 .maxattr = DEVLINK_ATTR_DEV_NAME,
670 .flags = GENL_CMD_CAP_DUMP,
671 },
672 {
673 .cmd = DEVLINK_CMD_SB_POOL_GET,
674 .validate = GENL_DONT_VALIDATE_STRICT,
675 .pre_doit = devlink_nl_pre_doit,
676 .doit = devlink_nl_sb_pool_get_doit,
677 .post_doit = devlink_nl_post_doit,
678 .policy = devlink_sb_pool_get_do_nl_policy,
679 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
680 .flags = GENL_CMD_CAP_DO,
681 },
682 {
683 .cmd = DEVLINK_CMD_SB_POOL_GET,
684 .dumpit = devlink_nl_sb_pool_get_dumpit,
685 .policy = devlink_sb_pool_get_dump_nl_policy,
686 .maxattr = DEVLINK_ATTR_DEV_NAME,
687 .flags = GENL_CMD_CAP_DUMP,
688 },
689 {
690 .cmd = DEVLINK_CMD_SB_POOL_SET,
691 .validate = GENL_DONT_VALIDATE_STRICT,
692 .pre_doit = devlink_nl_pre_doit,
693 .doit = devlink_nl_sb_pool_set_doit,
694 .post_doit = devlink_nl_post_doit,
695 .policy = devlink_sb_pool_set_nl_policy,
696 .maxattr = DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE,
697 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
698 },
699 {
700 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
701 .validate = GENL_DONT_VALIDATE_STRICT,
702 .pre_doit = devlink_nl_pre_doit_port,
703 .doit = devlink_nl_sb_port_pool_get_doit,
704 .post_doit = devlink_nl_post_doit,
705 .policy = devlink_sb_port_pool_get_do_nl_policy,
706 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
707 .flags = GENL_CMD_CAP_DO,
708 },
709 {
710 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
711 .dumpit = devlink_nl_sb_port_pool_get_dumpit,
712 .policy = devlink_sb_port_pool_get_dump_nl_policy,
713 .maxattr = DEVLINK_ATTR_DEV_NAME,
714 .flags = GENL_CMD_CAP_DUMP,
715 },
716 {
717 .cmd = DEVLINK_CMD_SB_PORT_POOL_SET,
718 .validate = GENL_DONT_VALIDATE_STRICT,
719 .pre_doit = devlink_nl_pre_doit_port,
720 .doit = devlink_nl_sb_port_pool_set_doit,
721 .post_doit = devlink_nl_post_doit,
722 .policy = devlink_sb_port_pool_set_nl_policy,
723 .maxattr = DEVLINK_ATTR_SB_THRESHOLD,
724 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
725 },
726 {
727 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
728 .validate = GENL_DONT_VALIDATE_STRICT,
729 .pre_doit = devlink_nl_pre_doit_port,
730 .doit = devlink_nl_sb_tc_pool_bind_get_doit,
731 .post_doit = devlink_nl_post_doit,
732 .policy = devlink_sb_tc_pool_bind_get_do_nl_policy,
733 .maxattr = DEVLINK_ATTR_SB_TC_INDEX,
734 .flags = GENL_CMD_CAP_DO,
735 },
736 {
737 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
738 .dumpit = devlink_nl_sb_tc_pool_bind_get_dumpit,
739 .policy = devlink_sb_tc_pool_bind_get_dump_nl_policy,
740 .maxattr = DEVLINK_ATTR_DEV_NAME,
741 .flags = GENL_CMD_CAP_DUMP,
742 },
743 {
744 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET,
745 .validate = GENL_DONT_VALIDATE_STRICT,
746 .pre_doit = devlink_nl_pre_doit_port,
747 .doit = devlink_nl_sb_tc_pool_bind_set_doit,
748 .post_doit = devlink_nl_post_doit,
749 .policy = devlink_sb_tc_pool_bind_set_nl_policy,
750 .maxattr = DEVLINK_ATTR_SB_TC_INDEX,
751 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
752 },
753 {
754 .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT,
755 .validate = GENL_DONT_VALIDATE_STRICT,
756 .pre_doit = devlink_nl_pre_doit,
757 .doit = devlink_nl_sb_occ_snapshot_doit,
758 .post_doit = devlink_nl_post_doit,
759 .policy = devlink_sb_occ_snapshot_nl_policy,
760 .maxattr = DEVLINK_ATTR_SB_INDEX,
761 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
762 },
763 {
764 .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR,
765 .validate = GENL_DONT_VALIDATE_STRICT,
766 .pre_doit = devlink_nl_pre_doit,
767 .doit = devlink_nl_sb_occ_max_clear_doit,
768 .post_doit = devlink_nl_post_doit,
769 .policy = devlink_sb_occ_max_clear_nl_policy,
770 .maxattr = DEVLINK_ATTR_SB_INDEX,
771 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
772 },
773 {
774 .cmd = DEVLINK_CMD_ESWITCH_GET,
775 .validate = GENL_DONT_VALIDATE_STRICT,
776 .pre_doit = devlink_nl_pre_doit,
777 .doit = devlink_nl_eswitch_get_doit,
778 .post_doit = devlink_nl_post_doit,
779 .policy = devlink_eswitch_get_nl_policy,
780 .maxattr = DEVLINK_ATTR_DEV_NAME,
781 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
782 },
783 {
784 .cmd = DEVLINK_CMD_ESWITCH_SET,
785 .validate = GENL_DONT_VALIDATE_STRICT,
786 .pre_doit = devlink_nl_pre_doit,
787 .doit = devlink_nl_eswitch_set_doit,
788 .post_doit = devlink_nl_post_doit,
789 .policy = devlink_eswitch_set_nl_policy,
790 .maxattr = DEVLINK_ATTR_ESWITCH_ENCAP_MODE,
791 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
792 },
793 {
794 .cmd = DEVLINK_CMD_DPIPE_TABLE_GET,
795 .validate = GENL_DONT_VALIDATE_STRICT,
796 .pre_doit = devlink_nl_pre_doit,
797 .doit = devlink_nl_dpipe_table_get_doit,
798 .post_doit = devlink_nl_post_doit,
799 .policy = devlink_dpipe_table_get_nl_policy,
800 .maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
801 .flags = GENL_CMD_CAP_DO,
802 },
803 {
804 .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET,
805 .validate = GENL_DONT_VALIDATE_STRICT,
806 .pre_doit = devlink_nl_pre_doit,
807 .doit = devlink_nl_dpipe_entries_get_doit,
808 .post_doit = devlink_nl_post_doit,
809 .policy = devlink_dpipe_entries_get_nl_policy,
810 .maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
811 .flags = GENL_CMD_CAP_DO,
812 },
813 {
814 .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET,
815 .validate = GENL_DONT_VALIDATE_STRICT,
816 .pre_doit = devlink_nl_pre_doit,
817 .doit = devlink_nl_dpipe_headers_get_doit,
818 .post_doit = devlink_nl_post_doit,
819 .policy = devlink_dpipe_headers_get_nl_policy,
820 .maxattr = DEVLINK_ATTR_DEV_NAME,
821 .flags = GENL_CMD_CAP_DO,
822 },
823 {
824 .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
825 .validate = GENL_DONT_VALIDATE_STRICT,
826 .pre_doit = devlink_nl_pre_doit,
827 .doit = devlink_nl_dpipe_table_counters_set_doit,
828 .post_doit = devlink_nl_post_doit,
829 .policy = devlink_dpipe_table_counters_set_nl_policy,
830 .maxattr = DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED,
831 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
832 },
833 {
834 .cmd = DEVLINK_CMD_RESOURCE_SET,
835 .validate = GENL_DONT_VALIDATE_STRICT,
836 .pre_doit = devlink_nl_pre_doit,
837 .doit = devlink_nl_resource_set_doit,
838 .post_doit = devlink_nl_post_doit,
839 .policy = devlink_resource_set_nl_policy,
840 .maxattr = DEVLINK_ATTR_RESOURCE_SIZE,
841 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
842 },
843 {
844 .cmd = DEVLINK_CMD_RESOURCE_DUMP,
845 .validate = GENL_DONT_VALIDATE_STRICT,
846 .pre_doit = devlink_nl_pre_doit,
847 .doit = devlink_nl_resource_dump_doit,
848 .post_doit = devlink_nl_post_doit,
849 .policy = devlink_resource_dump_nl_policy,
850 .maxattr = DEVLINK_ATTR_DEV_NAME,
851 .flags = GENL_CMD_CAP_DO,
852 },
853 {
854 .cmd = DEVLINK_CMD_RELOAD,
855 .validate = GENL_DONT_VALIDATE_STRICT,
856 .pre_doit = devlink_nl_pre_doit_dev_lock,
857 .doit = devlink_nl_reload_doit,
858 .post_doit = devlink_nl_post_doit_dev_lock,
859 .policy = devlink_reload_nl_policy,
860 .maxattr = DEVLINK_ATTR_RELOAD_LIMITS,
861 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
862 },
863 {
864 .cmd = DEVLINK_CMD_PARAM_GET,
865 .validate = GENL_DONT_VALIDATE_STRICT,
866 .pre_doit = devlink_nl_pre_doit,
867 .doit = devlink_nl_param_get_doit,
868 .post_doit = devlink_nl_post_doit,
869 .policy = devlink_param_get_do_nl_policy,
870 .maxattr = DEVLINK_ATTR_PARAM_NAME,
871 .flags = GENL_CMD_CAP_DO,
872 },
873 {
874 .cmd = DEVLINK_CMD_PARAM_GET,
875 .dumpit = devlink_nl_param_get_dumpit,
876 .policy = devlink_param_get_dump_nl_policy,
877 .maxattr = DEVLINK_ATTR_DEV_NAME,
878 .flags = GENL_CMD_CAP_DUMP,
879 },
880 {
881 .cmd = DEVLINK_CMD_PARAM_SET,
882 .validate = GENL_DONT_VALIDATE_STRICT,
883 .pre_doit = devlink_nl_pre_doit,
884 .doit = devlink_nl_param_set_doit,
885 .post_doit = devlink_nl_post_doit,
886 .policy = devlink_param_set_nl_policy,
887 .maxattr = DEVLINK_ATTR_PARAM_VALUE_CMODE,
888 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
889 },
890 {
891 .cmd = DEVLINK_CMD_REGION_GET,
892 .validate = GENL_DONT_VALIDATE_STRICT,
893 .pre_doit = devlink_nl_pre_doit_port_optional,
894 .doit = devlink_nl_region_get_doit,
895 .post_doit = devlink_nl_post_doit,
896 .policy = devlink_region_get_do_nl_policy,
897 .maxattr = DEVLINK_ATTR_REGION_NAME,
898 .flags = GENL_CMD_CAP_DO,
899 },
900 {
901 .cmd = DEVLINK_CMD_REGION_GET,
902 .dumpit = devlink_nl_region_get_dumpit,
903 .policy = devlink_region_get_dump_nl_policy,
904 .maxattr = DEVLINK_ATTR_DEV_NAME,
905 .flags = GENL_CMD_CAP_DUMP,
906 },
907 {
908 .cmd = DEVLINK_CMD_REGION_NEW,
909 .validate = GENL_DONT_VALIDATE_STRICT,
910 .pre_doit = devlink_nl_pre_doit_port_optional,
911 .doit = devlink_nl_region_new_doit,
912 .post_doit = devlink_nl_post_doit,
913 .policy = devlink_region_new_nl_policy,
914 .maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
915 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
916 },
917 {
918 .cmd = DEVLINK_CMD_REGION_DEL,
919 .validate = GENL_DONT_VALIDATE_STRICT,
920 .pre_doit = devlink_nl_pre_doit_port_optional,
921 .doit = devlink_nl_region_del_doit,
922 .post_doit = devlink_nl_post_doit,
923 .policy = devlink_region_del_nl_policy,
924 .maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
925 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
926 },
927 {
928 .cmd = DEVLINK_CMD_REGION_READ,
929 .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
930 .dumpit = devlink_nl_region_read_dumpit,
931 .policy = devlink_region_read_nl_policy,
932 .maxattr = DEVLINK_ATTR_REGION_DIRECT,
933 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
934 },
935 {
936 .cmd = DEVLINK_CMD_PORT_PARAM_GET,
937 .validate = GENL_DONT_VALIDATE_STRICT,
938 .pre_doit = devlink_nl_pre_doit_port,
939 .doit = devlink_nl_port_param_get_doit,
940 .post_doit = devlink_nl_post_doit,
941 .policy = devlink_port_param_get_nl_policy,
942 .maxattr = DEVLINK_ATTR_PORT_INDEX,
943 .flags = GENL_CMD_CAP_DO,
944 },
945 {
946 .cmd = DEVLINK_CMD_PORT_PARAM_GET,
947 .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
948 .dumpit = devlink_nl_port_param_get_dumpit,
949 .flags = GENL_CMD_CAP_DUMP,
950 },
951 {
952 .cmd = DEVLINK_CMD_PORT_PARAM_SET,
953 .validate = GENL_DONT_VALIDATE_STRICT,
954 .pre_doit = devlink_nl_pre_doit_port,
955 .doit = devlink_nl_port_param_set_doit,
956 .post_doit = devlink_nl_post_doit,
957 .policy = devlink_port_param_set_nl_policy,
958 .maxattr = DEVLINK_ATTR_PORT_INDEX,
959 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
960 },
961 {
962 .cmd = DEVLINK_CMD_INFO_GET,
963 .validate = GENL_DONT_VALIDATE_STRICT,
964 .pre_doit = devlink_nl_pre_doit,
965 .doit = devlink_nl_info_get_doit,
966 .post_doit = devlink_nl_post_doit,
967 .policy = devlink_info_get_nl_policy,
968 .maxattr = DEVLINK_ATTR_DEV_NAME,
969 .flags = GENL_CMD_CAP_DO,
970 },
971 {
972 .cmd = DEVLINK_CMD_INFO_GET,
973 .validate = GENL_DONT_VALIDATE_DUMP,
974 .dumpit = devlink_nl_info_get_dumpit,
975 .flags = GENL_CMD_CAP_DUMP,
976 },
977 {
978 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
979 .validate = GENL_DONT_VALIDATE_STRICT,
980 .pre_doit = devlink_nl_pre_doit_port_optional,
981 .doit = devlink_nl_health_reporter_get_doit,
982 .post_doit = devlink_nl_post_doit,
983 .policy = devlink_health_reporter_get_do_nl_policy,
984 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
985 .flags = GENL_CMD_CAP_DO,
986 },
987 {
988 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
989 .dumpit = devlink_nl_health_reporter_get_dumpit,
990 .policy = devlink_health_reporter_get_dump_nl_policy,
991 .maxattr = DEVLINK_ATTR_PORT_INDEX,
992 .flags = GENL_CMD_CAP_DUMP,
993 },
994 {
995 .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET,
996 .validate = GENL_DONT_VALIDATE_STRICT,
997 .pre_doit = devlink_nl_pre_doit_port_optional,
998 .doit = devlink_nl_health_reporter_set_doit,
999 .post_doit = devlink_nl_post_doit,
1000 .policy = devlink_health_reporter_set_nl_policy,
1001 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP,
1002 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1003 },
1004 {
1005 .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
1006 .validate = GENL_DONT_VALIDATE_STRICT,
1007 .pre_doit = devlink_nl_pre_doit_port_optional,
1008 .doit = devlink_nl_health_reporter_recover_doit,
1009 .post_doit = devlink_nl_post_doit,
1010 .policy = devlink_health_reporter_recover_nl_policy,
1011 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1012 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1013 },
1014 {
1015 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE,
1016 .validate = GENL_DONT_VALIDATE_STRICT,
1017 .pre_doit = devlink_nl_pre_doit_port_optional,
1018 .doit = devlink_nl_health_reporter_diagnose_doit,
1019 .post_doit = devlink_nl_post_doit,
1020 .policy = devlink_health_reporter_diagnose_nl_policy,
1021 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1022 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1023 },
1024 {
1025 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
1026 .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
1027 .dumpit = devlink_nl_health_reporter_dump_get_dumpit,
1028 .policy = devlink_health_reporter_dump_get_nl_policy,
1029 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1030 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
1031 },
1032 {
1033 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
1034 .validate = GENL_DONT_VALIDATE_STRICT,
1035 .pre_doit = devlink_nl_pre_doit_port_optional,
1036 .doit = devlink_nl_health_reporter_dump_clear_doit,
1037 .post_doit = devlink_nl_post_doit,
1038 .policy = devlink_health_reporter_dump_clear_nl_policy,
1039 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1040 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1041 },
1042 {
1043 .cmd = DEVLINK_CMD_FLASH_UPDATE,
1044 .validate = GENL_DONT_VALIDATE_STRICT,
1045 .pre_doit = devlink_nl_pre_doit,
1046 .doit = devlink_nl_flash_update_doit,
1047 .post_doit = devlink_nl_post_doit,
1048 .policy = devlink_flash_update_nl_policy,
1049 .maxattr = DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK,
1050 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1051 },
1052 {
1053 .cmd = DEVLINK_CMD_TRAP_GET,
1054 .validate = GENL_DONT_VALIDATE_STRICT,
1055 .pre_doit = devlink_nl_pre_doit,
1056 .doit = devlink_nl_trap_get_doit,
1057 .post_doit = devlink_nl_post_doit,
1058 .policy = devlink_trap_get_do_nl_policy,
1059 .maxattr = DEVLINK_ATTR_TRAP_NAME,
1060 .flags = GENL_CMD_CAP_DO,
1061 },
1062 {
1063 .cmd = DEVLINK_CMD_TRAP_GET,
1064 .dumpit = devlink_nl_trap_get_dumpit,
1065 .policy = devlink_trap_get_dump_nl_policy,
1066 .maxattr = DEVLINK_ATTR_DEV_NAME,
1067 .flags = GENL_CMD_CAP_DUMP,
1068 },
1069 {
1070 .cmd = DEVLINK_CMD_TRAP_SET,
1071 .validate = GENL_DONT_VALIDATE_STRICT,
1072 .pre_doit = devlink_nl_pre_doit,
1073 .doit = devlink_nl_trap_set_doit,
1074 .post_doit = devlink_nl_post_doit,
1075 .policy = devlink_trap_set_nl_policy,
1076 .maxattr = DEVLINK_ATTR_TRAP_ACTION,
1077 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1078 },
1079 {
1080 .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
1081 .validate = GENL_DONT_VALIDATE_STRICT,
1082 .pre_doit = devlink_nl_pre_doit,
1083 .doit = devlink_nl_trap_group_get_doit,
1084 .post_doit = devlink_nl_post_doit,
1085 .policy = devlink_trap_group_get_do_nl_policy,
1086 .maxattr = DEVLINK_ATTR_TRAP_GROUP_NAME,
1087 .flags = GENL_CMD_CAP_DO,
1088 },
1089 {
1090 .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
1091 .dumpit = devlink_nl_trap_group_get_dumpit,
1092 .policy = devlink_trap_group_get_dump_nl_policy,
1093 .maxattr = DEVLINK_ATTR_DEV_NAME,
1094 .flags = GENL_CMD_CAP_DUMP,
1095 },
1096 {
1097 .cmd = DEVLINK_CMD_TRAP_GROUP_SET,
1098 .validate = GENL_DONT_VALIDATE_STRICT,
1099 .pre_doit = devlink_nl_pre_doit,
1100 .doit = devlink_nl_trap_group_set_doit,
1101 .post_doit = devlink_nl_post_doit,
1102 .policy = devlink_trap_group_set_nl_policy,
1103 .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
1104 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1105 },
1106 {
1107 .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
1108 .validate = GENL_DONT_VALIDATE_STRICT,
1109 .pre_doit = devlink_nl_pre_doit,
1110 .doit = devlink_nl_trap_policer_get_doit,
1111 .post_doit = devlink_nl_post_doit,
1112 .policy = devlink_trap_policer_get_do_nl_policy,
1113 .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
1114 .flags = GENL_CMD_CAP_DO,
1115 },
1116 {
1117 .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
1118 .dumpit = devlink_nl_trap_policer_get_dumpit,
1119 .policy = devlink_trap_policer_get_dump_nl_policy,
1120 .maxattr = DEVLINK_ATTR_DEV_NAME,
1121 .flags = GENL_CMD_CAP_DUMP,
1122 },
1123 {
1124 .cmd = DEVLINK_CMD_TRAP_POLICER_SET,
1125 .validate = GENL_DONT_VALIDATE_STRICT,
1126 .pre_doit = devlink_nl_pre_doit,
1127 .doit = devlink_nl_trap_policer_set_doit,
1128 .post_doit = devlink_nl_post_doit,
1129 .policy = devlink_trap_policer_set_nl_policy,
1130 .maxattr = DEVLINK_ATTR_TRAP_POLICER_BURST,
1131 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1132 },
1133 {
1134 .cmd = DEVLINK_CMD_HEALTH_REPORTER_TEST,
1135 .validate = GENL_DONT_VALIDATE_STRICT,
1136 .pre_doit = devlink_nl_pre_doit_port_optional,
1137 .doit = devlink_nl_health_reporter_test_doit,
1138 .post_doit = devlink_nl_post_doit,
1139 .policy = devlink_health_reporter_test_nl_policy,
1140 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1141 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1142 },
1143 {
1144 .cmd = DEVLINK_CMD_RATE_GET,
1145 .validate = GENL_DONT_VALIDATE_STRICT,
1146 .pre_doit = devlink_nl_pre_doit,
1147 .doit = devlink_nl_rate_get_doit,
1148 .post_doit = devlink_nl_post_doit,
1149 .policy = devlink_rate_get_do_nl_policy,
1150 .maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
1151 .flags = GENL_CMD_CAP_DO,
1152 },
1153 {
1154 .cmd = DEVLINK_CMD_RATE_GET,
1155 .dumpit = devlink_nl_rate_get_dumpit,
1156 .policy = devlink_rate_get_dump_nl_policy,
1157 .maxattr = DEVLINK_ATTR_DEV_NAME,
1158 .flags = GENL_CMD_CAP_DUMP,
1159 },
1160 {
1161 .cmd = DEVLINK_CMD_RATE_SET,
1162 .validate = GENL_DONT_VALIDATE_STRICT,
1163 .pre_doit = devlink_nl_pre_doit,
1164 .doit = devlink_nl_rate_set_doit,
1165 .post_doit = devlink_nl_post_doit,
1166 .policy = devlink_rate_set_nl_policy,
1167 .maxattr = DEVLINK_ATTR_RATE_TX_WEIGHT,
1168 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1169 },
1170 {
1171 .cmd = DEVLINK_CMD_RATE_NEW,
1172 .validate = GENL_DONT_VALIDATE_STRICT,
1173 .pre_doit = devlink_nl_pre_doit,
1174 .doit = devlink_nl_rate_new_doit,
1175 .post_doit = devlink_nl_post_doit,
1176 .policy = devlink_rate_new_nl_policy,
1177 .maxattr = DEVLINK_ATTR_RATE_TX_WEIGHT,
1178 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1179 },
1180 {
1181 .cmd = DEVLINK_CMD_RATE_DEL,
1182 .validate = GENL_DONT_VALIDATE_STRICT,
1183 .pre_doit = devlink_nl_pre_doit,
1184 .doit = devlink_nl_rate_del_doit,
1185 .post_doit = devlink_nl_post_doit,
1186 .policy = devlink_rate_del_nl_policy,
1187 .maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
1188 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1189 },
1190 {
1191 .cmd = DEVLINK_CMD_LINECARD_GET,
1192 .validate = GENL_DONT_VALIDATE_STRICT,
1193 .pre_doit = devlink_nl_pre_doit,
1194 .doit = devlink_nl_linecard_get_doit,
1195 .post_doit = devlink_nl_post_doit,
1196 .policy = devlink_linecard_get_do_nl_policy,
1197 .maxattr = DEVLINK_ATTR_LINECARD_INDEX,
1198 .flags = GENL_CMD_CAP_DO,
1199 },
1200 {
1201 .cmd = DEVLINK_CMD_LINECARD_GET,
1202 .dumpit = devlink_nl_linecard_get_dumpit,
1203 .policy = devlink_linecard_get_dump_nl_policy,
1204 .maxattr = DEVLINK_ATTR_DEV_NAME,
1205 .flags = GENL_CMD_CAP_DUMP,
1206 },
1207 {
1208 .cmd = DEVLINK_CMD_LINECARD_SET,
1209 .validate = GENL_DONT_VALIDATE_STRICT,
1210 .pre_doit = devlink_nl_pre_doit,
1211 .doit = devlink_nl_linecard_set_doit,
1212 .post_doit = devlink_nl_post_doit,
1213 .policy = devlink_linecard_set_nl_policy,
1214 .maxattr = DEVLINK_ATTR_LINECARD_TYPE,
1215 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1216 },
1217 {
1218 .cmd = DEVLINK_CMD_SELFTESTS_GET,
1219 .validate = GENL_DONT_VALIDATE_STRICT,
1220 .pre_doit = devlink_nl_pre_doit,
1221 .doit = devlink_nl_selftests_get_doit,
1222 .post_doit = devlink_nl_post_doit,
1223 .policy = devlink_selftests_get_nl_policy,
1224 .maxattr = DEVLINK_ATTR_DEV_NAME,
1225 .flags = GENL_CMD_CAP_DO,
1226 },
1227 {
1228 .cmd = DEVLINK_CMD_SELFTESTS_GET,
1229 .validate = GENL_DONT_VALIDATE_DUMP,
1230 .dumpit = devlink_nl_selftests_get_dumpit,
1231 .flags = GENL_CMD_CAP_DUMP,
1232 },
1233 {
1234 .cmd = DEVLINK_CMD_SELFTESTS_RUN,
1235 .validate = GENL_DONT_VALIDATE_STRICT,
1236 .pre_doit = devlink_nl_pre_doit,
1237 .doit = devlink_nl_selftests_run_doit,
1238 .post_doit = devlink_nl_post_doit,
1239 .policy = devlink_selftests_run_nl_policy,
1240 .maxattr = DEVLINK_ATTR_SELFTESTS,
1241 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1242 },
1243 {
1244 .cmd = DEVLINK_CMD_NOTIFY_FILTER_SET,
1245 .doit = devlink_nl_notify_filter_set_doit,
1246 .policy = devlink_notify_filter_set_nl_policy,
1247 .maxattr = DEVLINK_ATTR_PORT_INDEX,
1248 .flags = GENL_CMD_CAP_DO,
1249 },
1250};