Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.18-rc4 1285 lines 49 kB view raw
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 */ 14static int 15devlink_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 */ 41const 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 48const 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 53const 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 */ 58static 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 */ 64static 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 */ 71static 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 */ 77static 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 */ 86static 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 */ 97static 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 */ 104static 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 */ 112static 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 */ 119static 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 */ 126static 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 */ 132static 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 */ 140static 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 */ 146static 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 */ 156static 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 */ 165static 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 */ 171static 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 */ 181static 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 */ 191static 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 */ 197static 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 */ 209static 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 */ 216static 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 */ 223static 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 */ 229static 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 */ 238static 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 */ 245static 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 */ 252static 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 */ 258static 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 */ 266static 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 */ 274static 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 */ 280static 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 */ 291static 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 */ 298static 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 */ 304static 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 */ 313static 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 */ 321static 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 */ 327static 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 */ 336static 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 */ 345static 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 */ 357static 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 */ 364static 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 */ 371static 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 */ 377static 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 */ 385static 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 */ 392static 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 */ 404static 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 */ 412static 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 */ 420static 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 */ 428static 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 */ 436static 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 */ 445static 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 */ 452static 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 */ 458static 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 */ 466static 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 */ 473static 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 */ 479static 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 */ 488static 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 */ 495static 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 */ 501static 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 */ 510static 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 */ 518static 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 */ 526static 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 */ 532static 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 */ 545static 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 */ 558static 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 */ 565static 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 */ 572static 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 */ 578static 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 */ 586static 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 */ 592static 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 */ 599static 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 */ 606const 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};