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