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