Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/devlink/netlink_gen.c
29267 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_BURST_PERIOD + 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
[DEVLINK_ATTR_HEALTH_REPORTER_BURST_PERIOD] = { .type = NLA_U64, },
401
};
402
403
/* DEVLINK_CMD_HEALTH_REPORTER_RECOVER - do */
404
static const struct nla_policy devlink_health_reporter_recover_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
405
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
406
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
407
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
408
[DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
409
};
410
411
/* DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE - do */
412
static const struct nla_policy devlink_health_reporter_diagnose_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
413
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
414
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
415
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
416
[DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
417
};
418
419
/* DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET - dump */
420
static const struct nla_policy devlink_health_reporter_dump_get_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
421
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
422
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
423
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
424
[DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
425
};
426
427
/* DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR - do */
428
static const struct nla_policy devlink_health_reporter_dump_clear_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
429
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
430
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
431
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
432
[DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
433
};
434
435
/* DEVLINK_CMD_FLASH_UPDATE - do */
436
static const struct nla_policy devlink_flash_update_nl_policy[DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK + 1] = {
437
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
438
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
439
[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME] = { .type = NLA_NUL_STRING, },
440
[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT] = { .type = NLA_NUL_STRING, },
441
[DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK] = NLA_POLICY_BITFIELD32(3),
442
};
443
444
/* DEVLINK_CMD_TRAP_GET - do */
445
static const struct nla_policy devlink_trap_get_do_nl_policy[DEVLINK_ATTR_TRAP_NAME + 1] = {
446
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
447
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
448
[DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, },
449
};
450
451
/* DEVLINK_CMD_TRAP_GET - dump */
452
static const struct nla_policy devlink_trap_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
453
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
454
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
455
};
456
457
/* DEVLINK_CMD_TRAP_SET - do */
458
static const struct nla_policy devlink_trap_set_nl_policy[DEVLINK_ATTR_TRAP_ACTION + 1] = {
459
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
460
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
461
[DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, },
462
[DEVLINK_ATTR_TRAP_ACTION] = NLA_POLICY_MAX(NLA_U8, 2),
463
};
464
465
/* DEVLINK_CMD_TRAP_GROUP_GET - do */
466
static const struct nla_policy devlink_trap_group_get_do_nl_policy[DEVLINK_ATTR_TRAP_GROUP_NAME + 1] = {
467
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
468
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
469
[DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, },
470
};
471
472
/* DEVLINK_CMD_TRAP_GROUP_GET - dump */
473
static const struct nla_policy devlink_trap_group_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
474
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
475
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
476
};
477
478
/* DEVLINK_CMD_TRAP_GROUP_SET - do */
479
static const struct nla_policy devlink_trap_group_set_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = {
480
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
481
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
482
[DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, },
483
[DEVLINK_ATTR_TRAP_ACTION] = NLA_POLICY_MAX(NLA_U8, 2),
484
[DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
485
};
486
487
/* DEVLINK_CMD_TRAP_POLICER_GET - do */
488
static const struct nla_policy devlink_trap_policer_get_do_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = {
489
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
490
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
491
[DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
492
};
493
494
/* DEVLINK_CMD_TRAP_POLICER_GET - dump */
495
static const struct nla_policy devlink_trap_policer_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
496
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
497
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
498
};
499
500
/* DEVLINK_CMD_TRAP_POLICER_SET - do */
501
static const struct nla_policy devlink_trap_policer_set_nl_policy[DEVLINK_ATTR_TRAP_POLICER_BURST + 1] = {
502
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
503
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
504
[DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, },
505
[DEVLINK_ATTR_TRAP_POLICER_RATE] = { .type = NLA_U64, },
506
[DEVLINK_ATTR_TRAP_POLICER_BURST] = { .type = NLA_U64, },
507
};
508
509
/* DEVLINK_CMD_HEALTH_REPORTER_TEST - do */
510
static const struct nla_policy devlink_health_reporter_test_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = {
511
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
512
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
513
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
514
[DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, },
515
};
516
517
/* DEVLINK_CMD_RATE_GET - do */
518
static const struct nla_policy devlink_rate_get_do_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = {
519
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
520
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
521
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
522
[DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
523
};
524
525
/* DEVLINK_CMD_RATE_GET - dump */
526
static const struct nla_policy devlink_rate_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
527
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
528
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
529
};
530
531
/* DEVLINK_CMD_RATE_SET - do */
532
static const struct nla_policy devlink_rate_set_nl_policy[DEVLINK_ATTR_RATE_TC_BWS + 1] = {
533
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
534
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
535
[DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
536
[DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, },
537
[DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, },
538
[DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, },
539
[DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, },
540
[DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, },
541
[DEVLINK_ATTR_RATE_TC_BWS] = NLA_POLICY_NESTED(devlink_dl_rate_tc_bws_nl_policy),
542
};
543
544
/* DEVLINK_CMD_RATE_NEW - do */
545
static const struct nla_policy devlink_rate_new_nl_policy[DEVLINK_ATTR_RATE_TC_BWS + 1] = {
546
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
547
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
548
[DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
549
[DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, },
550
[DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, },
551
[DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, },
552
[DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, },
553
[DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, },
554
[DEVLINK_ATTR_RATE_TC_BWS] = NLA_POLICY_NESTED(devlink_dl_rate_tc_bws_nl_policy),
555
};
556
557
/* DEVLINK_CMD_RATE_DEL - do */
558
static const struct nla_policy devlink_rate_del_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = {
559
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
560
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
561
[DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, },
562
};
563
564
/* DEVLINK_CMD_LINECARD_GET - do */
565
static const struct nla_policy devlink_linecard_get_do_nl_policy[DEVLINK_ATTR_LINECARD_INDEX + 1] = {
566
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
567
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
568
[DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, },
569
};
570
571
/* DEVLINK_CMD_LINECARD_GET - dump */
572
static const struct nla_policy devlink_linecard_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
573
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
574
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
575
};
576
577
/* DEVLINK_CMD_LINECARD_SET - do */
578
static const struct nla_policy devlink_linecard_set_nl_policy[DEVLINK_ATTR_LINECARD_TYPE + 1] = {
579
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
580
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
581
[DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, },
582
[DEVLINK_ATTR_LINECARD_TYPE] = { .type = NLA_NUL_STRING, },
583
};
584
585
/* DEVLINK_CMD_SELFTESTS_GET - do */
586
static const struct nla_policy devlink_selftests_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
587
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
588
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
589
};
590
591
/* DEVLINK_CMD_SELFTESTS_RUN - do */
592
static const struct nla_policy devlink_selftests_run_nl_policy[DEVLINK_ATTR_SELFTESTS + 1] = {
593
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
594
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
595
[DEVLINK_ATTR_SELFTESTS] = NLA_POLICY_NESTED(devlink_dl_selftest_id_nl_policy),
596
};
597
598
/* DEVLINK_CMD_NOTIFY_FILTER_SET - do */
599
static const struct nla_policy devlink_notify_filter_set_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
600
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
601
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
602
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
603
};
604
605
/* Ops table for devlink */
606
const struct genl_split_ops devlink_nl_ops[74] = {
607
{
608
.cmd = DEVLINK_CMD_GET,
609
.validate = GENL_DONT_VALIDATE_STRICT,
610
.pre_doit = devlink_nl_pre_doit,
611
.doit = devlink_nl_get_doit,
612
.post_doit = devlink_nl_post_doit,
613
.policy = devlink_get_nl_policy,
614
.maxattr = DEVLINK_ATTR_DEV_NAME,
615
.flags = GENL_CMD_CAP_DO,
616
},
617
{
618
.cmd = DEVLINK_CMD_GET,
619
.validate = GENL_DONT_VALIDATE_DUMP,
620
.dumpit = devlink_nl_get_dumpit,
621
.flags = GENL_CMD_CAP_DUMP,
622
},
623
{
624
.cmd = DEVLINK_CMD_PORT_GET,
625
.validate = GENL_DONT_VALIDATE_STRICT,
626
.pre_doit = devlink_nl_pre_doit_port,
627
.doit = devlink_nl_port_get_doit,
628
.post_doit = devlink_nl_post_doit,
629
.policy = devlink_port_get_do_nl_policy,
630
.maxattr = DEVLINK_ATTR_PORT_INDEX,
631
.flags = GENL_CMD_CAP_DO,
632
},
633
{
634
.cmd = DEVLINK_CMD_PORT_GET,
635
.dumpit = devlink_nl_port_get_dumpit,
636
.policy = devlink_port_get_dump_nl_policy,
637
.maxattr = DEVLINK_ATTR_DEV_NAME,
638
.flags = GENL_CMD_CAP_DUMP,
639
},
640
{
641
.cmd = DEVLINK_CMD_PORT_SET,
642
.validate = GENL_DONT_VALIDATE_STRICT,
643
.pre_doit = devlink_nl_pre_doit_port,
644
.doit = devlink_nl_port_set_doit,
645
.post_doit = devlink_nl_post_doit,
646
.policy = devlink_port_set_nl_policy,
647
.maxattr = DEVLINK_ATTR_PORT_FUNCTION,
648
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
649
},
650
{
651
.cmd = DEVLINK_CMD_PORT_NEW,
652
.validate = GENL_DONT_VALIDATE_STRICT,
653
.pre_doit = devlink_nl_pre_doit,
654
.doit = devlink_nl_port_new_doit,
655
.post_doit = devlink_nl_post_doit,
656
.policy = devlink_port_new_nl_policy,
657
.maxattr = DEVLINK_ATTR_PORT_PCI_SF_NUMBER,
658
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
659
},
660
{
661
.cmd = DEVLINK_CMD_PORT_DEL,
662
.validate = GENL_DONT_VALIDATE_STRICT,
663
.pre_doit = devlink_nl_pre_doit_port,
664
.doit = devlink_nl_port_del_doit,
665
.post_doit = devlink_nl_post_doit,
666
.policy = devlink_port_del_nl_policy,
667
.maxattr = DEVLINK_ATTR_PORT_INDEX,
668
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
669
},
670
{
671
.cmd = DEVLINK_CMD_PORT_SPLIT,
672
.validate = GENL_DONT_VALIDATE_STRICT,
673
.pre_doit = devlink_nl_pre_doit_port,
674
.doit = devlink_nl_port_split_doit,
675
.post_doit = devlink_nl_post_doit,
676
.policy = devlink_port_split_nl_policy,
677
.maxattr = DEVLINK_ATTR_PORT_SPLIT_COUNT,
678
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
679
},
680
{
681
.cmd = DEVLINK_CMD_PORT_UNSPLIT,
682
.validate = GENL_DONT_VALIDATE_STRICT,
683
.pre_doit = devlink_nl_pre_doit_port,
684
.doit = devlink_nl_port_unsplit_doit,
685
.post_doit = devlink_nl_post_doit,
686
.policy = devlink_port_unsplit_nl_policy,
687
.maxattr = DEVLINK_ATTR_PORT_INDEX,
688
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
689
},
690
{
691
.cmd = DEVLINK_CMD_SB_GET,
692
.validate = GENL_DONT_VALIDATE_STRICT,
693
.pre_doit = devlink_nl_pre_doit,
694
.doit = devlink_nl_sb_get_doit,
695
.post_doit = devlink_nl_post_doit,
696
.policy = devlink_sb_get_do_nl_policy,
697
.maxattr = DEVLINK_ATTR_SB_INDEX,
698
.flags = GENL_CMD_CAP_DO,
699
},
700
{
701
.cmd = DEVLINK_CMD_SB_GET,
702
.dumpit = devlink_nl_sb_get_dumpit,
703
.policy = devlink_sb_get_dump_nl_policy,
704
.maxattr = DEVLINK_ATTR_DEV_NAME,
705
.flags = GENL_CMD_CAP_DUMP,
706
},
707
{
708
.cmd = DEVLINK_CMD_SB_POOL_GET,
709
.validate = GENL_DONT_VALIDATE_STRICT,
710
.pre_doit = devlink_nl_pre_doit,
711
.doit = devlink_nl_sb_pool_get_doit,
712
.post_doit = devlink_nl_post_doit,
713
.policy = devlink_sb_pool_get_do_nl_policy,
714
.maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
715
.flags = GENL_CMD_CAP_DO,
716
},
717
{
718
.cmd = DEVLINK_CMD_SB_POOL_GET,
719
.dumpit = devlink_nl_sb_pool_get_dumpit,
720
.policy = devlink_sb_pool_get_dump_nl_policy,
721
.maxattr = DEVLINK_ATTR_DEV_NAME,
722
.flags = GENL_CMD_CAP_DUMP,
723
},
724
{
725
.cmd = DEVLINK_CMD_SB_POOL_SET,
726
.validate = GENL_DONT_VALIDATE_STRICT,
727
.pre_doit = devlink_nl_pre_doit,
728
.doit = devlink_nl_sb_pool_set_doit,
729
.post_doit = devlink_nl_post_doit,
730
.policy = devlink_sb_pool_set_nl_policy,
731
.maxattr = DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE,
732
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
733
},
734
{
735
.cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
736
.validate = GENL_DONT_VALIDATE_STRICT,
737
.pre_doit = devlink_nl_pre_doit_port,
738
.doit = devlink_nl_sb_port_pool_get_doit,
739
.post_doit = devlink_nl_post_doit,
740
.policy = devlink_sb_port_pool_get_do_nl_policy,
741
.maxattr = DEVLINK_ATTR_SB_POOL_INDEX,
742
.flags = GENL_CMD_CAP_DO,
743
},
744
{
745
.cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
746
.dumpit = devlink_nl_sb_port_pool_get_dumpit,
747
.policy = devlink_sb_port_pool_get_dump_nl_policy,
748
.maxattr = DEVLINK_ATTR_DEV_NAME,
749
.flags = GENL_CMD_CAP_DUMP,
750
},
751
{
752
.cmd = DEVLINK_CMD_SB_PORT_POOL_SET,
753
.validate = GENL_DONT_VALIDATE_STRICT,
754
.pre_doit = devlink_nl_pre_doit_port,
755
.doit = devlink_nl_sb_port_pool_set_doit,
756
.post_doit = devlink_nl_post_doit,
757
.policy = devlink_sb_port_pool_set_nl_policy,
758
.maxattr = DEVLINK_ATTR_SB_THRESHOLD,
759
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
760
},
761
{
762
.cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
763
.validate = GENL_DONT_VALIDATE_STRICT,
764
.pre_doit = devlink_nl_pre_doit_port,
765
.doit = devlink_nl_sb_tc_pool_bind_get_doit,
766
.post_doit = devlink_nl_post_doit,
767
.policy = devlink_sb_tc_pool_bind_get_do_nl_policy,
768
.maxattr = DEVLINK_ATTR_SB_TC_INDEX,
769
.flags = GENL_CMD_CAP_DO,
770
},
771
{
772
.cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
773
.dumpit = devlink_nl_sb_tc_pool_bind_get_dumpit,
774
.policy = devlink_sb_tc_pool_bind_get_dump_nl_policy,
775
.maxattr = DEVLINK_ATTR_DEV_NAME,
776
.flags = GENL_CMD_CAP_DUMP,
777
},
778
{
779
.cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET,
780
.validate = GENL_DONT_VALIDATE_STRICT,
781
.pre_doit = devlink_nl_pre_doit_port,
782
.doit = devlink_nl_sb_tc_pool_bind_set_doit,
783
.post_doit = devlink_nl_post_doit,
784
.policy = devlink_sb_tc_pool_bind_set_nl_policy,
785
.maxattr = DEVLINK_ATTR_SB_TC_INDEX,
786
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
787
},
788
{
789
.cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT,
790
.validate = GENL_DONT_VALIDATE_STRICT,
791
.pre_doit = devlink_nl_pre_doit,
792
.doit = devlink_nl_sb_occ_snapshot_doit,
793
.post_doit = devlink_nl_post_doit,
794
.policy = devlink_sb_occ_snapshot_nl_policy,
795
.maxattr = DEVLINK_ATTR_SB_INDEX,
796
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
797
},
798
{
799
.cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR,
800
.validate = GENL_DONT_VALIDATE_STRICT,
801
.pre_doit = devlink_nl_pre_doit,
802
.doit = devlink_nl_sb_occ_max_clear_doit,
803
.post_doit = devlink_nl_post_doit,
804
.policy = devlink_sb_occ_max_clear_nl_policy,
805
.maxattr = DEVLINK_ATTR_SB_INDEX,
806
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
807
},
808
{
809
.cmd = DEVLINK_CMD_ESWITCH_GET,
810
.validate = GENL_DONT_VALIDATE_STRICT,
811
.pre_doit = devlink_nl_pre_doit,
812
.doit = devlink_nl_eswitch_get_doit,
813
.post_doit = devlink_nl_post_doit,
814
.policy = devlink_eswitch_get_nl_policy,
815
.maxattr = DEVLINK_ATTR_DEV_NAME,
816
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
817
},
818
{
819
.cmd = DEVLINK_CMD_ESWITCH_SET,
820
.validate = GENL_DONT_VALIDATE_STRICT,
821
.pre_doit = devlink_nl_pre_doit,
822
.doit = devlink_nl_eswitch_set_doit,
823
.post_doit = devlink_nl_post_doit,
824
.policy = devlink_eswitch_set_nl_policy,
825
.maxattr = DEVLINK_ATTR_ESWITCH_ENCAP_MODE,
826
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
827
},
828
{
829
.cmd = DEVLINK_CMD_DPIPE_TABLE_GET,
830
.validate = GENL_DONT_VALIDATE_STRICT,
831
.pre_doit = devlink_nl_pre_doit,
832
.doit = devlink_nl_dpipe_table_get_doit,
833
.post_doit = devlink_nl_post_doit,
834
.policy = devlink_dpipe_table_get_nl_policy,
835
.maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
836
.flags = GENL_CMD_CAP_DO,
837
},
838
{
839
.cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET,
840
.validate = GENL_DONT_VALIDATE_STRICT,
841
.pre_doit = devlink_nl_pre_doit,
842
.doit = devlink_nl_dpipe_entries_get_doit,
843
.post_doit = devlink_nl_post_doit,
844
.policy = devlink_dpipe_entries_get_nl_policy,
845
.maxattr = DEVLINK_ATTR_DPIPE_TABLE_NAME,
846
.flags = GENL_CMD_CAP_DO,
847
},
848
{
849
.cmd = DEVLINK_CMD_DPIPE_HEADERS_GET,
850
.validate = GENL_DONT_VALIDATE_STRICT,
851
.pre_doit = devlink_nl_pre_doit,
852
.doit = devlink_nl_dpipe_headers_get_doit,
853
.post_doit = devlink_nl_post_doit,
854
.policy = devlink_dpipe_headers_get_nl_policy,
855
.maxattr = DEVLINK_ATTR_DEV_NAME,
856
.flags = GENL_CMD_CAP_DO,
857
},
858
{
859
.cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
860
.validate = GENL_DONT_VALIDATE_STRICT,
861
.pre_doit = devlink_nl_pre_doit,
862
.doit = devlink_nl_dpipe_table_counters_set_doit,
863
.post_doit = devlink_nl_post_doit,
864
.policy = devlink_dpipe_table_counters_set_nl_policy,
865
.maxattr = DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED,
866
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
867
},
868
{
869
.cmd = DEVLINK_CMD_RESOURCE_SET,
870
.validate = GENL_DONT_VALIDATE_STRICT,
871
.pre_doit = devlink_nl_pre_doit,
872
.doit = devlink_nl_resource_set_doit,
873
.post_doit = devlink_nl_post_doit,
874
.policy = devlink_resource_set_nl_policy,
875
.maxattr = DEVLINK_ATTR_RESOURCE_SIZE,
876
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
877
},
878
{
879
.cmd = DEVLINK_CMD_RESOURCE_DUMP,
880
.validate = GENL_DONT_VALIDATE_STRICT,
881
.pre_doit = devlink_nl_pre_doit,
882
.doit = devlink_nl_resource_dump_doit,
883
.post_doit = devlink_nl_post_doit,
884
.policy = devlink_resource_dump_nl_policy,
885
.maxattr = DEVLINK_ATTR_DEV_NAME,
886
.flags = GENL_CMD_CAP_DO,
887
},
888
{
889
.cmd = DEVLINK_CMD_RELOAD,
890
.validate = GENL_DONT_VALIDATE_STRICT,
891
.pre_doit = devlink_nl_pre_doit_dev_lock,
892
.doit = devlink_nl_reload_doit,
893
.post_doit = devlink_nl_post_doit_dev_lock,
894
.policy = devlink_reload_nl_policy,
895
.maxattr = DEVLINK_ATTR_RELOAD_LIMITS,
896
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
897
},
898
{
899
.cmd = DEVLINK_CMD_PARAM_GET,
900
.validate = GENL_DONT_VALIDATE_STRICT,
901
.pre_doit = devlink_nl_pre_doit,
902
.doit = devlink_nl_param_get_doit,
903
.post_doit = devlink_nl_post_doit,
904
.policy = devlink_param_get_do_nl_policy,
905
.maxattr = DEVLINK_ATTR_PARAM_NAME,
906
.flags = GENL_CMD_CAP_DO,
907
},
908
{
909
.cmd = DEVLINK_CMD_PARAM_GET,
910
.dumpit = devlink_nl_param_get_dumpit,
911
.policy = devlink_param_get_dump_nl_policy,
912
.maxattr = DEVLINK_ATTR_DEV_NAME,
913
.flags = GENL_CMD_CAP_DUMP,
914
},
915
{
916
.cmd = DEVLINK_CMD_PARAM_SET,
917
.validate = GENL_DONT_VALIDATE_STRICT,
918
.pre_doit = devlink_nl_pre_doit,
919
.doit = devlink_nl_param_set_doit,
920
.post_doit = devlink_nl_post_doit,
921
.policy = devlink_param_set_nl_policy,
922
.maxattr = DEVLINK_ATTR_PARAM_VALUE_CMODE,
923
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
924
},
925
{
926
.cmd = DEVLINK_CMD_REGION_GET,
927
.validate = GENL_DONT_VALIDATE_STRICT,
928
.pre_doit = devlink_nl_pre_doit_port_optional,
929
.doit = devlink_nl_region_get_doit,
930
.post_doit = devlink_nl_post_doit,
931
.policy = devlink_region_get_do_nl_policy,
932
.maxattr = DEVLINK_ATTR_REGION_NAME,
933
.flags = GENL_CMD_CAP_DO,
934
},
935
{
936
.cmd = DEVLINK_CMD_REGION_GET,
937
.dumpit = devlink_nl_region_get_dumpit,
938
.policy = devlink_region_get_dump_nl_policy,
939
.maxattr = DEVLINK_ATTR_DEV_NAME,
940
.flags = GENL_CMD_CAP_DUMP,
941
},
942
{
943
.cmd = DEVLINK_CMD_REGION_NEW,
944
.validate = GENL_DONT_VALIDATE_STRICT,
945
.pre_doit = devlink_nl_pre_doit_port_optional,
946
.doit = devlink_nl_region_new_doit,
947
.post_doit = devlink_nl_post_doit,
948
.policy = devlink_region_new_nl_policy,
949
.maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
950
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
951
},
952
{
953
.cmd = DEVLINK_CMD_REGION_DEL,
954
.validate = GENL_DONT_VALIDATE_STRICT,
955
.pre_doit = devlink_nl_pre_doit_port_optional,
956
.doit = devlink_nl_region_del_doit,
957
.post_doit = devlink_nl_post_doit,
958
.policy = devlink_region_del_nl_policy,
959
.maxattr = DEVLINK_ATTR_REGION_SNAPSHOT_ID,
960
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
961
},
962
{
963
.cmd = DEVLINK_CMD_REGION_READ,
964
.validate = GENL_DONT_VALIDATE_DUMP_STRICT,
965
.dumpit = devlink_nl_region_read_dumpit,
966
.policy = devlink_region_read_nl_policy,
967
.maxattr = DEVLINK_ATTR_REGION_DIRECT,
968
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
969
},
970
{
971
.cmd = DEVLINK_CMD_PORT_PARAM_GET,
972
.validate = GENL_DONT_VALIDATE_STRICT,
973
.pre_doit = devlink_nl_pre_doit_port,
974
.doit = devlink_nl_port_param_get_doit,
975
.post_doit = devlink_nl_post_doit,
976
.policy = devlink_port_param_get_nl_policy,
977
.maxattr = DEVLINK_ATTR_PORT_INDEX,
978
.flags = GENL_CMD_CAP_DO,
979
},
980
{
981
.cmd = DEVLINK_CMD_PORT_PARAM_GET,
982
.validate = GENL_DONT_VALIDATE_DUMP_STRICT,
983
.dumpit = devlink_nl_port_param_get_dumpit,
984
.flags = GENL_CMD_CAP_DUMP,
985
},
986
{
987
.cmd = DEVLINK_CMD_PORT_PARAM_SET,
988
.validate = GENL_DONT_VALIDATE_STRICT,
989
.pre_doit = devlink_nl_pre_doit_port,
990
.doit = devlink_nl_port_param_set_doit,
991
.post_doit = devlink_nl_post_doit,
992
.policy = devlink_port_param_set_nl_policy,
993
.maxattr = DEVLINK_ATTR_PORT_INDEX,
994
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
995
},
996
{
997
.cmd = DEVLINK_CMD_INFO_GET,
998
.validate = GENL_DONT_VALIDATE_STRICT,
999
.pre_doit = devlink_nl_pre_doit,
1000
.doit = devlink_nl_info_get_doit,
1001
.post_doit = devlink_nl_post_doit,
1002
.policy = devlink_info_get_nl_policy,
1003
.maxattr = DEVLINK_ATTR_DEV_NAME,
1004
.flags = GENL_CMD_CAP_DO,
1005
},
1006
{
1007
.cmd = DEVLINK_CMD_INFO_GET,
1008
.validate = GENL_DONT_VALIDATE_DUMP,
1009
.dumpit = devlink_nl_info_get_dumpit,
1010
.flags = GENL_CMD_CAP_DUMP,
1011
},
1012
{
1013
.cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
1014
.validate = GENL_DONT_VALIDATE_STRICT,
1015
.pre_doit = devlink_nl_pre_doit_port_optional,
1016
.doit = devlink_nl_health_reporter_get_doit,
1017
.post_doit = devlink_nl_post_doit,
1018
.policy = devlink_health_reporter_get_do_nl_policy,
1019
.maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1020
.flags = GENL_CMD_CAP_DO,
1021
},
1022
{
1023
.cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
1024
.dumpit = devlink_nl_health_reporter_get_dumpit,
1025
.policy = devlink_health_reporter_get_dump_nl_policy,
1026
.maxattr = DEVLINK_ATTR_PORT_INDEX,
1027
.flags = GENL_CMD_CAP_DUMP,
1028
},
1029
{
1030
.cmd = DEVLINK_CMD_HEALTH_REPORTER_SET,
1031
.validate = GENL_DONT_VALIDATE_STRICT,
1032
.pre_doit = devlink_nl_pre_doit_port_optional,
1033
.doit = devlink_nl_health_reporter_set_doit,
1034
.post_doit = devlink_nl_post_doit,
1035
.policy = devlink_health_reporter_set_nl_policy,
1036
.maxattr = DEVLINK_ATTR_HEALTH_REPORTER_BURST_PERIOD,
1037
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1038
},
1039
{
1040
.cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
1041
.validate = GENL_DONT_VALIDATE_STRICT,
1042
.pre_doit = devlink_nl_pre_doit_port_optional,
1043
.doit = devlink_nl_health_reporter_recover_doit,
1044
.post_doit = devlink_nl_post_doit,
1045
.policy = devlink_health_reporter_recover_nl_policy,
1046
.maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1047
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1048
},
1049
{
1050
.cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE,
1051
.validate = GENL_DONT_VALIDATE_STRICT,
1052
.pre_doit = devlink_nl_pre_doit_port_optional,
1053
.doit = devlink_nl_health_reporter_diagnose_doit,
1054
.post_doit = devlink_nl_post_doit,
1055
.policy = devlink_health_reporter_diagnose_nl_policy,
1056
.maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1057
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1058
},
1059
{
1060
.cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
1061
.validate = GENL_DONT_VALIDATE_DUMP_STRICT,
1062
.dumpit = devlink_nl_health_reporter_dump_get_dumpit,
1063
.policy = devlink_health_reporter_dump_get_nl_policy,
1064
.maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1065
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
1066
},
1067
{
1068
.cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
1069
.validate = GENL_DONT_VALIDATE_STRICT,
1070
.pre_doit = devlink_nl_pre_doit_port_optional,
1071
.doit = devlink_nl_health_reporter_dump_clear_doit,
1072
.post_doit = devlink_nl_post_doit,
1073
.policy = devlink_health_reporter_dump_clear_nl_policy,
1074
.maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1075
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1076
},
1077
{
1078
.cmd = DEVLINK_CMD_FLASH_UPDATE,
1079
.validate = GENL_DONT_VALIDATE_STRICT,
1080
.pre_doit = devlink_nl_pre_doit,
1081
.doit = devlink_nl_flash_update_doit,
1082
.post_doit = devlink_nl_post_doit,
1083
.policy = devlink_flash_update_nl_policy,
1084
.maxattr = DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK,
1085
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1086
},
1087
{
1088
.cmd = DEVLINK_CMD_TRAP_GET,
1089
.validate = GENL_DONT_VALIDATE_STRICT,
1090
.pre_doit = devlink_nl_pre_doit,
1091
.doit = devlink_nl_trap_get_doit,
1092
.post_doit = devlink_nl_post_doit,
1093
.policy = devlink_trap_get_do_nl_policy,
1094
.maxattr = DEVLINK_ATTR_TRAP_NAME,
1095
.flags = GENL_CMD_CAP_DO,
1096
},
1097
{
1098
.cmd = DEVLINK_CMD_TRAP_GET,
1099
.dumpit = devlink_nl_trap_get_dumpit,
1100
.policy = devlink_trap_get_dump_nl_policy,
1101
.maxattr = DEVLINK_ATTR_DEV_NAME,
1102
.flags = GENL_CMD_CAP_DUMP,
1103
},
1104
{
1105
.cmd = DEVLINK_CMD_TRAP_SET,
1106
.validate = GENL_DONT_VALIDATE_STRICT,
1107
.pre_doit = devlink_nl_pre_doit,
1108
.doit = devlink_nl_trap_set_doit,
1109
.post_doit = devlink_nl_post_doit,
1110
.policy = devlink_trap_set_nl_policy,
1111
.maxattr = DEVLINK_ATTR_TRAP_ACTION,
1112
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1113
},
1114
{
1115
.cmd = DEVLINK_CMD_TRAP_GROUP_GET,
1116
.validate = GENL_DONT_VALIDATE_STRICT,
1117
.pre_doit = devlink_nl_pre_doit,
1118
.doit = devlink_nl_trap_group_get_doit,
1119
.post_doit = devlink_nl_post_doit,
1120
.policy = devlink_trap_group_get_do_nl_policy,
1121
.maxattr = DEVLINK_ATTR_TRAP_GROUP_NAME,
1122
.flags = GENL_CMD_CAP_DO,
1123
},
1124
{
1125
.cmd = DEVLINK_CMD_TRAP_GROUP_GET,
1126
.dumpit = devlink_nl_trap_group_get_dumpit,
1127
.policy = devlink_trap_group_get_dump_nl_policy,
1128
.maxattr = DEVLINK_ATTR_DEV_NAME,
1129
.flags = GENL_CMD_CAP_DUMP,
1130
},
1131
{
1132
.cmd = DEVLINK_CMD_TRAP_GROUP_SET,
1133
.validate = GENL_DONT_VALIDATE_STRICT,
1134
.pre_doit = devlink_nl_pre_doit,
1135
.doit = devlink_nl_trap_group_set_doit,
1136
.post_doit = devlink_nl_post_doit,
1137
.policy = devlink_trap_group_set_nl_policy,
1138
.maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
1139
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1140
},
1141
{
1142
.cmd = DEVLINK_CMD_TRAP_POLICER_GET,
1143
.validate = GENL_DONT_VALIDATE_STRICT,
1144
.pre_doit = devlink_nl_pre_doit,
1145
.doit = devlink_nl_trap_policer_get_doit,
1146
.post_doit = devlink_nl_post_doit,
1147
.policy = devlink_trap_policer_get_do_nl_policy,
1148
.maxattr = DEVLINK_ATTR_TRAP_POLICER_ID,
1149
.flags = GENL_CMD_CAP_DO,
1150
},
1151
{
1152
.cmd = DEVLINK_CMD_TRAP_POLICER_GET,
1153
.dumpit = devlink_nl_trap_policer_get_dumpit,
1154
.policy = devlink_trap_policer_get_dump_nl_policy,
1155
.maxattr = DEVLINK_ATTR_DEV_NAME,
1156
.flags = GENL_CMD_CAP_DUMP,
1157
},
1158
{
1159
.cmd = DEVLINK_CMD_TRAP_POLICER_SET,
1160
.validate = GENL_DONT_VALIDATE_STRICT,
1161
.pre_doit = devlink_nl_pre_doit,
1162
.doit = devlink_nl_trap_policer_set_doit,
1163
.post_doit = devlink_nl_post_doit,
1164
.policy = devlink_trap_policer_set_nl_policy,
1165
.maxattr = DEVLINK_ATTR_TRAP_POLICER_BURST,
1166
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1167
},
1168
{
1169
.cmd = DEVLINK_CMD_HEALTH_REPORTER_TEST,
1170
.validate = GENL_DONT_VALIDATE_STRICT,
1171
.pre_doit = devlink_nl_pre_doit_port_optional,
1172
.doit = devlink_nl_health_reporter_test_doit,
1173
.post_doit = devlink_nl_post_doit,
1174
.policy = devlink_health_reporter_test_nl_policy,
1175
.maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME,
1176
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1177
},
1178
{
1179
.cmd = DEVLINK_CMD_RATE_GET,
1180
.validate = GENL_DONT_VALIDATE_STRICT,
1181
.pre_doit = devlink_nl_pre_doit,
1182
.doit = devlink_nl_rate_get_doit,
1183
.post_doit = devlink_nl_post_doit,
1184
.policy = devlink_rate_get_do_nl_policy,
1185
.maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
1186
.flags = GENL_CMD_CAP_DO,
1187
},
1188
{
1189
.cmd = DEVLINK_CMD_RATE_GET,
1190
.dumpit = devlink_nl_rate_get_dumpit,
1191
.policy = devlink_rate_get_dump_nl_policy,
1192
.maxattr = DEVLINK_ATTR_DEV_NAME,
1193
.flags = GENL_CMD_CAP_DUMP,
1194
},
1195
{
1196
.cmd = DEVLINK_CMD_RATE_SET,
1197
.validate = GENL_DONT_VALIDATE_STRICT,
1198
.pre_doit = devlink_nl_pre_doit,
1199
.doit = devlink_nl_rate_set_doit,
1200
.post_doit = devlink_nl_post_doit,
1201
.policy = devlink_rate_set_nl_policy,
1202
.maxattr = DEVLINK_ATTR_RATE_TC_BWS,
1203
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1204
},
1205
{
1206
.cmd = DEVLINK_CMD_RATE_NEW,
1207
.validate = GENL_DONT_VALIDATE_STRICT,
1208
.pre_doit = devlink_nl_pre_doit,
1209
.doit = devlink_nl_rate_new_doit,
1210
.post_doit = devlink_nl_post_doit,
1211
.policy = devlink_rate_new_nl_policy,
1212
.maxattr = DEVLINK_ATTR_RATE_TC_BWS,
1213
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1214
},
1215
{
1216
.cmd = DEVLINK_CMD_RATE_DEL,
1217
.validate = GENL_DONT_VALIDATE_STRICT,
1218
.pre_doit = devlink_nl_pre_doit,
1219
.doit = devlink_nl_rate_del_doit,
1220
.post_doit = devlink_nl_post_doit,
1221
.policy = devlink_rate_del_nl_policy,
1222
.maxattr = DEVLINK_ATTR_RATE_NODE_NAME,
1223
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1224
},
1225
{
1226
.cmd = DEVLINK_CMD_LINECARD_GET,
1227
.validate = GENL_DONT_VALIDATE_STRICT,
1228
.pre_doit = devlink_nl_pre_doit,
1229
.doit = devlink_nl_linecard_get_doit,
1230
.post_doit = devlink_nl_post_doit,
1231
.policy = devlink_linecard_get_do_nl_policy,
1232
.maxattr = DEVLINK_ATTR_LINECARD_INDEX,
1233
.flags = GENL_CMD_CAP_DO,
1234
},
1235
{
1236
.cmd = DEVLINK_CMD_LINECARD_GET,
1237
.dumpit = devlink_nl_linecard_get_dumpit,
1238
.policy = devlink_linecard_get_dump_nl_policy,
1239
.maxattr = DEVLINK_ATTR_DEV_NAME,
1240
.flags = GENL_CMD_CAP_DUMP,
1241
},
1242
{
1243
.cmd = DEVLINK_CMD_LINECARD_SET,
1244
.validate = GENL_DONT_VALIDATE_STRICT,
1245
.pre_doit = devlink_nl_pre_doit,
1246
.doit = devlink_nl_linecard_set_doit,
1247
.post_doit = devlink_nl_post_doit,
1248
.policy = devlink_linecard_set_nl_policy,
1249
.maxattr = DEVLINK_ATTR_LINECARD_TYPE,
1250
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1251
},
1252
{
1253
.cmd = DEVLINK_CMD_SELFTESTS_GET,
1254
.validate = GENL_DONT_VALIDATE_STRICT,
1255
.pre_doit = devlink_nl_pre_doit,
1256
.doit = devlink_nl_selftests_get_doit,
1257
.post_doit = devlink_nl_post_doit,
1258
.policy = devlink_selftests_get_nl_policy,
1259
.maxattr = DEVLINK_ATTR_DEV_NAME,
1260
.flags = GENL_CMD_CAP_DO,
1261
},
1262
{
1263
.cmd = DEVLINK_CMD_SELFTESTS_GET,
1264
.validate = GENL_DONT_VALIDATE_DUMP,
1265
.dumpit = devlink_nl_selftests_get_dumpit,
1266
.flags = GENL_CMD_CAP_DUMP,
1267
},
1268
{
1269
.cmd = DEVLINK_CMD_SELFTESTS_RUN,
1270
.validate = GENL_DONT_VALIDATE_STRICT,
1271
.pre_doit = devlink_nl_pre_doit,
1272
.doit = devlink_nl_selftests_run_doit,
1273
.post_doit = devlink_nl_post_doit,
1274
.policy = devlink_selftests_run_nl_policy,
1275
.maxattr = DEVLINK_ATTR_SELFTESTS,
1276
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
1277
},
1278
{
1279
.cmd = DEVLINK_CMD_NOTIFY_FILTER_SET,
1280
.doit = devlink_nl_notify_filter_set_doit,
1281
.policy = devlink_notify_filter_set_nl_policy,
1282
.maxattr = DEVLINK_ATTR_PORT_INDEX,
1283
.flags = GENL_CMD_CAP_DO,
1284
},
1285
};
1286
1287