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