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