pkt_sched.h revision a31a5d5904dd35d6a5839e66845f236e3284bb45
1#ifndef __LINUX_PKT_SCHED_H
2#define __LINUX_PKT_SCHED_H
3
4/* Logical priority bands not depending on specific packet scheduler.
5   Every scheduler will map them to real traffic classes, if it has
6   no more precise mechanism to classify packets.
7
8   These numbers have no special meaning, though their coincidence
9   with obsolete IPv6 values is not occasional :-). New IPv6 drafts
10   preferred full anarchy inspired by diffserv group.
11
12   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
13   class, actually, as rule it will be handled with more care than
14   filler or even bulk.
15 */
16
17#define TC_PRIO_BESTEFFORT		0
18#define TC_PRIO_FILLER			1
19#define TC_PRIO_BULK			2
20#define TC_PRIO_INTERACTIVE_BULK	4
21#define TC_PRIO_INTERACTIVE		6
22#define TC_PRIO_CONTROL			7
23
24#define TC_PRIO_MAX			15
25
26/* Generic queue statistics, available for all the elements.
27   Particular schedulers may have also their private records.
28 */
29
30struct tc_stats
31{
32	__u64	bytes;			/* NUmber of enqueues bytes */
33	__u32	packets;		/* Number of enqueued packets	*/
34	__u32	drops;			/* Packets dropped because of lack of resources */
35	__u32	overlimits;		/* Number of throttle events when this
36					 * flow goes out of allocated bandwidth */
37	__u32	bps;			/* Current flow byte rate */
38	__u32	pps;			/* Current flow packet rate */
39	__u32	qlen;
40	__u32	backlog;
41};
42
43struct tc_estimator
44{
45	signed char	interval;
46	unsigned char	ewma_log;
47};
48
49/* "Handles"
50   ---------
51
52    All the traffic control objects have 32bit identifiers, or "handles".
53
54    They can be considered as opaque numbers from user API viewpoint,
55    but actually they always consist of two fields: major and
56    minor numbers, which are interpreted by kernel specially,
57    that may be used by applications, though not recommended.
58
59    F.e. qdisc handles always have minor number equal to zero,
60    classes (or flows) have major equal to parent qdisc major, and
61    minor uniquely identifying class inside qdisc.
62
63    Macros to manipulate handles:
64 */
65
66#define TC_H_MAJ_MASK (0xFFFF0000U)
67#define TC_H_MIN_MASK (0x0000FFFFU)
68#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
69#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
70#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
71
72#define TC_H_UNSPEC	(0U)
73#define TC_H_ROOT	(0xFFFFFFFFU)
74#define TC_H_INGRESS    (0xFFFFFFF1U)
75
76struct tc_ratespec
77{
78	unsigned char	cell_log;
79	unsigned char	__reserved;
80	unsigned short	feature;
81	short		addend;
82	unsigned short	mpu;
83	__u32		rate;
84};
85
86/* FIFO section */
87
88struct tc_fifo_qopt
89{
90	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
91};
92
93/* PRIO section */
94
95#define TCQ_PRIO_BANDS	16
96#define TCQ_MIN_PRIO_BANDS 2
97
98struct tc_prio_qopt
99{
100	int	bands;			/* Number of bands */
101	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
102};
103
104/* TBF section */
105
106struct tc_tbf_qopt
107{
108	struct tc_ratespec rate;
109	struct tc_ratespec peakrate;
110	__u32		limit;
111	__u32		buffer;
112	__u32		mtu;
113};
114
115enum
116{
117	TCA_TBF_UNSPEC,
118	TCA_TBF_PARMS,
119	TCA_TBF_RTAB,
120	TCA_TBF_PTAB,
121	__TCA_TBF_MAX,
122};
123
124#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
125
126
127/* TEQL section */
128
129/* TEQL does not require any parameters */
130
131/* SFQ section */
132
133struct tc_sfq_qopt
134{
135	unsigned	quantum;	/* Bytes per round allocated to flow */
136	int		perturb_period;	/* Period of hash perturbation */
137	__u32		limit;		/* Maximal packets in queue */
138	unsigned	divisor;	/* Hash divisor  */
139	unsigned	flows;		/* Maximal number of flows  */
140};
141
142/*
143 *  NOTE: limit, divisor and flows are hardwired to code at the moment.
144 *
145 *	limit=flows=128, divisor=1024;
146 *
147 *	The only reason for this is efficiency, it is possible
148 *	to change these parameters in compile time.
149 */
150
151/* RED section */
152
153enum
154{
155	TCA_RED_UNSPEC,
156	TCA_RED_PARMS,
157	TCA_RED_STAB,
158	__TCA_RED_MAX,
159};
160
161#define TCA_RED_MAX (__TCA_RED_MAX - 1)
162
163struct tc_red_qopt
164{
165	__u32		limit;		/* HARD maximal queue length (bytes)	*/
166	__u32		qth_min;	/* Min average length threshold (bytes) */
167	__u32		qth_max;	/* Max average length threshold (bytes) */
168	unsigned char   Wlog;		/* log(W)		*/
169	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
170	unsigned char   Scell_log;	/* cell size for idle damping */
171	unsigned char	flags;
172#define TC_RED_ECN	1
173#define TC_RED_HARDDROP	2
174};
175
176struct tc_red_xstats
177{
178	__u32           early;          /* Early drops */
179	__u32           pdrop;          /* Drops due to queue limits */
180	__u32           other;          /* Drops due to drop() calls */
181	__u32           marked;         /* Marked packets */
182};
183
184/* GRED section */
185
186#define MAX_DPs 16
187
188enum
189{
190       TCA_GRED_UNSPEC,
191       TCA_GRED_PARMS,
192       TCA_GRED_STAB,
193       TCA_GRED_DPS,
194	   __TCA_GRED_MAX,
195};
196
197#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
198
199struct tc_gred_qopt
200{
201	__u32		limit;        /* HARD maximal queue length (bytes)    */
202	__u32		qth_min;      /* Min average length threshold (bytes) */
203	__u32		qth_max;      /* Max average length threshold (bytes) */
204	__u32		DP;           /* upto 2^32 DPs */
205	__u32		backlog;
206	__u32		qave;
207	__u32		forced;
208	__u32		early;
209	__u32		other;
210	__u32		pdrop;
211	__u8		Wlog;         /* log(W)               */
212	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
213	__u8		Scell_log;    /* cell size for idle damping */
214	__u8		prio;         /* prio of this VQ */
215	__u32		packets;
216	__u32		bytesin;
217};
218
219/* gred setup */
220struct tc_gred_sopt
221{
222	__u32		DPs;
223	__u32		def_DP;
224	__u8		grio;
225	__u8		flags;
226	__u16		pad1;
227};
228
229/* HTB section */
230#define TC_HTB_NUMPRIO		8
231#define TC_HTB_MAXDEPTH		8
232#define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
233
234struct tc_htb_opt
235{
236	struct tc_ratespec 	rate;
237	struct tc_ratespec 	ceil;
238	__u32	buffer;
239	__u32	cbuffer;
240	__u32	quantum;
241	__u32	level;		/* out only */
242	__u32	prio;
243};
244struct tc_htb_glob
245{
246	__u32 version;		/* to match HTB/TC */
247    	__u32 rate2quantum;	/* bps->quantum divisor */
248    	__u32 defcls;		/* default class number */
249	__u32 debug;		/* debug flags */
250
251	/* stats */
252	__u32 direct_pkts; /* count of non shapped packets */
253};
254enum
255{
256	TCA_HTB_UNSPEC,
257	TCA_HTB_PARMS,
258	TCA_HTB_INIT,
259	TCA_HTB_CTAB,
260	TCA_HTB_RTAB,
261	__TCA_HTB_MAX,
262};
263
264#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
265
266struct tc_htb_xstats
267{
268	__u32 lends;
269	__u32 borrows;
270	__u32 giants;	/* too big packets (rate will not be accurate) */
271	__u32 tokens;
272	__u32 ctokens;
273};
274
275/* HFSC section */
276
277struct tc_hfsc_qopt
278{
279	__u16	defcls;		/* default class */
280};
281
282struct tc_service_curve
283{
284	__u32	m1;		/* slope of the first segment in bps */
285	__u32	d;		/* x-projection of the first segment in us */
286	__u32	m2;		/* slope of the second segment in bps */
287};
288
289struct tc_hfsc_stats
290{
291	__u64	work;		/* total work done */
292	__u64	rtwork;		/* work done by real-time criteria */
293	__u32	period;		/* current period */
294	__u32	level;		/* class level in hierarchy */
295};
296
297enum
298{
299	TCA_HFSC_UNSPEC,
300	TCA_HFSC_RSC,
301	TCA_HFSC_FSC,
302	TCA_HFSC_USC,
303	__TCA_HFSC_MAX,
304};
305
306#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
307
308
309/* CBQ section */
310
311#define TC_CBQ_MAXPRIO		8
312#define TC_CBQ_MAXLEVEL		8
313#define TC_CBQ_DEF_EWMA		5
314
315struct tc_cbq_lssopt
316{
317	unsigned char	change;
318	unsigned char	flags;
319#define TCF_CBQ_LSS_BOUNDED	1
320#define TCF_CBQ_LSS_ISOLATED	2
321	unsigned char  	ewma_log;
322	unsigned char  	level;
323#define TCF_CBQ_LSS_FLAGS	1
324#define TCF_CBQ_LSS_EWMA	2
325#define TCF_CBQ_LSS_MAXIDLE	4
326#define TCF_CBQ_LSS_MINIDLE	8
327#define TCF_CBQ_LSS_OFFTIME	0x10
328#define TCF_CBQ_LSS_AVPKT	0x20
329	__u32		maxidle;
330	__u32		minidle;
331	__u32		offtime;
332	__u32		avpkt;
333};
334
335struct tc_cbq_wrropt
336{
337	unsigned char	flags;
338	unsigned char	priority;
339	unsigned char	cpriority;
340	unsigned char	__reserved;
341	__u32		allot;
342	__u32		weight;
343};
344
345struct tc_cbq_ovl
346{
347	unsigned char	strategy;
348#define	TC_CBQ_OVL_CLASSIC	0
349#define	TC_CBQ_OVL_DELAY	1
350#define	TC_CBQ_OVL_LOWPRIO	2
351#define	TC_CBQ_OVL_DROP		3
352#define	TC_CBQ_OVL_RCLASSIC	4
353	unsigned char	priority2;
354	__u16		pad;
355	__u32		penalty;
356};
357
358struct tc_cbq_police
359{
360	unsigned char	police;
361	unsigned char	__res1;
362	unsigned short	__res2;
363};
364
365struct tc_cbq_fopt
366{
367	__u32		split;
368	__u32		defmap;
369	__u32		defchange;
370};
371
372struct tc_cbq_xstats
373{
374	__u32		borrows;
375	__u32		overactions;
376	__s32		avgidle;
377	__s32		undertime;
378};
379
380enum
381{
382	TCA_CBQ_UNSPEC,
383	TCA_CBQ_LSSOPT,
384	TCA_CBQ_WRROPT,
385	TCA_CBQ_FOPT,
386	TCA_CBQ_OVL_STRATEGY,
387	TCA_CBQ_RATE,
388	TCA_CBQ_RTAB,
389	TCA_CBQ_POLICE,
390	__TCA_CBQ_MAX,
391};
392
393#define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
394
395/* dsmark section */
396
397enum {
398	TCA_DSMARK_UNSPEC,
399	TCA_DSMARK_INDICES,
400	TCA_DSMARK_DEFAULT_INDEX,
401	TCA_DSMARK_SET_TC_INDEX,
402	TCA_DSMARK_MASK,
403	TCA_DSMARK_VALUE,
404	__TCA_DSMARK_MAX,
405};
406
407#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
408
409/* ATM  section */
410
411enum {
412	TCA_ATM_UNSPEC,
413	TCA_ATM_FD,		/* file/socket descriptor */
414	TCA_ATM_PTR,		/* pointer to descriptor - later */
415	TCA_ATM_HDR,		/* LL header */
416	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
417	TCA_ATM_ADDR,		/* PVC address (for output only) */
418	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
419	__TCA_ATM_MAX,
420};
421
422#define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
423
424/* Network emulator */
425
426enum
427{
428	TCA_NETEM_UNSPEC,
429	TCA_NETEM_CORR,
430	TCA_NETEM_DELAY_DIST,
431	TCA_NETEM_REORDER,
432	TCA_NETEM_CORRUPT,
433	__TCA_NETEM_MAX,
434};
435
436#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
437
438struct tc_netem_qopt
439{
440	__u32	latency;	/* added delay (us) */
441	__u32   limit;		/* fifo limit (packets) */
442	__u32	loss;		/* random packet loss (0=none ~0=100%) */
443	__u32	gap;		/* re-ordering gap (0 for none) */
444	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
445	__u32	jitter;		/* random jitter in latency (us) */
446};
447
448struct tc_netem_corr
449{
450	__u32	delay_corr;	/* delay correlation */
451	__u32	loss_corr;	/* packet loss correlation */
452	__u32	dup_corr;	/* duplicate correlation  */
453};
454
455struct tc_netem_reorder
456{
457	__u32	probability;
458	__u32	correlation;
459};
460
461struct tc_netem_corrupt
462{
463	__u32	probability;
464	__u32	correlation;
465};
466
467#define NETEM_DIST_SCALE	8192
468
469#endif
470