xref: /OK3568_Linux_fs/kernel/include/uapi/linux/dcbnl.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2008-2011, Intel Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms and conditions of the GNU General Public License,
7*4882a593Smuzhiyun  * version 2, as published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * You should have received a copy of the GNU General Public License along with
15*4882a593Smuzhiyun  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16*4882a593Smuzhiyun  * Place - Suite 330, Boston, MA 02111-1307 USA.
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  * Author: Lucy Liu <lucy.liu@intel.com>
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #ifndef __LINUX_DCBNL_H__
22*4882a593Smuzhiyun #define __LINUX_DCBNL_H__
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #include <linux/types.h>
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun /* IEEE 802.1Qaz std supported values */
27*4882a593Smuzhiyun #define IEEE_8021QAZ_MAX_TCS	8
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define IEEE_8021QAZ_TSA_STRICT		0
30*4882a593Smuzhiyun #define IEEE_8021QAZ_TSA_CB_SHAPER	1
31*4882a593Smuzhiyun #define IEEE_8021QAZ_TSA_ETS		2
32*4882a593Smuzhiyun #define IEEE_8021QAZ_TSA_VENDOR		255
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /* This structure contains the IEEE 802.1Qaz ETS managed object
35*4882a593Smuzhiyun  *
36*4882a593Smuzhiyun  * @willing: willing bit in ETS configuration TLV
37*4882a593Smuzhiyun  * @ets_cap: indicates supported capacity of ets feature
38*4882a593Smuzhiyun  * @cbs: credit based shaper ets algorithm supported
39*4882a593Smuzhiyun  * @tc_tx_bw: tc tx bandwidth indexed by traffic class
40*4882a593Smuzhiyun  * @tc_rx_bw: tc rx bandwidth indexed by traffic class
41*4882a593Smuzhiyun  * @tc_tsa: TSA Assignment table, indexed by traffic class
42*4882a593Smuzhiyun  * @prio_tc: priority assignment table mapping 8021Qp to traffic class
43*4882a593Smuzhiyun  * @tc_reco_bw: recommended tc bandwidth indexed by traffic class for TLV
44*4882a593Smuzhiyun  * @tc_reco_tsa: recommended tc bandwidth indexed by traffic class for TLV
45*4882a593Smuzhiyun  * @reco_prio_tc: recommended tc tx bandwidth indexed by traffic class for TLV
46*4882a593Smuzhiyun  *
47*4882a593Smuzhiyun  * Recommended values are used to set fields in the ETS recommendation TLV
48*4882a593Smuzhiyun  * with hardware offloaded LLDP.
49*4882a593Smuzhiyun  *
50*4882a593Smuzhiyun  * ----
51*4882a593Smuzhiyun  *  TSA Assignment 8 bit identifiers
52*4882a593Smuzhiyun  *	0	strict priority
53*4882a593Smuzhiyun  *	1	credit-based shaper
54*4882a593Smuzhiyun  *	2	enhanced transmission selection
55*4882a593Smuzhiyun  *	3-254	reserved
56*4882a593Smuzhiyun  *	255	vendor specific
57*4882a593Smuzhiyun  */
58*4882a593Smuzhiyun struct ieee_ets {
59*4882a593Smuzhiyun 	__u8	willing;
60*4882a593Smuzhiyun 	__u8	ets_cap;
61*4882a593Smuzhiyun 	__u8	cbs;
62*4882a593Smuzhiyun 	__u8	tc_tx_bw[IEEE_8021QAZ_MAX_TCS];
63*4882a593Smuzhiyun 	__u8	tc_rx_bw[IEEE_8021QAZ_MAX_TCS];
64*4882a593Smuzhiyun 	__u8	tc_tsa[IEEE_8021QAZ_MAX_TCS];
65*4882a593Smuzhiyun 	__u8	prio_tc[IEEE_8021QAZ_MAX_TCS];
66*4882a593Smuzhiyun 	__u8	tc_reco_bw[IEEE_8021QAZ_MAX_TCS];
67*4882a593Smuzhiyun 	__u8	tc_reco_tsa[IEEE_8021QAZ_MAX_TCS];
68*4882a593Smuzhiyun 	__u8	reco_prio_tc[IEEE_8021QAZ_MAX_TCS];
69*4882a593Smuzhiyun };
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun /* This structure contains rate limit extension to the IEEE 802.1Qaz ETS
72*4882a593Smuzhiyun  * managed object.
73*4882a593Smuzhiyun  * Values are 64 bits long and specified in Kbps to enable usage over both
74*4882a593Smuzhiyun  * slow and very fast networks.
75*4882a593Smuzhiyun  *
76*4882a593Smuzhiyun  * @tc_maxrate: maximal tc tx bandwidth indexed by traffic class
77*4882a593Smuzhiyun  */
78*4882a593Smuzhiyun struct ieee_maxrate {
79*4882a593Smuzhiyun 	__u64	tc_maxrate[IEEE_8021QAZ_MAX_TCS];
80*4882a593Smuzhiyun };
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun enum dcbnl_cndd_states {
83*4882a593Smuzhiyun 	DCB_CNDD_RESET = 0,
84*4882a593Smuzhiyun 	DCB_CNDD_EDGE,
85*4882a593Smuzhiyun 	DCB_CNDD_INTERIOR,
86*4882a593Smuzhiyun 	DCB_CNDD_INTERIOR_READY,
87*4882a593Smuzhiyun };
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /* This structure contains the IEEE 802.1Qau QCN managed object.
90*4882a593Smuzhiyun  *
91*4882a593Smuzhiyun  *@rpg_enable: enable QCN RP
92*4882a593Smuzhiyun  *@rppp_max_rps: maximum number of RPs allowed for this CNPV on this port
93*4882a593Smuzhiyun  *@rpg_time_reset: time between rate increases if no CNMs received.
94*4882a593Smuzhiyun  *		   given in u-seconds
95*4882a593Smuzhiyun  *@rpg_byte_reset: transmitted data between rate increases if no CNMs received.
96*4882a593Smuzhiyun  *		   given in Bytes
97*4882a593Smuzhiyun  *@rpg_threshold: The number of times rpByteStage or rpTimeStage can count
98*4882a593Smuzhiyun  *		   before RP rate control state machine advances states
99*4882a593Smuzhiyun  *@rpg_max_rate: the maxinun rate, in Mbits per second,
100*4882a593Smuzhiyun  *		 at which an RP can transmit
101*4882a593Smuzhiyun  *@rpg_ai_rate: The rate, in Mbits per second,
102*4882a593Smuzhiyun  *		used to increase rpTargetRate in the RPR_ACTIVE_INCREASE
103*4882a593Smuzhiyun  *@rpg_hai_rate: The rate, in Mbits per second,
104*4882a593Smuzhiyun  *		 used to increase rpTargetRate in the RPR_HYPER_INCREASE state
105*4882a593Smuzhiyun  *@rpg_gd: Upon CNM receive, flow rate is limited to (Fb/Gd)*CurrentRate.
106*4882a593Smuzhiyun  *	   rpgGd is given as log2(Gd), where Gd may only be powers of 2
107*4882a593Smuzhiyun  *@rpg_min_dec_fac: The minimum factor by which the current transmit rate
108*4882a593Smuzhiyun  *		    can be changed by reception of a CNM.
109*4882a593Smuzhiyun  *		    value is given as percentage (1-100)
110*4882a593Smuzhiyun  *@rpg_min_rate: The minimum value, in bits per second, for rate to limit
111*4882a593Smuzhiyun  *@cndd_state_machine: The state of the congestion notification domain
112*4882a593Smuzhiyun  *		       defense state machine, as defined by IEEE 802.3Qau
113*4882a593Smuzhiyun  *		       section 32.1.1. In the interior ready state,
114*4882a593Smuzhiyun  *		       the QCN capable hardware may add CN-TAG TLV to the
115*4882a593Smuzhiyun  *		       outgoing traffic, to specifically identify outgoing
116*4882a593Smuzhiyun  *		       flows.
117*4882a593Smuzhiyun  */
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun struct ieee_qcn {
120*4882a593Smuzhiyun 	__u8 rpg_enable[IEEE_8021QAZ_MAX_TCS];
121*4882a593Smuzhiyun 	__u32 rppp_max_rps[IEEE_8021QAZ_MAX_TCS];
122*4882a593Smuzhiyun 	__u32 rpg_time_reset[IEEE_8021QAZ_MAX_TCS];
123*4882a593Smuzhiyun 	__u32 rpg_byte_reset[IEEE_8021QAZ_MAX_TCS];
124*4882a593Smuzhiyun 	__u32 rpg_threshold[IEEE_8021QAZ_MAX_TCS];
125*4882a593Smuzhiyun 	__u32 rpg_max_rate[IEEE_8021QAZ_MAX_TCS];
126*4882a593Smuzhiyun 	__u32 rpg_ai_rate[IEEE_8021QAZ_MAX_TCS];
127*4882a593Smuzhiyun 	__u32 rpg_hai_rate[IEEE_8021QAZ_MAX_TCS];
128*4882a593Smuzhiyun 	__u32 rpg_gd[IEEE_8021QAZ_MAX_TCS];
129*4882a593Smuzhiyun 	__u32 rpg_min_dec_fac[IEEE_8021QAZ_MAX_TCS];
130*4882a593Smuzhiyun 	__u32 rpg_min_rate[IEEE_8021QAZ_MAX_TCS];
131*4882a593Smuzhiyun 	__u32 cndd_state_machine[IEEE_8021QAZ_MAX_TCS];
132*4882a593Smuzhiyun };
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun /* This structure contains the IEEE 802.1Qau QCN statistics.
135*4882a593Smuzhiyun  *
136*4882a593Smuzhiyun  *@rppp_rp_centiseconds: the number of RP-centiseconds accumulated
137*4882a593Smuzhiyun  *			 by RPs at this priority level on this Port
138*4882a593Smuzhiyun  *@rppp_created_rps: number of active RPs(flows) that react to CNMs
139*4882a593Smuzhiyun  */
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun struct ieee_qcn_stats {
142*4882a593Smuzhiyun 	__u64 rppp_rp_centiseconds[IEEE_8021QAZ_MAX_TCS];
143*4882a593Smuzhiyun 	__u32 rppp_created_rps[IEEE_8021QAZ_MAX_TCS];
144*4882a593Smuzhiyun };
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun /* This structure contains the IEEE 802.1Qaz PFC managed object
147*4882a593Smuzhiyun  *
148*4882a593Smuzhiyun  * @pfc_cap: Indicates the number of traffic classes on the local device
149*4882a593Smuzhiyun  *	     that may simultaneously have PFC enabled.
150*4882a593Smuzhiyun  * @pfc_en: bitmap indicating pfc enabled traffic classes
151*4882a593Smuzhiyun  * @mbc: enable macsec bypass capability
152*4882a593Smuzhiyun  * @delay: the allowance made for a round-trip propagation delay of the
153*4882a593Smuzhiyun  *	   link in bits.
154*4882a593Smuzhiyun  * @requests: count of the sent pfc frames
155*4882a593Smuzhiyun  * @indications: count of the received pfc frames
156*4882a593Smuzhiyun  */
157*4882a593Smuzhiyun struct ieee_pfc {
158*4882a593Smuzhiyun 	__u8	pfc_cap;
159*4882a593Smuzhiyun 	__u8	pfc_en;
160*4882a593Smuzhiyun 	__u8	mbc;
161*4882a593Smuzhiyun 	__u16	delay;
162*4882a593Smuzhiyun 	__u64	requests[IEEE_8021QAZ_MAX_TCS];
163*4882a593Smuzhiyun 	__u64	indications[IEEE_8021QAZ_MAX_TCS];
164*4882a593Smuzhiyun };
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun #define IEEE_8021Q_MAX_PRIORITIES 8
167*4882a593Smuzhiyun #define DCBX_MAX_BUFFERS  8
168*4882a593Smuzhiyun struct dcbnl_buffer {
169*4882a593Smuzhiyun 	/* priority to buffer mapping */
170*4882a593Smuzhiyun 	__u8    prio2buffer[IEEE_8021Q_MAX_PRIORITIES];
171*4882a593Smuzhiyun 	/* buffer size in Bytes */
172*4882a593Smuzhiyun 	__u32   buffer_size[DCBX_MAX_BUFFERS];
173*4882a593Smuzhiyun 	__u32   total_size;
174*4882a593Smuzhiyun };
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun /* CEE DCBX std supported values */
177*4882a593Smuzhiyun #define CEE_DCBX_MAX_PGS	8
178*4882a593Smuzhiyun #define CEE_DCBX_MAX_PRIO	8
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /**
181*4882a593Smuzhiyun  * struct cee_pg - CEE Priority-Group managed object
182*4882a593Smuzhiyun  *
183*4882a593Smuzhiyun  * @willing: willing bit in the PG tlv
184*4882a593Smuzhiyun  * @error: error bit in the PG tlv
185*4882a593Smuzhiyun  * @pg_en: enable bit of the PG feature
186*4882a593Smuzhiyun  * @tcs_supported: number of traffic classes supported
187*4882a593Smuzhiyun  * @pg_bw: bandwidth percentage for each priority group
188*4882a593Smuzhiyun  * @prio_pg: priority to PG mapping indexed by priority
189*4882a593Smuzhiyun  */
190*4882a593Smuzhiyun struct cee_pg {
191*4882a593Smuzhiyun 	__u8    willing;
192*4882a593Smuzhiyun 	__u8    error;
193*4882a593Smuzhiyun 	__u8    pg_en;
194*4882a593Smuzhiyun 	__u8    tcs_supported;
195*4882a593Smuzhiyun 	__u8    pg_bw[CEE_DCBX_MAX_PGS];
196*4882a593Smuzhiyun 	__u8    prio_pg[CEE_DCBX_MAX_PGS];
197*4882a593Smuzhiyun };
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun /**
200*4882a593Smuzhiyun  * struct cee_pfc - CEE PFC managed object
201*4882a593Smuzhiyun  *
202*4882a593Smuzhiyun  * @willing: willing bit in the PFC tlv
203*4882a593Smuzhiyun  * @error: error bit in the PFC tlv
204*4882a593Smuzhiyun  * @pfc_en: bitmap indicating pfc enabled traffic classes
205*4882a593Smuzhiyun  * @tcs_supported: number of traffic classes supported
206*4882a593Smuzhiyun  */
207*4882a593Smuzhiyun struct cee_pfc {
208*4882a593Smuzhiyun 	__u8    willing;
209*4882a593Smuzhiyun 	__u8    error;
210*4882a593Smuzhiyun 	__u8    pfc_en;
211*4882a593Smuzhiyun 	__u8    tcs_supported;
212*4882a593Smuzhiyun };
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun /* IEEE 802.1Qaz std supported values */
215*4882a593Smuzhiyun #define IEEE_8021QAZ_APP_SEL_ETHERTYPE	1
216*4882a593Smuzhiyun #define IEEE_8021QAZ_APP_SEL_STREAM	2
217*4882a593Smuzhiyun #define IEEE_8021QAZ_APP_SEL_DGRAM	3
218*4882a593Smuzhiyun #define IEEE_8021QAZ_APP_SEL_ANY	4
219*4882a593Smuzhiyun #define IEEE_8021QAZ_APP_SEL_DSCP       5
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun /* This structure contains the IEEE 802.1Qaz APP managed object. This
222*4882a593Smuzhiyun  * object is also used for the CEE std as well.
223*4882a593Smuzhiyun  *
224*4882a593Smuzhiyun  * @selector: protocol identifier type
225*4882a593Smuzhiyun  * @protocol: protocol of type indicated
226*4882a593Smuzhiyun  * @priority: 3-bit unsigned integer indicating priority for IEEE
227*4882a593Smuzhiyun  *            8-bit 802.1p user priority bitmap for CEE
228*4882a593Smuzhiyun  *
229*4882a593Smuzhiyun  * ----
230*4882a593Smuzhiyun  *  Selector field values for IEEE 802.1Qaz
231*4882a593Smuzhiyun  *	0	Reserved
232*4882a593Smuzhiyun  *	1	Ethertype
233*4882a593Smuzhiyun  *	2	Well known port number over TCP or SCTP
234*4882a593Smuzhiyun  *	3	Well known port number over UDP or DCCP
235*4882a593Smuzhiyun  *	4	Well known port number over TCP, SCTP, UDP, or DCCP
236*4882a593Smuzhiyun  *	5	Differentiated Services Code Point (DSCP) value
237*4882a593Smuzhiyun  *	6-7	Reserved
238*4882a593Smuzhiyun  *
239*4882a593Smuzhiyun  *  Selector field values for CEE
240*4882a593Smuzhiyun  *	0	Ethertype
241*4882a593Smuzhiyun  *	1	Well known port number over TCP or UDP
242*4882a593Smuzhiyun  *	2-3	Reserved
243*4882a593Smuzhiyun  */
244*4882a593Smuzhiyun struct dcb_app {
245*4882a593Smuzhiyun 	__u8	selector;
246*4882a593Smuzhiyun 	__u8	priority;
247*4882a593Smuzhiyun 	__u16	protocol;
248*4882a593Smuzhiyun };
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun /**
251*4882a593Smuzhiyun  * struct dcb_peer_app_info - APP feature information sent by the peer
252*4882a593Smuzhiyun  *
253*4882a593Smuzhiyun  * @willing: willing bit in the peer APP tlv
254*4882a593Smuzhiyun  * @error: error bit in the peer APP tlv
255*4882a593Smuzhiyun  *
256*4882a593Smuzhiyun  * In addition to this information the full peer APP tlv also contains
257*4882a593Smuzhiyun  * a table of 'app_count' APP objects defined above.
258*4882a593Smuzhiyun  */
259*4882a593Smuzhiyun struct dcb_peer_app_info {
260*4882a593Smuzhiyun 	__u8	willing;
261*4882a593Smuzhiyun 	__u8	error;
262*4882a593Smuzhiyun };
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun struct dcbmsg {
265*4882a593Smuzhiyun 	__u8               dcb_family;
266*4882a593Smuzhiyun 	__u8               cmd;
267*4882a593Smuzhiyun 	__u16              dcb_pad;
268*4882a593Smuzhiyun };
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun /**
271*4882a593Smuzhiyun  * enum dcbnl_commands - supported DCB commands
272*4882a593Smuzhiyun  *
273*4882a593Smuzhiyun  * @DCB_CMD_UNDEFINED: unspecified command to catch errors
274*4882a593Smuzhiyun  * @DCB_CMD_GSTATE: request the state of DCB in the device
275*4882a593Smuzhiyun  * @DCB_CMD_SSTATE: set the state of DCB in the device
276*4882a593Smuzhiyun  * @DCB_CMD_PGTX_GCFG: request the priority group configuration for Tx
277*4882a593Smuzhiyun  * @DCB_CMD_PGTX_SCFG: set the priority group configuration for Tx
278*4882a593Smuzhiyun  * @DCB_CMD_PGRX_GCFG: request the priority group configuration for Rx
279*4882a593Smuzhiyun  * @DCB_CMD_PGRX_SCFG: set the priority group configuration for Rx
280*4882a593Smuzhiyun  * @DCB_CMD_PFC_GCFG: request the priority flow control configuration
281*4882a593Smuzhiyun  * @DCB_CMD_PFC_SCFG: set the priority flow control configuration
282*4882a593Smuzhiyun  * @DCB_CMD_SET_ALL: apply all changes to the underlying device
283*4882a593Smuzhiyun  * @DCB_CMD_GPERM_HWADDR: get the permanent MAC address of the underlying
284*4882a593Smuzhiyun  *                        device.  Only useful when using bonding.
285*4882a593Smuzhiyun  * @DCB_CMD_GCAP: request the DCB capabilities of the device
286*4882a593Smuzhiyun  * @DCB_CMD_GNUMTCS: get the number of traffic classes currently supported
287*4882a593Smuzhiyun  * @DCB_CMD_SNUMTCS: set the number of traffic classes
288*4882a593Smuzhiyun  * @DCB_CMD_GBCN: set backward congestion notification configuration
289*4882a593Smuzhiyun  * @DCB_CMD_SBCN: get backward congestion notification configuration.
290*4882a593Smuzhiyun  * @DCB_CMD_GAPP: get application protocol configuration
291*4882a593Smuzhiyun  * @DCB_CMD_SAPP: set application protocol configuration
292*4882a593Smuzhiyun  * @DCB_CMD_IEEE_SET: set IEEE 802.1Qaz configuration
293*4882a593Smuzhiyun  * @DCB_CMD_IEEE_GET: get IEEE 802.1Qaz configuration
294*4882a593Smuzhiyun  * @DCB_CMD_GDCBX: get DCBX engine configuration
295*4882a593Smuzhiyun  * @DCB_CMD_SDCBX: set DCBX engine configuration
296*4882a593Smuzhiyun  * @DCB_CMD_GFEATCFG: get DCBX features flags
297*4882a593Smuzhiyun  * @DCB_CMD_SFEATCFG: set DCBX features negotiation flags
298*4882a593Smuzhiyun  * @DCB_CMD_CEE_GET: get CEE aggregated configuration
299*4882a593Smuzhiyun  * @DCB_CMD_IEEE_DEL: delete IEEE 802.1Qaz configuration
300*4882a593Smuzhiyun  */
301*4882a593Smuzhiyun enum dcbnl_commands {
302*4882a593Smuzhiyun 	DCB_CMD_UNDEFINED,
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun 	DCB_CMD_GSTATE,
305*4882a593Smuzhiyun 	DCB_CMD_SSTATE,
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun 	DCB_CMD_PGTX_GCFG,
308*4882a593Smuzhiyun 	DCB_CMD_PGTX_SCFG,
309*4882a593Smuzhiyun 	DCB_CMD_PGRX_GCFG,
310*4882a593Smuzhiyun 	DCB_CMD_PGRX_SCFG,
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun 	DCB_CMD_PFC_GCFG,
313*4882a593Smuzhiyun 	DCB_CMD_PFC_SCFG,
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun 	DCB_CMD_SET_ALL,
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun 	DCB_CMD_GPERM_HWADDR,
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun 	DCB_CMD_GCAP,
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun 	DCB_CMD_GNUMTCS,
322*4882a593Smuzhiyun 	DCB_CMD_SNUMTCS,
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun 	DCB_CMD_PFC_GSTATE,
325*4882a593Smuzhiyun 	DCB_CMD_PFC_SSTATE,
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun 	DCB_CMD_BCN_GCFG,
328*4882a593Smuzhiyun 	DCB_CMD_BCN_SCFG,
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun 	DCB_CMD_GAPP,
331*4882a593Smuzhiyun 	DCB_CMD_SAPP,
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun 	DCB_CMD_IEEE_SET,
334*4882a593Smuzhiyun 	DCB_CMD_IEEE_GET,
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun 	DCB_CMD_GDCBX,
337*4882a593Smuzhiyun 	DCB_CMD_SDCBX,
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun 	DCB_CMD_GFEATCFG,
340*4882a593Smuzhiyun 	DCB_CMD_SFEATCFG,
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun 	DCB_CMD_CEE_GET,
343*4882a593Smuzhiyun 	DCB_CMD_IEEE_DEL,
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun 	__DCB_CMD_ENUM_MAX,
346*4882a593Smuzhiyun 	DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
347*4882a593Smuzhiyun };
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun /**
350*4882a593Smuzhiyun  * enum dcbnl_attrs - DCB top-level netlink attributes
351*4882a593Smuzhiyun  *
352*4882a593Smuzhiyun  * @DCB_ATTR_UNDEFINED: unspecified attribute to catch errors
353*4882a593Smuzhiyun  * @DCB_ATTR_IFNAME: interface name of the underlying device (NLA_STRING)
354*4882a593Smuzhiyun  * @DCB_ATTR_STATE: enable state of DCB in the device (NLA_U8)
355*4882a593Smuzhiyun  * @DCB_ATTR_PFC_STATE: enable state of PFC in the device (NLA_U8)
356*4882a593Smuzhiyun  * @DCB_ATTR_PFC_CFG: priority flow control configuration (NLA_NESTED)
357*4882a593Smuzhiyun  * @DCB_ATTR_NUM_TC: number of traffic classes supported in the device (NLA_U8)
358*4882a593Smuzhiyun  * @DCB_ATTR_PG_CFG: priority group configuration (NLA_NESTED)
359*4882a593Smuzhiyun  * @DCB_ATTR_SET_ALL: bool to commit changes to hardware or not (NLA_U8)
360*4882a593Smuzhiyun  * @DCB_ATTR_PERM_HWADDR: MAC address of the physical device (NLA_NESTED)
361*4882a593Smuzhiyun  * @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED)
362*4882a593Smuzhiyun  * @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED)
363*4882a593Smuzhiyun  * @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED)
364*4882a593Smuzhiyun  * @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED)
365*4882a593Smuzhiyun  * @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8)
366*4882a593Smuzhiyun  * @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED)
367*4882a593Smuzhiyun  * @DCB_ATTR_CEE: CEE std supported attributes (NLA_NESTED)
368*4882a593Smuzhiyun  */
369*4882a593Smuzhiyun enum dcbnl_attrs {
370*4882a593Smuzhiyun 	DCB_ATTR_UNDEFINED,
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun 	DCB_ATTR_IFNAME,
373*4882a593Smuzhiyun 	DCB_ATTR_STATE,
374*4882a593Smuzhiyun 	DCB_ATTR_PFC_STATE,
375*4882a593Smuzhiyun 	DCB_ATTR_PFC_CFG,
376*4882a593Smuzhiyun 	DCB_ATTR_NUM_TC,
377*4882a593Smuzhiyun 	DCB_ATTR_PG_CFG,
378*4882a593Smuzhiyun 	DCB_ATTR_SET_ALL,
379*4882a593Smuzhiyun 	DCB_ATTR_PERM_HWADDR,
380*4882a593Smuzhiyun 	DCB_ATTR_CAP,
381*4882a593Smuzhiyun 	DCB_ATTR_NUMTCS,
382*4882a593Smuzhiyun 	DCB_ATTR_BCN,
383*4882a593Smuzhiyun 	DCB_ATTR_APP,
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun 	/* IEEE std attributes */
386*4882a593Smuzhiyun 	DCB_ATTR_IEEE,
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun 	DCB_ATTR_DCBX,
389*4882a593Smuzhiyun 	DCB_ATTR_FEATCFG,
390*4882a593Smuzhiyun 
391*4882a593Smuzhiyun 	/* CEE nested attributes */
392*4882a593Smuzhiyun 	DCB_ATTR_CEE,
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun 	__DCB_ATTR_ENUM_MAX,
395*4882a593Smuzhiyun 	DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,
396*4882a593Smuzhiyun };
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun /**
399*4882a593Smuzhiyun  * enum ieee_attrs - IEEE 802.1Qaz get/set attributes
400*4882a593Smuzhiyun  *
401*4882a593Smuzhiyun  * @DCB_ATTR_IEEE_UNSPEC: unspecified
402*4882a593Smuzhiyun  * @DCB_ATTR_IEEE_ETS: negotiated ETS configuration
403*4882a593Smuzhiyun  * @DCB_ATTR_IEEE_PFC: negotiated PFC configuration
404*4882a593Smuzhiyun  * @DCB_ATTR_IEEE_APP_TABLE: negotiated APP configuration
405*4882a593Smuzhiyun  * @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only
406*4882a593Smuzhiyun  * @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only
407*4882a593Smuzhiyun  * @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only
408*4882a593Smuzhiyun  */
409*4882a593Smuzhiyun enum ieee_attrs {
410*4882a593Smuzhiyun 	DCB_ATTR_IEEE_UNSPEC,
411*4882a593Smuzhiyun 	DCB_ATTR_IEEE_ETS,
412*4882a593Smuzhiyun 	DCB_ATTR_IEEE_PFC,
413*4882a593Smuzhiyun 	DCB_ATTR_IEEE_APP_TABLE,
414*4882a593Smuzhiyun 	DCB_ATTR_IEEE_PEER_ETS,
415*4882a593Smuzhiyun 	DCB_ATTR_IEEE_PEER_PFC,
416*4882a593Smuzhiyun 	DCB_ATTR_IEEE_PEER_APP,
417*4882a593Smuzhiyun 	DCB_ATTR_IEEE_MAXRATE,
418*4882a593Smuzhiyun 	DCB_ATTR_IEEE_QCN,
419*4882a593Smuzhiyun 	DCB_ATTR_IEEE_QCN_STATS,
420*4882a593Smuzhiyun 	DCB_ATTR_DCB_BUFFER,
421*4882a593Smuzhiyun 	__DCB_ATTR_IEEE_MAX
422*4882a593Smuzhiyun };
423*4882a593Smuzhiyun #define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun enum ieee_attrs_app {
426*4882a593Smuzhiyun 	DCB_ATTR_IEEE_APP_UNSPEC,
427*4882a593Smuzhiyun 	DCB_ATTR_IEEE_APP,
428*4882a593Smuzhiyun 	__DCB_ATTR_IEEE_APP_MAX
429*4882a593Smuzhiyun };
430*4882a593Smuzhiyun #define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun /**
433*4882a593Smuzhiyun  * enum cee_attrs - CEE DCBX get attributes.
434*4882a593Smuzhiyun  *
435*4882a593Smuzhiyun  * @DCB_ATTR_CEE_UNSPEC: unspecified
436*4882a593Smuzhiyun  * @DCB_ATTR_CEE_PEER_PG: peer PG configuration - get only
437*4882a593Smuzhiyun  * @DCB_ATTR_CEE_PEER_PFC: peer PFC configuration - get only
438*4882a593Smuzhiyun  * @DCB_ATTR_CEE_PEER_APP_TABLE: peer APP tlv - get only
439*4882a593Smuzhiyun  * @DCB_ATTR_CEE_TX_PG: TX PG configuration (DCB_CMD_PGTX_GCFG)
440*4882a593Smuzhiyun  * @DCB_ATTR_CEE_RX_PG: RX PG configuration (DCB_CMD_PGRX_GCFG)
441*4882a593Smuzhiyun  * @DCB_ATTR_CEE_PFC: PFC configuration (DCB_CMD_PFC_GCFG)
442*4882a593Smuzhiyun  * @DCB_ATTR_CEE_APP_TABLE: APP configuration (multi DCB_CMD_GAPP)
443*4882a593Smuzhiyun  * @DCB_ATTR_CEE_FEAT: DCBX features flags (DCB_CMD_GFEATCFG)
444*4882a593Smuzhiyun  *
445*4882a593Smuzhiyun  * An aggregated collection of the cee std negotiated parameters.
446*4882a593Smuzhiyun  */
447*4882a593Smuzhiyun enum cee_attrs {
448*4882a593Smuzhiyun 	DCB_ATTR_CEE_UNSPEC,
449*4882a593Smuzhiyun 	DCB_ATTR_CEE_PEER_PG,
450*4882a593Smuzhiyun 	DCB_ATTR_CEE_PEER_PFC,
451*4882a593Smuzhiyun 	DCB_ATTR_CEE_PEER_APP_TABLE,
452*4882a593Smuzhiyun 	DCB_ATTR_CEE_TX_PG,
453*4882a593Smuzhiyun 	DCB_ATTR_CEE_RX_PG,
454*4882a593Smuzhiyun 	DCB_ATTR_CEE_PFC,
455*4882a593Smuzhiyun 	DCB_ATTR_CEE_APP_TABLE,
456*4882a593Smuzhiyun 	DCB_ATTR_CEE_FEAT,
457*4882a593Smuzhiyun 	__DCB_ATTR_CEE_MAX
458*4882a593Smuzhiyun };
459*4882a593Smuzhiyun #define DCB_ATTR_CEE_MAX (__DCB_ATTR_CEE_MAX - 1)
460*4882a593Smuzhiyun 
461*4882a593Smuzhiyun enum peer_app_attr {
462*4882a593Smuzhiyun 	DCB_ATTR_CEE_PEER_APP_UNSPEC,
463*4882a593Smuzhiyun 	DCB_ATTR_CEE_PEER_APP_INFO,
464*4882a593Smuzhiyun 	DCB_ATTR_CEE_PEER_APP,
465*4882a593Smuzhiyun 	__DCB_ATTR_CEE_PEER_APP_MAX
466*4882a593Smuzhiyun };
467*4882a593Smuzhiyun #define DCB_ATTR_CEE_PEER_APP_MAX (__DCB_ATTR_CEE_PEER_APP_MAX - 1)
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun enum cee_attrs_app {
470*4882a593Smuzhiyun 	DCB_ATTR_CEE_APP_UNSPEC,
471*4882a593Smuzhiyun 	DCB_ATTR_CEE_APP,
472*4882a593Smuzhiyun 	__DCB_ATTR_CEE_APP_MAX
473*4882a593Smuzhiyun };
474*4882a593Smuzhiyun #define DCB_ATTR_CEE_APP_MAX (__DCB_ATTR_CEE_APP_MAX - 1)
475*4882a593Smuzhiyun 
476*4882a593Smuzhiyun /**
477*4882a593Smuzhiyun  * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
478*4882a593Smuzhiyun  *
479*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_UNDEFINED: unspecified attribute to catch errors
480*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_0: Priority Flow Control value for User Priority 0 (NLA_U8)
481*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_1: Priority Flow Control value for User Priority 1 (NLA_U8)
482*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_2: Priority Flow Control value for User Priority 2 (NLA_U8)
483*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_3: Priority Flow Control value for User Priority 3 (NLA_U8)
484*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_4: Priority Flow Control value for User Priority 4 (NLA_U8)
485*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_5: Priority Flow Control value for User Priority 5 (NLA_U8)
486*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_6: Priority Flow Control value for User Priority 6 (NLA_U8)
487*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_7: Priority Flow Control value for User Priority 7 (NLA_U8)
488*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_MAX: highest attribute number currently defined
489*4882a593Smuzhiyun  * @DCB_PFC_UP_ATTR_ALL: apply to all priority flow control attrs (NLA_FLAG)
490*4882a593Smuzhiyun  *
491*4882a593Smuzhiyun  */
492*4882a593Smuzhiyun enum dcbnl_pfc_up_attrs {
493*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_UNDEFINED,
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_0,
496*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_1,
497*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_2,
498*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_3,
499*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_4,
500*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_5,
501*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_6,
502*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_7,
503*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_ALL,
504*4882a593Smuzhiyun 
505*4882a593Smuzhiyun 	__DCB_PFC_UP_ATTR_ENUM_MAX,
506*4882a593Smuzhiyun 	DCB_PFC_UP_ATTR_MAX = __DCB_PFC_UP_ATTR_ENUM_MAX - 1,
507*4882a593Smuzhiyun };
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun /**
510*4882a593Smuzhiyun  * enum dcbnl_pg_attrs - DCB Priority Group attributes
511*4882a593Smuzhiyun  *
512*4882a593Smuzhiyun  * @DCB_PG_ATTR_UNDEFINED: unspecified attribute to catch errors
513*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_0: Priority Group Traffic Class 0 configuration (NLA_NESTED)
514*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_1: Priority Group Traffic Class 1 configuration (NLA_NESTED)
515*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_2: Priority Group Traffic Class 2 configuration (NLA_NESTED)
516*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_3: Priority Group Traffic Class 3 configuration (NLA_NESTED)
517*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_4: Priority Group Traffic Class 4 configuration (NLA_NESTED)
518*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_5: Priority Group Traffic Class 5 configuration (NLA_NESTED)
519*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_6: Priority Group Traffic Class 6 configuration (NLA_NESTED)
520*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_7: Priority Group Traffic Class 7 configuration (NLA_NESTED)
521*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_MAX: highest attribute number currently defined
522*4882a593Smuzhiyun  * @DCB_PG_ATTR_TC_ALL: apply to all traffic classes (NLA_NESTED)
523*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_0: Percent of link bandwidth for Priority Group 0 (NLA_U8)
524*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_1: Percent of link bandwidth for Priority Group 1 (NLA_U8)
525*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_2: Percent of link bandwidth for Priority Group 2 (NLA_U8)
526*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_3: Percent of link bandwidth for Priority Group 3 (NLA_U8)
527*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_4: Percent of link bandwidth for Priority Group 4 (NLA_U8)
528*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_5: Percent of link bandwidth for Priority Group 5 (NLA_U8)
529*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_6: Percent of link bandwidth for Priority Group 6 (NLA_U8)
530*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_7: Percent of link bandwidth for Priority Group 7 (NLA_U8)
531*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_MAX: highest attribute number currently defined
532*4882a593Smuzhiyun  * @DCB_PG_ATTR_BW_ID_ALL: apply to all priority groups (NLA_FLAG)
533*4882a593Smuzhiyun  *
534*4882a593Smuzhiyun  */
535*4882a593Smuzhiyun enum dcbnl_pg_attrs {
536*4882a593Smuzhiyun 	DCB_PG_ATTR_UNDEFINED,
537*4882a593Smuzhiyun 
538*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_0,
539*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_1,
540*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_2,
541*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_3,
542*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_4,
543*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_5,
544*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_6,
545*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_7,
546*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_MAX,
547*4882a593Smuzhiyun 	DCB_PG_ATTR_TC_ALL,
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_0,
550*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_1,
551*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_2,
552*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_3,
553*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_4,
554*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_5,
555*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_6,
556*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_7,
557*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_MAX,
558*4882a593Smuzhiyun 	DCB_PG_ATTR_BW_ID_ALL,
559*4882a593Smuzhiyun 
560*4882a593Smuzhiyun 	__DCB_PG_ATTR_ENUM_MAX,
561*4882a593Smuzhiyun 	DCB_PG_ATTR_MAX = __DCB_PG_ATTR_ENUM_MAX - 1,
562*4882a593Smuzhiyun };
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun /**
565*4882a593Smuzhiyun  * enum dcbnl_tc_attrs - DCB Traffic Class attributes
566*4882a593Smuzhiyun  *
567*4882a593Smuzhiyun  * @DCB_TC_ATTR_PARAM_UNDEFINED: unspecified attribute to catch errors
568*4882a593Smuzhiyun  * @DCB_TC_ATTR_PARAM_PGID: (NLA_U8) Priority group the traffic class belongs to
569*4882a593Smuzhiyun  *                          Valid values are:  0-7
570*4882a593Smuzhiyun  * @DCB_TC_ATTR_PARAM_UP_MAPPING: (NLA_U8) Traffic class to user priority map
571*4882a593Smuzhiyun  *                                Some devices may not support changing the
572*4882a593Smuzhiyun  *                                user priority map of a TC.
573*4882a593Smuzhiyun  * @DCB_TC_ATTR_PARAM_STRICT_PRIO: (NLA_U8) Strict priority setting
574*4882a593Smuzhiyun  *                                 0 - none
575*4882a593Smuzhiyun  *                                 1 - group strict
576*4882a593Smuzhiyun  *                                 2 - link strict
577*4882a593Smuzhiyun  * @DCB_TC_ATTR_PARAM_BW_PCT: optional - (NLA_U8) If supported by the device and
578*4882a593Smuzhiyun  *                            not configured to use link strict priority,
579*4882a593Smuzhiyun  *                            this is the percentage of bandwidth of the
580*4882a593Smuzhiyun  *                            priority group this traffic class belongs to
581*4882a593Smuzhiyun  * @DCB_TC_ATTR_PARAM_ALL: (NLA_FLAG) all traffic class parameters
582*4882a593Smuzhiyun  *
583*4882a593Smuzhiyun  */
584*4882a593Smuzhiyun enum dcbnl_tc_attrs {
585*4882a593Smuzhiyun 	DCB_TC_ATTR_PARAM_UNDEFINED,
586*4882a593Smuzhiyun 
587*4882a593Smuzhiyun 	DCB_TC_ATTR_PARAM_PGID,
588*4882a593Smuzhiyun 	DCB_TC_ATTR_PARAM_UP_MAPPING,
589*4882a593Smuzhiyun 	DCB_TC_ATTR_PARAM_STRICT_PRIO,
590*4882a593Smuzhiyun 	DCB_TC_ATTR_PARAM_BW_PCT,
591*4882a593Smuzhiyun 	DCB_TC_ATTR_PARAM_ALL,
592*4882a593Smuzhiyun 
593*4882a593Smuzhiyun 	__DCB_TC_ATTR_PARAM_ENUM_MAX,
594*4882a593Smuzhiyun 	DCB_TC_ATTR_PARAM_MAX = __DCB_TC_ATTR_PARAM_ENUM_MAX - 1,
595*4882a593Smuzhiyun };
596*4882a593Smuzhiyun 
597*4882a593Smuzhiyun /**
598*4882a593Smuzhiyun  * enum dcbnl_cap_attrs - DCB Capability attributes
599*4882a593Smuzhiyun  *
600*4882a593Smuzhiyun  * @DCB_CAP_ATTR_UNDEFINED: unspecified attribute to catch errors
601*4882a593Smuzhiyun  * @DCB_CAP_ATTR_ALL: (NLA_FLAG) all capability parameters
602*4882a593Smuzhiyun  * @DCB_CAP_ATTR_PG: (NLA_U8) device supports Priority Groups
603*4882a593Smuzhiyun  * @DCB_CAP_ATTR_PFC: (NLA_U8) device supports Priority Flow Control
604*4882a593Smuzhiyun  * @DCB_CAP_ATTR_UP2TC: (NLA_U8) device supports user priority to
605*4882a593Smuzhiyun  *                               traffic class mapping
606*4882a593Smuzhiyun  * @DCB_CAP_ATTR_PG_TCS: (NLA_U8) bitmap where each bit represents a
607*4882a593Smuzhiyun  *                                number of traffic classes the device
608*4882a593Smuzhiyun  *                                can be configured to use for Priority Groups
609*4882a593Smuzhiyun  * @DCB_CAP_ATTR_PFC_TCS: (NLA_U8) bitmap where each bit represents a
610*4882a593Smuzhiyun  *                                 number of traffic classes the device can be
611*4882a593Smuzhiyun  *                                 configured to use for Priority Flow Control
612*4882a593Smuzhiyun  * @DCB_CAP_ATTR_GSP: (NLA_U8) device supports group strict priority
613*4882a593Smuzhiyun  * @DCB_CAP_ATTR_BCN: (NLA_U8) device supports Backwards Congestion
614*4882a593Smuzhiyun  *                             Notification
615*4882a593Smuzhiyun  * @DCB_CAP_ATTR_DCBX: (NLA_U8) device supports DCBX engine
616*4882a593Smuzhiyun  *
617*4882a593Smuzhiyun  */
618*4882a593Smuzhiyun enum dcbnl_cap_attrs {
619*4882a593Smuzhiyun 	DCB_CAP_ATTR_UNDEFINED,
620*4882a593Smuzhiyun 	DCB_CAP_ATTR_ALL,
621*4882a593Smuzhiyun 	DCB_CAP_ATTR_PG,
622*4882a593Smuzhiyun 	DCB_CAP_ATTR_PFC,
623*4882a593Smuzhiyun 	DCB_CAP_ATTR_UP2TC,
624*4882a593Smuzhiyun 	DCB_CAP_ATTR_PG_TCS,
625*4882a593Smuzhiyun 	DCB_CAP_ATTR_PFC_TCS,
626*4882a593Smuzhiyun 	DCB_CAP_ATTR_GSP,
627*4882a593Smuzhiyun 	DCB_CAP_ATTR_BCN,
628*4882a593Smuzhiyun 	DCB_CAP_ATTR_DCBX,
629*4882a593Smuzhiyun 
630*4882a593Smuzhiyun 	__DCB_CAP_ATTR_ENUM_MAX,
631*4882a593Smuzhiyun 	DCB_CAP_ATTR_MAX = __DCB_CAP_ATTR_ENUM_MAX - 1,
632*4882a593Smuzhiyun };
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun /**
635*4882a593Smuzhiyun  * DCBX capability flags
636*4882a593Smuzhiyun  *
637*4882a593Smuzhiyun  * @DCB_CAP_DCBX_HOST: DCBX negotiation is performed by the host LLDP agent.
638*4882a593Smuzhiyun  *                     'set' routines are used to configure the device with
639*4882a593Smuzhiyun  *                     the negotiated parameters
640*4882a593Smuzhiyun  *
641*4882a593Smuzhiyun  * @DCB_CAP_DCBX_LLD_MANAGED: DCBX negotiation is not performed in the host but
642*4882a593Smuzhiyun  *                            by another entity
643*4882a593Smuzhiyun  *                            'get' routines are used to retrieve the
644*4882a593Smuzhiyun  *                            negotiated parameters
645*4882a593Smuzhiyun  *                            'set' routines can be used to set the initial
646*4882a593Smuzhiyun  *                            negotiation configuration
647*4882a593Smuzhiyun  *
648*4882a593Smuzhiyun  * @DCB_CAP_DCBX_VER_CEE: for a non-host DCBX engine, indicates the engine
649*4882a593Smuzhiyun  *                        supports the CEE protocol flavor
650*4882a593Smuzhiyun  *
651*4882a593Smuzhiyun  * @DCB_CAP_DCBX_VER_IEEE: for a non-host DCBX engine, indicates the engine
652*4882a593Smuzhiyun  *                         supports the IEEE protocol flavor
653*4882a593Smuzhiyun  *
654*4882a593Smuzhiyun  * @DCB_CAP_DCBX_STATIC: for a non-host DCBX engine, indicates the engine
655*4882a593Smuzhiyun  *                       supports static configuration (i.e no actual
656*4882a593Smuzhiyun  *                       negotiation is performed negotiated parameters equal
657*4882a593Smuzhiyun  *                       the initial configuration)
658*4882a593Smuzhiyun  *
659*4882a593Smuzhiyun  */
660*4882a593Smuzhiyun #define DCB_CAP_DCBX_HOST		0x01
661*4882a593Smuzhiyun #define DCB_CAP_DCBX_LLD_MANAGED	0x02
662*4882a593Smuzhiyun #define DCB_CAP_DCBX_VER_CEE		0x04
663*4882a593Smuzhiyun #define DCB_CAP_DCBX_VER_IEEE		0x08
664*4882a593Smuzhiyun #define DCB_CAP_DCBX_STATIC		0x10
665*4882a593Smuzhiyun 
666*4882a593Smuzhiyun /**
667*4882a593Smuzhiyun  * enum dcbnl_numtcs_attrs - number of traffic classes
668*4882a593Smuzhiyun  *
669*4882a593Smuzhiyun  * @DCB_NUMTCS_ATTR_UNDEFINED: unspecified attribute to catch errors
670*4882a593Smuzhiyun  * @DCB_NUMTCS_ATTR_ALL: (NLA_FLAG) all traffic class attributes
671*4882a593Smuzhiyun  * @DCB_NUMTCS_ATTR_PG: (NLA_U8) number of traffic classes used for
672*4882a593Smuzhiyun  *                               priority groups
673*4882a593Smuzhiyun  * @DCB_NUMTCS_ATTR_PFC: (NLA_U8) number of traffic classes which can
674*4882a593Smuzhiyun  *                                support priority flow control
675*4882a593Smuzhiyun  */
676*4882a593Smuzhiyun enum dcbnl_numtcs_attrs {
677*4882a593Smuzhiyun 	DCB_NUMTCS_ATTR_UNDEFINED,
678*4882a593Smuzhiyun 	DCB_NUMTCS_ATTR_ALL,
679*4882a593Smuzhiyun 	DCB_NUMTCS_ATTR_PG,
680*4882a593Smuzhiyun 	DCB_NUMTCS_ATTR_PFC,
681*4882a593Smuzhiyun 
682*4882a593Smuzhiyun 	__DCB_NUMTCS_ATTR_ENUM_MAX,
683*4882a593Smuzhiyun 	DCB_NUMTCS_ATTR_MAX = __DCB_NUMTCS_ATTR_ENUM_MAX - 1,
684*4882a593Smuzhiyun };
685*4882a593Smuzhiyun 
686*4882a593Smuzhiyun enum dcbnl_bcn_attrs{
687*4882a593Smuzhiyun 	DCB_BCN_ATTR_UNDEFINED = 0,
688*4882a593Smuzhiyun 
689*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_0,
690*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_1,
691*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_2,
692*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_3,
693*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_4,
694*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_5,
695*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_6,
696*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_7,
697*4882a593Smuzhiyun 	DCB_BCN_ATTR_RP_ALL,
698*4882a593Smuzhiyun 
699*4882a593Smuzhiyun 	DCB_BCN_ATTR_BCNA_0,
700*4882a593Smuzhiyun 	DCB_BCN_ATTR_BCNA_1,
701*4882a593Smuzhiyun 	DCB_BCN_ATTR_ALPHA,
702*4882a593Smuzhiyun 	DCB_BCN_ATTR_BETA,
703*4882a593Smuzhiyun 	DCB_BCN_ATTR_GD,
704*4882a593Smuzhiyun 	DCB_BCN_ATTR_GI,
705*4882a593Smuzhiyun 	DCB_BCN_ATTR_TMAX,
706*4882a593Smuzhiyun 	DCB_BCN_ATTR_TD,
707*4882a593Smuzhiyun 	DCB_BCN_ATTR_RMIN,
708*4882a593Smuzhiyun 	DCB_BCN_ATTR_W,
709*4882a593Smuzhiyun 	DCB_BCN_ATTR_RD,
710*4882a593Smuzhiyun 	DCB_BCN_ATTR_RU,
711*4882a593Smuzhiyun 	DCB_BCN_ATTR_WRTT,
712*4882a593Smuzhiyun 	DCB_BCN_ATTR_RI,
713*4882a593Smuzhiyun 	DCB_BCN_ATTR_C,
714*4882a593Smuzhiyun 	DCB_BCN_ATTR_ALL,
715*4882a593Smuzhiyun 
716*4882a593Smuzhiyun 	__DCB_BCN_ATTR_ENUM_MAX,
717*4882a593Smuzhiyun 	DCB_BCN_ATTR_MAX = __DCB_BCN_ATTR_ENUM_MAX - 1,
718*4882a593Smuzhiyun };
719*4882a593Smuzhiyun 
720*4882a593Smuzhiyun /**
721*4882a593Smuzhiyun  * enum dcb_general_attr_values - general DCB attribute values
722*4882a593Smuzhiyun  *
723*4882a593Smuzhiyun  * @DCB_ATTR_UNDEFINED: value used to indicate an attribute is not supported
724*4882a593Smuzhiyun  *
725*4882a593Smuzhiyun  */
726*4882a593Smuzhiyun enum dcb_general_attr_values {
727*4882a593Smuzhiyun 	DCB_ATTR_VALUE_UNDEFINED = 0xff
728*4882a593Smuzhiyun };
729*4882a593Smuzhiyun 
730*4882a593Smuzhiyun #define DCB_APP_IDTYPE_ETHTYPE	0x00
731*4882a593Smuzhiyun #define DCB_APP_IDTYPE_PORTNUM	0x01
732*4882a593Smuzhiyun enum dcbnl_app_attrs {
733*4882a593Smuzhiyun 	DCB_APP_ATTR_UNDEFINED,
734*4882a593Smuzhiyun 
735*4882a593Smuzhiyun 	DCB_APP_ATTR_IDTYPE,
736*4882a593Smuzhiyun 	DCB_APP_ATTR_ID,
737*4882a593Smuzhiyun 	DCB_APP_ATTR_PRIORITY,
738*4882a593Smuzhiyun 
739*4882a593Smuzhiyun 	__DCB_APP_ATTR_ENUM_MAX,
740*4882a593Smuzhiyun 	DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1,
741*4882a593Smuzhiyun };
742*4882a593Smuzhiyun 
743*4882a593Smuzhiyun /**
744*4882a593Smuzhiyun  * enum dcbnl_featcfg_attrs - features conifiguration flags
745*4882a593Smuzhiyun  *
746*4882a593Smuzhiyun  * @DCB_FEATCFG_ATTR_UNDEFINED: unspecified attribute to catch errors
747*4882a593Smuzhiyun  * @DCB_FEATCFG_ATTR_ALL: (NLA_FLAG) all features configuration attributes
748*4882a593Smuzhiyun  * @DCB_FEATCFG_ATTR_PG: (NLA_U8) configuration flags for priority groups
749*4882a593Smuzhiyun  * @DCB_FEATCFG_ATTR_PFC: (NLA_U8) configuration flags for priority
750*4882a593Smuzhiyun  *                                 flow control
751*4882a593Smuzhiyun  * @DCB_FEATCFG_ATTR_APP: (NLA_U8) configuration flags for application TLV
752*4882a593Smuzhiyun  *
753*4882a593Smuzhiyun  */
754*4882a593Smuzhiyun #define DCB_FEATCFG_ERROR	0x01	/* error in feature resolution */
755*4882a593Smuzhiyun #define DCB_FEATCFG_ENABLE	0x02	/* enable feature */
756*4882a593Smuzhiyun #define DCB_FEATCFG_WILLING	0x04	/* feature is willing */
757*4882a593Smuzhiyun #define DCB_FEATCFG_ADVERTISE	0x08	/* advertise feature */
758*4882a593Smuzhiyun enum dcbnl_featcfg_attrs {
759*4882a593Smuzhiyun 	DCB_FEATCFG_ATTR_UNDEFINED,
760*4882a593Smuzhiyun 	DCB_FEATCFG_ATTR_ALL,
761*4882a593Smuzhiyun 	DCB_FEATCFG_ATTR_PG,
762*4882a593Smuzhiyun 	DCB_FEATCFG_ATTR_PFC,
763*4882a593Smuzhiyun 	DCB_FEATCFG_ATTR_APP,
764*4882a593Smuzhiyun 
765*4882a593Smuzhiyun 	__DCB_FEATCFG_ATTR_ENUM_MAX,
766*4882a593Smuzhiyun 	DCB_FEATCFG_ATTR_MAX = __DCB_FEATCFG_ATTR_ENUM_MAX - 1,
767*4882a593Smuzhiyun };
768*4882a593Smuzhiyun 
769*4882a593Smuzhiyun #endif /* __LINUX_DCBNL_H__ */
770