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