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