757 lines · 24.4 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note *//* * Copyright (c) 2008-2011, Intel Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston, MA 02111-1307 USA. * * Author: Lucy Liu <lucy.liu@intel.com> */ #ifndef __LINUX_DCBNL_H__#define __LINUX_DCBNL_H__ #include <linux/types.h> /* IEEE 802.1Qaz std supported values */#define IEEE_8021QAZ_MAX_TCS	8 #define IEEE_8021QAZ_TSA_STRICT		0#define IEEE_8021QAZ_TSA_CB_SHAPER	1#define IEEE_8021QAZ_TSA_ETS		2#define IEEE_8021QAZ_TSA_VENDOR		255 /* This structure contains the IEEE 802.1Qaz ETS managed object * * @willing: willing bit in ETS configuration TLV * @ets_cap: indicates supported capacity of ets feature * @cbs: credit based shaper ets algorithm supported * @tc_tx_bw: tc tx bandwidth indexed by traffic class * @tc_rx_bw: tc rx bandwidth indexed by traffic class * @tc_tsa: TSA Assignment table, indexed by traffic class * @prio_tc: priority assignment table mapping 8021Qp to traffic class * @tc_reco_bw: recommended tc bandwidth indexed by traffic class for TLV * @tc_reco_tsa: recommended tc bandwidth indexed by traffic class for TLV * @reco_prio_tc: recommended tc tx bandwidth indexed by traffic class for TLV * * Recommended values are used to set fields in the ETS recommendation TLV * with hardware offloaded LLDP. * * ---- *  TSA Assignment 8 bit identifiers *	0	strict priority *	1	credit-based shaper *	2	enhanced transmission selection *	3-254	reserved *	255	vendor specific */struct ieee_ets {	__u8	willing;	__u8	ets_cap;	__u8	cbs;	__u8	tc_tx_bw[IEEE_8021QAZ_MAX_TCS];	__u8	tc_rx_bw[IEEE_8021QAZ_MAX_TCS];	__u8	tc_tsa[IEEE_8021QAZ_MAX_TCS];	__u8	prio_tc[IEEE_8021QAZ_MAX_TCS];	__u8	tc_reco_bw[IEEE_8021QAZ_MAX_TCS];	__u8	tc_reco_tsa[IEEE_8021QAZ_MAX_TCS];	__u8	reco_prio_tc[IEEE_8021QAZ_MAX_TCS];}; /* This structure contains rate limit extension to the IEEE 802.1Qaz ETS * managed object. * Values are 64 bits long and specified in Kbps to enable usage over both * slow and very fast networks. * * @tc_maxrate: maximal tc tx bandwidth indexed by traffic class */struct ieee_maxrate {	__u64	tc_maxrate[IEEE_8021QAZ_MAX_TCS];}; enum dcbnl_cndd_states {	DCB_CNDD_RESET = 0,	DCB_CNDD_EDGE,	DCB_CNDD_INTERIOR,	DCB_CNDD_INTERIOR_READY,}; /* This structure contains the IEEE 802.1Qau QCN managed object. * *@rpg_enable: enable QCN RP *@rppp_max_rps: maximum number of RPs allowed for this CNPV on this port *@rpg_time_reset: time between rate increases if no CNMs received. *		   given in u-seconds *@rpg_byte_reset: transmitted data between rate increases if no CNMs received. *		   given in Bytes *@rpg_threshold: The number of times rpByteStage or rpTimeStage can count *		   before RP rate control state machine advances states *@rpg_max_rate: the maxinun rate, in Mbits per second, *		 at which an RP can transmit *@rpg_ai_rate: The rate, in Mbits per second, *		used to increase rpTargetRate in the RPR_ACTIVE_INCREASE *@rpg_hai_rate: The rate, in Mbits per second, *		 used to increase rpTargetRate in the RPR_HYPER_INCREASE state *@rpg_gd: Upon CNM receive, flow rate is limited to (Fb/Gd)*CurrentRate. *	   rpgGd is given as log2(Gd), where Gd may only be powers of 2 *@rpg_min_dec_fac: The minimum factor by which the current transmit rate *		    can be changed by reception of a CNM. *		    value is given as percentage (1-100) *@rpg_min_rate: The minimum value, in bits per second, for rate to limit *@cndd_state_machine: The state of the congestion notification domain *		       defense state machine, as defined by IEEE 802.3Qau *		       section 32.1.1. In the interior ready state, *		       the QCN capable hardware may add CN-TAG TLV to the *		       outgoing traffic, to specifically identify outgoing *		       flows. */ struct ieee_qcn {	__u8 rpg_enable[IEEE_8021QAZ_MAX_TCS];	__u32 rppp_max_rps[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_time_reset[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_byte_reset[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_threshold[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_max_rate[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_ai_rate[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_hai_rate[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_gd[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_min_dec_fac[IEEE_8021QAZ_MAX_TCS];	__u32 rpg_min_rate[IEEE_8021QAZ_MAX_TCS];	__u32 cndd_state_machine[IEEE_8021QAZ_MAX_TCS];}; /* This structure contains the IEEE 802.1Qau QCN statistics. * *@rppp_rp_centiseconds: the number of RP-centiseconds accumulated *			 by RPs at this priority level on this Port *@rppp_created_rps: number of active RPs(flows) that react to CNMs */ struct ieee_qcn_stats {	__u64 rppp_rp_centiseconds[IEEE_8021QAZ_MAX_TCS];	__u32 rppp_created_rps[IEEE_8021QAZ_MAX_TCS];}; /* This structure contains the IEEE 802.1Qaz PFC managed object * * @pfc_cap: Indicates the number of traffic classes on the local device *	     that may simultaneously have PFC enabled. * @pfc_en: bitmap indicating pfc enabled traffic classes * @mbc: enable macsec bypass capability * @delay: the allowance made for a round-trip propagation delay of the *	   link in bits. * @requests: count of the sent pfc frames * @indications: count of the received pfc frames */struct ieee_pfc {	__u8	pfc_cap;	__u8	pfc_en;	__u8	mbc;	__u16	delay;	__u64	requests[IEEE_8021QAZ_MAX_TCS];	__u64	indications[IEEE_8021QAZ_MAX_TCS];}; /* CEE DCBX std supported values */#define CEE_DCBX_MAX_PGS	8#define CEE_DCBX_MAX_PRIO	8 /** * struct cee_pg - CEE Priority-Group managed object * * @willing: willing bit in the PG tlv * @error: error bit in the PG tlv * @pg_en: enable bit of the PG feature * @tcs_supported: number of traffic classes supported * @pg_bw: bandwidth percentage for each priority group * @prio_pg: priority to PG mapping indexed by priority */struct cee_pg {	__u8    willing;	__u8    error;	__u8    pg_en;	__u8    tcs_supported;	__u8    pg_bw[CEE_DCBX_MAX_PGS];	__u8    prio_pg[CEE_DCBX_MAX_PGS];}; /** * struct cee_pfc - CEE PFC managed object * * @willing: willing bit in the PFC tlv * @error: error bit in the PFC tlv * @pfc_en: bitmap indicating pfc enabled traffic classes * @tcs_supported: number of traffic classes supported */struct cee_pfc {	__u8    willing;	__u8    error;	__u8    pfc_en;	__u8    tcs_supported;}; /* IEEE 802.1Qaz std supported values */#define IEEE_8021QAZ_APP_SEL_ETHERTYPE	1#define IEEE_8021QAZ_APP_SEL_STREAM	2#define IEEE_8021QAZ_APP_SEL_DGRAM	3#define IEEE_8021QAZ_APP_SEL_ANY	4#define IEEE_8021QAZ_APP_SEL_DSCP       5 /* This structure contains the IEEE 802.1Qaz APP managed object. This * object is also used for the CEE std as well. * * @selector: protocol identifier type * @protocol: protocol of type indicated * @priority: 3-bit unsigned integer indicating priority for IEEE *            8-bit 802.1p user priority bitmap for CEE * * ---- *  Selector field values for IEEE 802.1Qaz *	0	Reserved *	1	Ethertype *	2	Well known port number over TCP or SCTP *	3	Well known port number over UDP or DCCP *	4	Well known port number over TCP, SCTP, UDP, or DCCP *	5-7	Reserved * *  Selector field values for CEE *	0	Ethertype *	1	Well known port number over TCP or UDP *	2-3	Reserved */struct dcb_app {	__u8	selector;	__u8	priority;	__u16	protocol;}; /** * struct dcb_peer_app_info - APP feature information sent by the peer * * @willing: willing bit in the peer APP tlv * @error: error bit in the peer APP tlv * * In addition to this information the full peer APP tlv also contains * a table of 'app_count' APP objects defined above. */struct dcb_peer_app_info {	__u8	willing;	__u8	error;}; struct dcbmsg {	__u8               dcb_family;	__u8               cmd;	__u16              dcb_pad;}; /** * enum dcbnl_commands - supported DCB commands * * @DCB_CMD_UNDEFINED: unspecified command to catch errors * @DCB_CMD_GSTATE: request the state of DCB in the device * @DCB_CMD_SSTATE: set the state of DCB in the device * @DCB_CMD_PGTX_GCFG: request the priority group configuration for Tx * @DCB_CMD_PGTX_SCFG: set the priority group configuration for Tx * @DCB_CMD_PGRX_GCFG: request the priority group configuration for Rx * @DCB_CMD_PGRX_SCFG: set the priority group configuration for Rx * @DCB_CMD_PFC_GCFG: request the priority flow control configuration * @DCB_CMD_PFC_SCFG: set the priority flow control configuration * @DCB_CMD_SET_ALL: apply all changes to the underlying device * @DCB_CMD_GPERM_HWADDR: get the permanent MAC address of the underlying *                        device.  Only useful when using bonding. * @DCB_CMD_GCAP: request the DCB capabilities of the device * @DCB_CMD_GNUMTCS: get the number of traffic classes currently supported * @DCB_CMD_SNUMTCS: set the number of traffic classes * @DCB_CMD_GBCN: set backward congestion notification configuration * @DCB_CMD_SBCN: get backward congestion notification configration. * @DCB_CMD_GAPP: get application protocol configuration * @DCB_CMD_SAPP: set application protocol configuration * @DCB_CMD_IEEE_SET: set IEEE 802.1Qaz configuration * @DCB_CMD_IEEE_GET: get IEEE 802.1Qaz configuration * @DCB_CMD_GDCBX: get DCBX engine configuration * @DCB_CMD_SDCBX: set DCBX engine configuration * @DCB_CMD_GFEATCFG: get DCBX features flags * @DCB_CMD_SFEATCFG: set DCBX features negotiation flags * @DCB_CMD_CEE_GET: get CEE aggregated configuration * @DCB_CMD_IEEE_DEL: delete IEEE 802.1Qaz configuration */enum dcbnl_commands {	DCB_CMD_UNDEFINED, 	DCB_CMD_GSTATE,	DCB_CMD_SSTATE, 	DCB_CMD_PGTX_GCFG,	DCB_CMD_PGTX_SCFG,	DCB_CMD_PGRX_GCFG,	DCB_CMD_PGRX_SCFG, 	DCB_CMD_PFC_GCFG,	DCB_CMD_PFC_SCFG, 	DCB_CMD_SET_ALL, 	DCB_CMD_GPERM_HWADDR, 	DCB_CMD_GCAP, 	DCB_CMD_GNUMTCS,	DCB_CMD_SNUMTCS, 	DCB_CMD_PFC_GSTATE,	DCB_CMD_PFC_SSTATE, 	DCB_CMD_BCN_GCFG,	DCB_CMD_BCN_SCFG, 	DCB_CMD_GAPP,	DCB_CMD_SAPP, 	DCB_CMD_IEEE_SET,	DCB_CMD_IEEE_GET, 	DCB_CMD_GDCBX,	DCB_CMD_SDCBX, 	DCB_CMD_GFEATCFG,	DCB_CMD_SFEATCFG, 	DCB_CMD_CEE_GET,	DCB_CMD_IEEE_DEL, 	__DCB_CMD_ENUM_MAX,	DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,}; /** * enum dcbnl_attrs - DCB top-level netlink attributes * * @DCB_ATTR_UNDEFINED: unspecified attribute to catch errors * @DCB_ATTR_IFNAME: interface name of the underlying device (NLA_STRING) * @DCB_ATTR_STATE: enable state of DCB in the device (NLA_U8) * @DCB_ATTR_PFC_STATE: enable state of PFC in the device (NLA_U8) * @DCB_ATTR_PFC_CFG: priority flow control configuration (NLA_NESTED) * @DCB_ATTR_NUM_TC: number of traffic classes supported in the device (NLA_U8) * @DCB_ATTR_PG_CFG: priority group configuration (NLA_NESTED) * @DCB_ATTR_SET_ALL: bool to commit changes to hardware or not (NLA_U8) * @DCB_ATTR_PERM_HWADDR: MAC address of the physical device (NLA_NESTED) * @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED) * @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED) * @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED) * @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED) * @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8) * @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED) * @DCB_ATTR_CEE: CEE std supported attributes (NLA_NESTED) */enum dcbnl_attrs {	DCB_ATTR_UNDEFINED, 	DCB_ATTR_IFNAME,	DCB_ATTR_STATE,	DCB_ATTR_PFC_STATE,	DCB_ATTR_PFC_CFG,	DCB_ATTR_NUM_TC,	DCB_ATTR_PG_CFG,	DCB_ATTR_SET_ALL,	DCB_ATTR_PERM_HWADDR,	DCB_ATTR_CAP,	DCB_ATTR_NUMTCS,	DCB_ATTR_BCN,	DCB_ATTR_APP, 	/* IEEE std attributes */	DCB_ATTR_IEEE, 	DCB_ATTR_DCBX,	DCB_ATTR_FEATCFG, 	/* CEE nested attributes */	DCB_ATTR_CEE, 	__DCB_ATTR_ENUM_MAX,	DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,}; /** * enum ieee_attrs - IEEE 802.1Qaz get/set attributes * * @DCB_ATTR_IEEE_UNSPEC: unspecified * @DCB_ATTR_IEEE_ETS: negotiated ETS configuration * @DCB_ATTR_IEEE_PFC: negotiated PFC configuration * @DCB_ATTR_IEEE_APP_TABLE: negotiated APP configuration * @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only * @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only * @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only */enum ieee_attrs {	DCB_ATTR_IEEE_UNSPEC,	DCB_ATTR_IEEE_ETS,	DCB_ATTR_IEEE_PFC,	DCB_ATTR_IEEE_APP_TABLE,	DCB_ATTR_IEEE_PEER_ETS,	DCB_ATTR_IEEE_PEER_PFC,	DCB_ATTR_IEEE_PEER_APP,	DCB_ATTR_IEEE_MAXRATE,	DCB_ATTR_IEEE_QCN,	DCB_ATTR_IEEE_QCN_STATS,	__DCB_ATTR_IEEE_MAX};#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1) enum ieee_attrs_app {	DCB_ATTR_IEEE_APP_UNSPEC,	DCB_ATTR_IEEE_APP,	__DCB_ATTR_IEEE_APP_MAX};#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1) /** * enum cee_attrs - CEE DCBX get attributes. * * @DCB_ATTR_CEE_UNSPEC: unspecified * @DCB_ATTR_CEE_PEER_PG: peer PG configuration - get only * @DCB_ATTR_CEE_PEER_PFC: peer PFC configuration - get only * @DCB_ATTR_CEE_PEER_APP_TABLE: peer APP tlv - get only * @DCB_ATTR_CEE_TX_PG: TX PG configuration (DCB_CMD_PGTX_GCFG) * @DCB_ATTR_CEE_RX_PG: RX PG configuration (DCB_CMD_PGRX_GCFG) * @DCB_ATTR_CEE_PFC: PFC configuration (DCB_CMD_PFC_GCFG) * @DCB_ATTR_CEE_APP_TABLE: APP configuration (multi DCB_CMD_GAPP) * @DCB_ATTR_CEE_FEAT: DCBX features flags (DCB_CMD_GFEATCFG) * * An aggregated collection of the cee std negotiated parameters. */enum cee_attrs {	DCB_ATTR_CEE_UNSPEC,	DCB_ATTR_CEE_PEER_PG,	DCB_ATTR_CEE_PEER_PFC,	DCB_ATTR_CEE_PEER_APP_TABLE,	DCB_ATTR_CEE_TX_PG,	DCB_ATTR_CEE_RX_PG,	DCB_ATTR_CEE_PFC,	DCB_ATTR_CEE_APP_TABLE,	DCB_ATTR_CEE_FEAT,	__DCB_ATTR_CEE_MAX};#define DCB_ATTR_CEE_MAX (__DCB_ATTR_CEE_MAX - 1) enum peer_app_attr {	DCB_ATTR_CEE_PEER_APP_UNSPEC,	DCB_ATTR_CEE_PEER_APP_INFO,	DCB_ATTR_CEE_PEER_APP,	__DCB_ATTR_CEE_PEER_APP_MAX};#define DCB_ATTR_CEE_PEER_APP_MAX (__DCB_ATTR_CEE_PEER_APP_MAX - 1) enum cee_attrs_app {	DCB_ATTR_CEE_APP_UNSPEC,	DCB_ATTR_CEE_APP,	__DCB_ATTR_CEE_APP_MAX};#define DCB_ATTR_CEE_APP_MAX (__DCB_ATTR_CEE_APP_MAX - 1) /** * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs * * @DCB_PFC_UP_ATTR_UNDEFINED: unspecified attribute to catch errors * @DCB_PFC_UP_ATTR_0: Priority Flow Control value for User Priority 0 (NLA_U8) * @DCB_PFC_UP_ATTR_1: Priority Flow Control value for User Priority 1 (NLA_U8) * @DCB_PFC_UP_ATTR_2: Priority Flow Control value for User Priority 2 (NLA_U8) * @DCB_PFC_UP_ATTR_3: Priority Flow Control value for User Priority 3 (NLA_U8) * @DCB_PFC_UP_ATTR_4: Priority Flow Control value for User Priority 4 (NLA_U8) * @DCB_PFC_UP_ATTR_5: Priority Flow Control value for User Priority 5 (NLA_U8) * @DCB_PFC_UP_ATTR_6: Priority Flow Control value for User Priority 6 (NLA_U8) * @DCB_PFC_UP_ATTR_7: Priority Flow Control value for User Priority 7 (NLA_U8) * @DCB_PFC_UP_ATTR_MAX: highest attribute number currently defined * @DCB_PFC_UP_ATTR_ALL: apply to all priority flow control attrs (NLA_FLAG) * */enum dcbnl_pfc_up_attrs {	DCB_PFC_UP_ATTR_UNDEFINED, 	DCB_PFC_UP_ATTR_0,	DCB_PFC_UP_ATTR_1,	DCB_PFC_UP_ATTR_2,	DCB_PFC_UP_ATTR_3,	DCB_PFC_UP_ATTR_4,	DCB_PFC_UP_ATTR_5,	DCB_PFC_UP_ATTR_6,	DCB_PFC_UP_ATTR_7,	DCB_PFC_UP_ATTR_ALL, 	__DCB_PFC_UP_ATTR_ENUM_MAX,	DCB_PFC_UP_ATTR_MAX = __DCB_PFC_UP_ATTR_ENUM_MAX - 1,}; /** * enum dcbnl_pg_attrs - DCB Priority Group attributes * * @DCB_PG_ATTR_UNDEFINED: unspecified attribute to catch errors

Lines 1–500 of 757.