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 */
6 #include <net/netlink.h>
7 #include <net/genetlink.h>
9 #include "netlink_gen.h"
11 #include <uapi/linux/devlink.h>
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),
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, },
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, },
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, },
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, },
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),
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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_U16, 3),
202 [DEVLINK_ATTR_ESWITCH_ENCAP_MODE] = NLA_POLICY_MAX(NLA_U8, 1),
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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),
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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),
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, },
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, },
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),
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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, },
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),
563 /* Ops table for devlink */
564 const struct genl_split_ops devlink_nl_ops[73] = {
566 .cmd = DEVLINK_CMD_GET,
567 .validate = GENL_DONT_VALIDATE_STRICT,
568 .pre_doit = devlink_nl_pre_doit,
569 .doit = devlink_nl_get_doit,
570 .post_doit = devlink_nl_post_doit,
571 .policy = devlink_get_nl_policy,
572 .maxattr = DEVLINK_ATTR_DEV_NAME,
573 .flags = GENL_CMD_CAP_DO,
576 .cmd = DEVLINK_CMD_GET,
577 .validate = GENL_DONT_VALIDATE_DUMP,
578 .dumpit = devlink_nl_get_dumpit,
579 .flags = GENL_CMD_CAP_DUMP,
582 .cmd = DEVLINK_CMD_PORT_GET,
583 .validate = GENL_DONT_VALIDATE_STRICT,
584 .pre_doit = devlink_nl_pre_doit_port,
585 .doit = devlink_nl_port_get_doit,
586 .post_doit = devlink_nl_post_doit,
587 .policy = devlink_port_get_do_nl_policy,
588 .maxattr = DEVLINK_ATTR_PORT_INDEX,
589 .flags = GENL_CMD_CAP_DO,
592 .cmd = DEVLINK_CMD_PORT_GET,
593 .dumpit = devlink_nl_port_get_dumpit,
594 .policy = devlink_port_get_dump_nl_policy,
595 .maxattr = DEVLINK_ATTR_DEV_NAME,
596 .flags = GENL_CMD_CAP_DUMP,
599 .cmd = DEVLINK_CMD_PORT_SET,
600 .validate = GENL_DONT_VALIDATE_STRICT,
601 .pre_doit = devlink_nl_pre_doit_port,
602 .doit = devlink_nl_port_set_doit,
603 .post_doit = devlink_nl_post_doit,
604 .policy = devlink_port_set_nl_policy,
605 .maxattr = DEVLINK_ATTR_PORT_FUNCTION,
606 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
609 .cmd = DEVLINK_CMD_PORT_NEW,
610 .validate = GENL_DONT_VALIDATE_STRICT,
611 .pre_doit = devlink_nl_pre_doit,
612 .doit = devlink_nl_port_new_doit,
613 .post_doit = devlink_nl_post_doit,
614 .policy = devlink_port_new_nl_policy,
615 .maxattr = DEVLINK_ATTR_PORT_PCI_SF_NUMBER,
616 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
619 .cmd = DEVLINK_CMD_PORT_DEL,
620 .validate = GENL_DONT_VALIDATE_STRICT,
621 .pre_doit = devlink_nl_pre_doit_port,
622 .doit = devlink_nl_port_del_doit,
623 .post_doit = devlink_nl_post_doit,
624 .policy = devlink_port_del_nl_policy,
625 .maxattr = DEVLINK_ATTR_PORT_INDEX,
626 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
629 .cmd = DEVLINK_CMD_PORT_SPLIT,
630 .validate = GENL_DONT_VALIDATE_STRICT,
631 .pre_doit = devlink_nl_pre_doit_port,
632 .doit = devlink_nl_port_split_doit,
633 .post_doit = devlink_nl_post_doit,
634 .policy = devlink_port_split_nl_policy,
635 .maxattr = DEVLINK_ATTR_PORT_SPLIT_COUNT,
636 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
639 .cmd = DEVLINK_CMD_PORT_UNSPLIT,
640 .validate = GENL_DONT_VALIDATE_STRICT,
641 .pre_doit = devlink_nl_pre_doit_port,
642 .doit = devlink_nl_port_unsplit_doit,
643 .post_doit = devlink_nl_post_doit,
644 .policy = devlink_port_unsplit_nl_policy,
645 .maxattr = DEVLINK_ATTR_PORT_INDEX,
646 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
649 .cmd = DEVLINK_CMD_SB_GET,
650 .validate = GENL_DONT_VALIDATE_STRICT,
651 .pre_doit = devlink_nl_pre_doit,
652 .doit = devlink_nl_sb_get_doit,
653 .post_doit = devlink_nl_post_doit,
654 .policy = devlink_sb_get_do_nl_policy,
655 .maxattr = DEVLINK_ATTR_SB_INDEX,
656 .flags = GENL_CMD_CAP_DO,
659 .cmd = DEVLINK_CMD_SB_GET,
660 .dumpit = devlink_nl_sb_get_dumpit,
661 .policy = devlink_sb_get_dump_nl_policy,
662 .maxattr = DEVLINK_ATTR_DEV_NAME,
663 .flags = GENL_CMD_CAP_DUMP,
666 .cmd = DEVLINK_CMD_SB_POOL_GET,
667 .validate = GENL_DONT_VALIDATE_STRICT,
668 .pre_doit = devlink_nl_pre_doit,
669 .doit = devlink_nl_sb_pool_get_doit,
670 .post_doit = devlink_nl_post_doit,
671 .policy = devlink_sb_pool_get_do_nl_policy,
672 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
673 .flags = GENL_CMD_CAP_DO,
676 .cmd = DEVLINK_CMD_SB_POOL_GET,
677 .dumpit = devlink_nl_sb_pool_get_dumpit,
678 .policy = devlink_sb_pool_get_dump_nl_policy,
679 .maxattr = DEVLINK_ATTR_DEV_NAME,
680 .flags = GENL_CMD_CAP_DUMP,
683 .cmd = DEVLINK_CMD_SB_POOL_SET,
684 .validate = GENL_DONT_VALIDATE_STRICT,
685 .pre_doit = devlink_nl_pre_doit,
686 .doit = devlink_nl_sb_pool_set_doit,
687 .post_doit = devlink_nl_post_doit,
688 .policy = devlink_sb_pool_set_nl_policy,
689 .maxattr = DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE,
690 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
693 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
694 .validate = GENL_DONT_VALIDATE_STRICT,
695 .pre_doit = devlink_nl_pre_doit_port,
696 .doit = devlink_nl_sb_port_pool_get_doit,
697 .post_doit = devlink_nl_post_doit,
698 .policy = devlink_sb_port_pool_get_do_nl_policy,
699 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
700 .flags = GENL_CMD_CAP_DO,
703 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
704 .dumpit = devlink_nl_sb_port_pool_get_dumpit,
705 .policy = devlink_sb_port_pool_get_dump_nl_policy,
706 .maxattr = DEVLINK_ATTR_DEV_NAME,
707 .flags = GENL_CMD_CAP_DUMP,
710 .cmd = DEVLINK_CMD_SB_PORT_POOL_SET,
711 .validate = GENL_DONT_VALIDATE_STRICT,
712 .pre_doit = devlink_nl_pre_doit_port,
713 .doit = devlink_nl_sb_port_pool_set_doit,
714 .post_doit = devlink_nl_post_doit,
715 .policy = devlink_sb_port_pool_set_nl_policy,
716 .maxattr = DEVLINK_ATTR_SB_THRESHOLD,
717 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
720 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
721 .validate = GENL_DONT_VALIDATE_STRICT,
722 .pre_doit = devlink_nl_pre_doit_port,
723 .doit = devlink_nl_sb_tc_pool_bind_get_doit,
724 .post_doit = devlink_nl_post_doit,
725 .policy = devlink_sb_tc_pool_bind_get_do_nl_policy,
726 .maxattr = DEVLINK_ATTR_SB_TC_INDEX,
727 .flags = GENL_CMD_CAP_DO,
730 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
731 .dumpit = devlink_nl_sb_tc_pool_bind_get_dumpit,
732 .policy = devlink_sb_tc_pool_bind_get_dump_nl_policy,
733 .maxattr = DEVLINK_ATTR_DEV_NAME,
734 .flags = GENL_CMD_CAP_DUMP,
737 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET,
738 .validate = GENL_DONT_VALIDATE_STRICT,
739 .pre_doit = devlink_nl_pre_doit_port,
740 .doit = devlink_nl_sb_tc_pool_bind_set_doit,
741 .post_doit = devlink_nl_post_doit,
742 .policy = devlink_sb_tc_pool_bind_set_nl_policy,
743 .maxattr = DEVLINK_ATTR_SB_TC_INDEX,
744 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
747 .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT,
748 .validate = GENL_DONT_VALIDATE_STRICT,
749 .pre_doit = devlink_nl_pre_doit,
750 .doit = devlink_nl_sb_occ_snapshot_doit,
751 .post_doit = devlink_nl_post_doit,
752 .policy = devlink_sb_occ_snapshot_nl_policy,
753 .maxattr = DEVLINK_ATTR_SB_INDEX,
754 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
757 .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR,
758 .validate = GENL_DONT_VALIDATE_STRICT,
759 .pre_doit = devlink_nl_pre_doit,
760 .doit = devlink_nl_sb_occ_max_clear_doit,
761 .post_doit = devlink_nl_post_doit,
762 .policy = devlink_sb_occ_max_clear_nl_policy,
763 .maxattr = DEVLINK_ATTR_SB_INDEX,
764 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
767 .cmd = DEVLINK_CMD_ESWITCH_GET,
768 .validate = GENL_DONT_VALIDATE_STRICT,
769 .pre_doit = devlink_nl_pre_doit,
770 .doit = devlink_nl_eswitch_get_doit,
771 .post_doit = devlink_nl_post_doit,
772 .policy = devlink_eswitch_get_nl_policy,
773 .maxattr = DEVLINK_ATTR_DEV_NAME,
774 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
777 .cmd = DEVLINK_CMD_ESWITCH_SET,
778 .validate = GENL_DONT_VALIDATE_STRICT,
779 .pre_doit = devlink_nl_pre_doit,
780 .doit = devlink_nl_eswitch_set_doit,
781 .post_doit = devlink_nl_post_doit,
782 .policy = devlink_eswitch_set_nl_policy,
783 .maxattr = DEVLINK_ATTR_ESWITCH_ENCAP_MODE,
784 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
787 .cmd = DEVLINK_CMD_DPIPE_TABLE_GET,
788 .validate = GENL_DONT_VALIDATE_STRICT,
789 .pre_doit = devlink_nl_pre_doit,
790 .doit = devlink_nl_dpipe_table_get_doit,
791 .post_doit = devlink_nl_post_doit,
792 .policy = devlink_dpipe_table_get_nl_policy,
793 .maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
794 .flags = GENL_CMD_CAP_DO,
797 .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET,
798 .validate = GENL_DONT_VALIDATE_STRICT,
799 .pre_doit = devlink_nl_pre_doit,
800 .doit = devlink_nl_dpipe_entries_get_doit,
801 .post_doit = devlink_nl_post_doit,
802 .policy = devlink_dpipe_entries_get_nl_policy,
803 .maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
804 .flags = GENL_CMD_CAP_DO,
807 .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET,
808 .validate = GENL_DONT_VALIDATE_STRICT,
809 .pre_doit = devlink_nl_pre_doit,
810 .doit = devlink_nl_dpipe_headers_get_doit,
811 .post_doit = devlink_nl_post_doit,
812 .policy = devlink_dpipe_headers_get_nl_policy,
813 .maxattr = DEVLINK_ATTR_DEV_NAME,
814 .flags = GENL_CMD_CAP_DO,
817 .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
818 .validate = GENL_DONT_VALIDATE_STRICT,
819 .pre_doit = devlink_nl_pre_doit,
820 .doit = devlink_nl_dpipe_table_counters_set_doit,
821 .post_doit = devlink_nl_post_doit,
822 .policy = devlink_dpipe_table_counters_set_nl_policy,
823 .maxattr = DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED,
824 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
827 .cmd = DEVLINK_CMD_RESOURCE_SET,
828 .validate = GENL_DONT_VALIDATE_STRICT,
829 .pre_doit = devlink_nl_pre_doit,
830 .doit = devlink_nl_resource_set_doit,
831 .post_doit = devlink_nl_post_doit,
832 .policy = devlink_resource_set_nl_policy,
833 .maxattr = DEVLINK_ATTR_RESOURCE_SIZE,
834 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
837 .cmd = DEVLINK_CMD_RESOURCE_DUMP,
838 .validate = GENL_DONT_VALIDATE_STRICT,
839 .pre_doit = devlink_nl_pre_doit,
840 .doit = devlink_nl_resource_dump_doit,
841 .post_doit = devlink_nl_post_doit,
842 .policy = devlink_resource_dump_nl_policy,
843 .maxattr = DEVLINK_ATTR_DEV_NAME,
844 .flags = GENL_CMD_CAP_DO,
847 .cmd = DEVLINK_CMD_RELOAD,
848 .validate = GENL_DONT_VALIDATE_STRICT,
849 .pre_doit = devlink_nl_pre_doit,
850 .doit = devlink_nl_reload_doit,
851 .post_doit = devlink_nl_post_doit,
852 .policy = devlink_reload_nl_policy,
853 .maxattr = DEVLINK_ATTR_RELOAD_LIMITS,
854 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
857 .cmd = DEVLINK_CMD_PARAM_GET,
858 .validate = GENL_DONT_VALIDATE_STRICT,
859 .pre_doit = devlink_nl_pre_doit,
860 .doit = devlink_nl_param_get_doit,
861 .post_doit = devlink_nl_post_doit,
862 .policy = devlink_param_get_do_nl_policy,
863 .maxattr = DEVLINK_ATTR_PARAM_NAME,
864 .flags = GENL_CMD_CAP_DO,
867 .cmd = DEVLINK_CMD_PARAM_GET,
868 .dumpit = devlink_nl_param_get_dumpit,
869 .policy = devlink_param_get_dump_nl_policy,
870 .maxattr = DEVLINK_ATTR_DEV_NAME,
871 .flags = GENL_CMD_CAP_DUMP,
874 .cmd = DEVLINK_CMD_PARAM_SET,
875 .validate = GENL_DONT_VALIDATE_STRICT,
876 .pre_doit = devlink_nl_pre_doit,
877 .doit = devlink_nl_param_set_doit,
878 .post_doit = devlink_nl_post_doit,
879 .policy = devlink_param_set_nl_policy,
880 .maxattr = DEVLINK_ATTR_PARAM_VALUE_CMODE,
881 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
884 .cmd = DEVLINK_CMD_REGION_GET,
885 .validate = GENL_DONT_VALIDATE_STRICT,
886 .pre_doit = devlink_nl_pre_doit_port_optional,
887 .doit = devlink_nl_region_get_doit,
888 .post_doit = devlink_nl_post_doit,
889 .policy = devlink_region_get_do_nl_policy,
890 .maxattr = DEVLINK_ATTR_REGION_NAME,
891 .flags = GENL_CMD_CAP_DO,
894 .cmd = DEVLINK_CMD_REGION_GET,
895 .dumpit = devlink_nl_region_get_dumpit,
896 .policy = devlink_region_get_dump_nl_policy,
897 .maxattr = DEVLINK_ATTR_DEV_NAME,
898 .flags = GENL_CMD_CAP_DUMP,
901 .cmd = DEVLINK_CMD_REGION_NEW,
902 .validate = GENL_DONT_VALIDATE_STRICT,
903 .pre_doit = devlink_nl_pre_doit_port_optional,
904 .doit = devlink_nl_region_new_doit,
905 .post_doit = devlink_nl_post_doit,
906 .policy = devlink_region_new_nl_policy,
907 .maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
908 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
911 .cmd = DEVLINK_CMD_REGION_DEL,
912 .validate = GENL_DONT_VALIDATE_STRICT,
913 .pre_doit = devlink_nl_pre_doit_port_optional,
914 .doit = devlink_nl_region_del_doit,
915 .post_doit = devlink_nl_post_doit,
916 .policy = devlink_region_del_nl_policy,
917 .maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
918 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
921 .cmd = DEVLINK_CMD_REGION_READ,
922 .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
923 .dumpit = devlink_nl_region_read_dumpit,
924 .policy = devlink_region_read_nl_policy,
925 .maxattr = DEVLINK_ATTR_REGION_DIRECT,
926 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
929 .cmd = DEVLINK_CMD_PORT_PARAM_GET,
930 .validate = GENL_DONT_VALIDATE_STRICT,
931 .pre_doit = devlink_nl_pre_doit_port,
932 .doit = devlink_nl_port_param_get_doit,
933 .post_doit = devlink_nl_post_doit,
934 .policy = devlink_port_param_get_nl_policy,
935 .maxattr = DEVLINK_ATTR_PORT_INDEX,
936 .flags = GENL_CMD_CAP_DO,
939 .cmd = DEVLINK_CMD_PORT_PARAM_GET,
940 .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
941 .dumpit = devlink_nl_port_param_get_dumpit,
942 .flags = GENL_CMD_CAP_DUMP,
945 .cmd = DEVLINK_CMD_PORT_PARAM_SET,
946 .validate = GENL_DONT_VALIDATE_STRICT,
947 .pre_doit = devlink_nl_pre_doit_port,
948 .doit = devlink_nl_port_param_set_doit,
949 .post_doit = devlink_nl_post_doit,
950 .policy = devlink_port_param_set_nl_policy,
951 .maxattr = DEVLINK_ATTR_PORT_INDEX,
952 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
955 .cmd = DEVLINK_CMD_INFO_GET,
956 .validate = GENL_DONT_VALIDATE_STRICT,
957 .pre_doit = devlink_nl_pre_doit,
958 .doit = devlink_nl_info_get_doit,
959 .post_doit = devlink_nl_post_doit,
960 .policy = devlink_info_get_nl_policy,
961 .maxattr = DEVLINK_ATTR_DEV_NAME,
962 .flags = GENL_CMD_CAP_DO,
965 .cmd = DEVLINK_CMD_INFO_GET,
966 .validate = GENL_DONT_VALIDATE_DUMP,
967 .dumpit = devlink_nl_info_get_dumpit,
968 .flags = GENL_CMD_CAP_DUMP,
971 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
972 .validate = GENL_DONT_VALIDATE_STRICT,
973 .pre_doit = devlink_nl_pre_doit_port_optional,
974 .doit = devlink_nl_health_reporter_get_doit,
975 .post_doit = devlink_nl_post_doit,
976 .policy = devlink_health_reporter_get_do_nl_policy,
977 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
978 .flags = GENL_CMD_CAP_DO,
981 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
982 .dumpit = devlink_nl_health_reporter_get_dumpit,
983 .policy = devlink_health_reporter_get_dump_nl_policy,
984 .maxattr = DEVLINK_ATTR_PORT_INDEX,
985 .flags = GENL_CMD_CAP_DUMP,
988 .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET,
989 .validate = GENL_DONT_VALIDATE_STRICT,
990 .pre_doit = devlink_nl_pre_doit_port_optional,
991 .doit = devlink_nl_health_reporter_set_doit,
992 .post_doit = devlink_nl_post_doit,
993 .policy = devlink_health_reporter_set_nl_policy,
994 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP,
995 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
998 .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
999 .validate = GENL_DONT_VALIDATE_STRICT,
1000 .pre_doit = devlink_nl_pre_doit_port_optional,
1001 .doit = devlink_nl_health_reporter_recover_doit,
1002 .post_doit = devlink_nl_post_doit,
1003 .policy = devlink_health_reporter_recover_nl_policy,
1004 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1005 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1008 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE,
1009 .validate = GENL_DONT_VALIDATE_STRICT,
1010 .pre_doit = devlink_nl_pre_doit_port_optional,
1011 .doit = devlink_nl_health_reporter_diagnose_doit,
1012 .post_doit = devlink_nl_post_doit,
1013 .policy = devlink_health_reporter_diagnose_nl_policy,
1014 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1015 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1018 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
1019 .validate = GENL_DONT_VALIDATE_DUMP_STRICT,
1020 .dumpit = devlink_nl_health_reporter_dump_get_dumpit,
1021 .policy = devlink_health_reporter_dump_get_nl_policy,
1022 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1023 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
1026 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
1027 .validate = GENL_DONT_VALIDATE_STRICT,
1028 .pre_doit = devlink_nl_pre_doit_port_optional,
1029 .doit = devlink_nl_health_reporter_dump_clear_doit,
1030 .post_doit = devlink_nl_post_doit,
1031 .policy = devlink_health_reporter_dump_clear_nl_policy,
1032 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1033 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1036 .cmd = DEVLINK_CMD_FLASH_UPDATE,
1037 .validate = GENL_DONT_VALIDATE_STRICT,
1038 .pre_doit = devlink_nl_pre_doit,
1039 .doit = devlink_nl_flash_update_doit,
1040 .post_doit = devlink_nl_post_doit,
1041 .policy = devlink_flash_update_nl_policy,
1042 .maxattr = DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK,
1043 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1046 .cmd = DEVLINK_CMD_TRAP_GET,
1047 .validate = GENL_DONT_VALIDATE_STRICT,
1048 .pre_doit = devlink_nl_pre_doit,
1049 .doit = devlink_nl_trap_get_doit,
1050 .post_doit = devlink_nl_post_doit,
1051 .policy = devlink_trap_get_do_nl_policy,
1052 .maxattr = DEVLINK_ATTR_TRAP_NAME,
1053 .flags = GENL_CMD_CAP_DO,
1056 .cmd = DEVLINK_CMD_TRAP_GET,
1057 .dumpit = devlink_nl_trap_get_dumpit,
1058 .policy = devlink_trap_get_dump_nl_policy,
1059 .maxattr = DEVLINK_ATTR_DEV_NAME,
1060 .flags = GENL_CMD_CAP_DUMP,
1063 .cmd = DEVLINK_CMD_TRAP_SET,
1064 .validate = GENL_DONT_VALIDATE_STRICT,
1065 .pre_doit = devlink_nl_pre_doit,
1066 .doit = devlink_nl_trap_set_doit,
1067 .post_doit = devlink_nl_post_doit,
1068 .policy = devlink_trap_set_nl_policy,
1069 .maxattr = DEVLINK_ATTR_TRAP_ACTION,
1070 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1073 .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
1074 .validate = GENL_DONT_VALIDATE_STRICT,
1075 .pre_doit = devlink_nl_pre_doit,
1076 .doit = devlink_nl_trap_group_get_doit,
1077 .post_doit = devlink_nl_post_doit,
1078 .policy = devlink_trap_group_get_do_nl_policy,
1079 .maxattr = DEVLINK_ATTR_TRAP_GROUP_NAME,
1080 .flags = GENL_CMD_CAP_DO,
1083 .cmd = DEVLINK_CMD_TRAP_GROUP_GET,
1084 .dumpit = devlink_nl_trap_group_get_dumpit,
1085 .policy = devlink_trap_group_get_dump_nl_policy,
1086 .maxattr = DEVLINK_ATTR_DEV_NAME,
1087 .flags = GENL_CMD_CAP_DUMP,
1090 .cmd = DEVLINK_CMD_TRAP_GROUP_SET,
1091 .validate = GENL_DONT_VALIDATE_STRICT,
1092 .pre_doit = devlink_nl_pre_doit,
1093 .doit = devlink_nl_trap_group_set_doit,
1094 .post_doit = devlink_nl_post_doit,
1095 .policy = devlink_trap_group_set_nl_policy,
1096 .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
1097 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1100 .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
1101 .validate = GENL_DONT_VALIDATE_STRICT,
1102 .pre_doit = devlink_nl_pre_doit,
1103 .doit = devlink_nl_trap_policer_get_doit,
1104 .post_doit = devlink_nl_post_doit,
1105 .policy = devlink_trap_policer_get_do_nl_policy,
1106 .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
1107 .flags = GENL_CMD_CAP_DO,
1110 .cmd = DEVLINK_CMD_TRAP_POLICER_GET,
1111 .dumpit = devlink_nl_trap_policer_get_dumpit,
1112 .policy = devlink_trap_policer_get_dump_nl_policy,
1113 .maxattr = DEVLINK_ATTR_DEV_NAME,
1114 .flags = GENL_CMD_CAP_DUMP,
1117 .cmd = DEVLINK_CMD_TRAP_POLICER_SET,
1118 .validate = GENL_DONT_VALIDATE_STRICT,
1119 .pre_doit = devlink_nl_pre_doit,
1120 .doit = devlink_nl_trap_policer_set_doit,
1121 .post_doit = devlink_nl_post_doit,
1122 .policy = devlink_trap_policer_set_nl_policy,
1123 .maxattr = DEVLINK_ATTR_TRAP_POLICER_BURST,
1124 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1127 .cmd = DEVLINK_CMD_HEALTH_REPORTER_TEST,
1128 .validate = GENL_DONT_VALIDATE_STRICT,
1129 .pre_doit = devlink_nl_pre_doit_port_optional,
1130 .doit = devlink_nl_health_reporter_test_doit,
1131 .post_doit = devlink_nl_post_doit,
1132 .policy = devlink_health_reporter_test_nl_policy,
1133 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1134 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1137 .cmd = DEVLINK_CMD_RATE_GET,
1138 .validate = GENL_DONT_VALIDATE_STRICT,
1139 .pre_doit = devlink_nl_pre_doit,
1140 .doit = devlink_nl_rate_get_doit,
1141 .post_doit = devlink_nl_post_doit,
1142 .policy = devlink_rate_get_do_nl_policy,
1143 .maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
1144 .flags = GENL_CMD_CAP_DO,
1147 .cmd = DEVLINK_CMD_RATE_GET,
1148 .dumpit = devlink_nl_rate_get_dumpit,
1149 .policy = devlink_rate_get_dump_nl_policy,
1150 .maxattr = DEVLINK_ATTR_DEV_NAME,
1151 .flags = GENL_CMD_CAP_DUMP,
1154 .cmd = DEVLINK_CMD_RATE_SET,
1155 .validate = GENL_DONT_VALIDATE_STRICT,
1156 .pre_doit = devlink_nl_pre_doit,
1157 .doit = devlink_nl_rate_set_doit,
1158 .post_doit = devlink_nl_post_doit,
1159 .policy = devlink_rate_set_nl_policy,
1160 .maxattr = DEVLINK_ATTR_RATE_TX_WEIGHT,
1161 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1164 .cmd = DEVLINK_CMD_RATE_NEW,
1165 .validate = GENL_DONT_VALIDATE_STRICT,
1166 .pre_doit = devlink_nl_pre_doit,
1167 .doit = devlink_nl_rate_new_doit,
1168 .post_doit = devlink_nl_post_doit,
1169 .policy = devlink_rate_new_nl_policy,
1170 .maxattr = DEVLINK_ATTR_RATE_TX_WEIGHT,
1171 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1174 .cmd = DEVLINK_CMD_RATE_DEL,
1175 .validate = GENL_DONT_VALIDATE_STRICT,
1176 .pre_doit = devlink_nl_pre_doit,
1177 .doit = devlink_nl_rate_del_doit,
1178 .post_doit = devlink_nl_post_doit,
1179 .policy = devlink_rate_del_nl_policy,
1180 .maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
1181 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1184 .cmd = DEVLINK_CMD_LINECARD_GET,
1185 .validate = GENL_DONT_VALIDATE_STRICT,
1186 .pre_doit = devlink_nl_pre_doit,
1187 .doit = devlink_nl_linecard_get_doit,
1188 .post_doit = devlink_nl_post_doit,
1189 .policy = devlink_linecard_get_do_nl_policy,
1190 .maxattr = DEVLINK_ATTR_LINECARD_INDEX,
1191 .flags = GENL_CMD_CAP_DO,
1194 .cmd = DEVLINK_CMD_LINECARD_GET,
1195 .dumpit = devlink_nl_linecard_get_dumpit,
1196 .policy = devlink_linecard_get_dump_nl_policy,
1197 .maxattr = DEVLINK_ATTR_DEV_NAME,
1198 .flags = GENL_CMD_CAP_DUMP,
1201 .cmd = DEVLINK_CMD_LINECARD_SET,
1202 .validate = GENL_DONT_VALIDATE_STRICT,
1203 .pre_doit = devlink_nl_pre_doit,
1204 .doit = devlink_nl_linecard_set_doit,
1205 .post_doit = devlink_nl_post_doit,
1206 .policy = devlink_linecard_set_nl_policy,
1207 .maxattr = DEVLINK_ATTR_LINECARD_TYPE,
1208 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1211 .cmd = DEVLINK_CMD_SELFTESTS_GET,
1212 .validate = GENL_DONT_VALIDATE_STRICT,
1213 .pre_doit = devlink_nl_pre_doit,
1214 .doit = devlink_nl_selftests_get_doit,
1215 .post_doit = devlink_nl_post_doit,
1216 .policy = devlink_selftests_get_nl_policy,
1217 .maxattr = DEVLINK_ATTR_DEV_NAME,
1218 .flags = GENL_CMD_CAP_DO,
1221 .cmd = DEVLINK_CMD_SELFTESTS_GET,
1222 .validate = GENL_DONT_VALIDATE_DUMP,
1223 .dumpit = devlink_nl_selftests_get_dumpit,
1224 .flags = GENL_CMD_CAP_DUMP,
1227 .cmd = DEVLINK_CMD_SELFTESTS_RUN,
1228 .validate = GENL_DONT_VALIDATE_STRICT,
1229 .pre_doit = devlink_nl_pre_doit,
1230 .doit = devlink_nl_selftests_run_doit,
1231 .post_doit = devlink_nl_post_doit,
1232 .policy = devlink_selftests_run_nl_policy,
1233 .maxattr = DEVLINK_ATTR_SELFTESTS,
1234 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,