xref: /linux/net/devlink/netlink_gen.c (revision 4b132aacb0768ac1e652cf517097ea6f237214b9)
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 };
1251