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