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