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/* DEVLINK_CMD_GET - do */ 14static const struct nla_policy devlink_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 15 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 16 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 17}; 18 19/* DEVLINK_CMD_PORT_GET - do */ 20static const struct nla_policy devlink_port_get_do_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = { 21 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 22 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 23 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, }, 24}; 25 26/* DEVLINK_CMD_PORT_GET - dump */ 27static const struct nla_policy devlink_port_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 28 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 29 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 30}; 31 32/* DEVLINK_CMD_SB_GET - do */ 33static const struct nla_policy devlink_sb_get_do_nl_policy[DEVLINK_ATTR_SB_INDEX + 1] = { 34 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 35 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 36 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, }, 37}; 38 39/* DEVLINK_CMD_SB_GET - dump */ 40static const struct nla_policy devlink_sb_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 41 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 42 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 43}; 44 45/* DEVLINK_CMD_SB_POOL_GET - do */ 46static const struct nla_policy devlink_sb_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 1] = { 47 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 48 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 49 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, }, 50 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, }, 51}; 52 53/* DEVLINK_CMD_SB_POOL_GET - dump */ 54static const struct nla_policy devlink_sb_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 55 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 56 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 57}; 58 59/* DEVLINK_CMD_SB_PORT_POOL_GET - do */ 60static const struct nla_policy devlink_sb_port_pool_get_do_nl_policy[DEVLINK_ATTR_SB_POOL_INDEX + 1] = { 61 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 62 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 63 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, }, 64 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, }, 65 [DEVLINK_ATTR_SB_POOL_INDEX] = { .type = NLA_U16, }, 66}; 67 68/* DEVLINK_CMD_SB_PORT_POOL_GET - dump */ 69static const struct nla_policy devlink_sb_port_pool_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 70 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 71 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 72}; 73 74/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - do */ 75static const struct nla_policy devlink_sb_tc_pool_bind_get_do_nl_policy[DEVLINK_ATTR_SB_TC_INDEX + 1] = { 76 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 77 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 78 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, }, 79 [DEVLINK_ATTR_SB_INDEX] = { .type = NLA_U32, }, 80 [DEVLINK_ATTR_SB_POOL_TYPE] = NLA_POLICY_MAX(NLA_U8, 1), 81 [DEVLINK_ATTR_SB_TC_INDEX] = { .type = NLA_U16, }, 82}; 83 84/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - dump */ 85static const struct nla_policy devlink_sb_tc_pool_bind_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 86 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 87 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 88}; 89 90/* DEVLINK_CMD_PARAM_GET - do */ 91static const struct nla_policy devlink_param_get_do_nl_policy[DEVLINK_ATTR_PARAM_NAME + 1] = { 92 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 93 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 94 [DEVLINK_ATTR_PARAM_NAME] = { .type = NLA_NUL_STRING, }, 95}; 96 97/* DEVLINK_CMD_PARAM_GET - dump */ 98static const struct nla_policy devlink_param_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 99 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 100 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 101}; 102 103/* DEVLINK_CMD_REGION_GET - do */ 104static const struct nla_policy devlink_region_get_do_nl_policy[DEVLINK_ATTR_REGION_NAME + 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_REGION_NAME] = { .type = NLA_NUL_STRING, }, 109}; 110 111/* DEVLINK_CMD_REGION_GET - dump */ 112static const struct nla_policy devlink_region_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 113 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 114 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 115}; 116 117/* DEVLINK_CMD_INFO_GET - do */ 118static const struct nla_policy devlink_info_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 119 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 120 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 121}; 122 123/* DEVLINK_CMD_HEALTH_REPORTER_GET - do */ 124static const struct nla_policy devlink_health_reporter_get_do_nl_policy[DEVLINK_ATTR_HEALTH_REPORTER_NAME + 1] = { 125 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 126 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 127 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, }, 128 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING, }, 129}; 130 131/* DEVLINK_CMD_HEALTH_REPORTER_GET - dump */ 132static const struct nla_policy devlink_health_reporter_get_dump_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = { 133 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 134 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 135 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, }, 136}; 137 138/* DEVLINK_CMD_TRAP_GET - do */ 139static const struct nla_policy devlink_trap_get_do_nl_policy[DEVLINK_ATTR_TRAP_NAME + 1] = { 140 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 141 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 142 [DEVLINK_ATTR_TRAP_NAME] = { .type = NLA_NUL_STRING, }, 143}; 144 145/* DEVLINK_CMD_TRAP_GET - dump */ 146static const struct nla_policy devlink_trap_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 147 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 148 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 149}; 150 151/* DEVLINK_CMD_TRAP_GROUP_GET - do */ 152static const struct nla_policy devlink_trap_group_get_do_nl_policy[DEVLINK_ATTR_TRAP_GROUP_NAME + 1] = { 153 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 154 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 155 [DEVLINK_ATTR_TRAP_GROUP_NAME] = { .type = NLA_NUL_STRING, }, 156}; 157 158/* DEVLINK_CMD_TRAP_GROUP_GET - dump */ 159static const struct nla_policy devlink_trap_group_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 160 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 161 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 162}; 163 164/* DEVLINK_CMD_TRAP_POLICER_GET - do */ 165static const struct nla_policy devlink_trap_policer_get_do_nl_policy[DEVLINK_ATTR_TRAP_POLICER_ID + 1] = { 166 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 167 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 168 [DEVLINK_ATTR_TRAP_POLICER_ID] = { .type = NLA_U32, }, 169}; 170 171/* DEVLINK_CMD_TRAP_POLICER_GET - dump */ 172static const struct nla_policy devlink_trap_policer_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 173 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 174 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 175}; 176 177/* DEVLINK_CMD_RATE_GET - do */ 178static const struct nla_policy devlink_rate_get_do_nl_policy[DEVLINK_ATTR_RATE_NODE_NAME + 1] = { 179 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 180 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 181 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, }, 182 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, }, 183}; 184 185/* DEVLINK_CMD_RATE_GET - dump */ 186static const struct nla_policy devlink_rate_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 187 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 188 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 189}; 190 191/* DEVLINK_CMD_LINECARD_GET - do */ 192static const struct nla_policy devlink_linecard_get_do_nl_policy[DEVLINK_ATTR_LINECARD_INDEX + 1] = { 193 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 194 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 195 [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, }, 196}; 197 198/* DEVLINK_CMD_LINECARD_GET - dump */ 199static const struct nla_policy devlink_linecard_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 200 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 201 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 202}; 203 204/* DEVLINK_CMD_SELFTESTS_GET - do */ 205static const struct nla_policy devlink_selftests_get_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { 206 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 207 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 208}; 209 210/* Ops table for devlink */ 211const struct genl_split_ops devlink_nl_ops[32] = { 212 { 213 .cmd = DEVLINK_CMD_GET, 214 .validate = GENL_DONT_VALIDATE_STRICT, 215 .pre_doit = devlink_nl_pre_doit, 216 .doit = devlink_nl_get_doit, 217 .post_doit = devlink_nl_post_doit, 218 .policy = devlink_get_nl_policy, 219 .maxattr = DEVLINK_ATTR_DEV_NAME, 220 .flags = GENL_CMD_CAP_DO, 221 }, 222 { 223 .cmd = DEVLINK_CMD_GET, 224 .validate = GENL_DONT_VALIDATE_DUMP, 225 .dumpit = devlink_nl_get_dumpit, 226 .flags = GENL_CMD_CAP_DUMP, 227 }, 228 { 229 .cmd = DEVLINK_CMD_PORT_GET, 230 .validate = GENL_DONT_VALIDATE_STRICT, 231 .pre_doit = devlink_nl_pre_doit_port, 232 .doit = devlink_nl_port_get_doit, 233 .post_doit = devlink_nl_post_doit, 234 .policy = devlink_port_get_do_nl_policy, 235 .maxattr = DEVLINK_ATTR_PORT_INDEX, 236 .flags = GENL_CMD_CAP_DO, 237 }, 238 { 239 .cmd = DEVLINK_CMD_PORT_GET, 240 .dumpit = devlink_nl_port_get_dumpit, 241 .policy = devlink_port_get_dump_nl_policy, 242 .maxattr = DEVLINK_ATTR_DEV_NAME, 243 .flags = GENL_CMD_CAP_DUMP, 244 }, 245 { 246 .cmd = DEVLINK_CMD_SB_GET, 247 .validate = GENL_DONT_VALIDATE_STRICT, 248 .pre_doit = devlink_nl_pre_doit, 249 .doit = devlink_nl_sb_get_doit, 250 .post_doit = devlink_nl_post_doit, 251 .policy = devlink_sb_get_do_nl_policy, 252 .maxattr = DEVLINK_ATTR_SB_INDEX, 253 .flags = GENL_CMD_CAP_DO, 254 }, 255 { 256 .cmd = DEVLINK_CMD_SB_GET, 257 .dumpit = devlink_nl_sb_get_dumpit, 258 .policy = devlink_sb_get_dump_nl_policy, 259 .maxattr = DEVLINK_ATTR_DEV_NAME, 260 .flags = GENL_CMD_CAP_DUMP, 261 }, 262 { 263 .cmd = DEVLINK_CMD_SB_POOL_GET, 264 .validate = GENL_DONT_VALIDATE_STRICT, 265 .pre_doit = devlink_nl_pre_doit, 266 .doit = devlink_nl_sb_pool_get_doit, 267 .post_doit = devlink_nl_post_doit, 268 .policy = devlink_sb_pool_get_do_nl_policy, 269 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX, 270 .flags = GENL_CMD_CAP_DO, 271 }, 272 { 273 .cmd = DEVLINK_CMD_SB_POOL_GET, 274 .dumpit = devlink_nl_sb_pool_get_dumpit, 275 .policy = devlink_sb_pool_get_dump_nl_policy, 276 .maxattr = DEVLINK_ATTR_DEV_NAME, 277 .flags = GENL_CMD_CAP_DUMP, 278 }, 279 { 280 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET, 281 .validate = GENL_DONT_VALIDATE_STRICT, 282 .pre_doit = devlink_nl_pre_doit_port, 283 .doit = devlink_nl_sb_port_pool_get_doit, 284 .post_doit = devlink_nl_post_doit, 285 .policy = devlink_sb_port_pool_get_do_nl_policy, 286 .maxattr = DEVLINK_ATTR_SB_POOL_INDEX, 287 .flags = GENL_CMD_CAP_DO, 288 }, 289 { 290 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET, 291 .dumpit = devlink_nl_sb_port_pool_get_dumpit, 292 .policy = devlink_sb_port_pool_get_dump_nl_policy, 293 .maxattr = DEVLINK_ATTR_DEV_NAME, 294 .flags = GENL_CMD_CAP_DUMP, 295 }, 296 { 297 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET, 298 .validate = GENL_DONT_VALIDATE_STRICT, 299 .pre_doit = devlink_nl_pre_doit_port, 300 .doit = devlink_nl_sb_tc_pool_bind_get_doit, 301 .post_doit = devlink_nl_post_doit, 302 .policy = devlink_sb_tc_pool_bind_get_do_nl_policy, 303 .maxattr = DEVLINK_ATTR_SB_TC_INDEX, 304 .flags = GENL_CMD_CAP_DO, 305 }, 306 { 307 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET, 308 .dumpit = devlink_nl_sb_tc_pool_bind_get_dumpit, 309 .policy = devlink_sb_tc_pool_bind_get_dump_nl_policy, 310 .maxattr = DEVLINK_ATTR_DEV_NAME, 311 .flags = GENL_CMD_CAP_DUMP, 312 }, 313 { 314 .cmd = DEVLINK_CMD_PARAM_GET, 315 .validate = GENL_DONT_VALIDATE_STRICT, 316 .pre_doit = devlink_nl_pre_doit, 317 .doit = devlink_nl_param_get_doit, 318 .post_doit = devlink_nl_post_doit, 319 .policy = devlink_param_get_do_nl_policy, 320 .maxattr = DEVLINK_ATTR_PARAM_NAME, 321 .flags = GENL_CMD_CAP_DO, 322 }, 323 { 324 .cmd = DEVLINK_CMD_PARAM_GET, 325 .dumpit = devlink_nl_param_get_dumpit, 326 .policy = devlink_param_get_dump_nl_policy, 327 .maxattr = DEVLINK_ATTR_DEV_NAME, 328 .flags = GENL_CMD_CAP_DUMP, 329 }, 330 { 331 .cmd = DEVLINK_CMD_REGION_GET, 332 .validate = GENL_DONT_VALIDATE_STRICT, 333 .pre_doit = devlink_nl_pre_doit_port_optional, 334 .doit = devlink_nl_region_get_doit, 335 .post_doit = devlink_nl_post_doit, 336 .policy = devlink_region_get_do_nl_policy, 337 .maxattr = DEVLINK_ATTR_REGION_NAME, 338 .flags = GENL_CMD_CAP_DO, 339 }, 340 { 341 .cmd = DEVLINK_CMD_REGION_GET, 342 .dumpit = devlink_nl_region_get_dumpit, 343 .policy = devlink_region_get_dump_nl_policy, 344 .maxattr = DEVLINK_ATTR_DEV_NAME, 345 .flags = GENL_CMD_CAP_DUMP, 346 }, 347 { 348 .cmd = DEVLINK_CMD_INFO_GET, 349 .validate = GENL_DONT_VALIDATE_STRICT, 350 .pre_doit = devlink_nl_pre_doit, 351 .doit = devlink_nl_info_get_doit, 352 .post_doit = devlink_nl_post_doit, 353 .policy = devlink_info_get_nl_policy, 354 .maxattr = DEVLINK_ATTR_DEV_NAME, 355 .flags = GENL_CMD_CAP_DO, 356 }, 357 { 358 .cmd = DEVLINK_CMD_INFO_GET, 359 .validate = GENL_DONT_VALIDATE_DUMP, 360 .dumpit = devlink_nl_info_get_dumpit, 361 .flags = GENL_CMD_CAP_DUMP, 362 }, 363 { 364 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET, 365 .validate = GENL_DONT_VALIDATE_STRICT, 366 .pre_doit = devlink_nl_pre_doit_port_optional, 367 .doit = devlink_nl_health_reporter_get_doit, 368 .post_doit = devlink_nl_post_doit, 369 .policy = devlink_health_reporter_get_do_nl_policy, 370 .maxattr = DEVLINK_ATTR_HEALTH_REPORTER_NAME, 371 .flags = GENL_CMD_CAP_DO, 372 }, 373 { 374 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET, 375 .dumpit = devlink_nl_health_reporter_get_dumpit, 376 .policy = devlink_health_reporter_get_dump_nl_policy, 377 .maxattr = DEVLINK_ATTR_PORT_INDEX, 378 .flags = GENL_CMD_CAP_DUMP, 379 }, 380 { 381 .cmd = DEVLINK_CMD_TRAP_GET, 382 .validate = GENL_DONT_VALIDATE_STRICT, 383 .pre_doit = devlink_nl_pre_doit, 384 .doit = devlink_nl_trap_get_doit, 385 .post_doit = devlink_nl_post_doit, 386 .policy = devlink_trap_get_do_nl_policy, 387 .maxattr = DEVLINK_ATTR_TRAP_NAME, 388 .flags = GENL_CMD_CAP_DO, 389 }, 390 { 391 .cmd = DEVLINK_CMD_TRAP_GET, 392 .dumpit = devlink_nl_trap_get_dumpit, 393 .policy = devlink_trap_get_dump_nl_policy, 394 .maxattr = DEVLINK_ATTR_DEV_NAME, 395 .flags = GENL_CMD_CAP_DUMP, 396 }, 397 { 398 .cmd = DEVLINK_CMD_TRAP_GROUP_GET, 399 .validate = GENL_DONT_VALIDATE_STRICT, 400 .pre_doit = devlink_nl_pre_doit, 401 .doit = devlink_nl_trap_group_get_doit, 402 .post_doit = devlink_nl_post_doit, 403 .policy = devlink_trap_group_get_do_nl_policy, 404 .maxattr = DEVLINK_ATTR_TRAP_GROUP_NAME, 405 .flags = GENL_CMD_CAP_DO, 406 }, 407 { 408 .cmd = DEVLINK_CMD_TRAP_GROUP_GET, 409 .dumpit = devlink_nl_trap_group_get_dumpit, 410 .policy = devlink_trap_group_get_dump_nl_policy, 411 .maxattr = DEVLINK_ATTR_DEV_NAME, 412 .flags = GENL_CMD_CAP_DUMP, 413 }, 414 { 415 .cmd = DEVLINK_CMD_TRAP_POLICER_GET, 416 .validate = GENL_DONT_VALIDATE_STRICT, 417 .pre_doit = devlink_nl_pre_doit, 418 .doit = devlink_nl_trap_policer_get_doit, 419 .post_doit = devlink_nl_post_doit, 420 .policy = devlink_trap_policer_get_do_nl_policy, 421 .maxattr = DEVLINK_ATTR_TRAP_POLICER_ID, 422 .flags = GENL_CMD_CAP_DO, 423 }, 424 { 425 .cmd = DEVLINK_CMD_TRAP_POLICER_GET, 426 .dumpit = devlink_nl_trap_policer_get_dumpit, 427 .policy = devlink_trap_policer_get_dump_nl_policy, 428 .maxattr = DEVLINK_ATTR_DEV_NAME, 429 .flags = GENL_CMD_CAP_DUMP, 430 }, 431 { 432 .cmd = DEVLINK_CMD_RATE_GET, 433 .validate = GENL_DONT_VALIDATE_STRICT, 434 .pre_doit = devlink_nl_pre_doit, 435 .doit = devlink_nl_rate_get_doit, 436 .post_doit = devlink_nl_post_doit, 437 .policy = devlink_rate_get_do_nl_policy, 438 .maxattr = DEVLINK_ATTR_RATE_NODE_NAME, 439 .flags = GENL_CMD_CAP_DO, 440 }, 441 { 442 .cmd = DEVLINK_CMD_RATE_GET, 443 .dumpit = devlink_nl_rate_get_dumpit, 444 .policy = devlink_rate_get_dump_nl_policy, 445 .maxattr = DEVLINK_ATTR_DEV_NAME, 446 .flags = GENL_CMD_CAP_DUMP, 447 }, 448 { 449 .cmd = DEVLINK_CMD_LINECARD_GET, 450 .validate = GENL_DONT_VALIDATE_STRICT, 451 .pre_doit = devlink_nl_pre_doit, 452 .doit = devlink_nl_linecard_get_doit, 453 .post_doit = devlink_nl_post_doit, 454 .policy = devlink_linecard_get_do_nl_policy, 455 .maxattr = DEVLINK_ATTR_LINECARD_INDEX, 456 .flags = GENL_CMD_CAP_DO, 457 }, 458 { 459 .cmd = DEVLINK_CMD_LINECARD_GET, 460 .dumpit = devlink_nl_linecard_get_dumpit, 461 .policy = devlink_linecard_get_dump_nl_policy, 462 .maxattr = DEVLINK_ATTR_DEV_NAME, 463 .flags = GENL_CMD_CAP_DUMP, 464 }, 465 { 466 .cmd = DEVLINK_CMD_SELFTESTS_GET, 467 .validate = GENL_DONT_VALIDATE_STRICT, 468 .pre_doit = devlink_nl_pre_doit, 469 .doit = devlink_nl_selftests_get_doit, 470 .post_doit = devlink_nl_post_doit, 471 .policy = devlink_selftests_get_nl_policy, 472 .maxattr = DEVLINK_ATTR_DEV_NAME, 473 .flags = GENL_CMD_CAP_DO, 474 }, 475 { 476 .cmd = DEVLINK_CMD_SELFTESTS_GET, 477 .validate = GENL_DONT_VALIDATE_DUMP, 478 .dumpit = devlink_nl_selftests_get_dumpit, 479 .flags = GENL_CMD_CAP_DUMP, 480 }, 481}; 482