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_nl_policy[DEVLINK_PORT_FN_ATTR_CAPS + 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_OPSTATE] = NLA_POLICY_MAX(NLA_U8, 1), 59 [DEVLINK_PORT_FN_ATTR_CAPS] = NLA_POLICY_BITFIELD32(15), 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_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(6), 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_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, }, 622 [DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, }, 623 [DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, }, 624 [DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, }, 625 [DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, }, 626 [DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, }, 627 [DEVLINK_ATTR_RATE_TC_BWS] = NLA_POLICY_NESTED(devlink_dl_rate_tc_bws_nl_policy), 628 [DEVLINK_ATTR_PARENT_DEV] = NLA_POLICY_NESTED(devlink_dl_parent_dev_nl_policy), 629 }; 630 631 /* DEVLINK_CMD_RATE_NEW - do */ 632 static const struct nla_policy devlink_rate_new_nl_policy[DEVLINK_ATTR_PARENT_DEV + 1] = { 633 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 634 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 635 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 636 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, }, 637 [DEVLINK_ATTR_RATE_TX_SHARE] = { .type = NLA_U64, }, 638 [DEVLINK_ATTR_RATE_TX_MAX] = { .type = NLA_U64, }, 639 [DEVLINK_ATTR_RATE_TX_PRIORITY] = { .type = NLA_U32, }, 640 [DEVLINK_ATTR_RATE_TX_WEIGHT] = { .type = NLA_U32, }, 641 [DEVLINK_ATTR_RATE_PARENT_NODE_NAME] = { .type = NLA_NUL_STRING, }, 642 [DEVLINK_ATTR_RATE_TC_BWS] = NLA_POLICY_NESTED(devlink_dl_rate_tc_bws_nl_policy), 643 [DEVLINK_ATTR_PARENT_DEV] = NLA_POLICY_NESTED(devlink_dl_parent_dev_nl_policy), 644 }; 645 646 /* DEVLINK_CMD_RATE_DEL - do */ 647 static const struct nla_policy devlink_rate_del_nl_policy[DEVLINK_ATTR_INDEX + 1] = { 648 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 649 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 650 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 651 [DEVLINK_ATTR_RATE_NODE_NAME] = { .type = NLA_NUL_STRING, }, 652 }; 653 654 /* DEVLINK_CMD_LINECARD_GET - do */ 655 static const struct nla_policy devlink_linecard_get_do_nl_policy[DEVLINK_ATTR_INDEX + 1] = { 656 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 657 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 658 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 659 [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, }, 660 }; 661 662 /* DEVLINK_CMD_LINECARD_GET - dump */ 663 static const struct nla_policy devlink_linecard_get_dump_nl_policy[DEVLINK_ATTR_INDEX + 1] = { 664 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 665 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 666 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 667 }; 668 669 /* DEVLINK_CMD_LINECARD_SET - do */ 670 static const struct nla_policy devlink_linecard_set_nl_policy[DEVLINK_ATTR_INDEX + 1] = { 671 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 672 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 673 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 674 [DEVLINK_ATTR_LINECARD_INDEX] = { .type = NLA_U32, }, 675 [DEVLINK_ATTR_LINECARD_TYPE] = { .type = NLA_NUL_STRING, }, 676 }; 677 678 /* DEVLINK_CMD_SELFTESTS_GET - do */ 679 static const struct nla_policy devlink_selftests_get_nl_policy[DEVLINK_ATTR_INDEX + 1] = { 680 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 681 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 682 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 683 }; 684 685 /* DEVLINK_CMD_SELFTESTS_RUN - do */ 686 static const struct nla_policy devlink_selftests_run_nl_policy[DEVLINK_ATTR_INDEX + 1] = { 687 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 688 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 689 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 690 [DEVLINK_ATTR_SELFTESTS] = NLA_POLICY_NESTED(devlink_dl_selftest_id_nl_policy), 691 }; 692 693 /* DEVLINK_CMD_NOTIFY_FILTER_SET - do */ 694 static const struct nla_policy devlink_notify_filter_set_nl_policy[DEVLINK_ATTR_INDEX + 1] = { 695 [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, 696 [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, 697 [DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range), 698 [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, }, 699 }; 700 701 /* Ops table for devlink */ 702 const struct genl_split_ops devlink_nl_ops[75] = { 703 { 704 .cmd = DEVLINK_CMD_GET, 705 .validate = GENL_DONT_VALIDATE_STRICT, 706 .pre_doit = devlink_nl_pre_doit, 707 .doit = devlink_nl_get_doit, 708 .post_doit = devlink_nl_post_doit, 709 .policy = devlink_get_nl_policy, 710 .maxattr = DEVLINK_ATTR_INDEX, 711 .flags = GENL_CMD_CAP_DO, 712 }, 713 { 714 .cmd = DEVLINK_CMD_GET, 715 .validate = GENL_DONT_VALIDATE_DUMP, 716 .dumpit = devlink_nl_get_dumpit, 717 .flags = GENL_CMD_CAP_DUMP, 718 }, 719 { 720 .cmd = DEVLINK_CMD_PORT_GET, 721 .validate = GENL_DONT_VALIDATE_STRICT, 722 .pre_doit = devlink_nl_pre_doit_port, 723 .doit = devlink_nl_port_get_doit, 724 .post_doit = devlink_nl_post_doit, 725 .policy = devlink_port_get_do_nl_policy, 726 .maxattr = DEVLINK_ATTR_INDEX, 727 .flags = GENL_CMD_CAP_DO, 728 }, 729 { 730 .cmd = DEVLINK_CMD_PORT_GET, 731 .dumpit = devlink_nl_port_get_dumpit, 732 .policy = devlink_port_get_dump_nl_policy, 733 .maxattr = DEVLINK_ATTR_INDEX, 734 .flags = GENL_CMD_CAP_DUMP, 735 }, 736 { 737 .cmd = DEVLINK_CMD_PORT_SET, 738 .validate = GENL_DONT_VALIDATE_STRICT, 739 .pre_doit = devlink_nl_pre_doit_port, 740 .doit = devlink_nl_port_set_doit, 741 .post_doit = devlink_nl_post_doit, 742 .policy = devlink_port_set_nl_policy, 743 .maxattr = DEVLINK_ATTR_INDEX, 744 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 745 }, 746 { 747 .cmd = DEVLINK_CMD_PORT_NEW, 748 .validate = GENL_DONT_VALIDATE_STRICT, 749 .pre_doit = devlink_nl_pre_doit, 750 .doit = devlink_nl_port_new_doit, 751 .post_doit = devlink_nl_post_doit, 752 .policy = devlink_port_new_nl_policy, 753 .maxattr = DEVLINK_ATTR_INDEX, 754 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 755 }, 756 { 757 .cmd = DEVLINK_CMD_PORT_DEL, 758 .validate = GENL_DONT_VALIDATE_STRICT, 759 .pre_doit = devlink_nl_pre_doit_port, 760 .doit = devlink_nl_port_del_doit, 761 .post_doit = devlink_nl_post_doit, 762 .policy = devlink_port_del_nl_policy, 763 .maxattr = DEVLINK_ATTR_INDEX, 764 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 765 }, 766 { 767 .cmd = DEVLINK_CMD_PORT_SPLIT, 768 .validate = GENL_DONT_VALIDATE_STRICT, 769 .pre_doit = devlink_nl_pre_doit_port, 770 .doit = devlink_nl_port_split_doit, 771 .post_doit = devlink_nl_post_doit, 772 .policy = devlink_port_split_nl_policy, 773 .maxattr = DEVLINK_ATTR_INDEX, 774 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 775 }, 776 { 777 .cmd = DEVLINK_CMD_PORT_UNSPLIT, 778 .validate = GENL_DONT_VALIDATE_STRICT, 779 .pre_doit = devlink_nl_pre_doit_port, 780 .doit = devlink_nl_port_unsplit_doit, 781 .post_doit = devlink_nl_post_doit, 782 .policy = devlink_port_unsplit_nl_policy, 783 .maxattr = DEVLINK_ATTR_INDEX, 784 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 785 }, 786 { 787 .cmd = DEVLINK_CMD_SB_GET, 788 .validate = GENL_DONT_VALIDATE_STRICT, 789 .pre_doit = devlink_nl_pre_doit, 790 .doit = devlink_nl_sb_get_doit, 791 .post_doit = devlink_nl_post_doit, 792 .policy = devlink_sb_get_do_nl_policy, 793 .maxattr = DEVLINK_ATTR_INDEX, 794 .flags = GENL_CMD_CAP_DO, 795 }, 796 { 797 .cmd = DEVLINK_CMD_SB_GET, 798 .dumpit = devlink_nl_sb_get_dumpit, 799 .policy = devlink_sb_get_dump_nl_policy, 800 .maxattr = DEVLINK_ATTR_INDEX, 801 .flags = GENL_CMD_CAP_DUMP, 802 }, 803 { 804 .cmd = DEVLINK_CMD_SB_POOL_GET, 805 .validate = GENL_DONT_VALIDATE_STRICT, 806 .pre_doit = devlink_nl_pre_doit, 807 .doit = devlink_nl_sb_pool_get_doit, 808 .post_doit = devlink_nl_post_doit, 809 .policy = devlink_sb_pool_get_do_nl_policy, 810 .maxattr = DEVLINK_ATTR_INDEX, 811 .flags = GENL_CMD_CAP_DO, 812 }, 813 { 814 .cmd = DEVLINK_CMD_SB_POOL_GET, 815 .dumpit = devlink_nl_sb_pool_get_dumpit, 816 .policy = devlink_sb_pool_get_dump_nl_policy, 817 .maxattr = DEVLINK_ATTR_INDEX, 818 .flags = GENL_CMD_CAP_DUMP, 819 }, 820 { 821 .cmd = DEVLINK_CMD_SB_POOL_SET, 822 .validate = GENL_DONT_VALIDATE_STRICT, 823 .pre_doit = devlink_nl_pre_doit, 824 .doit = devlink_nl_sb_pool_set_doit, 825 .post_doit = devlink_nl_post_doit, 826 .policy = devlink_sb_pool_set_nl_policy, 827 .maxattr = DEVLINK_ATTR_INDEX, 828 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 829 }, 830 { 831 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET, 832 .validate = GENL_DONT_VALIDATE_STRICT, 833 .pre_doit = devlink_nl_pre_doit_port, 834 .doit = devlink_nl_sb_port_pool_get_doit, 835 .post_doit = devlink_nl_post_doit, 836 .policy = devlink_sb_port_pool_get_do_nl_policy, 837 .maxattr = DEVLINK_ATTR_INDEX, 838 .flags = GENL_CMD_CAP_DO, 839 }, 840 { 841 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET, 842 .dumpit = devlink_nl_sb_port_pool_get_dumpit, 843 .policy = devlink_sb_port_pool_get_dump_nl_policy, 844 .maxattr = DEVLINK_ATTR_INDEX, 845 .flags = GENL_CMD_CAP_DUMP, 846 }, 847 { 848 .cmd = DEVLINK_CMD_SB_PORT_POOL_SET, 849 .validate = GENL_DONT_VALIDATE_STRICT, 850 .pre_doit = devlink_nl_pre_doit_port, 851 .doit = devlink_nl_sb_port_pool_set_doit, 852 .post_doit = devlink_nl_post_doit, 853 .policy = devlink_sb_port_pool_set_nl_policy, 854 .maxattr = DEVLINK_ATTR_INDEX, 855 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 856 }, 857 { 858 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET, 859 .validate = GENL_DONT_VALIDATE_STRICT, 860 .pre_doit = devlink_nl_pre_doit_port, 861 .doit = devlink_nl_sb_tc_pool_bind_get_doit, 862 .post_doit = devlink_nl_post_doit, 863 .policy = devlink_sb_tc_pool_bind_get_do_nl_policy, 864 .maxattr = DEVLINK_ATTR_INDEX, 865 .flags = GENL_CMD_CAP_DO, 866 }, 867 { 868 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET, 869 .dumpit = devlink_nl_sb_tc_pool_bind_get_dumpit, 870 .policy = devlink_sb_tc_pool_bind_get_dump_nl_policy, 871 .maxattr = DEVLINK_ATTR_INDEX, 872 .flags = GENL_CMD_CAP_DUMP, 873 }, 874 { 875 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET, 876 .validate = GENL_DONT_VALIDATE_STRICT, 877 .pre_doit = devlink_nl_pre_doit_port, 878 .doit = devlink_nl_sb_tc_pool_bind_set_doit, 879 .post_doit = devlink_nl_post_doit, 880 .policy = devlink_sb_tc_pool_bind_set_nl_policy, 881 .maxattr = DEVLINK_ATTR_INDEX, 882 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 883 }, 884 { 885 .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT, 886 .validate = GENL_DONT_VALIDATE_STRICT, 887 .pre_doit = devlink_nl_pre_doit, 888 .doit = devlink_nl_sb_occ_snapshot_doit, 889 .post_doit = devlink_nl_post_doit, 890 .policy = devlink_sb_occ_snapshot_nl_policy, 891 .maxattr = DEVLINK_ATTR_INDEX, 892 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 893 }, 894 { 895 .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR, 896 .validate = GENL_DONT_VALIDATE_STRICT, 897 .pre_doit = devlink_nl_pre_doit, 898 .doit = devlink_nl_sb_occ_max_clear_doit, 899 .post_doit = devlink_nl_post_doit, 900 .policy = devlink_sb_occ_max_clear_nl_policy, 901 .maxattr = DEVLINK_ATTR_INDEX, 902 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 903 }, 904 { 905 .cmd = DEVLINK_CMD_ESWITCH_GET, 906 .validate = GENL_DONT_VALIDATE_STRICT, 907 .pre_doit = devlink_nl_pre_doit, 908 .doit = devlink_nl_eswitch_get_doit, 909 .post_doit = devlink_nl_post_doit, 910 .policy = devlink_eswitch_get_nl_policy, 911 .maxattr = DEVLINK_ATTR_INDEX, 912 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 913 }, 914 { 915 .cmd = DEVLINK_CMD_ESWITCH_SET, 916 .validate = GENL_DONT_VALIDATE_STRICT, 917 .pre_doit = devlink_nl_pre_doit, 918 .doit = devlink_nl_eswitch_set_doit, 919 .post_doit = devlink_nl_post_doit, 920 .policy = devlink_eswitch_set_nl_policy, 921 .maxattr = DEVLINK_ATTR_INDEX, 922 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 923 }, 924 { 925 .cmd = DEVLINK_CMD_DPIPE_TABLE_GET, 926 .validate = GENL_DONT_VALIDATE_STRICT, 927 .pre_doit = devlink_nl_pre_doit, 928 .doit = devlink_nl_dpipe_table_get_doit, 929 .post_doit = devlink_nl_post_doit, 930 .policy = devlink_dpipe_table_get_nl_policy, 931 .maxattr = DEVLINK_ATTR_INDEX, 932 .flags = GENL_CMD_CAP_DO, 933 }, 934 { 935 .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET, 936 .validate = GENL_DONT_VALIDATE_STRICT, 937 .pre_doit = devlink_nl_pre_doit, 938 .doit = devlink_nl_dpipe_entries_get_doit, 939 .post_doit = devlink_nl_post_doit, 940 .policy = devlink_dpipe_entries_get_nl_policy, 941 .maxattr = DEVLINK_ATTR_INDEX, 942 .flags = GENL_CMD_CAP_DO, 943 }, 944 { 945 .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET, 946 .validate = GENL_DONT_VALIDATE_STRICT, 947 .pre_doit = devlink_nl_pre_doit, 948 .doit = devlink_nl_dpipe_headers_get_doit, 949 .post_doit = devlink_nl_post_doit, 950 .policy = devlink_dpipe_headers_get_nl_policy, 951 .maxattr = DEVLINK_ATTR_INDEX, 952 .flags = GENL_CMD_CAP_DO, 953 }, 954 { 955 .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET, 956 .validate = GENL_DONT_VALIDATE_STRICT, 957 .pre_doit = devlink_nl_pre_doit, 958 .doit = devlink_nl_dpipe_table_counters_set_doit, 959 .post_doit = devlink_nl_post_doit, 960 .policy = devlink_dpipe_table_counters_set_nl_policy, 961 .maxattr = DEVLINK_ATTR_INDEX, 962 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 963 }, 964 { 965 .cmd = DEVLINK_CMD_RESOURCE_SET, 966 .validate = GENL_DONT_VALIDATE_STRICT, 967 .pre_doit = devlink_nl_pre_doit, 968 .doit = devlink_nl_resource_set_doit, 969 .post_doit = devlink_nl_post_doit, 970 .policy = devlink_resource_set_nl_policy, 971 .maxattr = DEVLINK_ATTR_INDEX, 972 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 973 }, 974 { 975 .cmd = DEVLINK_CMD_RESOURCE_DUMP, 976 .validate = GENL_DONT_VALIDATE_STRICT, 977 .pre_doit = devlink_nl_pre_doit_port_optional, 978 .doit = devlink_nl_resource_dump_doit, 979 .post_doit = devlink_nl_post_doit, 980 .policy = devlink_resource_dump_do_nl_policy, 981 .maxattr = DEVLINK_ATTR_INDEX, 982 .flags = GENL_CMD_CAP_DO, 983 }, 984 { 985 .cmd = DEVLINK_CMD_RESOURCE_DUMP, 986 .dumpit = devlink_nl_resource_dump_dumpit, 987 .policy = devlink_resource_dump_dump_nl_policy, 988 .maxattr = DEVLINK_ATTR_RESOURCE_SCOPE_MASK, 989 .flags = GENL_CMD_CAP_DUMP, 990 }, 991 { 992 .cmd = DEVLINK_CMD_RELOAD, 993 .validate = GENL_DONT_VALIDATE_STRICT, 994 .pre_doit = devlink_nl_pre_doit_dev_lock, 995 .doit = devlink_nl_reload_doit, 996 .post_doit = devlink_nl_post_doit_dev_lock, 997 .policy = devlink_reload_nl_policy, 998 .maxattr = DEVLINK_ATTR_INDEX, 999 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1000 }, 1001 { 1002 .cmd = DEVLINK_CMD_PARAM_GET, 1003 .validate = GENL_DONT_VALIDATE_STRICT, 1004 .pre_doit = devlink_nl_pre_doit, 1005 .doit = devlink_nl_param_get_doit, 1006 .post_doit = devlink_nl_post_doit, 1007 .policy = devlink_param_get_do_nl_policy, 1008 .maxattr = DEVLINK_ATTR_INDEX, 1009 .flags = GENL_CMD_CAP_DO, 1010 }, 1011 { 1012 .cmd = DEVLINK_CMD_PARAM_GET, 1013 .dumpit = devlink_nl_param_get_dumpit, 1014 .policy = devlink_param_get_dump_nl_policy, 1015 .maxattr = DEVLINK_ATTR_INDEX, 1016 .flags = GENL_CMD_CAP_DUMP, 1017 }, 1018 { 1019 .cmd = DEVLINK_CMD_PARAM_SET, 1020 .validate = GENL_DONT_VALIDATE_STRICT, 1021 .pre_doit = devlink_nl_pre_doit, 1022 .doit = devlink_nl_param_set_doit, 1023 .post_doit = devlink_nl_post_doit, 1024 .policy = devlink_param_set_nl_policy, 1025 .maxattr = DEVLINK_ATTR_INDEX, 1026 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1027 }, 1028 { 1029 .cmd = DEVLINK_CMD_REGION_GET, 1030 .validate = GENL_DONT_VALIDATE_STRICT, 1031 .pre_doit = devlink_nl_pre_doit_port_optional, 1032 .doit = devlink_nl_region_get_doit, 1033 .post_doit = devlink_nl_post_doit, 1034 .policy = devlink_region_get_do_nl_policy, 1035 .maxattr = DEVLINK_ATTR_INDEX, 1036 .flags = GENL_CMD_CAP_DO, 1037 }, 1038 { 1039 .cmd = DEVLINK_CMD_REGION_GET, 1040 .dumpit = devlink_nl_region_get_dumpit, 1041 .policy = devlink_region_get_dump_nl_policy, 1042 .maxattr = DEVLINK_ATTR_INDEX, 1043 .flags = GENL_CMD_CAP_DUMP, 1044 }, 1045 { 1046 .cmd = DEVLINK_CMD_REGION_NEW, 1047 .validate = GENL_DONT_VALIDATE_STRICT, 1048 .pre_doit = devlink_nl_pre_doit_port_optional, 1049 .doit = devlink_nl_region_new_doit, 1050 .post_doit = devlink_nl_post_doit, 1051 .policy = devlink_region_new_nl_policy, 1052 .maxattr = DEVLINK_ATTR_INDEX, 1053 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1054 }, 1055 { 1056 .cmd = DEVLINK_CMD_REGION_DEL, 1057 .validate = GENL_DONT_VALIDATE_STRICT, 1058 .pre_doit = devlink_nl_pre_doit_port_optional, 1059 .doit = devlink_nl_region_del_doit, 1060 .post_doit = devlink_nl_post_doit, 1061 .policy = devlink_region_del_nl_policy, 1062 .maxattr = DEVLINK_ATTR_INDEX, 1063 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1064 }, 1065 { 1066 .cmd = DEVLINK_CMD_REGION_READ, 1067 .validate = GENL_DONT_VALIDATE_DUMP_STRICT, 1068 .dumpit = devlink_nl_region_read_dumpit, 1069 .policy = devlink_region_read_nl_policy, 1070 .maxattr = DEVLINK_ATTR_INDEX, 1071 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP, 1072 }, 1073 { 1074 .cmd = DEVLINK_CMD_PORT_PARAM_GET, 1075 .validate = GENL_DONT_VALIDATE_STRICT, 1076 .pre_doit = devlink_nl_pre_doit_port, 1077 .doit = devlink_nl_port_param_get_doit, 1078 .post_doit = devlink_nl_post_doit, 1079 .policy = devlink_port_param_get_nl_policy, 1080 .maxattr = DEVLINK_ATTR_INDEX, 1081 .flags = GENL_CMD_CAP_DO, 1082 }, 1083 { 1084 .cmd = DEVLINK_CMD_PORT_PARAM_GET, 1085 .validate = GENL_DONT_VALIDATE_DUMP_STRICT, 1086 .dumpit = devlink_nl_port_param_get_dumpit, 1087 .flags = GENL_CMD_CAP_DUMP, 1088 }, 1089 { 1090 .cmd = DEVLINK_CMD_PORT_PARAM_SET, 1091 .validate = GENL_DONT_VALIDATE_STRICT, 1092 .pre_doit = devlink_nl_pre_doit_port, 1093 .doit = devlink_nl_port_param_set_doit, 1094 .post_doit = devlink_nl_post_doit, 1095 .policy = devlink_port_param_set_nl_policy, 1096 .maxattr = DEVLINK_ATTR_INDEX, 1097 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1098 }, 1099 { 1100 .cmd = DEVLINK_CMD_INFO_GET, 1101 .validate = GENL_DONT_VALIDATE_STRICT, 1102 .pre_doit = devlink_nl_pre_doit, 1103 .doit = devlink_nl_info_get_doit, 1104 .post_doit = devlink_nl_post_doit, 1105 .policy = devlink_info_get_nl_policy, 1106 .maxattr = DEVLINK_ATTR_INDEX, 1107 .flags = GENL_CMD_CAP_DO, 1108 }, 1109 { 1110 .cmd = DEVLINK_CMD_INFO_GET, 1111 .validate = GENL_DONT_VALIDATE_DUMP, 1112 .dumpit = devlink_nl_info_get_dumpit, 1113 .flags = GENL_CMD_CAP_DUMP, 1114 }, 1115 { 1116 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET, 1117 .validate = GENL_DONT_VALIDATE_STRICT, 1118 .pre_doit = devlink_nl_pre_doit_port_optional, 1119 .doit = devlink_nl_health_reporter_get_doit, 1120 .post_doit = devlink_nl_post_doit, 1121 .policy = devlink_health_reporter_get_do_nl_policy, 1122 .maxattr = DEVLINK_ATTR_INDEX, 1123 .flags = GENL_CMD_CAP_DO, 1124 }, 1125 { 1126 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET, 1127 .dumpit = devlink_nl_health_reporter_get_dumpit, 1128 .policy = devlink_health_reporter_get_dump_nl_policy, 1129 .maxattr = DEVLINK_ATTR_INDEX, 1130 .flags = GENL_CMD_CAP_DUMP, 1131 }, 1132 { 1133 .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET, 1134 .validate = GENL_DONT_VALIDATE_STRICT, 1135 .pre_doit = devlink_nl_pre_doit_port_optional, 1136 .doit = devlink_nl_health_reporter_set_doit, 1137 .post_doit = devlink_nl_post_doit, 1138 .policy = devlink_health_reporter_set_nl_policy, 1139 .maxattr = DEVLINK_ATTR_INDEX, 1140 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1141 }, 1142 { 1143 .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER, 1144 .validate = GENL_DONT_VALIDATE_STRICT, 1145 .pre_doit = devlink_nl_pre_doit_port_optional, 1146 .doit = devlink_nl_health_reporter_recover_doit, 1147 .post_doit = devlink_nl_post_doit, 1148 .policy = devlink_health_reporter_recover_nl_policy, 1149 .maxattr = DEVLINK_ATTR_INDEX, 1150 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1151 }, 1152 { 1153 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 1154 .validate = GENL_DONT_VALIDATE_STRICT, 1155 .pre_doit = devlink_nl_pre_doit_port_optional, 1156 .doit = devlink_nl_health_reporter_diagnose_doit, 1157 .post_doit = devlink_nl_post_doit, 1158 .policy = devlink_health_reporter_diagnose_nl_policy, 1159 .maxattr = DEVLINK_ATTR_INDEX, 1160 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1161 }, 1162 { 1163 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET, 1164 .validate = GENL_DONT_VALIDATE_DUMP_STRICT, 1165 .dumpit = devlink_nl_health_reporter_dump_get_dumpit, 1166 .policy = devlink_health_reporter_dump_get_nl_policy, 1167 .maxattr = DEVLINK_ATTR_INDEX, 1168 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP, 1169 }, 1170 { 1171 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR, 1172 .validate = GENL_DONT_VALIDATE_STRICT, 1173 .pre_doit = devlink_nl_pre_doit_port_optional, 1174 .doit = devlink_nl_health_reporter_dump_clear_doit, 1175 .post_doit = devlink_nl_post_doit, 1176 .policy = devlink_health_reporter_dump_clear_nl_policy, 1177 .maxattr = DEVLINK_ATTR_INDEX, 1178 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1179 }, 1180 { 1181 .cmd = DEVLINK_CMD_FLASH_UPDATE, 1182 .validate = GENL_DONT_VALIDATE_STRICT, 1183 .pre_doit = devlink_nl_pre_doit, 1184 .doit = devlink_nl_flash_update_doit, 1185 .post_doit = devlink_nl_post_doit, 1186 .policy = devlink_flash_update_nl_policy, 1187 .maxattr = DEVLINK_ATTR_INDEX, 1188 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1189 }, 1190 { 1191 .cmd = DEVLINK_CMD_TRAP_GET, 1192 .validate = GENL_DONT_VALIDATE_STRICT, 1193 .pre_doit = devlink_nl_pre_doit, 1194 .doit = devlink_nl_trap_get_doit, 1195 .post_doit = devlink_nl_post_doit, 1196 .policy = devlink_trap_get_do_nl_policy, 1197 .maxattr = DEVLINK_ATTR_INDEX, 1198 .flags = GENL_CMD_CAP_DO, 1199 }, 1200 { 1201 .cmd = DEVLINK_CMD_TRAP_GET, 1202 .dumpit = devlink_nl_trap_get_dumpit, 1203 .policy = devlink_trap_get_dump_nl_policy, 1204 .maxattr = DEVLINK_ATTR_INDEX, 1205 .flags = GENL_CMD_CAP_DUMP, 1206 }, 1207 { 1208 .cmd = DEVLINK_CMD_TRAP_SET, 1209 .validate = GENL_DONT_VALIDATE_STRICT, 1210 .pre_doit = devlink_nl_pre_doit, 1211 .doit = devlink_nl_trap_set_doit, 1212 .post_doit = devlink_nl_post_doit, 1213 .policy = devlink_trap_set_nl_policy, 1214 .maxattr = DEVLINK_ATTR_INDEX, 1215 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1216 }, 1217 { 1218 .cmd = DEVLINK_CMD_TRAP_GROUP_GET, 1219 .validate = GENL_DONT_VALIDATE_STRICT, 1220 .pre_doit = devlink_nl_pre_doit, 1221 .doit = devlink_nl_trap_group_get_doit, 1222 .post_doit = devlink_nl_post_doit, 1223 .policy = devlink_trap_group_get_do_nl_policy, 1224 .maxattr = DEVLINK_ATTR_INDEX, 1225 .flags = GENL_CMD_CAP_DO, 1226 }, 1227 { 1228 .cmd = DEVLINK_CMD_TRAP_GROUP_GET, 1229 .dumpit = devlink_nl_trap_group_get_dumpit, 1230 .policy = devlink_trap_group_get_dump_nl_policy, 1231 .maxattr = DEVLINK_ATTR_INDEX, 1232 .flags = GENL_CMD_CAP_DUMP, 1233 }, 1234 { 1235 .cmd = DEVLINK_CMD_TRAP_GROUP_SET, 1236 .validate = GENL_DONT_VALIDATE_STRICT, 1237 .pre_doit = devlink_nl_pre_doit, 1238 .doit = devlink_nl_trap_group_set_doit, 1239 .post_doit = devlink_nl_post_doit, 1240 .policy = devlink_trap_group_set_nl_policy, 1241 .maxattr = DEVLINK_ATTR_INDEX, 1242 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1243 }, 1244 { 1245 .cmd = DEVLINK_CMD_TRAP_POLICER_GET, 1246 .validate = GENL_DONT_VALIDATE_STRICT, 1247 .pre_doit = devlink_nl_pre_doit, 1248 .doit = devlink_nl_trap_policer_get_doit, 1249 .post_doit = devlink_nl_post_doit, 1250 .policy = devlink_trap_policer_get_do_nl_policy, 1251 .maxattr = DEVLINK_ATTR_INDEX, 1252 .flags = GENL_CMD_CAP_DO, 1253 }, 1254 { 1255 .cmd = DEVLINK_CMD_TRAP_POLICER_GET, 1256 .dumpit = devlink_nl_trap_policer_get_dumpit, 1257 .policy = devlink_trap_policer_get_dump_nl_policy, 1258 .maxattr = DEVLINK_ATTR_INDEX, 1259 .flags = GENL_CMD_CAP_DUMP, 1260 }, 1261 { 1262 .cmd = DEVLINK_CMD_TRAP_POLICER_SET, 1263 .validate = GENL_DONT_VALIDATE_STRICT, 1264 .pre_doit = devlink_nl_pre_doit, 1265 .doit = devlink_nl_trap_policer_set_doit, 1266 .post_doit = devlink_nl_post_doit, 1267 .policy = devlink_trap_policer_set_nl_policy, 1268 .maxattr = DEVLINK_ATTR_INDEX, 1269 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1270 }, 1271 { 1272 .cmd = DEVLINK_CMD_HEALTH_REPORTER_TEST, 1273 .validate = GENL_DONT_VALIDATE_STRICT, 1274 .pre_doit = devlink_nl_pre_doit_port_optional, 1275 .doit = devlink_nl_health_reporter_test_doit, 1276 .post_doit = devlink_nl_post_doit, 1277 .policy = devlink_health_reporter_test_nl_policy, 1278 .maxattr = DEVLINK_ATTR_INDEX, 1279 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1280 }, 1281 { 1282 .cmd = DEVLINK_CMD_RATE_GET, 1283 .validate = GENL_DONT_VALIDATE_STRICT, 1284 .pre_doit = devlink_nl_pre_doit, 1285 .doit = devlink_nl_rate_get_doit, 1286 .post_doit = devlink_nl_post_doit, 1287 .policy = devlink_rate_get_do_nl_policy, 1288 .maxattr = DEVLINK_ATTR_INDEX, 1289 .flags = GENL_CMD_CAP_DO, 1290 }, 1291 { 1292 .cmd = DEVLINK_CMD_RATE_GET, 1293 .dumpit = devlink_nl_rate_get_dumpit, 1294 .policy = devlink_rate_get_dump_nl_policy, 1295 .maxattr = DEVLINK_ATTR_INDEX, 1296 .flags = GENL_CMD_CAP_DUMP, 1297 }, 1298 { 1299 .cmd = DEVLINK_CMD_RATE_SET, 1300 .validate = GENL_DONT_VALIDATE_STRICT, 1301 .pre_doit = devlink_nl_pre_doit_parent_dev_optional, 1302 .doit = devlink_nl_rate_set_doit, 1303 .post_doit = devlink_nl_post_doit_parent_dev_optional, 1304 .policy = devlink_rate_set_nl_policy, 1305 .maxattr = DEVLINK_ATTR_PARENT_DEV, 1306 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1307 }, 1308 { 1309 .cmd = DEVLINK_CMD_RATE_NEW, 1310 .validate = GENL_DONT_VALIDATE_STRICT, 1311 .pre_doit = devlink_nl_pre_doit_parent_dev_optional, 1312 .doit = devlink_nl_rate_new_doit, 1313 .post_doit = devlink_nl_post_doit_parent_dev_optional, 1314 .policy = devlink_rate_new_nl_policy, 1315 .maxattr = DEVLINK_ATTR_PARENT_DEV, 1316 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1317 }, 1318 { 1319 .cmd = DEVLINK_CMD_RATE_DEL, 1320 .validate = GENL_DONT_VALIDATE_STRICT, 1321 .pre_doit = devlink_nl_pre_doit, 1322 .doit = devlink_nl_rate_del_doit, 1323 .post_doit = devlink_nl_post_doit, 1324 .policy = devlink_rate_del_nl_policy, 1325 .maxattr = DEVLINK_ATTR_INDEX, 1326 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1327 }, 1328 { 1329 .cmd = DEVLINK_CMD_LINECARD_GET, 1330 .validate = GENL_DONT_VALIDATE_STRICT, 1331 .pre_doit = devlink_nl_pre_doit, 1332 .doit = devlink_nl_linecard_get_doit, 1333 .post_doit = devlink_nl_post_doit, 1334 .policy = devlink_linecard_get_do_nl_policy, 1335 .maxattr = DEVLINK_ATTR_INDEX, 1336 .flags = GENL_CMD_CAP_DO, 1337 }, 1338 { 1339 .cmd = DEVLINK_CMD_LINECARD_GET, 1340 .dumpit = devlink_nl_linecard_get_dumpit, 1341 .policy = devlink_linecard_get_dump_nl_policy, 1342 .maxattr = DEVLINK_ATTR_INDEX, 1343 .flags = GENL_CMD_CAP_DUMP, 1344 }, 1345 { 1346 .cmd = DEVLINK_CMD_LINECARD_SET, 1347 .validate = GENL_DONT_VALIDATE_STRICT, 1348 .pre_doit = devlink_nl_pre_doit, 1349 .doit = devlink_nl_linecard_set_doit, 1350 .post_doit = devlink_nl_post_doit, 1351 .policy = devlink_linecard_set_nl_policy, 1352 .maxattr = DEVLINK_ATTR_INDEX, 1353 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1354 }, 1355 { 1356 .cmd = DEVLINK_CMD_SELFTESTS_GET, 1357 .validate = GENL_DONT_VALIDATE_STRICT, 1358 .pre_doit = devlink_nl_pre_doit, 1359 .doit = devlink_nl_selftests_get_doit, 1360 .post_doit = devlink_nl_post_doit, 1361 .policy = devlink_selftests_get_nl_policy, 1362 .maxattr = DEVLINK_ATTR_INDEX, 1363 .flags = GENL_CMD_CAP_DO, 1364 }, 1365 { 1366 .cmd = DEVLINK_CMD_SELFTESTS_GET, 1367 .validate = GENL_DONT_VALIDATE_DUMP, 1368 .dumpit = devlink_nl_selftests_get_dumpit, 1369 .flags = GENL_CMD_CAP_DUMP, 1370 }, 1371 { 1372 .cmd = DEVLINK_CMD_SELFTESTS_RUN, 1373 .validate = GENL_DONT_VALIDATE_STRICT, 1374 .pre_doit = devlink_nl_pre_doit, 1375 .doit = devlink_nl_selftests_run_doit, 1376 .post_doit = devlink_nl_post_doit, 1377 .policy = devlink_selftests_run_nl_policy, 1378 .maxattr = DEVLINK_ATTR_INDEX, 1379 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO, 1380 }, 1381 { 1382 .cmd = DEVLINK_CMD_NOTIFY_FILTER_SET, 1383 .doit = devlink_nl_notify_filter_set_doit, 1384 .policy = devlink_notify_filter_set_nl_policy, 1385 .maxattr = DEVLINK_ATTR_INDEX, 1386 .flags = GENL_CMD_CAP_DO, 1387 }, 1388 }; 1389