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