xref: /aosp_15_r20/external/libnl/include/linux-private/linux/pkt_sched.h (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4dc78e53SAndroid Build Coastguard Worker #ifndef __LINUX_PKT_SCHED_H
3*4dc78e53SAndroid Build Coastguard Worker #define __LINUX_PKT_SCHED_H
4*4dc78e53SAndroid Build Coastguard Worker 
5*4dc78e53SAndroid Build Coastguard Worker #include <linux/const.h>
6*4dc78e53SAndroid Build Coastguard Worker #include <linux/types.h>
7*4dc78e53SAndroid Build Coastguard Worker 
8*4dc78e53SAndroid Build Coastguard Worker /* Logical priority bands not depending on specific packet scheduler.
9*4dc78e53SAndroid Build Coastguard Worker    Every scheduler will map them to real traffic classes, if it has
10*4dc78e53SAndroid Build Coastguard Worker    no more precise mechanism to classify packets.
11*4dc78e53SAndroid Build Coastguard Worker 
12*4dc78e53SAndroid Build Coastguard Worker    These numbers have no special meaning, though their coincidence
13*4dc78e53SAndroid Build Coastguard Worker    with obsolete IPv6 values is not occasional :-). New IPv6 drafts
14*4dc78e53SAndroid Build Coastguard Worker    preferred full anarchy inspired by diffserv group.
15*4dc78e53SAndroid Build Coastguard Worker 
16*4dc78e53SAndroid Build Coastguard Worker    Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
17*4dc78e53SAndroid Build Coastguard Worker    class, actually, as rule it will be handled with more care than
18*4dc78e53SAndroid Build Coastguard Worker    filler or even bulk.
19*4dc78e53SAndroid Build Coastguard Worker  */
20*4dc78e53SAndroid Build Coastguard Worker 
21*4dc78e53SAndroid Build Coastguard Worker #define TC_PRIO_BESTEFFORT		0
22*4dc78e53SAndroid Build Coastguard Worker #define TC_PRIO_FILLER			1
23*4dc78e53SAndroid Build Coastguard Worker #define TC_PRIO_BULK			2
24*4dc78e53SAndroid Build Coastguard Worker #define TC_PRIO_INTERACTIVE_BULK	4
25*4dc78e53SAndroid Build Coastguard Worker #define TC_PRIO_INTERACTIVE		6
26*4dc78e53SAndroid Build Coastguard Worker #define TC_PRIO_CONTROL			7
27*4dc78e53SAndroid Build Coastguard Worker 
28*4dc78e53SAndroid Build Coastguard Worker #define TC_PRIO_MAX			15
29*4dc78e53SAndroid Build Coastguard Worker 
30*4dc78e53SAndroid Build Coastguard Worker /* Generic queue statistics, available for all the elements.
31*4dc78e53SAndroid Build Coastguard Worker    Particular schedulers may have also their private records.
32*4dc78e53SAndroid Build Coastguard Worker  */
33*4dc78e53SAndroid Build Coastguard Worker 
34*4dc78e53SAndroid Build Coastguard Worker struct tc_stats {
35*4dc78e53SAndroid Build Coastguard Worker 	__u64	bytes;			/* Number of enqueued bytes */
36*4dc78e53SAndroid Build Coastguard Worker 	__u32	packets;		/* Number of enqueued packets	*/
37*4dc78e53SAndroid Build Coastguard Worker 	__u32	drops;			/* Packets dropped because of lack of resources */
38*4dc78e53SAndroid Build Coastguard Worker 	__u32	overlimits;		/* Number of throttle events when this
39*4dc78e53SAndroid Build Coastguard Worker 					 * flow goes out of allocated bandwidth */
40*4dc78e53SAndroid Build Coastguard Worker 	__u32	bps;			/* Current flow byte rate */
41*4dc78e53SAndroid Build Coastguard Worker 	__u32	pps;			/* Current flow packet rate */
42*4dc78e53SAndroid Build Coastguard Worker 	__u32	qlen;
43*4dc78e53SAndroid Build Coastguard Worker 	__u32	backlog;
44*4dc78e53SAndroid Build Coastguard Worker };
45*4dc78e53SAndroid Build Coastguard Worker 
46*4dc78e53SAndroid Build Coastguard Worker struct tc_estimator {
47*4dc78e53SAndroid Build Coastguard Worker 	signed char	interval;
48*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	ewma_log;
49*4dc78e53SAndroid Build Coastguard Worker };
50*4dc78e53SAndroid Build Coastguard Worker 
51*4dc78e53SAndroid Build Coastguard Worker /* "Handles"
52*4dc78e53SAndroid Build Coastguard Worker    ---------
53*4dc78e53SAndroid Build Coastguard Worker 
54*4dc78e53SAndroid Build Coastguard Worker     All the traffic control objects have 32bit identifiers, or "handles".
55*4dc78e53SAndroid Build Coastguard Worker 
56*4dc78e53SAndroid Build Coastguard Worker     They can be considered as opaque numbers from user API viewpoint,
57*4dc78e53SAndroid Build Coastguard Worker     but actually they always consist of two fields: major and
58*4dc78e53SAndroid Build Coastguard Worker     minor numbers, which are interpreted by kernel specially,
59*4dc78e53SAndroid Build Coastguard Worker     that may be used by applications, though not recommended.
60*4dc78e53SAndroid Build Coastguard Worker 
61*4dc78e53SAndroid Build Coastguard Worker     F.e. qdisc handles always have minor number equal to zero,
62*4dc78e53SAndroid Build Coastguard Worker     classes (or flows) have major equal to parent qdisc major, and
63*4dc78e53SAndroid Build Coastguard Worker     minor uniquely identifying class inside qdisc.
64*4dc78e53SAndroid Build Coastguard Worker 
65*4dc78e53SAndroid Build Coastguard Worker     Macros to manipulate handles:
66*4dc78e53SAndroid Build Coastguard Worker  */
67*4dc78e53SAndroid Build Coastguard Worker 
68*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MAJ_MASK (0xFFFF0000U)
69*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MIN_MASK (0x0000FFFFU)
70*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
71*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
72*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
73*4dc78e53SAndroid Build Coastguard Worker 
74*4dc78e53SAndroid Build Coastguard Worker #define TC_H_UNSPEC	(0U)
75*4dc78e53SAndroid Build Coastguard Worker #define TC_H_ROOT	(0xFFFFFFFFU)
76*4dc78e53SAndroid Build Coastguard Worker #define TC_H_INGRESS    (0xFFFFFFF1U)
77*4dc78e53SAndroid Build Coastguard Worker #define TC_H_CLSACT	TC_H_INGRESS
78*4dc78e53SAndroid Build Coastguard Worker 
79*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MIN_PRIORITY	0xFFE0U
80*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MIN_INGRESS	0xFFF2U
81*4dc78e53SAndroid Build Coastguard Worker #define TC_H_MIN_EGRESS		0xFFF3U
82*4dc78e53SAndroid Build Coastguard Worker 
83*4dc78e53SAndroid Build Coastguard Worker /* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
84*4dc78e53SAndroid Build Coastguard Worker enum tc_link_layer {
85*4dc78e53SAndroid Build Coastguard Worker 	TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */
86*4dc78e53SAndroid Build Coastguard Worker 	TC_LINKLAYER_ETHERNET,
87*4dc78e53SAndroid Build Coastguard Worker 	TC_LINKLAYER_ATM,
88*4dc78e53SAndroid Build Coastguard Worker };
89*4dc78e53SAndroid Build Coastguard Worker #define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */
90*4dc78e53SAndroid Build Coastguard Worker 
91*4dc78e53SAndroid Build Coastguard Worker struct tc_ratespec {
92*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	cell_log;
93*4dc78e53SAndroid Build Coastguard Worker 	__u8		linklayer; /* lower 4 bits */
94*4dc78e53SAndroid Build Coastguard Worker 	unsigned short	overhead;
95*4dc78e53SAndroid Build Coastguard Worker 	short		cell_align;
96*4dc78e53SAndroid Build Coastguard Worker 	unsigned short	mpu;
97*4dc78e53SAndroid Build Coastguard Worker 	__u32		rate;
98*4dc78e53SAndroid Build Coastguard Worker };
99*4dc78e53SAndroid Build Coastguard Worker 
100*4dc78e53SAndroid Build Coastguard Worker #define TC_RTAB_SIZE	1024
101*4dc78e53SAndroid Build Coastguard Worker 
102*4dc78e53SAndroid Build Coastguard Worker struct tc_sizespec {
103*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	cell_log;
104*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	size_log;
105*4dc78e53SAndroid Build Coastguard Worker 	short		cell_align;
106*4dc78e53SAndroid Build Coastguard Worker 	int		overhead;
107*4dc78e53SAndroid Build Coastguard Worker 	unsigned int	linklayer;
108*4dc78e53SAndroid Build Coastguard Worker 	unsigned int	mpu;
109*4dc78e53SAndroid Build Coastguard Worker 	unsigned int	mtu;
110*4dc78e53SAndroid Build Coastguard Worker 	unsigned int	tsize;
111*4dc78e53SAndroid Build Coastguard Worker };
112*4dc78e53SAndroid Build Coastguard Worker 
113*4dc78e53SAndroid Build Coastguard Worker enum {
114*4dc78e53SAndroid Build Coastguard Worker 	TCA_STAB_UNSPEC,
115*4dc78e53SAndroid Build Coastguard Worker 	TCA_STAB_BASE,
116*4dc78e53SAndroid Build Coastguard Worker 	TCA_STAB_DATA,
117*4dc78e53SAndroid Build Coastguard Worker 	__TCA_STAB_MAX
118*4dc78e53SAndroid Build Coastguard Worker };
119*4dc78e53SAndroid Build Coastguard Worker 
120*4dc78e53SAndroid Build Coastguard Worker #define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
121*4dc78e53SAndroid Build Coastguard Worker 
122*4dc78e53SAndroid Build Coastguard Worker /* FIFO section */
123*4dc78e53SAndroid Build Coastguard Worker 
124*4dc78e53SAndroid Build Coastguard Worker struct tc_fifo_qopt {
125*4dc78e53SAndroid Build Coastguard Worker 	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
126*4dc78e53SAndroid Build Coastguard Worker };
127*4dc78e53SAndroid Build Coastguard Worker 
128*4dc78e53SAndroid Build Coastguard Worker /* SKBPRIO section */
129*4dc78e53SAndroid Build Coastguard Worker 
130*4dc78e53SAndroid Build Coastguard Worker /*
131*4dc78e53SAndroid Build Coastguard Worker  * Priorities go from zero to (SKBPRIO_MAX_PRIORITY - 1).
132*4dc78e53SAndroid Build Coastguard Worker  * SKBPRIO_MAX_PRIORITY should be at least 64 in order for skbprio to be able
133*4dc78e53SAndroid Build Coastguard Worker  * to map one to one the DS field of IPV4 and IPV6 headers.
134*4dc78e53SAndroid Build Coastguard Worker  * Memory allocation grows linearly with SKBPRIO_MAX_PRIORITY.
135*4dc78e53SAndroid Build Coastguard Worker  */
136*4dc78e53SAndroid Build Coastguard Worker 
137*4dc78e53SAndroid Build Coastguard Worker #define SKBPRIO_MAX_PRIORITY 64
138*4dc78e53SAndroid Build Coastguard Worker 
139*4dc78e53SAndroid Build Coastguard Worker struct tc_skbprio_qopt {
140*4dc78e53SAndroid Build Coastguard Worker 	__u32	limit;		/* Queue length in packets. */
141*4dc78e53SAndroid Build Coastguard Worker };
142*4dc78e53SAndroid Build Coastguard Worker 
143*4dc78e53SAndroid Build Coastguard Worker /* PRIO section */
144*4dc78e53SAndroid Build Coastguard Worker 
145*4dc78e53SAndroid Build Coastguard Worker #define TCQ_PRIO_BANDS	16
146*4dc78e53SAndroid Build Coastguard Worker #define TCQ_MIN_PRIO_BANDS 2
147*4dc78e53SAndroid Build Coastguard Worker 
148*4dc78e53SAndroid Build Coastguard Worker struct tc_prio_qopt {
149*4dc78e53SAndroid Build Coastguard Worker 	int	bands;			/* Number of bands */
150*4dc78e53SAndroid Build Coastguard Worker 	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
151*4dc78e53SAndroid Build Coastguard Worker };
152*4dc78e53SAndroid Build Coastguard Worker 
153*4dc78e53SAndroid Build Coastguard Worker /* MULTIQ section */
154*4dc78e53SAndroid Build Coastguard Worker 
155*4dc78e53SAndroid Build Coastguard Worker struct tc_multiq_qopt {
156*4dc78e53SAndroid Build Coastguard Worker 	__u16	bands;			/* Number of bands */
157*4dc78e53SAndroid Build Coastguard Worker 	__u16	max_bands;		/* Maximum number of queues */
158*4dc78e53SAndroid Build Coastguard Worker };
159*4dc78e53SAndroid Build Coastguard Worker 
160*4dc78e53SAndroid Build Coastguard Worker /* PLUG section */
161*4dc78e53SAndroid Build Coastguard Worker 
162*4dc78e53SAndroid Build Coastguard Worker #define TCQ_PLUG_BUFFER                0
163*4dc78e53SAndroid Build Coastguard Worker #define TCQ_PLUG_RELEASE_ONE           1
164*4dc78e53SAndroid Build Coastguard Worker #define TCQ_PLUG_RELEASE_INDEFINITE    2
165*4dc78e53SAndroid Build Coastguard Worker #define TCQ_PLUG_LIMIT                 3
166*4dc78e53SAndroid Build Coastguard Worker 
167*4dc78e53SAndroid Build Coastguard Worker struct tc_plug_qopt {
168*4dc78e53SAndroid Build Coastguard Worker 	/* TCQ_PLUG_BUFFER: Inset a plug into the queue and
169*4dc78e53SAndroid Build Coastguard Worker 	 *  buffer any incoming packets
170*4dc78e53SAndroid Build Coastguard Worker 	 * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
171*4dc78e53SAndroid Build Coastguard Worker 	 *   to beginning of the next plug.
172*4dc78e53SAndroid Build Coastguard Worker 	 * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
173*4dc78e53SAndroid Build Coastguard Worker 	 *   Stop buffering packets until the next TCQ_PLUG_BUFFER
174*4dc78e53SAndroid Build Coastguard Worker 	 *   command is received (just act as a pass-thru queue).
175*4dc78e53SAndroid Build Coastguard Worker 	 * TCQ_PLUG_LIMIT: Increase/decrease queue size
176*4dc78e53SAndroid Build Coastguard Worker 	 */
177*4dc78e53SAndroid Build Coastguard Worker 	int             action;
178*4dc78e53SAndroid Build Coastguard Worker 	__u32           limit;
179*4dc78e53SAndroid Build Coastguard Worker };
180*4dc78e53SAndroid Build Coastguard Worker 
181*4dc78e53SAndroid Build Coastguard Worker /* TBF section */
182*4dc78e53SAndroid Build Coastguard Worker 
183*4dc78e53SAndroid Build Coastguard Worker struct tc_tbf_qopt {
184*4dc78e53SAndroid Build Coastguard Worker 	struct tc_ratespec rate;
185*4dc78e53SAndroid Build Coastguard Worker 	struct tc_ratespec peakrate;
186*4dc78e53SAndroid Build Coastguard Worker 	__u32		limit;
187*4dc78e53SAndroid Build Coastguard Worker 	__u32		buffer;
188*4dc78e53SAndroid Build Coastguard Worker 	__u32		mtu;
189*4dc78e53SAndroid Build Coastguard Worker };
190*4dc78e53SAndroid Build Coastguard Worker 
191*4dc78e53SAndroid Build Coastguard Worker enum {
192*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_UNSPEC,
193*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_PARMS,
194*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_RTAB,
195*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_PTAB,
196*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_RATE64,
197*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_PRATE64,
198*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_BURST,
199*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_PBURST,
200*4dc78e53SAndroid Build Coastguard Worker 	TCA_TBF_PAD,
201*4dc78e53SAndroid Build Coastguard Worker 	__TCA_TBF_MAX,
202*4dc78e53SAndroid Build Coastguard Worker };
203*4dc78e53SAndroid Build Coastguard Worker 
204*4dc78e53SAndroid Build Coastguard Worker #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
205*4dc78e53SAndroid Build Coastguard Worker 
206*4dc78e53SAndroid Build Coastguard Worker 
207*4dc78e53SAndroid Build Coastguard Worker /* TEQL section */
208*4dc78e53SAndroid Build Coastguard Worker 
209*4dc78e53SAndroid Build Coastguard Worker /* TEQL does not require any parameters */
210*4dc78e53SAndroid Build Coastguard Worker 
211*4dc78e53SAndroid Build Coastguard Worker /* SFQ section */
212*4dc78e53SAndroid Build Coastguard Worker 
213*4dc78e53SAndroid Build Coastguard Worker struct tc_sfq_qopt {
214*4dc78e53SAndroid Build Coastguard Worker 	unsigned	quantum;	/* Bytes per round allocated to flow */
215*4dc78e53SAndroid Build Coastguard Worker 	int		perturb_period;	/* Period of hash perturbation */
216*4dc78e53SAndroid Build Coastguard Worker 	__u32		limit;		/* Maximal packets in queue */
217*4dc78e53SAndroid Build Coastguard Worker 	unsigned	divisor;	/* Hash divisor  */
218*4dc78e53SAndroid Build Coastguard Worker 	unsigned	flows;		/* Maximal number of flows  */
219*4dc78e53SAndroid Build Coastguard Worker };
220*4dc78e53SAndroid Build Coastguard Worker 
221*4dc78e53SAndroid Build Coastguard Worker struct tc_sfqred_stats {
222*4dc78e53SAndroid Build Coastguard Worker 	__u32           prob_drop;      /* Early drops, below max threshold */
223*4dc78e53SAndroid Build Coastguard Worker 	__u32           forced_drop;	/* Early drops, after max threshold */
224*4dc78e53SAndroid Build Coastguard Worker 	__u32           prob_mark;      /* Marked packets, below max threshold */
225*4dc78e53SAndroid Build Coastguard Worker 	__u32           forced_mark;    /* Marked packets, after max threshold */
226*4dc78e53SAndroid Build Coastguard Worker 	__u32           prob_mark_head; /* Marked packets, below max threshold */
227*4dc78e53SAndroid Build Coastguard Worker 	__u32           forced_mark_head;/* Marked packets, after max threshold */
228*4dc78e53SAndroid Build Coastguard Worker };
229*4dc78e53SAndroid Build Coastguard Worker 
230*4dc78e53SAndroid Build Coastguard Worker struct tc_sfq_qopt_v1 {
231*4dc78e53SAndroid Build Coastguard Worker 	struct tc_sfq_qopt v0;
232*4dc78e53SAndroid Build Coastguard Worker 	unsigned int	depth;		/* max number of packets per flow */
233*4dc78e53SAndroid Build Coastguard Worker 	unsigned int	headdrop;
234*4dc78e53SAndroid Build Coastguard Worker /* SFQRED parameters */
235*4dc78e53SAndroid Build Coastguard Worker 	__u32		limit;		/* HARD maximal flow queue length (bytes) */
236*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_min;	/* Min average length threshold (bytes) */
237*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_max;	/* Max average length threshold (bytes) */
238*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Wlog;		/* log(W)		*/
239*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
240*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Scell_log;	/* cell size for idle damping */
241*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	flags;
242*4dc78e53SAndroid Build Coastguard Worker 	__u32		max_P;		/* probability, high resolution */
243*4dc78e53SAndroid Build Coastguard Worker /* SFQRED stats */
244*4dc78e53SAndroid Build Coastguard Worker 	struct tc_sfqred_stats stats;
245*4dc78e53SAndroid Build Coastguard Worker };
246*4dc78e53SAndroid Build Coastguard Worker 
247*4dc78e53SAndroid Build Coastguard Worker 
248*4dc78e53SAndroid Build Coastguard Worker struct tc_sfq_xstats {
249*4dc78e53SAndroid Build Coastguard Worker 	__s32		allot;
250*4dc78e53SAndroid Build Coastguard Worker };
251*4dc78e53SAndroid Build Coastguard Worker 
252*4dc78e53SAndroid Build Coastguard Worker /* RED section */
253*4dc78e53SAndroid Build Coastguard Worker 
254*4dc78e53SAndroid Build Coastguard Worker enum {
255*4dc78e53SAndroid Build Coastguard Worker 	TCA_RED_UNSPEC,
256*4dc78e53SAndroid Build Coastguard Worker 	TCA_RED_PARMS,
257*4dc78e53SAndroid Build Coastguard Worker 	TCA_RED_STAB,
258*4dc78e53SAndroid Build Coastguard Worker 	TCA_RED_MAX_P,
259*4dc78e53SAndroid Build Coastguard Worker 	TCA_RED_FLAGS,		/* bitfield32 */
260*4dc78e53SAndroid Build Coastguard Worker 	TCA_RED_EARLY_DROP_BLOCK, /* u32 */
261*4dc78e53SAndroid Build Coastguard Worker 	TCA_RED_MARK_BLOCK,	/* u32 */
262*4dc78e53SAndroid Build Coastguard Worker 	__TCA_RED_MAX,
263*4dc78e53SAndroid Build Coastguard Worker };
264*4dc78e53SAndroid Build Coastguard Worker 
265*4dc78e53SAndroid Build Coastguard Worker #define TCA_RED_MAX (__TCA_RED_MAX - 1)
266*4dc78e53SAndroid Build Coastguard Worker 
267*4dc78e53SAndroid Build Coastguard Worker struct tc_red_qopt {
268*4dc78e53SAndroid Build Coastguard Worker 	__u32		limit;		/* HARD maximal queue length (bytes)	*/
269*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_min;	/* Min average length threshold (bytes) */
270*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_max;	/* Max average length threshold (bytes) */
271*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Wlog;		/* log(W)		*/
272*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
273*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Scell_log;	/* cell size for idle damping */
274*4dc78e53SAndroid Build Coastguard Worker 
275*4dc78e53SAndroid Build Coastguard Worker 	/* This field can be used for flags that a RED-like qdisc has
276*4dc78e53SAndroid Build Coastguard Worker 	 * historically supported. E.g. when configuring RED, it can be used for
277*4dc78e53SAndroid Build Coastguard Worker 	 * ECN, HARDDROP and ADAPTATIVE. For SFQ it can be used for ECN,
278*4dc78e53SAndroid Build Coastguard Worker 	 * HARDDROP. Etc. Because this field has not been validated, and is
279*4dc78e53SAndroid Build Coastguard Worker 	 * copied back on dump, any bits besides those to which a given qdisc
280*4dc78e53SAndroid Build Coastguard Worker 	 * has assigned a historical meaning need to be considered for free use
281*4dc78e53SAndroid Build Coastguard Worker 	 * by userspace tools.
282*4dc78e53SAndroid Build Coastguard Worker 	 *
283*4dc78e53SAndroid Build Coastguard Worker 	 * Any further flags need to be passed differently, e.g. through an
284*4dc78e53SAndroid Build Coastguard Worker 	 * attribute (such as TCA_RED_FLAGS above). Such attribute should allow
285*4dc78e53SAndroid Build Coastguard Worker 	 * passing both recent and historic flags in one value.
286*4dc78e53SAndroid Build Coastguard Worker 	 */
287*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	flags;
288*4dc78e53SAndroid Build Coastguard Worker #define TC_RED_ECN		1
289*4dc78e53SAndroid Build Coastguard Worker #define TC_RED_HARDDROP		2
290*4dc78e53SAndroid Build Coastguard Worker #define TC_RED_ADAPTATIVE	4
291*4dc78e53SAndroid Build Coastguard Worker #define TC_RED_NODROP		8
292*4dc78e53SAndroid Build Coastguard Worker };
293*4dc78e53SAndroid Build Coastguard Worker 
294*4dc78e53SAndroid Build Coastguard Worker #define TC_RED_HISTORIC_FLAGS (TC_RED_ECN | TC_RED_HARDDROP | TC_RED_ADAPTATIVE)
295*4dc78e53SAndroid Build Coastguard Worker 
296*4dc78e53SAndroid Build Coastguard Worker struct tc_red_xstats {
297*4dc78e53SAndroid Build Coastguard Worker 	__u32           early;          /* Early drops */
298*4dc78e53SAndroid Build Coastguard Worker 	__u32           pdrop;          /* Drops due to queue limits */
299*4dc78e53SAndroid Build Coastguard Worker 	__u32           other;          /* Drops due to drop() calls */
300*4dc78e53SAndroid Build Coastguard Worker 	__u32           marked;         /* Marked packets */
301*4dc78e53SAndroid Build Coastguard Worker };
302*4dc78e53SAndroid Build Coastguard Worker 
303*4dc78e53SAndroid Build Coastguard Worker /* GRED section */
304*4dc78e53SAndroid Build Coastguard Worker 
305*4dc78e53SAndroid Build Coastguard Worker #define MAX_DPs 16
306*4dc78e53SAndroid Build Coastguard Worker 
307*4dc78e53SAndroid Build Coastguard Worker enum {
308*4dc78e53SAndroid Build Coastguard Worker        TCA_GRED_UNSPEC,
309*4dc78e53SAndroid Build Coastguard Worker        TCA_GRED_PARMS,
310*4dc78e53SAndroid Build Coastguard Worker        TCA_GRED_STAB,
311*4dc78e53SAndroid Build Coastguard Worker        TCA_GRED_DPS,
312*4dc78e53SAndroid Build Coastguard Worker        TCA_GRED_MAX_P,
313*4dc78e53SAndroid Build Coastguard Worker        TCA_GRED_LIMIT,
314*4dc78e53SAndroid Build Coastguard Worker        TCA_GRED_VQ_LIST,	/* nested TCA_GRED_VQ_ENTRY */
315*4dc78e53SAndroid Build Coastguard Worker        __TCA_GRED_MAX,
316*4dc78e53SAndroid Build Coastguard Worker };
317*4dc78e53SAndroid Build Coastguard Worker 
318*4dc78e53SAndroid Build Coastguard Worker #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
319*4dc78e53SAndroid Build Coastguard Worker 
320*4dc78e53SAndroid Build Coastguard Worker enum {
321*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_ENTRY_UNSPEC,
322*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_ENTRY,	/* nested TCA_GRED_VQ_* */
323*4dc78e53SAndroid Build Coastguard Worker 	__TCA_GRED_VQ_ENTRY_MAX,
324*4dc78e53SAndroid Build Coastguard Worker };
325*4dc78e53SAndroid Build Coastguard Worker #define TCA_GRED_VQ_ENTRY_MAX (__TCA_GRED_VQ_ENTRY_MAX - 1)
326*4dc78e53SAndroid Build Coastguard Worker 
327*4dc78e53SAndroid Build Coastguard Worker enum {
328*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_UNSPEC,
329*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_PAD,
330*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_DP,			/* u32 */
331*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_BYTES,		/* u64 */
332*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_PACKETS,	/* u32 */
333*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_BACKLOG,	/* u32 */
334*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_PROB_DROP,	/* u32 */
335*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_PROB_MARK,	/* u32 */
336*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_FORCED_DROP,	/* u32 */
337*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_FORCED_MARK,	/* u32 */
338*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_PDROP,		/* u32 */
339*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_STAT_OTHER,		/* u32 */
340*4dc78e53SAndroid Build Coastguard Worker 	TCA_GRED_VQ_FLAGS,		/* u32 */
341*4dc78e53SAndroid Build Coastguard Worker 	__TCA_GRED_VQ_MAX
342*4dc78e53SAndroid Build Coastguard Worker };
343*4dc78e53SAndroid Build Coastguard Worker 
344*4dc78e53SAndroid Build Coastguard Worker #define TCA_GRED_VQ_MAX (__TCA_GRED_VQ_MAX - 1)
345*4dc78e53SAndroid Build Coastguard Worker 
346*4dc78e53SAndroid Build Coastguard Worker struct tc_gred_qopt {
347*4dc78e53SAndroid Build Coastguard Worker 	__u32		limit;        /* HARD maximal queue length (bytes)    */
348*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_min;      /* Min average length threshold (bytes) */
349*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_max;      /* Max average length threshold (bytes) */
350*4dc78e53SAndroid Build Coastguard Worker 	__u32		DP;           /* up to 2^32 DPs */
351*4dc78e53SAndroid Build Coastguard Worker 	__u32		backlog;
352*4dc78e53SAndroid Build Coastguard Worker 	__u32		qave;
353*4dc78e53SAndroid Build Coastguard Worker 	__u32		forced;
354*4dc78e53SAndroid Build Coastguard Worker 	__u32		early;
355*4dc78e53SAndroid Build Coastguard Worker 	__u32		other;
356*4dc78e53SAndroid Build Coastguard Worker 	__u32		pdrop;
357*4dc78e53SAndroid Build Coastguard Worker 	__u8		Wlog;         /* log(W)               */
358*4dc78e53SAndroid Build Coastguard Worker 	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
359*4dc78e53SAndroid Build Coastguard Worker 	__u8		Scell_log;    /* cell size for idle damping */
360*4dc78e53SAndroid Build Coastguard Worker 	__u8		prio;         /* prio of this VQ */
361*4dc78e53SAndroid Build Coastguard Worker 	__u32		packets;
362*4dc78e53SAndroid Build Coastguard Worker 	__u32		bytesin;
363*4dc78e53SAndroid Build Coastguard Worker };
364*4dc78e53SAndroid Build Coastguard Worker 
365*4dc78e53SAndroid Build Coastguard Worker /* gred setup */
366*4dc78e53SAndroid Build Coastguard Worker struct tc_gred_sopt {
367*4dc78e53SAndroid Build Coastguard Worker 	__u32		DPs;
368*4dc78e53SAndroid Build Coastguard Worker 	__u32		def_DP;
369*4dc78e53SAndroid Build Coastguard Worker 	__u8		grio;
370*4dc78e53SAndroid Build Coastguard Worker 	__u8		flags;
371*4dc78e53SAndroid Build Coastguard Worker 	__u16		pad1;
372*4dc78e53SAndroid Build Coastguard Worker };
373*4dc78e53SAndroid Build Coastguard Worker 
374*4dc78e53SAndroid Build Coastguard Worker /* CHOKe section */
375*4dc78e53SAndroid Build Coastguard Worker 
376*4dc78e53SAndroid Build Coastguard Worker enum {
377*4dc78e53SAndroid Build Coastguard Worker 	TCA_CHOKE_UNSPEC,
378*4dc78e53SAndroid Build Coastguard Worker 	TCA_CHOKE_PARMS,
379*4dc78e53SAndroid Build Coastguard Worker 	TCA_CHOKE_STAB,
380*4dc78e53SAndroid Build Coastguard Worker 	TCA_CHOKE_MAX_P,
381*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CHOKE_MAX,
382*4dc78e53SAndroid Build Coastguard Worker };
383*4dc78e53SAndroid Build Coastguard Worker 
384*4dc78e53SAndroid Build Coastguard Worker #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
385*4dc78e53SAndroid Build Coastguard Worker 
386*4dc78e53SAndroid Build Coastguard Worker struct tc_choke_qopt {
387*4dc78e53SAndroid Build Coastguard Worker 	__u32		limit;		/* Hard queue length (packets)	*/
388*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_min;	/* Min average threshold (packets) */
389*4dc78e53SAndroid Build Coastguard Worker 	__u32		qth_max;	/* Max average threshold (packets) */
390*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Wlog;		/* log(W)		*/
391*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
392*4dc78e53SAndroid Build Coastguard Worker 	unsigned char   Scell_log;	/* cell size for idle damping */
393*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	flags;		/* see RED flags */
394*4dc78e53SAndroid Build Coastguard Worker };
395*4dc78e53SAndroid Build Coastguard Worker 
396*4dc78e53SAndroid Build Coastguard Worker struct tc_choke_xstats {
397*4dc78e53SAndroid Build Coastguard Worker 	__u32		early;          /* Early drops */
398*4dc78e53SAndroid Build Coastguard Worker 	__u32		pdrop;          /* Drops due to queue limits */
399*4dc78e53SAndroid Build Coastguard Worker 	__u32		other;          /* Drops due to drop() calls */
400*4dc78e53SAndroid Build Coastguard Worker 	__u32		marked;         /* Marked packets */
401*4dc78e53SAndroid Build Coastguard Worker 	__u32		matched;	/* Drops due to flow match */
402*4dc78e53SAndroid Build Coastguard Worker };
403*4dc78e53SAndroid Build Coastguard Worker 
404*4dc78e53SAndroid Build Coastguard Worker /* HTB section */
405*4dc78e53SAndroid Build Coastguard Worker #define TC_HTB_NUMPRIO		8
406*4dc78e53SAndroid Build Coastguard Worker #define TC_HTB_MAXDEPTH		8
407*4dc78e53SAndroid Build Coastguard Worker #define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
408*4dc78e53SAndroid Build Coastguard Worker 
409*4dc78e53SAndroid Build Coastguard Worker struct tc_htb_opt {
410*4dc78e53SAndroid Build Coastguard Worker 	struct tc_ratespec 	rate;
411*4dc78e53SAndroid Build Coastguard Worker 	struct tc_ratespec 	ceil;
412*4dc78e53SAndroid Build Coastguard Worker 	__u32	buffer;
413*4dc78e53SAndroid Build Coastguard Worker 	__u32	cbuffer;
414*4dc78e53SAndroid Build Coastguard Worker 	__u32	quantum;
415*4dc78e53SAndroid Build Coastguard Worker 	__u32	level;		/* out only */
416*4dc78e53SAndroid Build Coastguard Worker 	__u32	prio;
417*4dc78e53SAndroid Build Coastguard Worker };
418*4dc78e53SAndroid Build Coastguard Worker struct tc_htb_glob {
419*4dc78e53SAndroid Build Coastguard Worker 	__u32 version;		/* to match HTB/TC */
420*4dc78e53SAndroid Build Coastguard Worker     	__u32 rate2quantum;	/* bps->quantum divisor */
421*4dc78e53SAndroid Build Coastguard Worker     	__u32 defcls;		/* default class number */
422*4dc78e53SAndroid Build Coastguard Worker 	__u32 debug;		/* debug flags */
423*4dc78e53SAndroid Build Coastguard Worker 
424*4dc78e53SAndroid Build Coastguard Worker 	/* stats */
425*4dc78e53SAndroid Build Coastguard Worker 	__u32 direct_pkts; /* count of non shaped packets */
426*4dc78e53SAndroid Build Coastguard Worker };
427*4dc78e53SAndroid Build Coastguard Worker enum {
428*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_UNSPEC,
429*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_PARMS,
430*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_INIT,
431*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_CTAB,
432*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_RTAB,
433*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_DIRECT_QLEN,
434*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_RATE64,
435*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_CEIL64,
436*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_PAD,
437*4dc78e53SAndroid Build Coastguard Worker 	TCA_HTB_OFFLOAD,
438*4dc78e53SAndroid Build Coastguard Worker 	__TCA_HTB_MAX,
439*4dc78e53SAndroid Build Coastguard Worker };
440*4dc78e53SAndroid Build Coastguard Worker 
441*4dc78e53SAndroid Build Coastguard Worker #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
442*4dc78e53SAndroid Build Coastguard Worker 
443*4dc78e53SAndroid Build Coastguard Worker struct tc_htb_xstats {
444*4dc78e53SAndroid Build Coastguard Worker 	__u32 lends;
445*4dc78e53SAndroid Build Coastguard Worker 	__u32 borrows;
446*4dc78e53SAndroid Build Coastguard Worker 	__u32 giants;	/* unused since 'Make HTB scheduler work with TSO.' */
447*4dc78e53SAndroid Build Coastguard Worker 	__s32 tokens;
448*4dc78e53SAndroid Build Coastguard Worker 	__s32 ctokens;
449*4dc78e53SAndroid Build Coastguard Worker };
450*4dc78e53SAndroid Build Coastguard Worker 
451*4dc78e53SAndroid Build Coastguard Worker /* HFSC section */
452*4dc78e53SAndroid Build Coastguard Worker 
453*4dc78e53SAndroid Build Coastguard Worker struct tc_hfsc_qopt {
454*4dc78e53SAndroid Build Coastguard Worker 	__u16	defcls;		/* default class */
455*4dc78e53SAndroid Build Coastguard Worker };
456*4dc78e53SAndroid Build Coastguard Worker 
457*4dc78e53SAndroid Build Coastguard Worker struct tc_service_curve {
458*4dc78e53SAndroid Build Coastguard Worker 	__u32	m1;		/* slope of the first segment in bps */
459*4dc78e53SAndroid Build Coastguard Worker 	__u32	d;		/* x-projection of the first segment in us */
460*4dc78e53SAndroid Build Coastguard Worker 	__u32	m2;		/* slope of the second segment in bps */
461*4dc78e53SAndroid Build Coastguard Worker };
462*4dc78e53SAndroid Build Coastguard Worker 
463*4dc78e53SAndroid Build Coastguard Worker struct tc_hfsc_stats {
464*4dc78e53SAndroid Build Coastguard Worker 	__u64	work;		/* total work done */
465*4dc78e53SAndroid Build Coastguard Worker 	__u64	rtwork;		/* work done by real-time criteria */
466*4dc78e53SAndroid Build Coastguard Worker 	__u32	period;		/* current period */
467*4dc78e53SAndroid Build Coastguard Worker 	__u32	level;		/* class level in hierarchy */
468*4dc78e53SAndroid Build Coastguard Worker };
469*4dc78e53SAndroid Build Coastguard Worker 
470*4dc78e53SAndroid Build Coastguard Worker enum {
471*4dc78e53SAndroid Build Coastguard Worker 	TCA_HFSC_UNSPEC,
472*4dc78e53SAndroid Build Coastguard Worker 	TCA_HFSC_RSC,
473*4dc78e53SAndroid Build Coastguard Worker 	TCA_HFSC_FSC,
474*4dc78e53SAndroid Build Coastguard Worker 	TCA_HFSC_USC,
475*4dc78e53SAndroid Build Coastguard Worker 	__TCA_HFSC_MAX,
476*4dc78e53SAndroid Build Coastguard Worker };
477*4dc78e53SAndroid Build Coastguard Worker 
478*4dc78e53SAndroid Build Coastguard Worker #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
479*4dc78e53SAndroid Build Coastguard Worker 
480*4dc78e53SAndroid Build Coastguard Worker 
481*4dc78e53SAndroid Build Coastguard Worker /* CBQ section */
482*4dc78e53SAndroid Build Coastguard Worker 
483*4dc78e53SAndroid Build Coastguard Worker #define TC_CBQ_MAXPRIO		8
484*4dc78e53SAndroid Build Coastguard Worker #define TC_CBQ_MAXLEVEL		8
485*4dc78e53SAndroid Build Coastguard Worker #define TC_CBQ_DEF_EWMA		5
486*4dc78e53SAndroid Build Coastguard Worker 
487*4dc78e53SAndroid Build Coastguard Worker struct tc_cbq_lssopt {
488*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	change;
489*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	flags;
490*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_BOUNDED	1
491*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_ISOLATED	2
492*4dc78e53SAndroid Build Coastguard Worker 	unsigned char  	ewma_log;
493*4dc78e53SAndroid Build Coastguard Worker 	unsigned char  	level;
494*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_FLAGS	1
495*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_EWMA	2
496*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_MAXIDLE	4
497*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_MINIDLE	8
498*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_OFFTIME	0x10
499*4dc78e53SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_AVPKT	0x20
500*4dc78e53SAndroid Build Coastguard Worker 	__u32		maxidle;
501*4dc78e53SAndroid Build Coastguard Worker 	__u32		minidle;
502*4dc78e53SAndroid Build Coastguard Worker 	__u32		offtime;
503*4dc78e53SAndroid Build Coastguard Worker 	__u32		avpkt;
504*4dc78e53SAndroid Build Coastguard Worker };
505*4dc78e53SAndroid Build Coastguard Worker 
506*4dc78e53SAndroid Build Coastguard Worker struct tc_cbq_wrropt {
507*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	flags;
508*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	priority;
509*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	cpriority;
510*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	__reserved;
511*4dc78e53SAndroid Build Coastguard Worker 	__u32		allot;
512*4dc78e53SAndroid Build Coastguard Worker 	__u32		weight;
513*4dc78e53SAndroid Build Coastguard Worker };
514*4dc78e53SAndroid Build Coastguard Worker 
515*4dc78e53SAndroid Build Coastguard Worker struct tc_cbq_ovl {
516*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	strategy;
517*4dc78e53SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_CLASSIC	0
518*4dc78e53SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_DELAY	1
519*4dc78e53SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_LOWPRIO	2
520*4dc78e53SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_DROP		3
521*4dc78e53SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_RCLASSIC	4
522*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	priority2;
523*4dc78e53SAndroid Build Coastguard Worker 	__u16		pad;
524*4dc78e53SAndroid Build Coastguard Worker 	__u32		penalty;
525*4dc78e53SAndroid Build Coastguard Worker };
526*4dc78e53SAndroid Build Coastguard Worker 
527*4dc78e53SAndroid Build Coastguard Worker struct tc_cbq_police {
528*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	police;
529*4dc78e53SAndroid Build Coastguard Worker 	unsigned char	__res1;
530*4dc78e53SAndroid Build Coastguard Worker 	unsigned short	__res2;
531*4dc78e53SAndroid Build Coastguard Worker };
532*4dc78e53SAndroid Build Coastguard Worker 
533*4dc78e53SAndroid Build Coastguard Worker struct tc_cbq_fopt {
534*4dc78e53SAndroid Build Coastguard Worker 	__u32		split;
535*4dc78e53SAndroid Build Coastguard Worker 	__u32		defmap;
536*4dc78e53SAndroid Build Coastguard Worker 	__u32		defchange;
537*4dc78e53SAndroid Build Coastguard Worker };
538*4dc78e53SAndroid Build Coastguard Worker 
539*4dc78e53SAndroid Build Coastguard Worker struct tc_cbq_xstats {
540*4dc78e53SAndroid Build Coastguard Worker 	__u32		borrows;
541*4dc78e53SAndroid Build Coastguard Worker 	__u32		overactions;
542*4dc78e53SAndroid Build Coastguard Worker 	__s32		avgidle;
543*4dc78e53SAndroid Build Coastguard Worker 	__s32		undertime;
544*4dc78e53SAndroid Build Coastguard Worker };
545*4dc78e53SAndroid Build Coastguard Worker 
546*4dc78e53SAndroid Build Coastguard Worker enum {
547*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_UNSPEC,
548*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_LSSOPT,
549*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_WRROPT,
550*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_FOPT,
551*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_OVL_STRATEGY,
552*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_RATE,
553*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_RTAB,
554*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBQ_POLICE,
555*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CBQ_MAX,
556*4dc78e53SAndroid Build Coastguard Worker };
557*4dc78e53SAndroid Build Coastguard Worker 
558*4dc78e53SAndroid Build Coastguard Worker #define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
559*4dc78e53SAndroid Build Coastguard Worker 
560*4dc78e53SAndroid Build Coastguard Worker /* dsmark section */
561*4dc78e53SAndroid Build Coastguard Worker 
562*4dc78e53SAndroid Build Coastguard Worker enum {
563*4dc78e53SAndroid Build Coastguard Worker 	TCA_DSMARK_UNSPEC,
564*4dc78e53SAndroid Build Coastguard Worker 	TCA_DSMARK_INDICES,
565*4dc78e53SAndroid Build Coastguard Worker 	TCA_DSMARK_DEFAULT_INDEX,
566*4dc78e53SAndroid Build Coastguard Worker 	TCA_DSMARK_SET_TC_INDEX,
567*4dc78e53SAndroid Build Coastguard Worker 	TCA_DSMARK_MASK,
568*4dc78e53SAndroid Build Coastguard Worker 	TCA_DSMARK_VALUE,
569*4dc78e53SAndroid Build Coastguard Worker 	__TCA_DSMARK_MAX,
570*4dc78e53SAndroid Build Coastguard Worker };
571*4dc78e53SAndroid Build Coastguard Worker 
572*4dc78e53SAndroid Build Coastguard Worker #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
573*4dc78e53SAndroid Build Coastguard Worker 
574*4dc78e53SAndroid Build Coastguard Worker /* ATM  section */
575*4dc78e53SAndroid Build Coastguard Worker 
576*4dc78e53SAndroid Build Coastguard Worker enum {
577*4dc78e53SAndroid Build Coastguard Worker 	TCA_ATM_UNSPEC,
578*4dc78e53SAndroid Build Coastguard Worker 	TCA_ATM_FD,		/* file/socket descriptor */
579*4dc78e53SAndroid Build Coastguard Worker 	TCA_ATM_PTR,		/* pointer to descriptor - later */
580*4dc78e53SAndroid Build Coastguard Worker 	TCA_ATM_HDR,		/* LL header */
581*4dc78e53SAndroid Build Coastguard Worker 	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
582*4dc78e53SAndroid Build Coastguard Worker 	TCA_ATM_ADDR,		/* PVC address (for output only) */
583*4dc78e53SAndroid Build Coastguard Worker 	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
584*4dc78e53SAndroid Build Coastguard Worker 	__TCA_ATM_MAX,
585*4dc78e53SAndroid Build Coastguard Worker };
586*4dc78e53SAndroid Build Coastguard Worker 
587*4dc78e53SAndroid Build Coastguard Worker #define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
588*4dc78e53SAndroid Build Coastguard Worker 
589*4dc78e53SAndroid Build Coastguard Worker /* Network emulator */
590*4dc78e53SAndroid Build Coastguard Worker 
591*4dc78e53SAndroid Build Coastguard Worker enum {
592*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_UNSPEC,
593*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_CORR,
594*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_DELAY_DIST,
595*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_REORDER,
596*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_CORRUPT,
597*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_LOSS,
598*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_RATE,
599*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_ECN,
600*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_RATE64,
601*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_PAD,
602*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_LATENCY64,
603*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_JITTER64,
604*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_SLOT,
605*4dc78e53SAndroid Build Coastguard Worker 	TCA_NETEM_SLOT_DIST,
606*4dc78e53SAndroid Build Coastguard Worker 	__TCA_NETEM_MAX,
607*4dc78e53SAndroid Build Coastguard Worker };
608*4dc78e53SAndroid Build Coastguard Worker 
609*4dc78e53SAndroid Build Coastguard Worker #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
610*4dc78e53SAndroid Build Coastguard Worker 
611*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_qopt {
612*4dc78e53SAndroid Build Coastguard Worker 	__u32	latency;	/* added delay (us) */
613*4dc78e53SAndroid Build Coastguard Worker 	__u32   limit;		/* fifo limit (packets) */
614*4dc78e53SAndroid Build Coastguard Worker 	__u32	loss;		/* random packet loss (0=none ~0=100%) */
615*4dc78e53SAndroid Build Coastguard Worker 	__u32	gap;		/* re-ordering gap (0 for none) */
616*4dc78e53SAndroid Build Coastguard Worker 	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
617*4dc78e53SAndroid Build Coastguard Worker 	__u32	jitter;		/* random jitter in latency (us) */
618*4dc78e53SAndroid Build Coastguard Worker };
619*4dc78e53SAndroid Build Coastguard Worker 
620*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_corr {
621*4dc78e53SAndroid Build Coastguard Worker 	__u32	delay_corr;	/* delay correlation */
622*4dc78e53SAndroid Build Coastguard Worker 	__u32	loss_corr;	/* packet loss correlation */
623*4dc78e53SAndroid Build Coastguard Worker 	__u32	dup_corr;	/* duplicate correlation  */
624*4dc78e53SAndroid Build Coastguard Worker };
625*4dc78e53SAndroid Build Coastguard Worker 
626*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_reorder {
627*4dc78e53SAndroid Build Coastguard Worker 	__u32	probability;
628*4dc78e53SAndroid Build Coastguard Worker 	__u32	correlation;
629*4dc78e53SAndroid Build Coastguard Worker };
630*4dc78e53SAndroid Build Coastguard Worker 
631*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_corrupt {
632*4dc78e53SAndroid Build Coastguard Worker 	__u32	probability;
633*4dc78e53SAndroid Build Coastguard Worker 	__u32	correlation;
634*4dc78e53SAndroid Build Coastguard Worker };
635*4dc78e53SAndroid Build Coastguard Worker 
636*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_rate {
637*4dc78e53SAndroid Build Coastguard Worker 	__u32	rate;	/* byte/s */
638*4dc78e53SAndroid Build Coastguard Worker 	__s32	packet_overhead;
639*4dc78e53SAndroid Build Coastguard Worker 	__u32	cell_size;
640*4dc78e53SAndroid Build Coastguard Worker 	__s32	cell_overhead;
641*4dc78e53SAndroid Build Coastguard Worker };
642*4dc78e53SAndroid Build Coastguard Worker 
643*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_slot {
644*4dc78e53SAndroid Build Coastguard Worker 	__s64   min_delay; /* nsec */
645*4dc78e53SAndroid Build Coastguard Worker 	__s64   max_delay;
646*4dc78e53SAndroid Build Coastguard Worker 	__s32   max_packets;
647*4dc78e53SAndroid Build Coastguard Worker 	__s32   max_bytes;
648*4dc78e53SAndroid Build Coastguard Worker 	__s64	dist_delay; /* nsec */
649*4dc78e53SAndroid Build Coastguard Worker 	__s64	dist_jitter; /* nsec */
650*4dc78e53SAndroid Build Coastguard Worker };
651*4dc78e53SAndroid Build Coastguard Worker 
652*4dc78e53SAndroid Build Coastguard Worker enum {
653*4dc78e53SAndroid Build Coastguard Worker 	NETEM_LOSS_UNSPEC,
654*4dc78e53SAndroid Build Coastguard Worker 	NETEM_LOSS_GI,		/* General Intuitive - 4 state model */
655*4dc78e53SAndroid Build Coastguard Worker 	NETEM_LOSS_GE,		/* Gilbert Elliot models */
656*4dc78e53SAndroid Build Coastguard Worker 	__NETEM_LOSS_MAX
657*4dc78e53SAndroid Build Coastguard Worker };
658*4dc78e53SAndroid Build Coastguard Worker #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
659*4dc78e53SAndroid Build Coastguard Worker 
660*4dc78e53SAndroid Build Coastguard Worker /* State transition probabilities for 4 state model */
661*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_gimodel {
662*4dc78e53SAndroid Build Coastguard Worker 	__u32	p13;
663*4dc78e53SAndroid Build Coastguard Worker 	__u32	p31;
664*4dc78e53SAndroid Build Coastguard Worker 	__u32	p32;
665*4dc78e53SAndroid Build Coastguard Worker 	__u32	p14;
666*4dc78e53SAndroid Build Coastguard Worker 	__u32	p23;
667*4dc78e53SAndroid Build Coastguard Worker };
668*4dc78e53SAndroid Build Coastguard Worker 
669*4dc78e53SAndroid Build Coastguard Worker /* Gilbert-Elliot models */
670*4dc78e53SAndroid Build Coastguard Worker struct tc_netem_gemodel {
671*4dc78e53SAndroid Build Coastguard Worker 	__u32 p;
672*4dc78e53SAndroid Build Coastguard Worker 	__u32 r;
673*4dc78e53SAndroid Build Coastguard Worker 	__u32 h;
674*4dc78e53SAndroid Build Coastguard Worker 	__u32 k1;
675*4dc78e53SAndroid Build Coastguard Worker };
676*4dc78e53SAndroid Build Coastguard Worker 
677*4dc78e53SAndroid Build Coastguard Worker #define NETEM_DIST_SCALE	8192
678*4dc78e53SAndroid Build Coastguard Worker #define NETEM_DIST_MAX		16384
679*4dc78e53SAndroid Build Coastguard Worker 
680*4dc78e53SAndroid Build Coastguard Worker /* DRR */
681*4dc78e53SAndroid Build Coastguard Worker 
682*4dc78e53SAndroid Build Coastguard Worker enum {
683*4dc78e53SAndroid Build Coastguard Worker 	TCA_DRR_UNSPEC,
684*4dc78e53SAndroid Build Coastguard Worker 	TCA_DRR_QUANTUM,
685*4dc78e53SAndroid Build Coastguard Worker 	__TCA_DRR_MAX
686*4dc78e53SAndroid Build Coastguard Worker };
687*4dc78e53SAndroid Build Coastguard Worker 
688*4dc78e53SAndroid Build Coastguard Worker #define TCA_DRR_MAX	(__TCA_DRR_MAX - 1)
689*4dc78e53SAndroid Build Coastguard Worker 
690*4dc78e53SAndroid Build Coastguard Worker struct tc_drr_stats {
691*4dc78e53SAndroid Build Coastguard Worker 	__u32	deficit;
692*4dc78e53SAndroid Build Coastguard Worker };
693*4dc78e53SAndroid Build Coastguard Worker 
694*4dc78e53SAndroid Build Coastguard Worker /* MQPRIO */
695*4dc78e53SAndroid Build Coastguard Worker #define TC_QOPT_BITMASK 15
696*4dc78e53SAndroid Build Coastguard Worker #define TC_QOPT_MAX_QUEUE 16
697*4dc78e53SAndroid Build Coastguard Worker 
698*4dc78e53SAndroid Build Coastguard Worker enum {
699*4dc78e53SAndroid Build Coastguard Worker 	TC_MQPRIO_HW_OFFLOAD_NONE,	/* no offload requested */
700*4dc78e53SAndroid Build Coastguard Worker 	TC_MQPRIO_HW_OFFLOAD_TCS,	/* offload TCs, no queue counts */
701*4dc78e53SAndroid Build Coastguard Worker 	__TC_MQPRIO_HW_OFFLOAD_MAX
702*4dc78e53SAndroid Build Coastguard Worker };
703*4dc78e53SAndroid Build Coastguard Worker 
704*4dc78e53SAndroid Build Coastguard Worker #define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1)
705*4dc78e53SAndroid Build Coastguard Worker 
706*4dc78e53SAndroid Build Coastguard Worker enum {
707*4dc78e53SAndroid Build Coastguard Worker 	TC_MQPRIO_MODE_DCB,
708*4dc78e53SAndroid Build Coastguard Worker 	TC_MQPRIO_MODE_CHANNEL,
709*4dc78e53SAndroid Build Coastguard Worker 	__TC_MQPRIO_MODE_MAX
710*4dc78e53SAndroid Build Coastguard Worker };
711*4dc78e53SAndroid Build Coastguard Worker 
712*4dc78e53SAndroid Build Coastguard Worker #define __TC_MQPRIO_MODE_MAX (__TC_MQPRIO_MODE_MAX - 1)
713*4dc78e53SAndroid Build Coastguard Worker 
714*4dc78e53SAndroid Build Coastguard Worker enum {
715*4dc78e53SAndroid Build Coastguard Worker 	TC_MQPRIO_SHAPER_DCB,
716*4dc78e53SAndroid Build Coastguard Worker 	TC_MQPRIO_SHAPER_BW_RATE,	/* Add new shapers below */
717*4dc78e53SAndroid Build Coastguard Worker 	__TC_MQPRIO_SHAPER_MAX
718*4dc78e53SAndroid Build Coastguard Worker };
719*4dc78e53SAndroid Build Coastguard Worker 
720*4dc78e53SAndroid Build Coastguard Worker #define __TC_MQPRIO_SHAPER_MAX (__TC_MQPRIO_SHAPER_MAX - 1)
721*4dc78e53SAndroid Build Coastguard Worker 
722*4dc78e53SAndroid Build Coastguard Worker enum {
723*4dc78e53SAndroid Build Coastguard Worker 	TC_FP_EXPRESS = 1,
724*4dc78e53SAndroid Build Coastguard Worker 	TC_FP_PREEMPTIBLE = 2,
725*4dc78e53SAndroid Build Coastguard Worker };
726*4dc78e53SAndroid Build Coastguard Worker 
727*4dc78e53SAndroid Build Coastguard Worker struct tc_mqprio_qopt {
728*4dc78e53SAndroid Build Coastguard Worker 	__u8	num_tc;
729*4dc78e53SAndroid Build Coastguard Worker 	__u8	prio_tc_map[TC_QOPT_BITMASK + 1];
730*4dc78e53SAndroid Build Coastguard Worker 	__u8	hw;
731*4dc78e53SAndroid Build Coastguard Worker 	__u16	count[TC_QOPT_MAX_QUEUE];
732*4dc78e53SAndroid Build Coastguard Worker 	__u16	offset[TC_QOPT_MAX_QUEUE];
733*4dc78e53SAndroid Build Coastguard Worker };
734*4dc78e53SAndroid Build Coastguard Worker 
735*4dc78e53SAndroid Build Coastguard Worker #define TC_MQPRIO_F_MODE		0x1
736*4dc78e53SAndroid Build Coastguard Worker #define TC_MQPRIO_F_SHAPER		0x2
737*4dc78e53SAndroid Build Coastguard Worker #define TC_MQPRIO_F_MIN_RATE		0x4
738*4dc78e53SAndroid Build Coastguard Worker #define TC_MQPRIO_F_MAX_RATE		0x8
739*4dc78e53SAndroid Build Coastguard Worker 
740*4dc78e53SAndroid Build Coastguard Worker enum {
741*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_TC_ENTRY_UNSPEC,
742*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_TC_ENTRY_INDEX,		/* u32 */
743*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_TC_ENTRY_FP,			/* u32 */
744*4dc78e53SAndroid Build Coastguard Worker 
745*4dc78e53SAndroid Build Coastguard Worker 	/* add new constants above here */
746*4dc78e53SAndroid Build Coastguard Worker 	__TCA_MQPRIO_TC_ENTRY_CNT,
747*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_TC_ENTRY_MAX = (__TCA_MQPRIO_TC_ENTRY_CNT - 1)
748*4dc78e53SAndroid Build Coastguard Worker };
749*4dc78e53SAndroid Build Coastguard Worker 
750*4dc78e53SAndroid Build Coastguard Worker enum {
751*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_UNSPEC,
752*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_MODE,
753*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_SHAPER,
754*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_MIN_RATE64,
755*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_MAX_RATE64,
756*4dc78e53SAndroid Build Coastguard Worker 	TCA_MQPRIO_TC_ENTRY,
757*4dc78e53SAndroid Build Coastguard Worker 	__TCA_MQPRIO_MAX,
758*4dc78e53SAndroid Build Coastguard Worker };
759*4dc78e53SAndroid Build Coastguard Worker 
760*4dc78e53SAndroid Build Coastguard Worker #define TCA_MQPRIO_MAX (__TCA_MQPRIO_MAX - 1)
761*4dc78e53SAndroid Build Coastguard Worker 
762*4dc78e53SAndroid Build Coastguard Worker /* SFB */
763*4dc78e53SAndroid Build Coastguard Worker 
764*4dc78e53SAndroid Build Coastguard Worker enum {
765*4dc78e53SAndroid Build Coastguard Worker 	TCA_SFB_UNSPEC,
766*4dc78e53SAndroid Build Coastguard Worker 	TCA_SFB_PARMS,
767*4dc78e53SAndroid Build Coastguard Worker 	__TCA_SFB_MAX,
768*4dc78e53SAndroid Build Coastguard Worker };
769*4dc78e53SAndroid Build Coastguard Worker 
770*4dc78e53SAndroid Build Coastguard Worker #define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
771*4dc78e53SAndroid Build Coastguard Worker 
772*4dc78e53SAndroid Build Coastguard Worker /*
773*4dc78e53SAndroid Build Coastguard Worker  * Note: increment, decrement are Q0.16 fixed-point values.
774*4dc78e53SAndroid Build Coastguard Worker  */
775*4dc78e53SAndroid Build Coastguard Worker struct tc_sfb_qopt {
776*4dc78e53SAndroid Build Coastguard Worker 	__u32 rehash_interval;	/* delay between hash move, in ms */
777*4dc78e53SAndroid Build Coastguard Worker 	__u32 warmup_time;	/* double buffering warmup time in ms (warmup_time < rehash_interval) */
778*4dc78e53SAndroid Build Coastguard Worker 	__u32 max;		/* max len of qlen_min */
779*4dc78e53SAndroid Build Coastguard Worker 	__u32 bin_size;		/* maximum queue length per bin */
780*4dc78e53SAndroid Build Coastguard Worker 	__u32 increment;	/* probability increment, (d1 in Blue) */
781*4dc78e53SAndroid Build Coastguard Worker 	__u32 decrement;	/* probability decrement, (d2 in Blue) */
782*4dc78e53SAndroid Build Coastguard Worker 	__u32 limit;		/* max SFB queue length */
783*4dc78e53SAndroid Build Coastguard Worker 	__u32 penalty_rate;	/* inelastic flows are rate limited to 'rate' pps */
784*4dc78e53SAndroid Build Coastguard Worker 	__u32 penalty_burst;
785*4dc78e53SAndroid Build Coastguard Worker };
786*4dc78e53SAndroid Build Coastguard Worker 
787*4dc78e53SAndroid Build Coastguard Worker struct tc_sfb_xstats {
788*4dc78e53SAndroid Build Coastguard Worker 	__u32 earlydrop;
789*4dc78e53SAndroid Build Coastguard Worker 	__u32 penaltydrop;
790*4dc78e53SAndroid Build Coastguard Worker 	__u32 bucketdrop;
791*4dc78e53SAndroid Build Coastguard Worker 	__u32 queuedrop;
792*4dc78e53SAndroid Build Coastguard Worker 	__u32 childdrop; /* drops in child qdisc */
793*4dc78e53SAndroid Build Coastguard Worker 	__u32 marked;
794*4dc78e53SAndroid Build Coastguard Worker 	__u32 maxqlen;
795*4dc78e53SAndroid Build Coastguard Worker 	__u32 maxprob;
796*4dc78e53SAndroid Build Coastguard Worker 	__u32 avgprob;
797*4dc78e53SAndroid Build Coastguard Worker };
798*4dc78e53SAndroid Build Coastguard Worker 
799*4dc78e53SAndroid Build Coastguard Worker #define SFB_MAX_PROB 0xFFFF
800*4dc78e53SAndroid Build Coastguard Worker 
801*4dc78e53SAndroid Build Coastguard Worker /* QFQ */
802*4dc78e53SAndroid Build Coastguard Worker enum {
803*4dc78e53SAndroid Build Coastguard Worker 	TCA_QFQ_UNSPEC,
804*4dc78e53SAndroid Build Coastguard Worker 	TCA_QFQ_WEIGHT,
805*4dc78e53SAndroid Build Coastguard Worker 	TCA_QFQ_LMAX,
806*4dc78e53SAndroid Build Coastguard Worker 	__TCA_QFQ_MAX
807*4dc78e53SAndroid Build Coastguard Worker };
808*4dc78e53SAndroid Build Coastguard Worker 
809*4dc78e53SAndroid Build Coastguard Worker #define TCA_QFQ_MAX	(__TCA_QFQ_MAX - 1)
810*4dc78e53SAndroid Build Coastguard Worker 
811*4dc78e53SAndroid Build Coastguard Worker struct tc_qfq_stats {
812*4dc78e53SAndroid Build Coastguard Worker 	__u32 weight;
813*4dc78e53SAndroid Build Coastguard Worker 	__u32 lmax;
814*4dc78e53SAndroid Build Coastguard Worker };
815*4dc78e53SAndroid Build Coastguard Worker 
816*4dc78e53SAndroid Build Coastguard Worker /* CODEL */
817*4dc78e53SAndroid Build Coastguard Worker 
818*4dc78e53SAndroid Build Coastguard Worker enum {
819*4dc78e53SAndroid Build Coastguard Worker 	TCA_CODEL_UNSPEC,
820*4dc78e53SAndroid Build Coastguard Worker 	TCA_CODEL_TARGET,
821*4dc78e53SAndroid Build Coastguard Worker 	TCA_CODEL_LIMIT,
822*4dc78e53SAndroid Build Coastguard Worker 	TCA_CODEL_INTERVAL,
823*4dc78e53SAndroid Build Coastguard Worker 	TCA_CODEL_ECN,
824*4dc78e53SAndroid Build Coastguard Worker 	TCA_CODEL_CE_THRESHOLD,
825*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CODEL_MAX
826*4dc78e53SAndroid Build Coastguard Worker };
827*4dc78e53SAndroid Build Coastguard Worker 
828*4dc78e53SAndroid Build Coastguard Worker #define TCA_CODEL_MAX	(__TCA_CODEL_MAX - 1)
829*4dc78e53SAndroid Build Coastguard Worker 
830*4dc78e53SAndroid Build Coastguard Worker struct tc_codel_xstats {
831*4dc78e53SAndroid Build Coastguard Worker 	__u32	maxpacket; /* largest packet we've seen so far */
832*4dc78e53SAndroid Build Coastguard Worker 	__u32	count;	   /* how many drops we've done since the last time we
833*4dc78e53SAndroid Build Coastguard Worker 			    * entered dropping state
834*4dc78e53SAndroid Build Coastguard Worker 			    */
835*4dc78e53SAndroid Build Coastguard Worker 	__u32	lastcount; /* count at entry to dropping state */
836*4dc78e53SAndroid Build Coastguard Worker 	__u32	ldelay;    /* in-queue delay seen by most recently dequeued packet */
837*4dc78e53SAndroid Build Coastguard Worker 	__s32	drop_next; /* time to drop next packet */
838*4dc78e53SAndroid Build Coastguard Worker 	__u32	drop_overlimit; /* number of time max qdisc packet limit was hit */
839*4dc78e53SAndroid Build Coastguard Worker 	__u32	ecn_mark;  /* number of packets we ECN marked instead of dropped */
840*4dc78e53SAndroid Build Coastguard Worker 	__u32	dropping;  /* are we in dropping state ? */
841*4dc78e53SAndroid Build Coastguard Worker 	__u32	ce_mark;   /* number of CE marked packets because of ce_threshold */
842*4dc78e53SAndroid Build Coastguard Worker };
843*4dc78e53SAndroid Build Coastguard Worker 
844*4dc78e53SAndroid Build Coastguard Worker /* FQ_CODEL */
845*4dc78e53SAndroid Build Coastguard Worker 
846*4dc78e53SAndroid Build Coastguard Worker #define FQ_CODEL_QUANTUM_MAX (1 << 20)
847*4dc78e53SAndroid Build Coastguard Worker 
848*4dc78e53SAndroid Build Coastguard Worker enum {
849*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_UNSPEC,
850*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_TARGET,
851*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_LIMIT,
852*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_INTERVAL,
853*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_ECN,
854*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_FLOWS,
855*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_QUANTUM,
856*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_CE_THRESHOLD,
857*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_DROP_BATCH_SIZE,
858*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_MEMORY_LIMIT,
859*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_CE_THRESHOLD_SELECTOR,
860*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_CE_THRESHOLD_MASK,
861*4dc78e53SAndroid Build Coastguard Worker 	__TCA_FQ_CODEL_MAX
862*4dc78e53SAndroid Build Coastguard Worker };
863*4dc78e53SAndroid Build Coastguard Worker 
864*4dc78e53SAndroid Build Coastguard Worker #define TCA_FQ_CODEL_MAX	(__TCA_FQ_CODEL_MAX - 1)
865*4dc78e53SAndroid Build Coastguard Worker 
866*4dc78e53SAndroid Build Coastguard Worker enum {
867*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_XSTATS_QDISC,
868*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_XSTATS_CLASS,
869*4dc78e53SAndroid Build Coastguard Worker };
870*4dc78e53SAndroid Build Coastguard Worker 
871*4dc78e53SAndroid Build Coastguard Worker struct tc_fq_codel_qd_stats {
872*4dc78e53SAndroid Build Coastguard Worker 	__u32	maxpacket;	/* largest packet we've seen so far */
873*4dc78e53SAndroid Build Coastguard Worker 	__u32	drop_overlimit; /* number of time max qdisc
874*4dc78e53SAndroid Build Coastguard Worker 				 * packet limit was hit
875*4dc78e53SAndroid Build Coastguard Worker 				 */
876*4dc78e53SAndroid Build Coastguard Worker 	__u32	ecn_mark;	/* number of packets we ECN marked
877*4dc78e53SAndroid Build Coastguard Worker 				 * instead of being dropped
878*4dc78e53SAndroid Build Coastguard Worker 				 */
879*4dc78e53SAndroid Build Coastguard Worker 	__u32	new_flow_count; /* number of time packets
880*4dc78e53SAndroid Build Coastguard Worker 				 * created a 'new flow'
881*4dc78e53SAndroid Build Coastguard Worker 				 */
882*4dc78e53SAndroid Build Coastguard Worker 	__u32	new_flows_len;	/* count of flows in new list */
883*4dc78e53SAndroid Build Coastguard Worker 	__u32	old_flows_len;	/* count of flows in old list */
884*4dc78e53SAndroid Build Coastguard Worker 	__u32	ce_mark;	/* packets above ce_threshold */
885*4dc78e53SAndroid Build Coastguard Worker 	__u32	memory_usage;	/* in bytes */
886*4dc78e53SAndroid Build Coastguard Worker 	__u32	drop_overmemory;
887*4dc78e53SAndroid Build Coastguard Worker };
888*4dc78e53SAndroid Build Coastguard Worker 
889*4dc78e53SAndroid Build Coastguard Worker struct tc_fq_codel_cl_stats {
890*4dc78e53SAndroid Build Coastguard Worker 	__s32	deficit;
891*4dc78e53SAndroid Build Coastguard Worker 	__u32	ldelay;		/* in-queue delay seen by most recently
892*4dc78e53SAndroid Build Coastguard Worker 				 * dequeued packet
893*4dc78e53SAndroid Build Coastguard Worker 				 */
894*4dc78e53SAndroid Build Coastguard Worker 	__u32	count;
895*4dc78e53SAndroid Build Coastguard Worker 	__u32	lastcount;
896*4dc78e53SAndroid Build Coastguard Worker 	__u32	dropping;
897*4dc78e53SAndroid Build Coastguard Worker 	__s32	drop_next;
898*4dc78e53SAndroid Build Coastguard Worker };
899*4dc78e53SAndroid Build Coastguard Worker 
900*4dc78e53SAndroid Build Coastguard Worker struct tc_fq_codel_xstats {
901*4dc78e53SAndroid Build Coastguard Worker 	__u32	type;
902*4dc78e53SAndroid Build Coastguard Worker 	union {
903*4dc78e53SAndroid Build Coastguard Worker 		struct tc_fq_codel_qd_stats qdisc_stats;
904*4dc78e53SAndroid Build Coastguard Worker 		struct tc_fq_codel_cl_stats class_stats;
905*4dc78e53SAndroid Build Coastguard Worker 	};
906*4dc78e53SAndroid Build Coastguard Worker };
907*4dc78e53SAndroid Build Coastguard Worker 
908*4dc78e53SAndroid Build Coastguard Worker /* FQ */
909*4dc78e53SAndroid Build Coastguard Worker 
910*4dc78e53SAndroid Build Coastguard Worker enum {
911*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_UNSPEC,
912*4dc78e53SAndroid Build Coastguard Worker 
913*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PLIMIT,		/* limit of total number of packets in queue */
914*4dc78e53SAndroid Build Coastguard Worker 
915*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_PLIMIT,	/* limit of packets per flow */
916*4dc78e53SAndroid Build Coastguard Worker 
917*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_QUANTUM,		/* RR quantum */
918*4dc78e53SAndroid Build Coastguard Worker 
919*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_INITIAL_QUANTUM,		/* RR quantum for new flow */
920*4dc78e53SAndroid Build Coastguard Worker 
921*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_RATE_ENABLE,	/* enable/disable rate limiting */
922*4dc78e53SAndroid Build Coastguard Worker 
923*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
924*4dc78e53SAndroid Build Coastguard Worker 
925*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_MAX_RATE,	/* per flow max rate */
926*4dc78e53SAndroid Build Coastguard Worker 
927*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_BUCKETS_LOG,	/* log2(number of buckets) */
928*4dc78e53SAndroid Build Coastguard Worker 
929*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_REFILL_DELAY,	/* flow credit refill delay in usec */
930*4dc78e53SAndroid Build Coastguard Worker 
931*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_ORPHAN_MASK,	/* mask applied to orphaned skb hashes */
932*4dc78e53SAndroid Build Coastguard Worker 
933*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_LOW_RATE_THRESHOLD, /* per packet delay under this rate */
934*4dc78e53SAndroid Build Coastguard Worker 
935*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_CE_THRESHOLD,	/* DCTCP-like CE-marking threshold */
936*4dc78e53SAndroid Build Coastguard Worker 
937*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_TIMER_SLACK,	/* timer slack */
938*4dc78e53SAndroid Build Coastguard Worker 
939*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_HORIZON,		/* time horizon in us */
940*4dc78e53SAndroid Build Coastguard Worker 
941*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_HORIZON_DROP,	/* drop packets beyond horizon, or cap their EDT */
942*4dc78e53SAndroid Build Coastguard Worker 
943*4dc78e53SAndroid Build Coastguard Worker 	__TCA_FQ_MAX
944*4dc78e53SAndroid Build Coastguard Worker };
945*4dc78e53SAndroid Build Coastguard Worker 
946*4dc78e53SAndroid Build Coastguard Worker #define TCA_FQ_MAX	(__TCA_FQ_MAX - 1)
947*4dc78e53SAndroid Build Coastguard Worker 
948*4dc78e53SAndroid Build Coastguard Worker struct tc_fq_qd_stats {
949*4dc78e53SAndroid Build Coastguard Worker 	__u64	gc_flows;
950*4dc78e53SAndroid Build Coastguard Worker 	__u64	highprio_packets;
951*4dc78e53SAndroid Build Coastguard Worker 	__u64	tcp_retrans;
952*4dc78e53SAndroid Build Coastguard Worker 	__u64	throttled;
953*4dc78e53SAndroid Build Coastguard Worker 	__u64	flows_plimit;
954*4dc78e53SAndroid Build Coastguard Worker 	__u64	pkts_too_long;
955*4dc78e53SAndroid Build Coastguard Worker 	__u64	allocation_errors;
956*4dc78e53SAndroid Build Coastguard Worker 	__s64	time_next_delayed_flow;
957*4dc78e53SAndroid Build Coastguard Worker 	__u32	flows;
958*4dc78e53SAndroid Build Coastguard Worker 	__u32	inactive_flows;
959*4dc78e53SAndroid Build Coastguard Worker 	__u32	throttled_flows;
960*4dc78e53SAndroid Build Coastguard Worker 	__u32	unthrottle_latency_ns;
961*4dc78e53SAndroid Build Coastguard Worker 	__u64	ce_mark;		/* packets above ce_threshold */
962*4dc78e53SAndroid Build Coastguard Worker 	__u64	horizon_drops;
963*4dc78e53SAndroid Build Coastguard Worker 	__u64	horizon_caps;
964*4dc78e53SAndroid Build Coastguard Worker };
965*4dc78e53SAndroid Build Coastguard Worker 
966*4dc78e53SAndroid Build Coastguard Worker /* Heavy-Hitter Filter */
967*4dc78e53SAndroid Build Coastguard Worker 
968*4dc78e53SAndroid Build Coastguard Worker enum {
969*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_UNSPEC,
970*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_BACKLOG_LIMIT,
971*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_QUANTUM,
972*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_HH_FLOWS_LIMIT,
973*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_RESET_TIMEOUT,
974*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_ADMIT_BYTES,
975*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_EVICT_TIMEOUT,
976*4dc78e53SAndroid Build Coastguard Worker 	TCA_HHF_NON_HH_WEIGHT,
977*4dc78e53SAndroid Build Coastguard Worker 	__TCA_HHF_MAX
978*4dc78e53SAndroid Build Coastguard Worker };
979*4dc78e53SAndroid Build Coastguard Worker 
980*4dc78e53SAndroid Build Coastguard Worker #define TCA_HHF_MAX	(__TCA_HHF_MAX - 1)
981*4dc78e53SAndroid Build Coastguard Worker 
982*4dc78e53SAndroid Build Coastguard Worker struct tc_hhf_xstats {
983*4dc78e53SAndroid Build Coastguard Worker 	__u32	drop_overlimit; /* number of times max qdisc packet limit
984*4dc78e53SAndroid Build Coastguard Worker 				 * was hit
985*4dc78e53SAndroid Build Coastguard Worker 				 */
986*4dc78e53SAndroid Build Coastguard Worker 	__u32	hh_overlimit;   /* number of times max heavy-hitters was hit */
987*4dc78e53SAndroid Build Coastguard Worker 	__u32	hh_tot_count;   /* number of captured heavy-hitters so far */
988*4dc78e53SAndroid Build Coastguard Worker 	__u32	hh_cur_count;   /* number of current heavy-hitters */
989*4dc78e53SAndroid Build Coastguard Worker };
990*4dc78e53SAndroid Build Coastguard Worker 
991*4dc78e53SAndroid Build Coastguard Worker /* PIE */
992*4dc78e53SAndroid Build Coastguard Worker enum {
993*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_UNSPEC,
994*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_TARGET,
995*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_LIMIT,
996*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_TUPDATE,
997*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_ALPHA,
998*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_BETA,
999*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_ECN,
1000*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_BYTEMODE,
1001*4dc78e53SAndroid Build Coastguard Worker 	TCA_PIE_DQ_RATE_ESTIMATOR,
1002*4dc78e53SAndroid Build Coastguard Worker 	__TCA_PIE_MAX
1003*4dc78e53SAndroid Build Coastguard Worker };
1004*4dc78e53SAndroid Build Coastguard Worker #define TCA_PIE_MAX   (__TCA_PIE_MAX - 1)
1005*4dc78e53SAndroid Build Coastguard Worker 
1006*4dc78e53SAndroid Build Coastguard Worker struct tc_pie_xstats {
1007*4dc78e53SAndroid Build Coastguard Worker 	__u64 prob;			/* current probability */
1008*4dc78e53SAndroid Build Coastguard Worker 	__u32 delay;			/* current delay in ms */
1009*4dc78e53SAndroid Build Coastguard Worker 	__u32 avg_dq_rate;		/* current average dq_rate in
1010*4dc78e53SAndroid Build Coastguard Worker 					 * bits/pie_time
1011*4dc78e53SAndroid Build Coastguard Worker 					 */
1012*4dc78e53SAndroid Build Coastguard Worker 	__u32 dq_rate_estimating;	/* is avg_dq_rate being calculated? */
1013*4dc78e53SAndroid Build Coastguard Worker 	__u32 packets_in;		/* total number of packets enqueued */
1014*4dc78e53SAndroid Build Coastguard Worker 	__u32 dropped;			/* packets dropped due to pie_action */
1015*4dc78e53SAndroid Build Coastguard Worker 	__u32 overlimit;		/* dropped due to lack of space
1016*4dc78e53SAndroid Build Coastguard Worker 					 * in queue
1017*4dc78e53SAndroid Build Coastguard Worker 					 */
1018*4dc78e53SAndroid Build Coastguard Worker 	__u32 maxq;			/* maximum queue size */
1019*4dc78e53SAndroid Build Coastguard Worker 	__u32 ecn_mark;			/* packets marked with ecn*/
1020*4dc78e53SAndroid Build Coastguard Worker };
1021*4dc78e53SAndroid Build Coastguard Worker 
1022*4dc78e53SAndroid Build Coastguard Worker /* FQ PIE */
1023*4dc78e53SAndroid Build Coastguard Worker enum {
1024*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_UNSPEC,
1025*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_LIMIT,
1026*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_FLOWS,
1027*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_TARGET,
1028*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_TUPDATE,
1029*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_ALPHA,
1030*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_BETA,
1031*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_QUANTUM,
1032*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_MEMORY_LIMIT,
1033*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_ECN_PROB,
1034*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_ECN,
1035*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_BYTEMODE,
1036*4dc78e53SAndroid Build Coastguard Worker 	TCA_FQ_PIE_DQ_RATE_ESTIMATOR,
1037*4dc78e53SAndroid Build Coastguard Worker 	__TCA_FQ_PIE_MAX
1038*4dc78e53SAndroid Build Coastguard Worker };
1039*4dc78e53SAndroid Build Coastguard Worker #define TCA_FQ_PIE_MAX   (__TCA_FQ_PIE_MAX - 1)
1040*4dc78e53SAndroid Build Coastguard Worker 
1041*4dc78e53SAndroid Build Coastguard Worker struct tc_fq_pie_xstats {
1042*4dc78e53SAndroid Build Coastguard Worker 	__u32 packets_in;	/* total number of packets enqueued */
1043*4dc78e53SAndroid Build Coastguard Worker 	__u32 dropped;		/* packets dropped due to fq_pie_action */
1044*4dc78e53SAndroid Build Coastguard Worker 	__u32 overlimit;	/* dropped due to lack of space in queue */
1045*4dc78e53SAndroid Build Coastguard Worker 	__u32 overmemory;	/* dropped due to lack of memory in queue */
1046*4dc78e53SAndroid Build Coastguard Worker 	__u32 ecn_mark;		/* packets marked with ecn */
1047*4dc78e53SAndroid Build Coastguard Worker 	__u32 new_flow_count;	/* count of new flows created by packets */
1048*4dc78e53SAndroid Build Coastguard Worker 	__u32 new_flows_len;	/* count of flows in new list */
1049*4dc78e53SAndroid Build Coastguard Worker 	__u32 old_flows_len;	/* count of flows in old list */
1050*4dc78e53SAndroid Build Coastguard Worker 	__u32 memory_usage;	/* total memory across all queues */
1051*4dc78e53SAndroid Build Coastguard Worker };
1052*4dc78e53SAndroid Build Coastguard Worker 
1053*4dc78e53SAndroid Build Coastguard Worker /* CBS */
1054*4dc78e53SAndroid Build Coastguard Worker struct tc_cbs_qopt {
1055*4dc78e53SAndroid Build Coastguard Worker 	__u8 offload;
1056*4dc78e53SAndroid Build Coastguard Worker 	__u8 _pad[3];
1057*4dc78e53SAndroid Build Coastguard Worker 	__s32 hicredit;
1058*4dc78e53SAndroid Build Coastguard Worker 	__s32 locredit;
1059*4dc78e53SAndroid Build Coastguard Worker 	__s32 idleslope;
1060*4dc78e53SAndroid Build Coastguard Worker 	__s32 sendslope;
1061*4dc78e53SAndroid Build Coastguard Worker };
1062*4dc78e53SAndroid Build Coastguard Worker 
1063*4dc78e53SAndroid Build Coastguard Worker enum {
1064*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBS_UNSPEC,
1065*4dc78e53SAndroid Build Coastguard Worker 	TCA_CBS_PARMS,
1066*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CBS_MAX,
1067*4dc78e53SAndroid Build Coastguard Worker };
1068*4dc78e53SAndroid Build Coastguard Worker 
1069*4dc78e53SAndroid Build Coastguard Worker #define TCA_CBS_MAX (__TCA_CBS_MAX - 1)
1070*4dc78e53SAndroid Build Coastguard Worker 
1071*4dc78e53SAndroid Build Coastguard Worker 
1072*4dc78e53SAndroid Build Coastguard Worker /* ETF */
1073*4dc78e53SAndroid Build Coastguard Worker struct tc_etf_qopt {
1074*4dc78e53SAndroid Build Coastguard Worker 	__s32 delta;
1075*4dc78e53SAndroid Build Coastguard Worker 	__s32 clockid;
1076*4dc78e53SAndroid Build Coastguard Worker 	__u32 flags;
1077*4dc78e53SAndroid Build Coastguard Worker #define TC_ETF_DEADLINE_MODE_ON	_BITUL(0)
1078*4dc78e53SAndroid Build Coastguard Worker #define TC_ETF_OFFLOAD_ON	_BITUL(1)
1079*4dc78e53SAndroid Build Coastguard Worker #define TC_ETF_SKIP_SOCK_CHECK	_BITUL(2)
1080*4dc78e53SAndroid Build Coastguard Worker };
1081*4dc78e53SAndroid Build Coastguard Worker 
1082*4dc78e53SAndroid Build Coastguard Worker enum {
1083*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETF_UNSPEC,
1084*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETF_PARMS,
1085*4dc78e53SAndroid Build Coastguard Worker 	__TCA_ETF_MAX,
1086*4dc78e53SAndroid Build Coastguard Worker };
1087*4dc78e53SAndroid Build Coastguard Worker 
1088*4dc78e53SAndroid Build Coastguard Worker #define TCA_ETF_MAX (__TCA_ETF_MAX - 1)
1089*4dc78e53SAndroid Build Coastguard Worker 
1090*4dc78e53SAndroid Build Coastguard Worker 
1091*4dc78e53SAndroid Build Coastguard Worker /* CAKE */
1092*4dc78e53SAndroid Build Coastguard Worker enum {
1093*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_UNSPEC,
1094*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_PAD,
1095*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_BASE_RATE64,
1096*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_DIFFSERV_MODE,
1097*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_ATM,
1098*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_FLOW_MODE,
1099*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_OVERHEAD,
1100*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_RTT,
1101*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TARGET,
1102*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_AUTORATE,
1103*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_MEMORY,
1104*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_NAT,
1105*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_RAW,
1106*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_WASH,
1107*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_MPU,
1108*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_INGRESS,
1109*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_ACK_FILTER,
1110*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_SPLIT_GSO,
1111*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_FWMARK,
1112*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CAKE_MAX
1113*4dc78e53SAndroid Build Coastguard Worker };
1114*4dc78e53SAndroid Build Coastguard Worker #define TCA_CAKE_MAX	(__TCA_CAKE_MAX - 1)
1115*4dc78e53SAndroid Build Coastguard Worker 
1116*4dc78e53SAndroid Build Coastguard Worker enum {
1117*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CAKE_STATS_INVALID,
1118*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_PAD,
1119*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_CAPACITY_ESTIMATE64,
1120*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_MEMORY_LIMIT,
1121*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_MEMORY_USED,
1122*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_AVG_NETOFF,
1123*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_MIN_NETLEN,
1124*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_MAX_NETLEN,
1125*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_MIN_ADJLEN,
1126*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_MAX_ADJLEN,
1127*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_TIN_STATS,
1128*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_DEFICIT,
1129*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_COBALT_COUNT,
1130*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_DROPPING,
1131*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_DROP_NEXT_US,
1132*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_P_DROP,
1133*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_STATS_BLUE_TIMER_US,
1134*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CAKE_STATS_MAX
1135*4dc78e53SAndroid Build Coastguard Worker };
1136*4dc78e53SAndroid Build Coastguard Worker #define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1)
1137*4dc78e53SAndroid Build Coastguard Worker 
1138*4dc78e53SAndroid Build Coastguard Worker enum {
1139*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CAKE_TIN_STATS_INVALID,
1140*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_PAD,
1141*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_SENT_PACKETS,
1142*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_SENT_BYTES64,
1143*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_DROPPED_PACKETS,
1144*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_DROPPED_BYTES64,
1145*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_ACKS_DROPPED_PACKETS,
1146*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_ACKS_DROPPED_BYTES64,
1147*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_ECN_MARKED_PACKETS,
1148*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_ECN_MARKED_BYTES64,
1149*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_BACKLOG_PACKETS,
1150*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_BACKLOG_BYTES,
1151*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_THRESHOLD_RATE64,
1152*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_TARGET_US,
1153*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_INTERVAL_US,
1154*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_WAY_INDIRECT_HITS,
1155*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_WAY_MISSES,
1156*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_WAY_COLLISIONS,
1157*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_PEAK_DELAY_US,
1158*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_AVG_DELAY_US,
1159*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_BASE_DELAY_US,
1160*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_SPARSE_FLOWS,
1161*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_BULK_FLOWS,
1162*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_UNRESPONSIVE_FLOWS,
1163*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_MAX_SKBLEN,
1164*4dc78e53SAndroid Build Coastguard Worker 	TCA_CAKE_TIN_STATS_FLOW_QUANTUM,
1165*4dc78e53SAndroid Build Coastguard Worker 	__TCA_CAKE_TIN_STATS_MAX
1166*4dc78e53SAndroid Build Coastguard Worker };
1167*4dc78e53SAndroid Build Coastguard Worker #define TCA_CAKE_TIN_STATS_MAX (__TCA_CAKE_TIN_STATS_MAX - 1)
1168*4dc78e53SAndroid Build Coastguard Worker #define TC_CAKE_MAX_TINS (8)
1169*4dc78e53SAndroid Build Coastguard Worker 
1170*4dc78e53SAndroid Build Coastguard Worker enum {
1171*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_NONE = 0,
1172*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_SRC_IP,
1173*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_DST_IP,
1174*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_HOSTS,    /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_DST_IP */
1175*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_FLOWS,
1176*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_DUAL_SRC, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_FLOWS */
1177*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_DUAL_DST, /* = CAKE_FLOW_DST_IP | CAKE_FLOW_FLOWS */
1178*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_TRIPLE,   /* = CAKE_FLOW_HOSTS  | CAKE_FLOW_FLOWS */
1179*4dc78e53SAndroid Build Coastguard Worker 	CAKE_FLOW_MAX,
1180*4dc78e53SAndroid Build Coastguard Worker };
1181*4dc78e53SAndroid Build Coastguard Worker 
1182*4dc78e53SAndroid Build Coastguard Worker enum {
1183*4dc78e53SAndroid Build Coastguard Worker 	CAKE_DIFFSERV_DIFFSERV3 = 0,
1184*4dc78e53SAndroid Build Coastguard Worker 	CAKE_DIFFSERV_DIFFSERV4,
1185*4dc78e53SAndroid Build Coastguard Worker 	CAKE_DIFFSERV_DIFFSERV8,
1186*4dc78e53SAndroid Build Coastguard Worker 	CAKE_DIFFSERV_BESTEFFORT,
1187*4dc78e53SAndroid Build Coastguard Worker 	CAKE_DIFFSERV_PRECEDENCE,
1188*4dc78e53SAndroid Build Coastguard Worker 	CAKE_DIFFSERV_MAX
1189*4dc78e53SAndroid Build Coastguard Worker };
1190*4dc78e53SAndroid Build Coastguard Worker 
1191*4dc78e53SAndroid Build Coastguard Worker enum {
1192*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ACK_NONE = 0,
1193*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ACK_FILTER,
1194*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ACK_AGGRESSIVE,
1195*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ACK_MAX
1196*4dc78e53SAndroid Build Coastguard Worker };
1197*4dc78e53SAndroid Build Coastguard Worker 
1198*4dc78e53SAndroid Build Coastguard Worker enum {
1199*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ATM_NONE = 0,
1200*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ATM_ATM,
1201*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ATM_PTM,
1202*4dc78e53SAndroid Build Coastguard Worker 	CAKE_ATM_MAX
1203*4dc78e53SAndroid Build Coastguard Worker };
1204*4dc78e53SAndroid Build Coastguard Worker 
1205*4dc78e53SAndroid Build Coastguard Worker 
1206*4dc78e53SAndroid Build Coastguard Worker /* TAPRIO */
1207*4dc78e53SAndroid Build Coastguard Worker enum {
1208*4dc78e53SAndroid Build Coastguard Worker 	TC_TAPRIO_CMD_SET_GATES = 0x00,
1209*4dc78e53SAndroid Build Coastguard Worker 	TC_TAPRIO_CMD_SET_AND_HOLD = 0x01,
1210*4dc78e53SAndroid Build Coastguard Worker 	TC_TAPRIO_CMD_SET_AND_RELEASE = 0x02,
1211*4dc78e53SAndroid Build Coastguard Worker };
1212*4dc78e53SAndroid Build Coastguard Worker 
1213*4dc78e53SAndroid Build Coastguard Worker enum {
1214*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_SCHED_ENTRY_UNSPEC,
1215*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_SCHED_ENTRY_INDEX, /* u32 */
1216*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_SCHED_ENTRY_CMD, /* u8 */
1217*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_SCHED_ENTRY_GATE_MASK, /* u32 */
1218*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_SCHED_ENTRY_INTERVAL, /* u32 */
1219*4dc78e53SAndroid Build Coastguard Worker 	__TCA_TAPRIO_SCHED_ENTRY_MAX,
1220*4dc78e53SAndroid Build Coastguard Worker };
1221*4dc78e53SAndroid Build Coastguard Worker #define TCA_TAPRIO_SCHED_ENTRY_MAX (__TCA_TAPRIO_SCHED_ENTRY_MAX - 1)
1222*4dc78e53SAndroid Build Coastguard Worker 
1223*4dc78e53SAndroid Build Coastguard Worker /* The format for schedule entry list is:
1224*4dc78e53SAndroid Build Coastguard Worker  * [TCA_TAPRIO_SCHED_ENTRY_LIST]
1225*4dc78e53SAndroid Build Coastguard Worker  *   [TCA_TAPRIO_SCHED_ENTRY]
1226*4dc78e53SAndroid Build Coastguard Worker  *     [TCA_TAPRIO_SCHED_ENTRY_CMD]
1227*4dc78e53SAndroid Build Coastguard Worker  *     [TCA_TAPRIO_SCHED_ENTRY_GATES]
1228*4dc78e53SAndroid Build Coastguard Worker  *     [TCA_TAPRIO_SCHED_ENTRY_INTERVAL]
1229*4dc78e53SAndroid Build Coastguard Worker  */
1230*4dc78e53SAndroid Build Coastguard Worker enum {
1231*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_SCHED_UNSPEC,
1232*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_SCHED_ENTRY,
1233*4dc78e53SAndroid Build Coastguard Worker 	__TCA_TAPRIO_SCHED_MAX,
1234*4dc78e53SAndroid Build Coastguard Worker };
1235*4dc78e53SAndroid Build Coastguard Worker 
1236*4dc78e53SAndroid Build Coastguard Worker #define TCA_TAPRIO_SCHED_MAX (__TCA_TAPRIO_SCHED_MAX - 1)
1237*4dc78e53SAndroid Build Coastguard Worker 
1238*4dc78e53SAndroid Build Coastguard Worker /* The format for the admin sched (dump only):
1239*4dc78e53SAndroid Build Coastguard Worker  * [TCA_TAPRIO_SCHED_ADMIN_SCHED]
1240*4dc78e53SAndroid Build Coastguard Worker  *   [TCA_TAPRIO_ATTR_SCHED_BASE_TIME]
1241*4dc78e53SAndroid Build Coastguard Worker  *   [TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST]
1242*4dc78e53SAndroid Build Coastguard Worker  *     [TCA_TAPRIO_ATTR_SCHED_ENTRY]
1243*4dc78e53SAndroid Build Coastguard Worker  *       [TCA_TAPRIO_ATTR_SCHED_ENTRY_CMD]
1244*4dc78e53SAndroid Build Coastguard Worker  *       [TCA_TAPRIO_ATTR_SCHED_ENTRY_GATES]
1245*4dc78e53SAndroid Build Coastguard Worker  *       [TCA_TAPRIO_ATTR_SCHED_ENTRY_INTERVAL]
1246*4dc78e53SAndroid Build Coastguard Worker  */
1247*4dc78e53SAndroid Build Coastguard Worker 
1248*4dc78e53SAndroid Build Coastguard Worker #define TCA_TAPRIO_ATTR_FLAG_TXTIME_ASSIST	_BITUL(0)
1249*4dc78e53SAndroid Build Coastguard Worker #define TCA_TAPRIO_ATTR_FLAG_FULL_OFFLOAD	_BITUL(1)
1250*4dc78e53SAndroid Build Coastguard Worker 
1251*4dc78e53SAndroid Build Coastguard Worker enum {
1252*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_TC_ENTRY_UNSPEC,
1253*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_TC_ENTRY_INDEX,		/* u32 */
1254*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_TC_ENTRY_MAX_SDU,		/* u32 */
1255*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_TC_ENTRY_FP,			/* u32 */
1256*4dc78e53SAndroid Build Coastguard Worker 
1257*4dc78e53SAndroid Build Coastguard Worker 	/* add new constants above here */
1258*4dc78e53SAndroid Build Coastguard Worker 	__TCA_TAPRIO_TC_ENTRY_CNT,
1259*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_TC_ENTRY_MAX = (__TCA_TAPRIO_TC_ENTRY_CNT - 1)
1260*4dc78e53SAndroid Build Coastguard Worker };
1261*4dc78e53SAndroid Build Coastguard Worker 
1262*4dc78e53SAndroid Build Coastguard Worker enum {
1263*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_UNSPEC,
1264*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_PRIOMAP, /* struct tc_mqprio_qopt */
1265*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST, /* nested of entry */
1266*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_SCHED_BASE_TIME, /* s64 */
1267*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_SCHED_SINGLE_ENTRY, /* single entry */
1268*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_SCHED_CLOCKID, /* s32 */
1269*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_PAD,
1270*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_ADMIN_SCHED, /* The admin sched, only used in dump */
1271*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME, /* s64 */
1272*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION, /* s64 */
1273*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_FLAGS, /* u32 */
1274*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_TXTIME_DELAY, /* u32 */
1275*4dc78e53SAndroid Build Coastguard Worker 	TCA_TAPRIO_ATTR_TC_ENTRY, /* nest */
1276*4dc78e53SAndroid Build Coastguard Worker 	__TCA_TAPRIO_ATTR_MAX,
1277*4dc78e53SAndroid Build Coastguard Worker };
1278*4dc78e53SAndroid Build Coastguard Worker 
1279*4dc78e53SAndroid Build Coastguard Worker #define TCA_TAPRIO_ATTR_MAX (__TCA_TAPRIO_ATTR_MAX - 1)
1280*4dc78e53SAndroid Build Coastguard Worker 
1281*4dc78e53SAndroid Build Coastguard Worker /* ETS */
1282*4dc78e53SAndroid Build Coastguard Worker 
1283*4dc78e53SAndroid Build Coastguard Worker #define TCQ_ETS_MAX_BANDS 16
1284*4dc78e53SAndroid Build Coastguard Worker 
1285*4dc78e53SAndroid Build Coastguard Worker enum {
1286*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETS_UNSPEC,
1287*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETS_NBANDS,		/* u8 */
1288*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETS_NSTRICT,	/* u8 */
1289*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETS_QUANTA,		/* nested TCA_ETS_QUANTA_BAND */
1290*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETS_QUANTA_BAND,	/* u32 */
1291*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETS_PRIOMAP,	/* nested TCA_ETS_PRIOMAP_BAND */
1292*4dc78e53SAndroid Build Coastguard Worker 	TCA_ETS_PRIOMAP_BAND,	/* u8 */
1293*4dc78e53SAndroid Build Coastguard Worker 	__TCA_ETS_MAX,
1294*4dc78e53SAndroid Build Coastguard Worker };
1295*4dc78e53SAndroid Build Coastguard Worker 
1296*4dc78e53SAndroid Build Coastguard Worker #define TCA_ETS_MAX (__TCA_ETS_MAX - 1)
1297*4dc78e53SAndroid Build Coastguard Worker 
1298*4dc78e53SAndroid Build Coastguard Worker #endif
1299