xref: /aosp_15_r20/external/iproute2/include/uapi/linux/pkt_sched.h (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*de1e4e89SAndroid Build Coastguard Worker #ifndef __LINUX_PKT_SCHED_H
3*de1e4e89SAndroid Build Coastguard Worker #define __LINUX_PKT_SCHED_H
4*de1e4e89SAndroid Build Coastguard Worker 
5*de1e4e89SAndroid Build Coastguard Worker #include <linux/types.h>
6*de1e4e89SAndroid Build Coastguard Worker 
7*de1e4e89SAndroid Build Coastguard Worker /* Logical priority bands not depending on specific packet scheduler.
8*de1e4e89SAndroid Build Coastguard Worker    Every scheduler will map them to real traffic classes, if it has
9*de1e4e89SAndroid Build Coastguard Worker    no more precise mechanism to classify packets.
10*de1e4e89SAndroid Build Coastguard Worker 
11*de1e4e89SAndroid Build Coastguard Worker    These numbers have no special meaning, though their coincidence
12*de1e4e89SAndroid Build Coastguard Worker    with obsolete IPv6 values is not occasional :-). New IPv6 drafts
13*de1e4e89SAndroid Build Coastguard Worker    preferred full anarchy inspired by diffserv group.
14*de1e4e89SAndroid Build Coastguard Worker 
15*de1e4e89SAndroid Build Coastguard Worker    Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
16*de1e4e89SAndroid Build Coastguard Worker    class, actually, as rule it will be handled with more care than
17*de1e4e89SAndroid Build Coastguard Worker    filler or even bulk.
18*de1e4e89SAndroid Build Coastguard Worker  */
19*de1e4e89SAndroid Build Coastguard Worker 
20*de1e4e89SAndroid Build Coastguard Worker #define TC_PRIO_BESTEFFORT		0
21*de1e4e89SAndroid Build Coastguard Worker #define TC_PRIO_FILLER			1
22*de1e4e89SAndroid Build Coastguard Worker #define TC_PRIO_BULK			2
23*de1e4e89SAndroid Build Coastguard Worker #define TC_PRIO_INTERACTIVE_BULK	4
24*de1e4e89SAndroid Build Coastguard Worker #define TC_PRIO_INTERACTIVE		6
25*de1e4e89SAndroid Build Coastguard Worker #define TC_PRIO_CONTROL			7
26*de1e4e89SAndroid Build Coastguard Worker 
27*de1e4e89SAndroid Build Coastguard Worker #define TC_PRIO_MAX			15
28*de1e4e89SAndroid Build Coastguard Worker 
29*de1e4e89SAndroid Build Coastguard Worker /* Generic queue statistics, available for all the elements.
30*de1e4e89SAndroid Build Coastguard Worker    Particular schedulers may have also their private records.
31*de1e4e89SAndroid Build Coastguard Worker  */
32*de1e4e89SAndroid Build Coastguard Worker 
33*de1e4e89SAndroid Build Coastguard Worker struct tc_stats {
34*de1e4e89SAndroid Build Coastguard Worker 	__u64	bytes;			/* Number of enqueued bytes */
35*de1e4e89SAndroid Build Coastguard Worker 	__u32	packets;		/* Number of enqueued packets	*/
36*de1e4e89SAndroid Build Coastguard Worker 	__u32	drops;			/* Packets dropped because of lack of resources */
37*de1e4e89SAndroid Build Coastguard Worker 	__u32	overlimits;		/* Number of throttle events when this
38*de1e4e89SAndroid Build Coastguard Worker 					 * flow goes out of allocated bandwidth */
39*de1e4e89SAndroid Build Coastguard Worker 	__u32	bps;			/* Current flow byte rate */
40*de1e4e89SAndroid Build Coastguard Worker 	__u32	pps;			/* Current flow packet rate */
41*de1e4e89SAndroid Build Coastguard Worker 	__u32	qlen;
42*de1e4e89SAndroid Build Coastguard Worker 	__u32	backlog;
43*de1e4e89SAndroid Build Coastguard Worker };
44*de1e4e89SAndroid Build Coastguard Worker 
45*de1e4e89SAndroid Build Coastguard Worker struct tc_estimator {
46*de1e4e89SAndroid Build Coastguard Worker 	signed char	interval;
47*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	ewma_log;
48*de1e4e89SAndroid Build Coastguard Worker };
49*de1e4e89SAndroid Build Coastguard Worker 
50*de1e4e89SAndroid Build Coastguard Worker /* "Handles"
51*de1e4e89SAndroid Build Coastguard Worker    ---------
52*de1e4e89SAndroid Build Coastguard Worker 
53*de1e4e89SAndroid Build Coastguard Worker     All the traffic control objects have 32bit identifiers, or "handles".
54*de1e4e89SAndroid Build Coastguard Worker 
55*de1e4e89SAndroid Build Coastguard Worker     They can be considered as opaque numbers from user API viewpoint,
56*de1e4e89SAndroid Build Coastguard Worker     but actually they always consist of two fields: major and
57*de1e4e89SAndroid Build Coastguard Worker     minor numbers, which are interpreted by kernel specially,
58*de1e4e89SAndroid Build Coastguard Worker     that may be used by applications, though not recommended.
59*de1e4e89SAndroid Build Coastguard Worker 
60*de1e4e89SAndroid Build Coastguard Worker     F.e. qdisc handles always have minor number equal to zero,
61*de1e4e89SAndroid Build Coastguard Worker     classes (or flows) have major equal to parent qdisc major, and
62*de1e4e89SAndroid Build Coastguard Worker     minor uniquely identifying class inside qdisc.
63*de1e4e89SAndroid Build Coastguard Worker 
64*de1e4e89SAndroid Build Coastguard Worker     Macros to manipulate handles:
65*de1e4e89SAndroid Build Coastguard Worker  */
66*de1e4e89SAndroid Build Coastguard Worker 
67*de1e4e89SAndroid Build Coastguard Worker #define TC_H_MAJ_MASK (0xFFFF0000U)
68*de1e4e89SAndroid Build Coastguard Worker #define TC_H_MIN_MASK (0x0000FFFFU)
69*de1e4e89SAndroid Build Coastguard Worker #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
70*de1e4e89SAndroid Build Coastguard Worker #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
71*de1e4e89SAndroid Build Coastguard Worker #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
72*de1e4e89SAndroid Build Coastguard Worker 
73*de1e4e89SAndroid Build Coastguard Worker #define TC_H_UNSPEC	(0U)
74*de1e4e89SAndroid Build Coastguard Worker #define TC_H_ROOT	(0xFFFFFFFFU)
75*de1e4e89SAndroid Build Coastguard Worker #define TC_H_INGRESS    (0xFFFFFFF1U)
76*de1e4e89SAndroid Build Coastguard Worker #define TC_H_CLSACT	TC_H_INGRESS
77*de1e4e89SAndroid Build Coastguard Worker 
78*de1e4e89SAndroid Build Coastguard Worker #define TC_H_MIN_INGRESS	0xFFF2U
79*de1e4e89SAndroid Build Coastguard Worker #define TC_H_MIN_EGRESS		0xFFF3U
80*de1e4e89SAndroid Build Coastguard Worker 
81*de1e4e89SAndroid Build Coastguard Worker /* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
82*de1e4e89SAndroid Build Coastguard Worker enum tc_link_layer {
83*de1e4e89SAndroid Build Coastguard Worker 	TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */
84*de1e4e89SAndroid Build Coastguard Worker 	TC_LINKLAYER_ETHERNET,
85*de1e4e89SAndroid Build Coastguard Worker 	TC_LINKLAYER_ATM,
86*de1e4e89SAndroid Build Coastguard Worker };
87*de1e4e89SAndroid Build Coastguard Worker #define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */
88*de1e4e89SAndroid Build Coastguard Worker 
89*de1e4e89SAndroid Build Coastguard Worker struct tc_ratespec {
90*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	cell_log;
91*de1e4e89SAndroid Build Coastguard Worker 	__u8		linklayer; /* lower 4 bits */
92*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	overhead;
93*de1e4e89SAndroid Build Coastguard Worker 	short		cell_align;
94*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	mpu;
95*de1e4e89SAndroid Build Coastguard Worker 	__u32		rate;
96*de1e4e89SAndroid Build Coastguard Worker };
97*de1e4e89SAndroid Build Coastguard Worker 
98*de1e4e89SAndroid Build Coastguard Worker #define TC_RTAB_SIZE	1024
99*de1e4e89SAndroid Build Coastguard Worker 
100*de1e4e89SAndroid Build Coastguard Worker struct tc_sizespec {
101*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	cell_log;
102*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	size_log;
103*de1e4e89SAndroid Build Coastguard Worker 	short		cell_align;
104*de1e4e89SAndroid Build Coastguard Worker 	int		overhead;
105*de1e4e89SAndroid Build Coastguard Worker 	unsigned int	linklayer;
106*de1e4e89SAndroid Build Coastguard Worker 	unsigned int	mpu;
107*de1e4e89SAndroid Build Coastguard Worker 	unsigned int	mtu;
108*de1e4e89SAndroid Build Coastguard Worker 	unsigned int	tsize;
109*de1e4e89SAndroid Build Coastguard Worker };
110*de1e4e89SAndroid Build Coastguard Worker 
111*de1e4e89SAndroid Build Coastguard Worker enum {
112*de1e4e89SAndroid Build Coastguard Worker 	TCA_STAB_UNSPEC,
113*de1e4e89SAndroid Build Coastguard Worker 	TCA_STAB_BASE,
114*de1e4e89SAndroid Build Coastguard Worker 	TCA_STAB_DATA,
115*de1e4e89SAndroid Build Coastguard Worker 	__TCA_STAB_MAX
116*de1e4e89SAndroid Build Coastguard Worker };
117*de1e4e89SAndroid Build Coastguard Worker 
118*de1e4e89SAndroid Build Coastguard Worker #define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
119*de1e4e89SAndroid Build Coastguard Worker 
120*de1e4e89SAndroid Build Coastguard Worker /* FIFO section */
121*de1e4e89SAndroid Build Coastguard Worker 
122*de1e4e89SAndroid Build Coastguard Worker struct tc_fifo_qopt {
123*de1e4e89SAndroid Build Coastguard Worker 	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
124*de1e4e89SAndroid Build Coastguard Worker };
125*de1e4e89SAndroid Build Coastguard Worker 
126*de1e4e89SAndroid Build Coastguard Worker /* PRIO section */
127*de1e4e89SAndroid Build Coastguard Worker 
128*de1e4e89SAndroid Build Coastguard Worker #define TCQ_PRIO_BANDS	16
129*de1e4e89SAndroid Build Coastguard Worker #define TCQ_MIN_PRIO_BANDS 2
130*de1e4e89SAndroid Build Coastguard Worker 
131*de1e4e89SAndroid Build Coastguard Worker struct tc_prio_qopt {
132*de1e4e89SAndroid Build Coastguard Worker 	int	bands;			/* Number of bands */
133*de1e4e89SAndroid Build Coastguard Worker 	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
134*de1e4e89SAndroid Build Coastguard Worker };
135*de1e4e89SAndroid Build Coastguard Worker 
136*de1e4e89SAndroid Build Coastguard Worker /* MULTIQ section */
137*de1e4e89SAndroid Build Coastguard Worker 
138*de1e4e89SAndroid Build Coastguard Worker struct tc_multiq_qopt {
139*de1e4e89SAndroid Build Coastguard Worker 	__u16	bands;			/* Number of bands */
140*de1e4e89SAndroid Build Coastguard Worker 	__u16	max_bands;		/* Maximum number of queues */
141*de1e4e89SAndroid Build Coastguard Worker };
142*de1e4e89SAndroid Build Coastguard Worker 
143*de1e4e89SAndroid Build Coastguard Worker /* PLUG section */
144*de1e4e89SAndroid Build Coastguard Worker 
145*de1e4e89SAndroid Build Coastguard Worker #define TCQ_PLUG_BUFFER                0
146*de1e4e89SAndroid Build Coastguard Worker #define TCQ_PLUG_RELEASE_ONE           1
147*de1e4e89SAndroid Build Coastguard Worker #define TCQ_PLUG_RELEASE_INDEFINITE    2
148*de1e4e89SAndroid Build Coastguard Worker #define TCQ_PLUG_LIMIT                 3
149*de1e4e89SAndroid Build Coastguard Worker 
150*de1e4e89SAndroid Build Coastguard Worker struct tc_plug_qopt {
151*de1e4e89SAndroid Build Coastguard Worker 	/* TCQ_PLUG_BUFFER: Inset a plug into the queue and
152*de1e4e89SAndroid Build Coastguard Worker 	 *  buffer any incoming packets
153*de1e4e89SAndroid Build Coastguard Worker 	 * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
154*de1e4e89SAndroid Build Coastguard Worker 	 *   to beginning of the next plug.
155*de1e4e89SAndroid Build Coastguard Worker 	 * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
156*de1e4e89SAndroid Build Coastguard Worker 	 *   Stop buffering packets until the next TCQ_PLUG_BUFFER
157*de1e4e89SAndroid Build Coastguard Worker 	 *   command is received (just act as a pass-thru queue).
158*de1e4e89SAndroid Build Coastguard Worker 	 * TCQ_PLUG_LIMIT: Increase/decrease queue size
159*de1e4e89SAndroid Build Coastguard Worker 	 */
160*de1e4e89SAndroid Build Coastguard Worker 	int             action;
161*de1e4e89SAndroid Build Coastguard Worker 	__u32           limit;
162*de1e4e89SAndroid Build Coastguard Worker };
163*de1e4e89SAndroid Build Coastguard Worker 
164*de1e4e89SAndroid Build Coastguard Worker /* TBF section */
165*de1e4e89SAndroid Build Coastguard Worker 
166*de1e4e89SAndroid Build Coastguard Worker struct tc_tbf_qopt {
167*de1e4e89SAndroid Build Coastguard Worker 	struct tc_ratespec rate;
168*de1e4e89SAndroid Build Coastguard Worker 	struct tc_ratespec peakrate;
169*de1e4e89SAndroid Build Coastguard Worker 	__u32		limit;
170*de1e4e89SAndroid Build Coastguard Worker 	__u32		buffer;
171*de1e4e89SAndroid Build Coastguard Worker 	__u32		mtu;
172*de1e4e89SAndroid Build Coastguard Worker };
173*de1e4e89SAndroid Build Coastguard Worker 
174*de1e4e89SAndroid Build Coastguard Worker enum {
175*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_UNSPEC,
176*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_PARMS,
177*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_RTAB,
178*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_PTAB,
179*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_RATE64,
180*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_PRATE64,
181*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_BURST,
182*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_PBURST,
183*de1e4e89SAndroid Build Coastguard Worker 	TCA_TBF_PAD,
184*de1e4e89SAndroid Build Coastguard Worker 	__TCA_TBF_MAX,
185*de1e4e89SAndroid Build Coastguard Worker };
186*de1e4e89SAndroid Build Coastguard Worker 
187*de1e4e89SAndroid Build Coastguard Worker #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
188*de1e4e89SAndroid Build Coastguard Worker 
189*de1e4e89SAndroid Build Coastguard Worker 
190*de1e4e89SAndroid Build Coastguard Worker /* TEQL section */
191*de1e4e89SAndroid Build Coastguard Worker 
192*de1e4e89SAndroid Build Coastguard Worker /* TEQL does not require any parameters */
193*de1e4e89SAndroid Build Coastguard Worker 
194*de1e4e89SAndroid Build Coastguard Worker /* SFQ section */
195*de1e4e89SAndroid Build Coastguard Worker 
196*de1e4e89SAndroid Build Coastguard Worker struct tc_sfq_qopt {
197*de1e4e89SAndroid Build Coastguard Worker 	unsigned	quantum;	/* Bytes per round allocated to flow */
198*de1e4e89SAndroid Build Coastguard Worker 	int		perturb_period;	/* Period of hash perturbation */
199*de1e4e89SAndroid Build Coastguard Worker 	__u32		limit;		/* Maximal packets in queue */
200*de1e4e89SAndroid Build Coastguard Worker 	unsigned	divisor;	/* Hash divisor  */
201*de1e4e89SAndroid Build Coastguard Worker 	unsigned	flows;		/* Maximal number of flows  */
202*de1e4e89SAndroid Build Coastguard Worker };
203*de1e4e89SAndroid Build Coastguard Worker 
204*de1e4e89SAndroid Build Coastguard Worker struct tc_sfqred_stats {
205*de1e4e89SAndroid Build Coastguard Worker 	__u32           prob_drop;      /* Early drops, below max threshold */
206*de1e4e89SAndroid Build Coastguard Worker 	__u32           forced_drop;	/* Early drops, after max threshold */
207*de1e4e89SAndroid Build Coastguard Worker 	__u32           prob_mark;      /* Marked packets, below max threshold */
208*de1e4e89SAndroid Build Coastguard Worker 	__u32           forced_mark;    /* Marked packets, after max threshold */
209*de1e4e89SAndroid Build Coastguard Worker 	__u32           prob_mark_head; /* Marked packets, below max threshold */
210*de1e4e89SAndroid Build Coastguard Worker 	__u32           forced_mark_head;/* Marked packets, after max threshold */
211*de1e4e89SAndroid Build Coastguard Worker };
212*de1e4e89SAndroid Build Coastguard Worker 
213*de1e4e89SAndroid Build Coastguard Worker struct tc_sfq_qopt_v1 {
214*de1e4e89SAndroid Build Coastguard Worker 	struct tc_sfq_qopt v0;
215*de1e4e89SAndroid Build Coastguard Worker 	unsigned int	depth;		/* max number of packets per flow */
216*de1e4e89SAndroid Build Coastguard Worker 	unsigned int	headdrop;
217*de1e4e89SAndroid Build Coastguard Worker /* SFQRED parameters */
218*de1e4e89SAndroid Build Coastguard Worker 	__u32		limit;		/* HARD maximal flow queue length (bytes) */
219*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_min;	/* Min average length threshold (bytes) */
220*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_max;	/* Max average length threshold (bytes) */
221*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Wlog;		/* log(W)		*/
222*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
223*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Scell_log;	/* cell size for idle damping */
224*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	flags;
225*de1e4e89SAndroid Build Coastguard Worker 	__u32		max_P;		/* probability, high resolution */
226*de1e4e89SAndroid Build Coastguard Worker /* SFQRED stats */
227*de1e4e89SAndroid Build Coastguard Worker 	struct tc_sfqred_stats stats;
228*de1e4e89SAndroid Build Coastguard Worker };
229*de1e4e89SAndroid Build Coastguard Worker 
230*de1e4e89SAndroid Build Coastguard Worker 
231*de1e4e89SAndroid Build Coastguard Worker struct tc_sfq_xstats {
232*de1e4e89SAndroid Build Coastguard Worker 	__s32		allot;
233*de1e4e89SAndroid Build Coastguard Worker };
234*de1e4e89SAndroid Build Coastguard Worker 
235*de1e4e89SAndroid Build Coastguard Worker /* RED section */
236*de1e4e89SAndroid Build Coastguard Worker 
237*de1e4e89SAndroid Build Coastguard Worker enum {
238*de1e4e89SAndroid Build Coastguard Worker 	TCA_RED_UNSPEC,
239*de1e4e89SAndroid Build Coastguard Worker 	TCA_RED_PARMS,
240*de1e4e89SAndroid Build Coastguard Worker 	TCA_RED_STAB,
241*de1e4e89SAndroid Build Coastguard Worker 	TCA_RED_MAX_P,
242*de1e4e89SAndroid Build Coastguard Worker 	__TCA_RED_MAX,
243*de1e4e89SAndroid Build Coastguard Worker };
244*de1e4e89SAndroid Build Coastguard Worker 
245*de1e4e89SAndroid Build Coastguard Worker #define TCA_RED_MAX (__TCA_RED_MAX - 1)
246*de1e4e89SAndroid Build Coastguard Worker 
247*de1e4e89SAndroid Build Coastguard Worker struct tc_red_qopt {
248*de1e4e89SAndroid Build Coastguard Worker 	__u32		limit;		/* HARD maximal queue length (bytes)	*/
249*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_min;	/* Min average length threshold (bytes) */
250*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_max;	/* Max average length threshold (bytes) */
251*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Wlog;		/* log(W)		*/
252*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
253*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Scell_log;	/* cell size for idle damping */
254*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	flags;
255*de1e4e89SAndroid Build Coastguard Worker #define TC_RED_ECN		1
256*de1e4e89SAndroid Build Coastguard Worker #define TC_RED_HARDDROP		2
257*de1e4e89SAndroid Build Coastguard Worker #define TC_RED_ADAPTATIVE	4
258*de1e4e89SAndroid Build Coastguard Worker };
259*de1e4e89SAndroid Build Coastguard Worker 
260*de1e4e89SAndroid Build Coastguard Worker struct tc_red_xstats {
261*de1e4e89SAndroid Build Coastguard Worker 	__u32           early;          /* Early drops */
262*de1e4e89SAndroid Build Coastguard Worker 	__u32           pdrop;          /* Drops due to queue limits */
263*de1e4e89SAndroid Build Coastguard Worker 	__u32           other;          /* Drops due to drop() calls */
264*de1e4e89SAndroid Build Coastguard Worker 	__u32           marked;         /* Marked packets */
265*de1e4e89SAndroid Build Coastguard Worker };
266*de1e4e89SAndroid Build Coastguard Worker 
267*de1e4e89SAndroid Build Coastguard Worker /* GRED section */
268*de1e4e89SAndroid Build Coastguard Worker 
269*de1e4e89SAndroid Build Coastguard Worker #define MAX_DPs 16
270*de1e4e89SAndroid Build Coastguard Worker 
271*de1e4e89SAndroid Build Coastguard Worker enum {
272*de1e4e89SAndroid Build Coastguard Worker        TCA_GRED_UNSPEC,
273*de1e4e89SAndroid Build Coastguard Worker        TCA_GRED_PARMS,
274*de1e4e89SAndroid Build Coastguard Worker        TCA_GRED_STAB,
275*de1e4e89SAndroid Build Coastguard Worker        TCA_GRED_DPS,
276*de1e4e89SAndroid Build Coastguard Worker        TCA_GRED_MAX_P,
277*de1e4e89SAndroid Build Coastguard Worker        TCA_GRED_LIMIT,
278*de1e4e89SAndroid Build Coastguard Worker        __TCA_GRED_MAX,
279*de1e4e89SAndroid Build Coastguard Worker };
280*de1e4e89SAndroid Build Coastguard Worker 
281*de1e4e89SAndroid Build Coastguard Worker #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
282*de1e4e89SAndroid Build Coastguard Worker 
283*de1e4e89SAndroid Build Coastguard Worker struct tc_gred_qopt {
284*de1e4e89SAndroid Build Coastguard Worker 	__u32		limit;        /* HARD maximal queue length (bytes)    */
285*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_min;      /* Min average length threshold (bytes) */
286*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_max;      /* Max average length threshold (bytes) */
287*de1e4e89SAndroid Build Coastguard Worker 	__u32		DP;           /* up to 2^32 DPs */
288*de1e4e89SAndroid Build Coastguard Worker 	__u32		backlog;
289*de1e4e89SAndroid Build Coastguard Worker 	__u32		qave;
290*de1e4e89SAndroid Build Coastguard Worker 	__u32		forced;
291*de1e4e89SAndroid Build Coastguard Worker 	__u32		early;
292*de1e4e89SAndroid Build Coastguard Worker 	__u32		other;
293*de1e4e89SAndroid Build Coastguard Worker 	__u32		pdrop;
294*de1e4e89SAndroid Build Coastguard Worker 	__u8		Wlog;         /* log(W)               */
295*de1e4e89SAndroid Build Coastguard Worker 	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
296*de1e4e89SAndroid Build Coastguard Worker 	__u8		Scell_log;    /* cell size for idle damping */
297*de1e4e89SAndroid Build Coastguard Worker 	__u8		prio;         /* prio of this VQ */
298*de1e4e89SAndroid Build Coastguard Worker 	__u32		packets;
299*de1e4e89SAndroid Build Coastguard Worker 	__u32		bytesin;
300*de1e4e89SAndroid Build Coastguard Worker };
301*de1e4e89SAndroid Build Coastguard Worker 
302*de1e4e89SAndroid Build Coastguard Worker /* gred setup */
303*de1e4e89SAndroid Build Coastguard Worker struct tc_gred_sopt {
304*de1e4e89SAndroid Build Coastguard Worker 	__u32		DPs;
305*de1e4e89SAndroid Build Coastguard Worker 	__u32		def_DP;
306*de1e4e89SAndroid Build Coastguard Worker 	__u8		grio;
307*de1e4e89SAndroid Build Coastguard Worker 	__u8		flags;
308*de1e4e89SAndroid Build Coastguard Worker 	__u16		pad1;
309*de1e4e89SAndroid Build Coastguard Worker };
310*de1e4e89SAndroid Build Coastguard Worker 
311*de1e4e89SAndroid Build Coastguard Worker /* CHOKe section */
312*de1e4e89SAndroid Build Coastguard Worker 
313*de1e4e89SAndroid Build Coastguard Worker enum {
314*de1e4e89SAndroid Build Coastguard Worker 	TCA_CHOKE_UNSPEC,
315*de1e4e89SAndroid Build Coastguard Worker 	TCA_CHOKE_PARMS,
316*de1e4e89SAndroid Build Coastguard Worker 	TCA_CHOKE_STAB,
317*de1e4e89SAndroid Build Coastguard Worker 	TCA_CHOKE_MAX_P,
318*de1e4e89SAndroid Build Coastguard Worker 	__TCA_CHOKE_MAX,
319*de1e4e89SAndroid Build Coastguard Worker };
320*de1e4e89SAndroid Build Coastguard Worker 
321*de1e4e89SAndroid Build Coastguard Worker #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
322*de1e4e89SAndroid Build Coastguard Worker 
323*de1e4e89SAndroid Build Coastguard Worker struct tc_choke_qopt {
324*de1e4e89SAndroid Build Coastguard Worker 	__u32		limit;		/* Hard queue length (packets)	*/
325*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_min;	/* Min average threshold (packets) */
326*de1e4e89SAndroid Build Coastguard Worker 	__u32		qth_max;	/* Max average threshold (packets) */
327*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Wlog;		/* log(W)		*/
328*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
329*de1e4e89SAndroid Build Coastguard Worker 	unsigned char   Scell_log;	/* cell size for idle damping */
330*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	flags;		/* see RED flags */
331*de1e4e89SAndroid Build Coastguard Worker };
332*de1e4e89SAndroid Build Coastguard Worker 
333*de1e4e89SAndroid Build Coastguard Worker struct tc_choke_xstats {
334*de1e4e89SAndroid Build Coastguard Worker 	__u32		early;          /* Early drops */
335*de1e4e89SAndroid Build Coastguard Worker 	__u32		pdrop;          /* Drops due to queue limits */
336*de1e4e89SAndroid Build Coastguard Worker 	__u32		other;          /* Drops due to drop() calls */
337*de1e4e89SAndroid Build Coastguard Worker 	__u32		marked;         /* Marked packets */
338*de1e4e89SAndroid Build Coastguard Worker 	__u32		matched;	/* Drops due to flow match */
339*de1e4e89SAndroid Build Coastguard Worker };
340*de1e4e89SAndroid Build Coastguard Worker 
341*de1e4e89SAndroid Build Coastguard Worker /* HTB section */
342*de1e4e89SAndroid Build Coastguard Worker #define TC_HTB_NUMPRIO		8
343*de1e4e89SAndroid Build Coastguard Worker #define TC_HTB_MAXDEPTH		8
344*de1e4e89SAndroid Build Coastguard Worker #define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
345*de1e4e89SAndroid Build Coastguard Worker 
346*de1e4e89SAndroid Build Coastguard Worker struct tc_htb_opt {
347*de1e4e89SAndroid Build Coastguard Worker 	struct tc_ratespec 	rate;
348*de1e4e89SAndroid Build Coastguard Worker 	struct tc_ratespec 	ceil;
349*de1e4e89SAndroid Build Coastguard Worker 	__u32	buffer;
350*de1e4e89SAndroid Build Coastguard Worker 	__u32	cbuffer;
351*de1e4e89SAndroid Build Coastguard Worker 	__u32	quantum;
352*de1e4e89SAndroid Build Coastguard Worker 	__u32	level;		/* out only */
353*de1e4e89SAndroid Build Coastguard Worker 	__u32	prio;
354*de1e4e89SAndroid Build Coastguard Worker };
355*de1e4e89SAndroid Build Coastguard Worker struct tc_htb_glob {
356*de1e4e89SAndroid Build Coastguard Worker 	__u32 version;		/* to match HTB/TC */
357*de1e4e89SAndroid Build Coastguard Worker     	__u32 rate2quantum;	/* bps->quantum divisor */
358*de1e4e89SAndroid Build Coastguard Worker     	__u32 defcls;		/* default class number */
359*de1e4e89SAndroid Build Coastguard Worker 	__u32 debug;		/* debug flags */
360*de1e4e89SAndroid Build Coastguard Worker 
361*de1e4e89SAndroid Build Coastguard Worker 	/* stats */
362*de1e4e89SAndroid Build Coastguard Worker 	__u32 direct_pkts; /* count of non shaped packets */
363*de1e4e89SAndroid Build Coastguard Worker };
364*de1e4e89SAndroid Build Coastguard Worker enum {
365*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_UNSPEC,
366*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_PARMS,
367*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_INIT,
368*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_CTAB,
369*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_RTAB,
370*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_DIRECT_QLEN,
371*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_RATE64,
372*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_CEIL64,
373*de1e4e89SAndroid Build Coastguard Worker 	TCA_HTB_PAD,
374*de1e4e89SAndroid Build Coastguard Worker 	__TCA_HTB_MAX,
375*de1e4e89SAndroid Build Coastguard Worker };
376*de1e4e89SAndroid Build Coastguard Worker 
377*de1e4e89SAndroid Build Coastguard Worker #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
378*de1e4e89SAndroid Build Coastguard Worker 
379*de1e4e89SAndroid Build Coastguard Worker struct tc_htb_xstats {
380*de1e4e89SAndroid Build Coastguard Worker 	__u32 lends;
381*de1e4e89SAndroid Build Coastguard Worker 	__u32 borrows;
382*de1e4e89SAndroid Build Coastguard Worker 	__u32 giants;	/* too big packets (rate will not be accurate) */
383*de1e4e89SAndroid Build Coastguard Worker 	__u32 tokens;
384*de1e4e89SAndroid Build Coastguard Worker 	__u32 ctokens;
385*de1e4e89SAndroid Build Coastguard Worker };
386*de1e4e89SAndroid Build Coastguard Worker 
387*de1e4e89SAndroid Build Coastguard Worker /* HFSC section */
388*de1e4e89SAndroid Build Coastguard Worker 
389*de1e4e89SAndroid Build Coastguard Worker struct tc_hfsc_qopt {
390*de1e4e89SAndroid Build Coastguard Worker 	__u16	defcls;		/* default class */
391*de1e4e89SAndroid Build Coastguard Worker };
392*de1e4e89SAndroid Build Coastguard Worker 
393*de1e4e89SAndroid Build Coastguard Worker struct tc_service_curve {
394*de1e4e89SAndroid Build Coastguard Worker 	__u32	m1;		/* slope of the first segment in bps */
395*de1e4e89SAndroid Build Coastguard Worker 	__u32	d;		/* x-projection of the first segment in us */
396*de1e4e89SAndroid Build Coastguard Worker 	__u32	m2;		/* slope of the second segment in bps */
397*de1e4e89SAndroid Build Coastguard Worker };
398*de1e4e89SAndroid Build Coastguard Worker 
399*de1e4e89SAndroid Build Coastguard Worker struct tc_hfsc_stats {
400*de1e4e89SAndroid Build Coastguard Worker 	__u64	work;		/* total work done */
401*de1e4e89SAndroid Build Coastguard Worker 	__u64	rtwork;		/* work done by real-time criteria */
402*de1e4e89SAndroid Build Coastguard Worker 	__u32	period;		/* current period */
403*de1e4e89SAndroid Build Coastguard Worker 	__u32	level;		/* class level in hierarchy */
404*de1e4e89SAndroid Build Coastguard Worker };
405*de1e4e89SAndroid Build Coastguard Worker 
406*de1e4e89SAndroid Build Coastguard Worker enum {
407*de1e4e89SAndroid Build Coastguard Worker 	TCA_HFSC_UNSPEC,
408*de1e4e89SAndroid Build Coastguard Worker 	TCA_HFSC_RSC,
409*de1e4e89SAndroid Build Coastguard Worker 	TCA_HFSC_FSC,
410*de1e4e89SAndroid Build Coastguard Worker 	TCA_HFSC_USC,
411*de1e4e89SAndroid Build Coastguard Worker 	__TCA_HFSC_MAX,
412*de1e4e89SAndroid Build Coastguard Worker };
413*de1e4e89SAndroid Build Coastguard Worker 
414*de1e4e89SAndroid Build Coastguard Worker #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
415*de1e4e89SAndroid Build Coastguard Worker 
416*de1e4e89SAndroid Build Coastguard Worker 
417*de1e4e89SAndroid Build Coastguard Worker /* CBQ section */
418*de1e4e89SAndroid Build Coastguard Worker 
419*de1e4e89SAndroid Build Coastguard Worker #define TC_CBQ_MAXPRIO		8
420*de1e4e89SAndroid Build Coastguard Worker #define TC_CBQ_MAXLEVEL		8
421*de1e4e89SAndroid Build Coastguard Worker #define TC_CBQ_DEF_EWMA		5
422*de1e4e89SAndroid Build Coastguard Worker 
423*de1e4e89SAndroid Build Coastguard Worker struct tc_cbq_lssopt {
424*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	change;
425*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	flags;
426*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_BOUNDED	1
427*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_ISOLATED	2
428*de1e4e89SAndroid Build Coastguard Worker 	unsigned char  	ewma_log;
429*de1e4e89SAndroid Build Coastguard Worker 	unsigned char  	level;
430*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_FLAGS	1
431*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_EWMA	2
432*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_MAXIDLE	4
433*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_MINIDLE	8
434*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_OFFTIME	0x10
435*de1e4e89SAndroid Build Coastguard Worker #define TCF_CBQ_LSS_AVPKT	0x20
436*de1e4e89SAndroid Build Coastguard Worker 	__u32		maxidle;
437*de1e4e89SAndroid Build Coastguard Worker 	__u32		minidle;
438*de1e4e89SAndroid Build Coastguard Worker 	__u32		offtime;
439*de1e4e89SAndroid Build Coastguard Worker 	__u32		avpkt;
440*de1e4e89SAndroid Build Coastguard Worker };
441*de1e4e89SAndroid Build Coastguard Worker 
442*de1e4e89SAndroid Build Coastguard Worker struct tc_cbq_wrropt {
443*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	flags;
444*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	priority;
445*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	cpriority;
446*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	__reserved;
447*de1e4e89SAndroid Build Coastguard Worker 	__u32		allot;
448*de1e4e89SAndroid Build Coastguard Worker 	__u32		weight;
449*de1e4e89SAndroid Build Coastguard Worker };
450*de1e4e89SAndroid Build Coastguard Worker 
451*de1e4e89SAndroid Build Coastguard Worker struct tc_cbq_ovl {
452*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	strategy;
453*de1e4e89SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_CLASSIC	0
454*de1e4e89SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_DELAY	1
455*de1e4e89SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_LOWPRIO	2
456*de1e4e89SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_DROP		3
457*de1e4e89SAndroid Build Coastguard Worker #define	TC_CBQ_OVL_RCLASSIC	4
458*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	priority2;
459*de1e4e89SAndroid Build Coastguard Worker 	__u16		pad;
460*de1e4e89SAndroid Build Coastguard Worker 	__u32		penalty;
461*de1e4e89SAndroid Build Coastguard Worker };
462*de1e4e89SAndroid Build Coastguard Worker 
463*de1e4e89SAndroid Build Coastguard Worker struct tc_cbq_police {
464*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	police;
465*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	__res1;
466*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	__res2;
467*de1e4e89SAndroid Build Coastguard Worker };
468*de1e4e89SAndroid Build Coastguard Worker 
469*de1e4e89SAndroid Build Coastguard Worker struct tc_cbq_fopt {
470*de1e4e89SAndroid Build Coastguard Worker 	__u32		split;
471*de1e4e89SAndroid Build Coastguard Worker 	__u32		defmap;
472*de1e4e89SAndroid Build Coastguard Worker 	__u32		defchange;
473*de1e4e89SAndroid Build Coastguard Worker };
474*de1e4e89SAndroid Build Coastguard Worker 
475*de1e4e89SAndroid Build Coastguard Worker struct tc_cbq_xstats {
476*de1e4e89SAndroid Build Coastguard Worker 	__u32		borrows;
477*de1e4e89SAndroid Build Coastguard Worker 	__u32		overactions;
478*de1e4e89SAndroid Build Coastguard Worker 	__s32		avgidle;
479*de1e4e89SAndroid Build Coastguard Worker 	__s32		undertime;
480*de1e4e89SAndroid Build Coastguard Worker };
481*de1e4e89SAndroid Build Coastguard Worker 
482*de1e4e89SAndroid Build Coastguard Worker enum {
483*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_UNSPEC,
484*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_LSSOPT,
485*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_WRROPT,
486*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_FOPT,
487*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_OVL_STRATEGY,
488*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_RATE,
489*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_RTAB,
490*de1e4e89SAndroid Build Coastguard Worker 	TCA_CBQ_POLICE,
491*de1e4e89SAndroid Build Coastguard Worker 	__TCA_CBQ_MAX,
492*de1e4e89SAndroid Build Coastguard Worker };
493*de1e4e89SAndroid Build Coastguard Worker 
494*de1e4e89SAndroid Build Coastguard Worker #define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
495*de1e4e89SAndroid Build Coastguard Worker 
496*de1e4e89SAndroid Build Coastguard Worker /* dsmark section */
497*de1e4e89SAndroid Build Coastguard Worker 
498*de1e4e89SAndroid Build Coastguard Worker enum {
499*de1e4e89SAndroid Build Coastguard Worker 	TCA_DSMARK_UNSPEC,
500*de1e4e89SAndroid Build Coastguard Worker 	TCA_DSMARK_INDICES,
501*de1e4e89SAndroid Build Coastguard Worker 	TCA_DSMARK_DEFAULT_INDEX,
502*de1e4e89SAndroid Build Coastguard Worker 	TCA_DSMARK_SET_TC_INDEX,
503*de1e4e89SAndroid Build Coastguard Worker 	TCA_DSMARK_MASK,
504*de1e4e89SAndroid Build Coastguard Worker 	TCA_DSMARK_VALUE,
505*de1e4e89SAndroid Build Coastguard Worker 	__TCA_DSMARK_MAX,
506*de1e4e89SAndroid Build Coastguard Worker };
507*de1e4e89SAndroid Build Coastguard Worker 
508*de1e4e89SAndroid Build Coastguard Worker #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
509*de1e4e89SAndroid Build Coastguard Worker 
510*de1e4e89SAndroid Build Coastguard Worker /* ATM  section */
511*de1e4e89SAndroid Build Coastguard Worker 
512*de1e4e89SAndroid Build Coastguard Worker enum {
513*de1e4e89SAndroid Build Coastguard Worker 	TCA_ATM_UNSPEC,
514*de1e4e89SAndroid Build Coastguard Worker 	TCA_ATM_FD,		/* file/socket descriptor */
515*de1e4e89SAndroid Build Coastguard Worker 	TCA_ATM_PTR,		/* pointer to descriptor - later */
516*de1e4e89SAndroid Build Coastguard Worker 	TCA_ATM_HDR,		/* LL header */
517*de1e4e89SAndroid Build Coastguard Worker 	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
518*de1e4e89SAndroid Build Coastguard Worker 	TCA_ATM_ADDR,		/* PVC address (for output only) */
519*de1e4e89SAndroid Build Coastguard Worker 	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
520*de1e4e89SAndroid Build Coastguard Worker 	__TCA_ATM_MAX,
521*de1e4e89SAndroid Build Coastguard Worker };
522*de1e4e89SAndroid Build Coastguard Worker 
523*de1e4e89SAndroid Build Coastguard Worker #define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
524*de1e4e89SAndroid Build Coastguard Worker 
525*de1e4e89SAndroid Build Coastguard Worker /* Network emulator */
526*de1e4e89SAndroid Build Coastguard Worker 
527*de1e4e89SAndroid Build Coastguard Worker enum {
528*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_UNSPEC,
529*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_CORR,
530*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_DELAY_DIST,
531*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_REORDER,
532*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_CORRUPT,
533*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_LOSS,
534*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_RATE,
535*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_ECN,
536*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_RATE64,
537*de1e4e89SAndroid Build Coastguard Worker 	TCA_NETEM_PAD,
538*de1e4e89SAndroid Build Coastguard Worker 	__TCA_NETEM_MAX,
539*de1e4e89SAndroid Build Coastguard Worker };
540*de1e4e89SAndroid Build Coastguard Worker 
541*de1e4e89SAndroid Build Coastguard Worker #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
542*de1e4e89SAndroid Build Coastguard Worker 
543*de1e4e89SAndroid Build Coastguard Worker struct tc_netem_qopt {
544*de1e4e89SAndroid Build Coastguard Worker 	__u32	latency;	/* added delay (us) */
545*de1e4e89SAndroid Build Coastguard Worker 	__u32   limit;		/* fifo limit (packets) */
546*de1e4e89SAndroid Build Coastguard Worker 	__u32	loss;		/* random packet loss (0=none ~0=100%) */
547*de1e4e89SAndroid Build Coastguard Worker 	__u32	gap;		/* re-ordering gap (0 for none) */
548*de1e4e89SAndroid Build Coastguard Worker 	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
549*de1e4e89SAndroid Build Coastguard Worker 	__u32	jitter;		/* random jitter in latency (us) */
550*de1e4e89SAndroid Build Coastguard Worker };
551*de1e4e89SAndroid Build Coastguard Worker 
552*de1e4e89SAndroid Build Coastguard Worker struct tc_netem_corr {
553*de1e4e89SAndroid Build Coastguard Worker 	__u32	delay_corr;	/* delay correlation */
554*de1e4e89SAndroid Build Coastguard Worker 	__u32	loss_corr;	/* packet loss correlation */
555*de1e4e89SAndroid Build Coastguard Worker 	__u32	dup_corr;	/* duplicate correlation  */
556*de1e4e89SAndroid Build Coastguard Worker };
557*de1e4e89SAndroid Build Coastguard Worker 
558*de1e4e89SAndroid Build Coastguard Worker struct tc_netem_reorder {
559*de1e4e89SAndroid Build Coastguard Worker 	__u32	probability;
560*de1e4e89SAndroid Build Coastguard Worker 	__u32	correlation;
561*de1e4e89SAndroid Build Coastguard Worker };
562*de1e4e89SAndroid Build Coastguard Worker 
563*de1e4e89SAndroid Build Coastguard Worker struct tc_netem_corrupt {
564*de1e4e89SAndroid Build Coastguard Worker 	__u32	probability;
565*de1e4e89SAndroid Build Coastguard Worker 	__u32	correlation;
566*de1e4e89SAndroid Build Coastguard Worker };
567*de1e4e89SAndroid Build Coastguard Worker 
568*de1e4e89SAndroid Build Coastguard Worker struct tc_netem_rate {
569*de1e4e89SAndroid Build Coastguard Worker 	__u32	rate;	/* byte/s */
570*de1e4e89SAndroid Build Coastguard Worker 	__s32	packet_overhead;
571*de1e4e89SAndroid Build Coastguard Worker 	__u32	cell_size;
572*de1e4e89SAndroid Build Coastguard Worker 	__s32	cell_overhead;
573*de1e4e89SAndroid Build Coastguard Worker };
574*de1e4e89SAndroid Build Coastguard Worker 
575*de1e4e89SAndroid Build Coastguard Worker enum {
576*de1e4e89SAndroid Build Coastguard Worker 	NETEM_LOSS_UNSPEC,
577*de1e4e89SAndroid Build Coastguard Worker 	NETEM_LOSS_GI,		/* General Intuitive - 4 state model */
578*de1e4e89SAndroid Build Coastguard Worker 	NETEM_LOSS_GE,		/* Gilbert Elliot models */
579*de1e4e89SAndroid Build Coastguard Worker 	__NETEM_LOSS_MAX
580*de1e4e89SAndroid Build Coastguard Worker };
581*de1e4e89SAndroid Build Coastguard Worker #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
582*de1e4e89SAndroid Build Coastguard Worker 
583*de1e4e89SAndroid Build Coastguard Worker /* State transition probabilities for 4 state model */
584*de1e4e89SAndroid Build Coastguard Worker struct tc_netem_gimodel {
585*de1e4e89SAndroid Build Coastguard Worker 	__u32	p13;
586*de1e4e89SAndroid Build Coastguard Worker 	__u32	p31;
587*de1e4e89SAndroid Build Coastguard Worker 	__u32	p32;
588*de1e4e89SAndroid Build Coastguard Worker 	__u32	p14;
589*de1e4e89SAndroid Build Coastguard Worker 	__u32	p23;
590*de1e4e89SAndroid Build Coastguard Worker };
591*de1e4e89SAndroid Build Coastguard Worker 
592*de1e4e89SAndroid Build Coastguard Worker /* Gilbert-Elliot models */
593*de1e4e89SAndroid Build Coastguard Worker struct tc_netem_gemodel {
594*de1e4e89SAndroid Build Coastguard Worker 	__u32 p;
595*de1e4e89SAndroid Build Coastguard Worker 	__u32 r;
596*de1e4e89SAndroid Build Coastguard Worker 	__u32 h;
597*de1e4e89SAndroid Build Coastguard Worker 	__u32 k1;
598*de1e4e89SAndroid Build Coastguard Worker };
599*de1e4e89SAndroid Build Coastguard Worker 
600*de1e4e89SAndroid Build Coastguard Worker #define NETEM_DIST_SCALE	8192
601*de1e4e89SAndroid Build Coastguard Worker #define NETEM_DIST_MAX		16384
602*de1e4e89SAndroid Build Coastguard Worker 
603*de1e4e89SAndroid Build Coastguard Worker /* DRR */
604*de1e4e89SAndroid Build Coastguard Worker 
605*de1e4e89SAndroid Build Coastguard Worker enum {
606*de1e4e89SAndroid Build Coastguard Worker 	TCA_DRR_UNSPEC,
607*de1e4e89SAndroid Build Coastguard Worker 	TCA_DRR_QUANTUM,
608*de1e4e89SAndroid Build Coastguard Worker 	__TCA_DRR_MAX
609*de1e4e89SAndroid Build Coastguard Worker };
610*de1e4e89SAndroid Build Coastguard Worker 
611*de1e4e89SAndroid Build Coastguard Worker #define TCA_DRR_MAX	(__TCA_DRR_MAX - 1)
612*de1e4e89SAndroid Build Coastguard Worker 
613*de1e4e89SAndroid Build Coastguard Worker struct tc_drr_stats {
614*de1e4e89SAndroid Build Coastguard Worker 	__u32	deficit;
615*de1e4e89SAndroid Build Coastguard Worker };
616*de1e4e89SAndroid Build Coastguard Worker 
617*de1e4e89SAndroid Build Coastguard Worker /* MQPRIO */
618*de1e4e89SAndroid Build Coastguard Worker #define TC_QOPT_BITMASK 15
619*de1e4e89SAndroid Build Coastguard Worker #define TC_QOPT_MAX_QUEUE 16
620*de1e4e89SAndroid Build Coastguard Worker 
621*de1e4e89SAndroid Build Coastguard Worker enum {
622*de1e4e89SAndroid Build Coastguard Worker 	TC_MQPRIO_HW_OFFLOAD_NONE,	/* no offload requested */
623*de1e4e89SAndroid Build Coastguard Worker 	TC_MQPRIO_HW_OFFLOAD_TCS,	/* offload TCs, no queue counts */
624*de1e4e89SAndroid Build Coastguard Worker 	__TC_MQPRIO_HW_OFFLOAD_MAX
625*de1e4e89SAndroid Build Coastguard Worker };
626*de1e4e89SAndroid Build Coastguard Worker 
627*de1e4e89SAndroid Build Coastguard Worker #define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1)
628*de1e4e89SAndroid Build Coastguard Worker 
629*de1e4e89SAndroid Build Coastguard Worker struct tc_mqprio_qopt {
630*de1e4e89SAndroid Build Coastguard Worker 	__u8	num_tc;
631*de1e4e89SAndroid Build Coastguard Worker 	__u8	prio_tc_map[TC_QOPT_BITMASK + 1];
632*de1e4e89SAndroid Build Coastguard Worker 	__u8	hw;
633*de1e4e89SAndroid Build Coastguard Worker 	__u16	count[TC_QOPT_MAX_QUEUE];
634*de1e4e89SAndroid Build Coastguard Worker 	__u16	offset[TC_QOPT_MAX_QUEUE];
635*de1e4e89SAndroid Build Coastguard Worker };
636*de1e4e89SAndroid Build Coastguard Worker 
637*de1e4e89SAndroid Build Coastguard Worker /* SFB */
638*de1e4e89SAndroid Build Coastguard Worker 
639*de1e4e89SAndroid Build Coastguard Worker enum {
640*de1e4e89SAndroid Build Coastguard Worker 	TCA_SFB_UNSPEC,
641*de1e4e89SAndroid Build Coastguard Worker 	TCA_SFB_PARMS,
642*de1e4e89SAndroid Build Coastguard Worker 	__TCA_SFB_MAX,
643*de1e4e89SAndroid Build Coastguard Worker };
644*de1e4e89SAndroid Build Coastguard Worker 
645*de1e4e89SAndroid Build Coastguard Worker #define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
646*de1e4e89SAndroid Build Coastguard Worker 
647*de1e4e89SAndroid Build Coastguard Worker /*
648*de1e4e89SAndroid Build Coastguard Worker  * Note: increment, decrement are Q0.16 fixed-point values.
649*de1e4e89SAndroid Build Coastguard Worker  */
650*de1e4e89SAndroid Build Coastguard Worker struct tc_sfb_qopt {
651*de1e4e89SAndroid Build Coastguard Worker 	__u32 rehash_interval;	/* delay between hash move, in ms */
652*de1e4e89SAndroid Build Coastguard Worker 	__u32 warmup_time;	/* double buffering warmup time in ms (warmup_time < rehash_interval) */
653*de1e4e89SAndroid Build Coastguard Worker 	__u32 max;		/* max len of qlen_min */
654*de1e4e89SAndroid Build Coastguard Worker 	__u32 bin_size;		/* maximum queue length per bin */
655*de1e4e89SAndroid Build Coastguard Worker 	__u32 increment;	/* probability increment, (d1 in Blue) */
656*de1e4e89SAndroid Build Coastguard Worker 	__u32 decrement;	/* probability decrement, (d2 in Blue) */
657*de1e4e89SAndroid Build Coastguard Worker 	__u32 limit;		/* max SFB queue length */
658*de1e4e89SAndroid Build Coastguard Worker 	__u32 penalty_rate;	/* inelastic flows are rate limited to 'rate' pps */
659*de1e4e89SAndroid Build Coastguard Worker 	__u32 penalty_burst;
660*de1e4e89SAndroid Build Coastguard Worker };
661*de1e4e89SAndroid Build Coastguard Worker 
662*de1e4e89SAndroid Build Coastguard Worker struct tc_sfb_xstats {
663*de1e4e89SAndroid Build Coastguard Worker 	__u32 earlydrop;
664*de1e4e89SAndroid Build Coastguard Worker 	__u32 penaltydrop;
665*de1e4e89SAndroid Build Coastguard Worker 	__u32 bucketdrop;
666*de1e4e89SAndroid Build Coastguard Worker 	__u32 queuedrop;
667*de1e4e89SAndroid Build Coastguard Worker 	__u32 childdrop; /* drops in child qdisc */
668*de1e4e89SAndroid Build Coastguard Worker 	__u32 marked;
669*de1e4e89SAndroid Build Coastguard Worker 	__u32 maxqlen;
670*de1e4e89SAndroid Build Coastguard Worker 	__u32 maxprob;
671*de1e4e89SAndroid Build Coastguard Worker 	__u32 avgprob;
672*de1e4e89SAndroid Build Coastguard Worker };
673*de1e4e89SAndroid Build Coastguard Worker 
674*de1e4e89SAndroid Build Coastguard Worker #define SFB_MAX_PROB 0xFFFF
675*de1e4e89SAndroid Build Coastguard Worker 
676*de1e4e89SAndroid Build Coastguard Worker /* QFQ */
677*de1e4e89SAndroid Build Coastguard Worker enum {
678*de1e4e89SAndroid Build Coastguard Worker 	TCA_QFQ_UNSPEC,
679*de1e4e89SAndroid Build Coastguard Worker 	TCA_QFQ_WEIGHT,
680*de1e4e89SAndroid Build Coastguard Worker 	TCA_QFQ_LMAX,
681*de1e4e89SAndroid Build Coastguard Worker 	__TCA_QFQ_MAX
682*de1e4e89SAndroid Build Coastguard Worker };
683*de1e4e89SAndroid Build Coastguard Worker 
684*de1e4e89SAndroid Build Coastguard Worker #define TCA_QFQ_MAX	(__TCA_QFQ_MAX - 1)
685*de1e4e89SAndroid Build Coastguard Worker 
686*de1e4e89SAndroid Build Coastguard Worker struct tc_qfq_stats {
687*de1e4e89SAndroid Build Coastguard Worker 	__u32 weight;
688*de1e4e89SAndroid Build Coastguard Worker 	__u32 lmax;
689*de1e4e89SAndroid Build Coastguard Worker };
690*de1e4e89SAndroid Build Coastguard Worker 
691*de1e4e89SAndroid Build Coastguard Worker /* CODEL */
692*de1e4e89SAndroid Build Coastguard Worker 
693*de1e4e89SAndroid Build Coastguard Worker enum {
694*de1e4e89SAndroid Build Coastguard Worker 	TCA_CODEL_UNSPEC,
695*de1e4e89SAndroid Build Coastguard Worker 	TCA_CODEL_TARGET,
696*de1e4e89SAndroid Build Coastguard Worker 	TCA_CODEL_LIMIT,
697*de1e4e89SAndroid Build Coastguard Worker 	TCA_CODEL_INTERVAL,
698*de1e4e89SAndroid Build Coastguard Worker 	TCA_CODEL_ECN,
699*de1e4e89SAndroid Build Coastguard Worker 	TCA_CODEL_CE_THRESHOLD,
700*de1e4e89SAndroid Build Coastguard Worker 	__TCA_CODEL_MAX
701*de1e4e89SAndroid Build Coastguard Worker };
702*de1e4e89SAndroid Build Coastguard Worker 
703*de1e4e89SAndroid Build Coastguard Worker #define TCA_CODEL_MAX	(__TCA_CODEL_MAX - 1)
704*de1e4e89SAndroid Build Coastguard Worker 
705*de1e4e89SAndroid Build Coastguard Worker struct tc_codel_xstats {
706*de1e4e89SAndroid Build Coastguard Worker 	__u32	maxpacket; /* largest packet we've seen so far */
707*de1e4e89SAndroid Build Coastguard Worker 	__u32	count;	   /* how many drops we've done since the last time we
708*de1e4e89SAndroid Build Coastguard Worker 			    * entered dropping state
709*de1e4e89SAndroid Build Coastguard Worker 			    */
710*de1e4e89SAndroid Build Coastguard Worker 	__u32	lastcount; /* count at entry to dropping state */
711*de1e4e89SAndroid Build Coastguard Worker 	__u32	ldelay;    /* in-queue delay seen by most recently dequeued packet */
712*de1e4e89SAndroid Build Coastguard Worker 	__s32	drop_next; /* time to drop next packet */
713*de1e4e89SAndroid Build Coastguard Worker 	__u32	drop_overlimit; /* number of time max qdisc packet limit was hit */
714*de1e4e89SAndroid Build Coastguard Worker 	__u32	ecn_mark;  /* number of packets we ECN marked instead of dropped */
715*de1e4e89SAndroid Build Coastguard Worker 	__u32	dropping;  /* are we in dropping state ? */
716*de1e4e89SAndroid Build Coastguard Worker 	__u32	ce_mark;   /* number of CE marked packets because of ce_threshold */
717*de1e4e89SAndroid Build Coastguard Worker };
718*de1e4e89SAndroid Build Coastguard Worker 
719*de1e4e89SAndroid Build Coastguard Worker /* FQ_CODEL */
720*de1e4e89SAndroid Build Coastguard Worker 
721*de1e4e89SAndroid Build Coastguard Worker enum {
722*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_UNSPEC,
723*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_TARGET,
724*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_LIMIT,
725*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_INTERVAL,
726*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_ECN,
727*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_FLOWS,
728*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_QUANTUM,
729*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_CE_THRESHOLD,
730*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_DROP_BATCH_SIZE,
731*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_MEMORY_LIMIT,
732*de1e4e89SAndroid Build Coastguard Worker 	__TCA_FQ_CODEL_MAX
733*de1e4e89SAndroid Build Coastguard Worker };
734*de1e4e89SAndroid Build Coastguard Worker 
735*de1e4e89SAndroid Build Coastguard Worker #define TCA_FQ_CODEL_MAX	(__TCA_FQ_CODEL_MAX - 1)
736*de1e4e89SAndroid Build Coastguard Worker 
737*de1e4e89SAndroid Build Coastguard Worker enum {
738*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_XSTATS_QDISC,
739*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_CODEL_XSTATS_CLASS,
740*de1e4e89SAndroid Build Coastguard Worker };
741*de1e4e89SAndroid Build Coastguard Worker 
742*de1e4e89SAndroid Build Coastguard Worker struct tc_fq_codel_qd_stats {
743*de1e4e89SAndroid Build Coastguard Worker 	__u32	maxpacket;	/* largest packet we've seen so far */
744*de1e4e89SAndroid Build Coastguard Worker 	__u32	drop_overlimit; /* number of time max qdisc
745*de1e4e89SAndroid Build Coastguard Worker 				 * packet limit was hit
746*de1e4e89SAndroid Build Coastguard Worker 				 */
747*de1e4e89SAndroid Build Coastguard Worker 	__u32	ecn_mark;	/* number of packets we ECN marked
748*de1e4e89SAndroid Build Coastguard Worker 				 * instead of being dropped
749*de1e4e89SAndroid Build Coastguard Worker 				 */
750*de1e4e89SAndroid Build Coastguard Worker 	__u32	new_flow_count; /* number of time packets
751*de1e4e89SAndroid Build Coastguard Worker 				 * created a 'new flow'
752*de1e4e89SAndroid Build Coastguard Worker 				 */
753*de1e4e89SAndroid Build Coastguard Worker 	__u32	new_flows_len;	/* count of flows in new list */
754*de1e4e89SAndroid Build Coastguard Worker 	__u32	old_flows_len;	/* count of flows in old list */
755*de1e4e89SAndroid Build Coastguard Worker 	__u32	ce_mark;	/* packets above ce_threshold */
756*de1e4e89SAndroid Build Coastguard Worker 	__u32	memory_usage;	/* in bytes */
757*de1e4e89SAndroid Build Coastguard Worker 	__u32	drop_overmemory;
758*de1e4e89SAndroid Build Coastguard Worker };
759*de1e4e89SAndroid Build Coastguard Worker 
760*de1e4e89SAndroid Build Coastguard Worker struct tc_fq_codel_cl_stats {
761*de1e4e89SAndroid Build Coastguard Worker 	__s32	deficit;
762*de1e4e89SAndroid Build Coastguard Worker 	__u32	ldelay;		/* in-queue delay seen by most recently
763*de1e4e89SAndroid Build Coastguard Worker 				 * dequeued packet
764*de1e4e89SAndroid Build Coastguard Worker 				 */
765*de1e4e89SAndroid Build Coastguard Worker 	__u32	count;
766*de1e4e89SAndroid Build Coastguard Worker 	__u32	lastcount;
767*de1e4e89SAndroid Build Coastguard Worker 	__u32	dropping;
768*de1e4e89SAndroid Build Coastguard Worker 	__s32	drop_next;
769*de1e4e89SAndroid Build Coastguard Worker };
770*de1e4e89SAndroid Build Coastguard Worker 
771*de1e4e89SAndroid Build Coastguard Worker struct tc_fq_codel_xstats {
772*de1e4e89SAndroid Build Coastguard Worker 	__u32	type;
773*de1e4e89SAndroid Build Coastguard Worker 	union {
774*de1e4e89SAndroid Build Coastguard Worker 		struct tc_fq_codel_qd_stats qdisc_stats;
775*de1e4e89SAndroid Build Coastguard Worker 		struct tc_fq_codel_cl_stats class_stats;
776*de1e4e89SAndroid Build Coastguard Worker 	};
777*de1e4e89SAndroid Build Coastguard Worker };
778*de1e4e89SAndroid Build Coastguard Worker 
779*de1e4e89SAndroid Build Coastguard Worker /* FQ */
780*de1e4e89SAndroid Build Coastguard Worker 
781*de1e4e89SAndroid Build Coastguard Worker enum {
782*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_UNSPEC,
783*de1e4e89SAndroid Build Coastguard Worker 
784*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_PLIMIT,		/* limit of total number of packets in queue */
785*de1e4e89SAndroid Build Coastguard Worker 
786*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_PLIMIT,	/* limit of packets per flow */
787*de1e4e89SAndroid Build Coastguard Worker 
788*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_QUANTUM,		/* RR quantum */
789*de1e4e89SAndroid Build Coastguard Worker 
790*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_INITIAL_QUANTUM,		/* RR quantum for new flow */
791*de1e4e89SAndroid Build Coastguard Worker 
792*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_RATE_ENABLE,	/* enable/disable rate limiting */
793*de1e4e89SAndroid Build Coastguard Worker 
794*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
795*de1e4e89SAndroid Build Coastguard Worker 
796*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_MAX_RATE,	/* per flow max rate */
797*de1e4e89SAndroid Build Coastguard Worker 
798*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_BUCKETS_LOG,	/* log2(number of buckets) */
799*de1e4e89SAndroid Build Coastguard Worker 
800*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_FLOW_REFILL_DELAY,	/* flow credit refill delay in usec */
801*de1e4e89SAndroid Build Coastguard Worker 
802*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_ORPHAN_MASK,	/* mask applied to orphaned skb hashes */
803*de1e4e89SAndroid Build Coastguard Worker 
804*de1e4e89SAndroid Build Coastguard Worker 	TCA_FQ_LOW_RATE_THRESHOLD, /* per packet delay under this rate */
805*de1e4e89SAndroid Build Coastguard Worker 
806*de1e4e89SAndroid Build Coastguard Worker 	__TCA_FQ_MAX
807*de1e4e89SAndroid Build Coastguard Worker };
808*de1e4e89SAndroid Build Coastguard Worker 
809*de1e4e89SAndroid Build Coastguard Worker #define TCA_FQ_MAX	(__TCA_FQ_MAX - 1)
810*de1e4e89SAndroid Build Coastguard Worker 
811*de1e4e89SAndroid Build Coastguard Worker struct tc_fq_qd_stats {
812*de1e4e89SAndroid Build Coastguard Worker 	__u64	gc_flows;
813*de1e4e89SAndroid Build Coastguard Worker 	__u64	highprio_packets;
814*de1e4e89SAndroid Build Coastguard Worker 	__u64	tcp_retrans;
815*de1e4e89SAndroid Build Coastguard Worker 	__u64	throttled;
816*de1e4e89SAndroid Build Coastguard Worker 	__u64	flows_plimit;
817*de1e4e89SAndroid Build Coastguard Worker 	__u64	pkts_too_long;
818*de1e4e89SAndroid Build Coastguard Worker 	__u64	allocation_errors;
819*de1e4e89SAndroid Build Coastguard Worker 	__s64	time_next_delayed_flow;
820*de1e4e89SAndroid Build Coastguard Worker 	__u32	flows;
821*de1e4e89SAndroid Build Coastguard Worker 	__u32	inactive_flows;
822*de1e4e89SAndroid Build Coastguard Worker 	__u32	throttled_flows;
823*de1e4e89SAndroid Build Coastguard Worker 	__u32	unthrottle_latency_ns;
824*de1e4e89SAndroid Build Coastguard Worker };
825*de1e4e89SAndroid Build Coastguard Worker 
826*de1e4e89SAndroid Build Coastguard Worker /* Heavy-Hitter Filter */
827*de1e4e89SAndroid Build Coastguard Worker 
828*de1e4e89SAndroid Build Coastguard Worker enum {
829*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_UNSPEC,
830*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_BACKLOG_LIMIT,
831*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_QUANTUM,
832*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_HH_FLOWS_LIMIT,
833*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_RESET_TIMEOUT,
834*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_ADMIT_BYTES,
835*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_EVICT_TIMEOUT,
836*de1e4e89SAndroid Build Coastguard Worker 	TCA_HHF_NON_HH_WEIGHT,
837*de1e4e89SAndroid Build Coastguard Worker 	__TCA_HHF_MAX
838*de1e4e89SAndroid Build Coastguard Worker };
839*de1e4e89SAndroid Build Coastguard Worker 
840*de1e4e89SAndroid Build Coastguard Worker #define TCA_HHF_MAX	(__TCA_HHF_MAX - 1)
841*de1e4e89SAndroid Build Coastguard Worker 
842*de1e4e89SAndroid Build Coastguard Worker struct tc_hhf_xstats {
843*de1e4e89SAndroid Build Coastguard Worker 	__u32	drop_overlimit; /* number of times max qdisc packet limit
844*de1e4e89SAndroid Build Coastguard Worker 				 * was hit
845*de1e4e89SAndroid Build Coastguard Worker 				 */
846*de1e4e89SAndroid Build Coastguard Worker 	__u32	hh_overlimit;   /* number of times max heavy-hitters was hit */
847*de1e4e89SAndroid Build Coastguard Worker 	__u32	hh_tot_count;   /* number of captured heavy-hitters so far */
848*de1e4e89SAndroid Build Coastguard Worker 	__u32	hh_cur_count;   /* number of current heavy-hitters */
849*de1e4e89SAndroid Build Coastguard Worker };
850*de1e4e89SAndroid Build Coastguard Worker 
851*de1e4e89SAndroid Build Coastguard Worker /* PIE */
852*de1e4e89SAndroid Build Coastguard Worker enum {
853*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_UNSPEC,
854*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_TARGET,
855*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_LIMIT,
856*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_TUPDATE,
857*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_ALPHA,
858*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_BETA,
859*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_ECN,
860*de1e4e89SAndroid Build Coastguard Worker 	TCA_PIE_BYTEMODE,
861*de1e4e89SAndroid Build Coastguard Worker 	__TCA_PIE_MAX
862*de1e4e89SAndroid Build Coastguard Worker };
863*de1e4e89SAndroid Build Coastguard Worker #define TCA_PIE_MAX   (__TCA_PIE_MAX - 1)
864*de1e4e89SAndroid Build Coastguard Worker 
865*de1e4e89SAndroid Build Coastguard Worker struct tc_pie_xstats {
866*de1e4e89SAndroid Build Coastguard Worker 	__u32 prob;             /* current probability */
867*de1e4e89SAndroid Build Coastguard Worker 	__u32 delay;            /* current delay in ms */
868*de1e4e89SAndroid Build Coastguard Worker 	__u32 avg_dq_rate;      /* current average dq_rate in bits/pie_time */
869*de1e4e89SAndroid Build Coastguard Worker 	__u32 packets_in;       /* total number of packets enqueued */
870*de1e4e89SAndroid Build Coastguard Worker 	__u32 dropped;          /* packets dropped due to pie_action */
871*de1e4e89SAndroid Build Coastguard Worker 	__u32 overlimit;        /* dropped due to lack of space in queue */
872*de1e4e89SAndroid Build Coastguard Worker 	__u32 maxq;             /* maximum queue size */
873*de1e4e89SAndroid Build Coastguard Worker 	__u32 ecn_mark;         /* packets marked with ecn*/
874*de1e4e89SAndroid Build Coastguard Worker };
875*de1e4e89SAndroid Build Coastguard Worker #endif
876