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