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