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