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