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