Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
0002 /*
0003  * include/uapi/linux/devlink.h - Network physical device Netlink interface
0004  * Copyright (c) 2016 Mellanox Technologies. All rights reserved.
0005  * Copyright (c) 2016 Jiri Pirko <jiri@mellanox.com>
0006  *
0007  * This program is free software; you can redistribute it and/or modify
0008  * it under the terms of the GNU General Public License as published by
0009  * the Free Software Foundation; either version 2 of the License, or
0010  * (at your option) any later version.
0011  */
0012 
0013 #ifndef _UAPI_LINUX_DEVLINK_H_
0014 #define _UAPI_LINUX_DEVLINK_H_
0015 
0016 #include <linux/const.h>
0017 
0018 #define DEVLINK_GENL_NAME "devlink"
0019 #define DEVLINK_GENL_VERSION 0x1
0020 #define DEVLINK_GENL_MCGRP_CONFIG_NAME "config"
0021 
0022 enum devlink_command {
0023     /* don't change the order or add anything between, this is ABI! */
0024     DEVLINK_CMD_UNSPEC,
0025 
0026     DEVLINK_CMD_GET,        /* can dump */
0027     DEVLINK_CMD_SET,
0028     DEVLINK_CMD_NEW,
0029     DEVLINK_CMD_DEL,
0030 
0031     DEVLINK_CMD_PORT_GET,       /* can dump */
0032     DEVLINK_CMD_PORT_SET,
0033     DEVLINK_CMD_PORT_NEW,
0034     DEVLINK_CMD_PORT_DEL,
0035 
0036     DEVLINK_CMD_PORT_SPLIT,
0037     DEVLINK_CMD_PORT_UNSPLIT,
0038 
0039     DEVLINK_CMD_SB_GET,     /* can dump */
0040     DEVLINK_CMD_SB_SET,
0041     DEVLINK_CMD_SB_NEW,
0042     DEVLINK_CMD_SB_DEL,
0043 
0044     DEVLINK_CMD_SB_POOL_GET,    /* can dump */
0045     DEVLINK_CMD_SB_POOL_SET,
0046     DEVLINK_CMD_SB_POOL_NEW,
0047     DEVLINK_CMD_SB_POOL_DEL,
0048 
0049     DEVLINK_CMD_SB_PORT_POOL_GET,   /* can dump */
0050     DEVLINK_CMD_SB_PORT_POOL_SET,
0051     DEVLINK_CMD_SB_PORT_POOL_NEW,
0052     DEVLINK_CMD_SB_PORT_POOL_DEL,
0053 
0054     DEVLINK_CMD_SB_TC_POOL_BIND_GET,    /* can dump */
0055     DEVLINK_CMD_SB_TC_POOL_BIND_SET,
0056     DEVLINK_CMD_SB_TC_POOL_BIND_NEW,
0057     DEVLINK_CMD_SB_TC_POOL_BIND_DEL,
0058 
0059     /* Shared buffer occupancy monitoring commands */
0060     DEVLINK_CMD_SB_OCC_SNAPSHOT,
0061     DEVLINK_CMD_SB_OCC_MAX_CLEAR,
0062 
0063     DEVLINK_CMD_ESWITCH_GET,
0064 #define DEVLINK_CMD_ESWITCH_MODE_GET /* obsolete, never use this! */ \
0065     DEVLINK_CMD_ESWITCH_GET
0066 
0067     DEVLINK_CMD_ESWITCH_SET,
0068 #define DEVLINK_CMD_ESWITCH_MODE_SET /* obsolete, never use this! */ \
0069     DEVLINK_CMD_ESWITCH_SET
0070 
0071     DEVLINK_CMD_DPIPE_TABLE_GET,
0072     DEVLINK_CMD_DPIPE_ENTRIES_GET,
0073     DEVLINK_CMD_DPIPE_HEADERS_GET,
0074     DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
0075     DEVLINK_CMD_RESOURCE_SET,
0076     DEVLINK_CMD_RESOURCE_DUMP,
0077 
0078     /* Hot driver reload, makes configuration changes take place. The
0079      * devlink instance is not released during the process.
0080      */
0081     DEVLINK_CMD_RELOAD,
0082 
0083     DEVLINK_CMD_PARAM_GET,      /* can dump */
0084     DEVLINK_CMD_PARAM_SET,
0085     DEVLINK_CMD_PARAM_NEW,
0086     DEVLINK_CMD_PARAM_DEL,
0087 
0088     DEVLINK_CMD_REGION_GET,
0089     DEVLINK_CMD_REGION_SET,
0090     DEVLINK_CMD_REGION_NEW,
0091     DEVLINK_CMD_REGION_DEL,
0092     DEVLINK_CMD_REGION_READ,
0093 
0094     DEVLINK_CMD_PORT_PARAM_GET, /* can dump */
0095     DEVLINK_CMD_PORT_PARAM_SET,
0096     DEVLINK_CMD_PORT_PARAM_NEW,
0097     DEVLINK_CMD_PORT_PARAM_DEL,
0098 
0099     DEVLINK_CMD_INFO_GET,       /* can dump */
0100 
0101     DEVLINK_CMD_HEALTH_REPORTER_GET,
0102     DEVLINK_CMD_HEALTH_REPORTER_SET,
0103     DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
0104     DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE,
0105     DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
0106     DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
0107 
0108     DEVLINK_CMD_FLASH_UPDATE,
0109     DEVLINK_CMD_FLASH_UPDATE_END,       /* notification only */
0110     DEVLINK_CMD_FLASH_UPDATE_STATUS,    /* notification only */
0111 
0112     DEVLINK_CMD_TRAP_GET,       /* can dump */
0113     DEVLINK_CMD_TRAP_SET,
0114     DEVLINK_CMD_TRAP_NEW,
0115     DEVLINK_CMD_TRAP_DEL,
0116 
0117     DEVLINK_CMD_TRAP_GROUP_GET, /* can dump */
0118     DEVLINK_CMD_TRAP_GROUP_SET,
0119     DEVLINK_CMD_TRAP_GROUP_NEW,
0120     DEVLINK_CMD_TRAP_GROUP_DEL,
0121 
0122     DEVLINK_CMD_TRAP_POLICER_GET,   /* can dump */
0123     DEVLINK_CMD_TRAP_POLICER_SET,
0124     DEVLINK_CMD_TRAP_POLICER_NEW,
0125     DEVLINK_CMD_TRAP_POLICER_DEL,
0126 
0127     DEVLINK_CMD_HEALTH_REPORTER_TEST,
0128 
0129     DEVLINK_CMD_RATE_GET,       /* can dump */
0130     DEVLINK_CMD_RATE_SET,
0131     DEVLINK_CMD_RATE_NEW,
0132     DEVLINK_CMD_RATE_DEL,
0133 
0134     DEVLINK_CMD_LINECARD_GET,       /* can dump */
0135     DEVLINK_CMD_LINECARD_SET,
0136     DEVLINK_CMD_LINECARD_NEW,
0137     DEVLINK_CMD_LINECARD_DEL,
0138 
0139     DEVLINK_CMD_SELFTESTS_GET,  /* can dump */
0140     DEVLINK_CMD_SELFTESTS_RUN,
0141 
0142     /* add new commands above here */
0143     __DEVLINK_CMD_MAX,
0144     DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
0145 };
0146 
0147 enum devlink_port_type {
0148     DEVLINK_PORT_TYPE_NOTSET,
0149     DEVLINK_PORT_TYPE_AUTO,
0150     DEVLINK_PORT_TYPE_ETH,
0151     DEVLINK_PORT_TYPE_IB,
0152 };
0153 
0154 enum devlink_sb_pool_type {
0155     DEVLINK_SB_POOL_TYPE_INGRESS,
0156     DEVLINK_SB_POOL_TYPE_EGRESS,
0157 };
0158 
0159 /* static threshold - limiting the maximum number of bytes.
0160  * dynamic threshold - limiting the maximum number of bytes
0161  *   based on the currently available free space in the shared buffer pool.
0162  *   In this mode, the maximum quota is calculated based
0163  *   on the following formula:
0164  *     max_quota = alpha / (1 + alpha) * Free_Buffer
0165  *   While Free_Buffer is the amount of none-occupied buffer associated to
0166  *   the relevant pool.
0167  *   The value range which can be passed is 0-20 and serves
0168  *   for computation of alpha by following formula:
0169  *     alpha = 2 ^ (passed_value - 10)
0170  */
0171 
0172 enum devlink_sb_threshold_type {
0173     DEVLINK_SB_THRESHOLD_TYPE_STATIC,
0174     DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC,
0175 };
0176 
0177 #define DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX 20
0178 
0179 enum devlink_eswitch_mode {
0180     DEVLINK_ESWITCH_MODE_LEGACY,
0181     DEVLINK_ESWITCH_MODE_SWITCHDEV,
0182 };
0183 
0184 enum devlink_eswitch_inline_mode {
0185     DEVLINK_ESWITCH_INLINE_MODE_NONE,
0186     DEVLINK_ESWITCH_INLINE_MODE_LINK,
0187     DEVLINK_ESWITCH_INLINE_MODE_NETWORK,
0188     DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT,
0189 };
0190 
0191 enum devlink_eswitch_encap_mode {
0192     DEVLINK_ESWITCH_ENCAP_MODE_NONE,
0193     DEVLINK_ESWITCH_ENCAP_MODE_BASIC,
0194 };
0195 
0196 enum devlink_port_flavour {
0197     DEVLINK_PORT_FLAVOUR_PHYSICAL, /* Any kind of a port physically
0198                     * facing the user.
0199                     */
0200     DEVLINK_PORT_FLAVOUR_CPU, /* CPU port */
0201     DEVLINK_PORT_FLAVOUR_DSA, /* Distributed switch architecture
0202                    * interconnect port.
0203                    */
0204     DEVLINK_PORT_FLAVOUR_PCI_PF, /* Represents eswitch port for
0205                       * the PCI PF. It is an internal
0206                       * port that faces the PCI PF.
0207                       */
0208     DEVLINK_PORT_FLAVOUR_PCI_VF, /* Represents eswitch port
0209                       * for the PCI VF. It is an internal
0210                       * port that faces the PCI VF.
0211                       */
0212     DEVLINK_PORT_FLAVOUR_VIRTUAL, /* Any virtual port facing the user. */
0213     DEVLINK_PORT_FLAVOUR_UNUSED, /* Port which exists in the switch, but
0214                       * is not used in any way.
0215                       */
0216     DEVLINK_PORT_FLAVOUR_PCI_SF, /* Represents eswitch port
0217                       * for the PCI SF. It is an internal
0218                       * port that faces the PCI SF.
0219                       */
0220 };
0221 
0222 enum devlink_rate_type {
0223     DEVLINK_RATE_TYPE_LEAF,
0224     DEVLINK_RATE_TYPE_NODE,
0225 };
0226 
0227 enum devlink_param_cmode {
0228     DEVLINK_PARAM_CMODE_RUNTIME,
0229     DEVLINK_PARAM_CMODE_DRIVERINIT,
0230     DEVLINK_PARAM_CMODE_PERMANENT,
0231 
0232     /* Add new configuration modes above */
0233     __DEVLINK_PARAM_CMODE_MAX,
0234     DEVLINK_PARAM_CMODE_MAX = __DEVLINK_PARAM_CMODE_MAX - 1
0235 };
0236 
0237 enum devlink_param_fw_load_policy_value {
0238     DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER,
0239     DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH,
0240     DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK,
0241     DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_UNKNOWN,
0242 };
0243 
0244 enum devlink_param_reset_dev_on_drv_probe_value {
0245     DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN,
0246     DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS,
0247     DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER,
0248     DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK,
0249 };
0250 
0251 enum {
0252     DEVLINK_ATTR_STATS_RX_PACKETS,      /* u64 */
0253     DEVLINK_ATTR_STATS_RX_BYTES,        /* u64 */
0254     DEVLINK_ATTR_STATS_RX_DROPPED,      /* u64 */
0255 
0256     __DEVLINK_ATTR_STATS_MAX,
0257     DEVLINK_ATTR_STATS_MAX = __DEVLINK_ATTR_STATS_MAX - 1
0258 };
0259 
0260 /* Specify what sections of a flash component can be overwritten when
0261  * performing an update. Overwriting of firmware binary sections is always
0262  * implicitly assumed to be allowed.
0263  *
0264  * Each section must be documented in
0265  * Documentation/networking/devlink/devlink-flash.rst
0266  *
0267  */
0268 enum {
0269     DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT,
0270     DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT,
0271 
0272     __DEVLINK_FLASH_OVERWRITE_MAX_BIT,
0273     DEVLINK_FLASH_OVERWRITE_MAX_BIT = __DEVLINK_FLASH_OVERWRITE_MAX_BIT - 1
0274 };
0275 
0276 #define DEVLINK_FLASH_OVERWRITE_SETTINGS _BITUL(DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT)
0277 #define DEVLINK_FLASH_OVERWRITE_IDENTIFIERS _BITUL(DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT)
0278 
0279 #define DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS \
0280     (_BITUL(__DEVLINK_FLASH_OVERWRITE_MAX_BIT) - 1)
0281 
0282 enum devlink_attr_selftest_id {
0283     DEVLINK_ATTR_SELFTEST_ID_UNSPEC,
0284     DEVLINK_ATTR_SELFTEST_ID_FLASH, /* flag */
0285 
0286     __DEVLINK_ATTR_SELFTEST_ID_MAX,
0287     DEVLINK_ATTR_SELFTEST_ID_MAX = __DEVLINK_ATTR_SELFTEST_ID_MAX - 1
0288 };
0289 
0290 enum devlink_selftest_status {
0291     DEVLINK_SELFTEST_STATUS_SKIP,
0292     DEVLINK_SELFTEST_STATUS_PASS,
0293     DEVLINK_SELFTEST_STATUS_FAIL
0294 };
0295 
0296 enum devlink_attr_selftest_result {
0297     DEVLINK_ATTR_SELFTEST_RESULT_UNSPEC,
0298     DEVLINK_ATTR_SELFTEST_RESULT,       /* nested */
0299     DEVLINK_ATTR_SELFTEST_RESULT_ID,    /* u32, enum devlink_attr_selftest_id */
0300     DEVLINK_ATTR_SELFTEST_RESULT_STATUS,    /* u8, enum devlink_selftest_status */
0301 
0302     __DEVLINK_ATTR_SELFTEST_RESULT_MAX,
0303     DEVLINK_ATTR_SELFTEST_RESULT_MAX = __DEVLINK_ATTR_SELFTEST_RESULT_MAX - 1
0304 };
0305 
0306 /**
0307  * enum devlink_trap_action - Packet trap action.
0308  * @DEVLINK_TRAP_ACTION_DROP: Packet is dropped by the device and a copy is not
0309  *                            sent to the CPU.
0310  * @DEVLINK_TRAP_ACTION_TRAP: The sole copy of the packet is sent to the CPU.
0311  * @DEVLINK_TRAP_ACTION_MIRROR: Packet is forwarded by the device and a copy is
0312  *                              sent to the CPU.
0313  */
0314 enum devlink_trap_action {
0315     DEVLINK_TRAP_ACTION_DROP,
0316     DEVLINK_TRAP_ACTION_TRAP,
0317     DEVLINK_TRAP_ACTION_MIRROR,
0318 };
0319 
0320 /**
0321  * enum devlink_trap_type - Packet trap type.
0322  * @DEVLINK_TRAP_TYPE_DROP: Trap reason is a drop. Trapped packets are only
0323  *                          processed by devlink and not injected to the
0324  *                          kernel's Rx path.
0325  * @DEVLINK_TRAP_TYPE_EXCEPTION: Trap reason is an exception. Packet was not
0326  *                               forwarded as intended due to an exception
0327  *                               (e.g., missing neighbour entry) and trapped to
0328  *                               control plane for resolution. Trapped packets
0329  *                               are processed by devlink and injected to
0330  *                               the kernel's Rx path.
0331  * @DEVLINK_TRAP_TYPE_CONTROL: Packet was trapped because it is required for
0332  *                             the correct functioning of the control plane.
0333  *                             For example, an ARP request packet. Trapped
0334  *                             packets are injected to the kernel's Rx path,
0335  *                             but not reported to drop monitor.
0336  */
0337 enum devlink_trap_type {
0338     DEVLINK_TRAP_TYPE_DROP,
0339     DEVLINK_TRAP_TYPE_EXCEPTION,
0340     DEVLINK_TRAP_TYPE_CONTROL,
0341 };
0342 
0343 enum {
0344     /* Trap can report input port as metadata */
0345     DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT,
0346     /* Trap can report flow action cookie as metadata */
0347     DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE,
0348 };
0349 
0350 enum devlink_reload_action {
0351     DEVLINK_RELOAD_ACTION_UNSPEC,
0352     DEVLINK_RELOAD_ACTION_DRIVER_REINIT,    /* Driver entities re-instantiation */
0353     DEVLINK_RELOAD_ACTION_FW_ACTIVATE,  /* FW activate */
0354 
0355     /* Add new reload actions above */
0356     __DEVLINK_RELOAD_ACTION_MAX,
0357     DEVLINK_RELOAD_ACTION_MAX = __DEVLINK_RELOAD_ACTION_MAX - 1
0358 };
0359 
0360 enum devlink_reload_limit {
0361     DEVLINK_RELOAD_LIMIT_UNSPEC,    /* unspecified, no constraints */
0362     DEVLINK_RELOAD_LIMIT_NO_RESET,  /* No reset allowed, no down time allowed,
0363                      * no link flap and no configuration is lost.
0364                      */
0365 
0366     /* Add new reload limit above */
0367     __DEVLINK_RELOAD_LIMIT_MAX,
0368     DEVLINK_RELOAD_LIMIT_MAX = __DEVLINK_RELOAD_LIMIT_MAX - 1
0369 };
0370 
0371 #define DEVLINK_RELOAD_LIMITS_VALID_MASK (_BITUL(__DEVLINK_RELOAD_LIMIT_MAX) - 1)
0372 
0373 enum devlink_linecard_state {
0374     DEVLINK_LINECARD_STATE_UNSPEC,
0375     DEVLINK_LINECARD_STATE_UNPROVISIONED,
0376     DEVLINK_LINECARD_STATE_UNPROVISIONING,
0377     DEVLINK_LINECARD_STATE_PROVISIONING,
0378     DEVLINK_LINECARD_STATE_PROVISIONING_FAILED,
0379     DEVLINK_LINECARD_STATE_PROVISIONED,
0380     DEVLINK_LINECARD_STATE_ACTIVE,
0381 
0382     __DEVLINK_LINECARD_STATE_MAX,
0383     DEVLINK_LINECARD_STATE_MAX = __DEVLINK_LINECARD_STATE_MAX - 1
0384 };
0385 
0386 enum devlink_attr {
0387     /* don't change the order or add anything between, this is ABI! */
0388     DEVLINK_ATTR_UNSPEC,
0389 
0390     /* bus name + dev name together are a handle for devlink entity */
0391     DEVLINK_ATTR_BUS_NAME,          /* string */
0392     DEVLINK_ATTR_DEV_NAME,          /* string */
0393 
0394     DEVLINK_ATTR_PORT_INDEX,        /* u32 */
0395     DEVLINK_ATTR_PORT_TYPE,         /* u16 */
0396     DEVLINK_ATTR_PORT_DESIRED_TYPE,     /* u16 */
0397     DEVLINK_ATTR_PORT_NETDEV_IFINDEX,   /* u32 */
0398     DEVLINK_ATTR_PORT_NETDEV_NAME,      /* string */
0399     DEVLINK_ATTR_PORT_IBDEV_NAME,       /* string */
0400     DEVLINK_ATTR_PORT_SPLIT_COUNT,      /* u32 */
0401     DEVLINK_ATTR_PORT_SPLIT_GROUP,      /* u32 */
0402     DEVLINK_ATTR_SB_INDEX,          /* u32 */
0403     DEVLINK_ATTR_SB_SIZE,           /* u32 */
0404     DEVLINK_ATTR_SB_INGRESS_POOL_COUNT, /* u16 */
0405     DEVLINK_ATTR_SB_EGRESS_POOL_COUNT,  /* u16 */
0406     DEVLINK_ATTR_SB_INGRESS_TC_COUNT,   /* u16 */
0407     DEVLINK_ATTR_SB_EGRESS_TC_COUNT,    /* u16 */
0408     DEVLINK_ATTR_SB_POOL_INDEX,     /* u16 */
0409     DEVLINK_ATTR_SB_POOL_TYPE,      /* u8 */
0410     DEVLINK_ATTR_SB_POOL_SIZE,      /* u32 */
0411     DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE,    /* u8 */
0412     DEVLINK_ATTR_SB_THRESHOLD,      /* u32 */
0413     DEVLINK_ATTR_SB_TC_INDEX,       /* u16 */
0414     DEVLINK_ATTR_SB_OCC_CUR,        /* u32 */
0415     DEVLINK_ATTR_SB_OCC_MAX,        /* u32 */
0416     DEVLINK_ATTR_ESWITCH_MODE,      /* u16 */
0417     DEVLINK_ATTR_ESWITCH_INLINE_MODE,   /* u8 */
0418 
0419     DEVLINK_ATTR_DPIPE_TABLES,      /* nested */
0420     DEVLINK_ATTR_DPIPE_TABLE,       /* nested */
0421     DEVLINK_ATTR_DPIPE_TABLE_NAME,      /* string */
0422     DEVLINK_ATTR_DPIPE_TABLE_SIZE,      /* u64 */
0423     DEVLINK_ATTR_DPIPE_TABLE_MATCHES,   /* nested */
0424     DEVLINK_ATTR_DPIPE_TABLE_ACTIONS,   /* nested */
0425     DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED,  /* u8 */
0426 
0427     DEVLINK_ATTR_DPIPE_ENTRIES,     /* nested */
0428     DEVLINK_ATTR_DPIPE_ENTRY,       /* nested */
0429     DEVLINK_ATTR_DPIPE_ENTRY_INDEX,     /* u64 */
0430     DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES,  /* nested */
0431     DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES, /* nested */
0432     DEVLINK_ATTR_DPIPE_ENTRY_COUNTER,   /* u64 */
0433 
0434     DEVLINK_ATTR_DPIPE_MATCH,       /* nested */
0435     DEVLINK_ATTR_DPIPE_MATCH_VALUE,     /* nested */
0436     DEVLINK_ATTR_DPIPE_MATCH_TYPE,      /* u32 */
0437 
0438     DEVLINK_ATTR_DPIPE_ACTION,      /* nested */
0439     DEVLINK_ATTR_DPIPE_ACTION_VALUE,    /* nested */
0440     DEVLINK_ATTR_DPIPE_ACTION_TYPE,     /* u32 */
0441 
0442     DEVLINK_ATTR_DPIPE_VALUE,
0443     DEVLINK_ATTR_DPIPE_VALUE_MASK,
0444     DEVLINK_ATTR_DPIPE_VALUE_MAPPING,   /* u32 */
0445 
0446     DEVLINK_ATTR_DPIPE_HEADERS,     /* nested */
0447     DEVLINK_ATTR_DPIPE_HEADER,      /* nested */
0448     DEVLINK_ATTR_DPIPE_HEADER_NAME,     /* string */
0449     DEVLINK_ATTR_DPIPE_HEADER_ID,       /* u32 */
0450     DEVLINK_ATTR_DPIPE_HEADER_FIELDS,   /* nested */
0451     DEVLINK_ATTR_DPIPE_HEADER_GLOBAL,   /* u8 */
0452     DEVLINK_ATTR_DPIPE_HEADER_INDEX,    /* u32 */
0453 
0454     DEVLINK_ATTR_DPIPE_FIELD,       /* nested */
0455     DEVLINK_ATTR_DPIPE_FIELD_NAME,      /* string */
0456     DEVLINK_ATTR_DPIPE_FIELD_ID,        /* u32 */
0457     DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH,  /* u32 */
0458     DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE,  /* u32 */
0459 
0460     DEVLINK_ATTR_PAD,
0461 
0462     DEVLINK_ATTR_ESWITCH_ENCAP_MODE,    /* u8 */
0463     DEVLINK_ATTR_RESOURCE_LIST,     /* nested */
0464     DEVLINK_ATTR_RESOURCE,          /* nested */
0465     DEVLINK_ATTR_RESOURCE_NAME,     /* string */
0466     DEVLINK_ATTR_RESOURCE_ID,       /* u64 */
0467     DEVLINK_ATTR_RESOURCE_SIZE,     /* u64 */
0468     DEVLINK_ATTR_RESOURCE_SIZE_NEW,     /* u64 */
0469     DEVLINK_ATTR_RESOURCE_SIZE_VALID,   /* u8 */
0470     DEVLINK_ATTR_RESOURCE_SIZE_MIN,     /* u64 */
0471     DEVLINK_ATTR_RESOURCE_SIZE_MAX,     /* u64 */
0472     DEVLINK_ATTR_RESOURCE_SIZE_GRAN,        /* u64 */
0473     DEVLINK_ATTR_RESOURCE_UNIT,     /* u8 */
0474     DEVLINK_ATTR_RESOURCE_OCC,      /* u64 */
0475     DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID,   /* u64 */
0476     DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,/* u64 */
0477 
0478     DEVLINK_ATTR_PORT_FLAVOUR,      /* u16 */
0479     DEVLINK_ATTR_PORT_NUMBER,       /* u32 */
0480     DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER, /* u32 */
0481 
0482     DEVLINK_ATTR_PARAM,         /* nested */
0483     DEVLINK_ATTR_PARAM_NAME,        /* string */
0484     DEVLINK_ATTR_PARAM_GENERIC,     /* flag */
0485     DEVLINK_ATTR_PARAM_TYPE,        /* u8 */
0486     DEVLINK_ATTR_PARAM_VALUES_LIST,     /* nested */
0487     DEVLINK_ATTR_PARAM_VALUE,       /* nested */
0488     DEVLINK_ATTR_PARAM_VALUE_DATA,      /* dynamic */
0489     DEVLINK_ATTR_PARAM_VALUE_CMODE,     /* u8 */
0490 
0491     DEVLINK_ATTR_REGION_NAME,               /* string */
0492     DEVLINK_ATTR_REGION_SIZE,               /* u64 */
0493     DEVLINK_ATTR_REGION_SNAPSHOTS,          /* nested */
0494     DEVLINK_ATTR_REGION_SNAPSHOT,           /* nested */
0495     DEVLINK_ATTR_REGION_SNAPSHOT_ID,        /* u32 */
0496 
0497     DEVLINK_ATTR_REGION_CHUNKS,             /* nested */
0498     DEVLINK_ATTR_REGION_CHUNK,              /* nested */
0499     DEVLINK_ATTR_REGION_CHUNK_DATA,         /* binary */
0500     DEVLINK_ATTR_REGION_CHUNK_ADDR,         /* u64 */
0501     DEVLINK_ATTR_REGION_CHUNK_LEN,          /* u64 */
0502 
0503     DEVLINK_ATTR_INFO_DRIVER_NAME,      /* string */
0504     DEVLINK_ATTR_INFO_SERIAL_NUMBER,    /* string */
0505     DEVLINK_ATTR_INFO_VERSION_FIXED,    /* nested */
0506     DEVLINK_ATTR_INFO_VERSION_RUNNING,  /* nested */
0507     DEVLINK_ATTR_INFO_VERSION_STORED,   /* nested */
0508     DEVLINK_ATTR_INFO_VERSION_NAME,     /* string */
0509     DEVLINK_ATTR_INFO_VERSION_VALUE,    /* string */
0510 
0511     DEVLINK_ATTR_SB_POOL_CELL_SIZE,     /* u32 */
0512 
0513     DEVLINK_ATTR_FMSG,          /* nested */
0514     DEVLINK_ATTR_FMSG_OBJ_NEST_START,   /* flag */
0515     DEVLINK_ATTR_FMSG_PAIR_NEST_START,  /* flag */
0516     DEVLINK_ATTR_FMSG_ARR_NEST_START,   /* flag */
0517     DEVLINK_ATTR_FMSG_NEST_END,     /* flag */
0518     DEVLINK_ATTR_FMSG_OBJ_NAME,     /* string */
0519     DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE,   /* u8 */
0520     DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA,   /* dynamic */
0521 
0522     DEVLINK_ATTR_HEALTH_REPORTER,           /* nested */
0523     DEVLINK_ATTR_HEALTH_REPORTER_NAME,      /* string */
0524     DEVLINK_ATTR_HEALTH_REPORTER_STATE,     /* u8 */
0525     DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT,     /* u64 */
0526     DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT, /* u64 */
0527     DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS,       /* u64 */
0528     DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD,   /* u64 */
0529     DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER,  /* u8 */
0530 
0531     DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME,    /* string */
0532     DEVLINK_ATTR_FLASH_UPDATE_COMPONENT,    /* string */
0533     DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG,   /* string */
0534     DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE,  /* u64 */
0535     DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL, /* u64 */
0536 
0537     DEVLINK_ATTR_PORT_PCI_PF_NUMBER,    /* u16 */
0538     DEVLINK_ATTR_PORT_PCI_VF_NUMBER,    /* u16 */
0539 
0540     DEVLINK_ATTR_STATS,             /* nested */
0541 
0542     DEVLINK_ATTR_TRAP_NAME,             /* string */
0543     /* enum devlink_trap_action */
0544     DEVLINK_ATTR_TRAP_ACTION,           /* u8 */
0545     /* enum devlink_trap_type */
0546     DEVLINK_ATTR_TRAP_TYPE,             /* u8 */
0547     DEVLINK_ATTR_TRAP_GENERIC,          /* flag */
0548     DEVLINK_ATTR_TRAP_METADATA,         /* nested */
0549     DEVLINK_ATTR_TRAP_GROUP_NAME,           /* string */
0550 
0551     DEVLINK_ATTR_RELOAD_FAILED,         /* u8 0 or 1 */
0552 
0553     DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS,    /* u64 */
0554 
0555     DEVLINK_ATTR_NETNS_FD,          /* u32 */
0556     DEVLINK_ATTR_NETNS_PID,         /* u32 */
0557     DEVLINK_ATTR_NETNS_ID,          /* u32 */
0558 
0559     DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP, /* u8 */
0560 
0561     DEVLINK_ATTR_TRAP_POLICER_ID,           /* u32 */
0562     DEVLINK_ATTR_TRAP_POLICER_RATE,         /* u64 */
0563     DEVLINK_ATTR_TRAP_POLICER_BURST,        /* u64 */
0564 
0565     DEVLINK_ATTR_PORT_FUNCTION,         /* nested */
0566 
0567     DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER,  /* string */
0568 
0569     DEVLINK_ATTR_PORT_LANES,            /* u32 */
0570     DEVLINK_ATTR_PORT_SPLITTABLE,           /* u8 */
0571 
0572     DEVLINK_ATTR_PORT_EXTERNAL,     /* u8 */
0573     DEVLINK_ATTR_PORT_CONTROLLER_NUMBER,    /* u32 */
0574 
0575     DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT,   /* u64 */
0576     DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK,   /* bitfield32 */
0577 
0578     DEVLINK_ATTR_RELOAD_ACTION,     /* u8 */
0579     DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED,  /* bitfield32 */
0580     DEVLINK_ATTR_RELOAD_LIMITS,     /* bitfield32 */
0581 
0582     DEVLINK_ATTR_DEV_STATS,         /* nested */
0583     DEVLINK_ATTR_RELOAD_STATS,      /* nested */
0584     DEVLINK_ATTR_RELOAD_STATS_ENTRY,    /* nested */
0585     DEVLINK_ATTR_RELOAD_STATS_LIMIT,    /* u8 */
0586     DEVLINK_ATTR_RELOAD_STATS_VALUE,    /* u32 */
0587     DEVLINK_ATTR_REMOTE_RELOAD_STATS,   /* nested */
0588     DEVLINK_ATTR_RELOAD_ACTION_INFO,        /* nested */
0589     DEVLINK_ATTR_RELOAD_ACTION_STATS,       /* nested */
0590 
0591     DEVLINK_ATTR_PORT_PCI_SF_NUMBER,    /* u32 */
0592 
0593     DEVLINK_ATTR_RATE_TYPE,         /* u16 */
0594     DEVLINK_ATTR_RATE_TX_SHARE,     /* u64 */
0595     DEVLINK_ATTR_RATE_TX_MAX,       /* u64 */
0596     DEVLINK_ATTR_RATE_NODE_NAME,        /* string */
0597     DEVLINK_ATTR_RATE_PARENT_NODE_NAME, /* string */
0598 
0599     DEVLINK_ATTR_REGION_MAX_SNAPSHOTS,  /* u32 */
0600 
0601     DEVLINK_ATTR_LINECARD_INDEX,        /* u32 */
0602     DEVLINK_ATTR_LINECARD_STATE,        /* u8 */
0603     DEVLINK_ATTR_LINECARD_TYPE,     /* string */
0604     DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES,  /* nested */
0605 
0606     DEVLINK_ATTR_NESTED_DEVLINK,        /* nested */
0607 
0608     DEVLINK_ATTR_SELFTESTS,         /* nested */
0609 
0610     /* add new attributes above here, update the policy in devlink.c */
0611 
0612     __DEVLINK_ATTR_MAX,
0613     DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1
0614 };
0615 
0616 /* Mapping between internal resource described by the field and system
0617  * structure
0618  */
0619 enum devlink_dpipe_field_mapping_type {
0620     DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE,
0621     DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX,
0622 };
0623 
0624 /* Match type - specify the type of the match */
0625 enum devlink_dpipe_match_type {
0626     DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT,
0627 };
0628 
0629 /* Action type - specify the action type */
0630 enum devlink_dpipe_action_type {
0631     DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY,
0632 };
0633 
0634 enum devlink_dpipe_field_ethernet_id {
0635     DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC,
0636 };
0637 
0638 enum devlink_dpipe_field_ipv4_id {
0639     DEVLINK_DPIPE_FIELD_IPV4_DST_IP,
0640 };
0641 
0642 enum devlink_dpipe_field_ipv6_id {
0643     DEVLINK_DPIPE_FIELD_IPV6_DST_IP,
0644 };
0645 
0646 enum devlink_dpipe_header_id {
0647     DEVLINK_DPIPE_HEADER_ETHERNET,
0648     DEVLINK_DPIPE_HEADER_IPV4,
0649     DEVLINK_DPIPE_HEADER_IPV6,
0650 };
0651 
0652 enum devlink_resource_unit {
0653     DEVLINK_RESOURCE_UNIT_ENTRY,
0654 };
0655 
0656 enum devlink_port_function_attr {
0657     DEVLINK_PORT_FUNCTION_ATTR_UNSPEC,
0658     DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR, /* binary */
0659     DEVLINK_PORT_FN_ATTR_STATE, /* u8 */
0660     DEVLINK_PORT_FN_ATTR_OPSTATE,   /* u8 */
0661 
0662     __DEVLINK_PORT_FUNCTION_ATTR_MAX,
0663     DEVLINK_PORT_FUNCTION_ATTR_MAX = __DEVLINK_PORT_FUNCTION_ATTR_MAX - 1
0664 };
0665 
0666 enum devlink_port_fn_state {
0667     DEVLINK_PORT_FN_STATE_INACTIVE,
0668     DEVLINK_PORT_FN_STATE_ACTIVE,
0669 };
0670 
0671 /**
0672  * enum devlink_port_fn_opstate - indicates operational state of the function
0673  * @DEVLINK_PORT_FN_OPSTATE_ATTACHED: Driver is attached to the function.
0674  * For graceful tear down of the function, after inactivation of the
0675  * function, user should wait for operational state to turn DETACHED.
0676  * @DEVLINK_PORT_FN_OPSTATE_DETACHED: Driver is detached from the function.
0677  * It is safe to delete the port.
0678  */
0679 enum devlink_port_fn_opstate {
0680     DEVLINK_PORT_FN_OPSTATE_DETACHED,
0681     DEVLINK_PORT_FN_OPSTATE_ATTACHED,
0682 };
0683 
0684 #endif /* _UAPI_LINUX_DEVLINK_H_ */