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