Linux Audio

Check our new training course

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