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