pkt_sched.h revision a08d2590a042f8173713cb3b1bf7bb7aeb3ce584
1#ifndef __LINUX_PKT_SCHED_H
2#define __LINUX_PKT_SCHED_H
3
4#include <linux/types.h>
5
6/* Logical priority bands not depending on specific packet scheduler.
7   Every scheduler will map them to real traffic classes, if it has
8   no more precise mechanism to classify packets.
9
10   These numbers have no special meaning, though their coincidence
11   with obsolete IPv6 values is not occasional :-). New IPv6 drafts
12   preferred full anarchy inspired by diffserv group.
13
14   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
15   class, actually, as rule it will be handled with more care than
16   filler or even bulk.
17 */
18
19#define TC_PRIO_BESTEFFORT		0
20#define TC_PRIO_FILLER			1
21#define TC_PRIO_BULK			2
22#define TC_PRIO_INTERACTIVE_BULK	4
23#define TC_PRIO_INTERACTIVE		6
24#define TC_PRIO_CONTROL			7
25
26#define TC_PRIO_MAX			15
27
28/* Generic queue statistics, available for all the elements.
29   Particular schedulers may have also their private records.
30 */
31
32struct tc_stats {
33	__u64	bytes;			/* Number of enqueued bytes */
34	__u32	packets;		/* Number of enqueued packets	*/
35	__u32	drops;			/* Packets dropped because of lack of resources */
36	__u32	overlimits;		/* Number of throttle events when this
37					 * flow goes out of allocated bandwidth */
38	__u32	bps;			/* Current flow byte rate */
39	__u32	pps;			/* Current flow packet rate */
40	__u32	qlen;
41	__u32	backlog;
42};
43
44struct tc_estimator {
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	unsigned char	cell_log;
78	unsigned char	__reserved;
79	unsigned short	overhead;
80	short		cell_align;
81	unsigned short	mpu;
82	__u32		rate;
83};
84
85#define TC_RTAB_SIZE	1024
86
87struct tc_sizespec {
88	unsigned char	cell_log;
89	unsigned char	size_log;
90	short		cell_align;
91	int		overhead;
92	unsigned int	linklayer;
93	unsigned int	mpu;
94	unsigned int	mtu;
95	unsigned int	tsize;
96};
97
98enum {
99	TCA_STAB_UNSPEC,
100	TCA_STAB_BASE,
101	TCA_STAB_DATA,
102	__TCA_STAB_MAX
103};
104
105#define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
106
107/* FIFO section */
108
109struct tc_fifo_qopt {
110	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
111};
112
113/* PRIO section */
114
115#define TCQ_PRIO_BANDS	16
116#define TCQ_MIN_PRIO_BANDS 2
117
118struct tc_prio_qopt {
119	int	bands;			/* Number of bands */
120	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
121};
122
123/* MULTIQ section */
124
125struct tc_multiq_qopt {
126	__u16	bands;			/* Number of bands */
127	__u16	max_bands;		/* Maximum number of queues */
128};
129
130/* TBF section */
131
132struct tc_tbf_qopt {
133	struct tc_ratespec rate;
134	struct tc_ratespec peakrate;
135	__u32		limit;
136	__u32		buffer;
137	__u32		mtu;
138};
139
140enum {
141	TCA_TBF_UNSPEC,
142	TCA_TBF_PARMS,
143	TCA_TBF_RTAB,
144	TCA_TBF_PTAB,
145	__TCA_TBF_MAX,
146};
147
148#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
149
150
151/* TEQL section */
152
153/* TEQL does not require any parameters */
154
155/* SFQ section */
156
157struct tc_sfq_qopt {
158	unsigned	quantum;	/* Bytes per round allocated to flow */
159	int		perturb_period;	/* Period of hash perturbation */
160	__u32		limit;		/* Maximal packets in queue */
161	unsigned	divisor;	/* Hash divisor  */
162	unsigned	flows;		/* Maximal number of flows  */
163};
164
165struct tc_sfq_qopt_v1 {
166	struct tc_sfq_qopt v0;
167	unsigned int	depth;		/* max number of packets per flow */
168	unsigned int	headdrop;
169};
170
171
172struct tc_sfq_xstats {
173	__s32		allot;
174};
175
176/* RED section */
177
178enum {
179	TCA_RED_UNSPEC,
180	TCA_RED_PARMS,
181	TCA_RED_STAB,
182	TCA_RED_MAX_P,
183	__TCA_RED_MAX,
184};
185
186#define TCA_RED_MAX (__TCA_RED_MAX - 1)
187
188struct tc_red_qopt {
189	__u32		limit;		/* HARD maximal queue length (bytes)	*/
190	__u32		qth_min;	/* Min average length threshold (bytes) */
191	__u32		qth_max;	/* Max average length threshold (bytes) */
192	unsigned char   Wlog;		/* log(W)		*/
193	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
194	unsigned char   Scell_log;	/* cell size for idle damping */
195	unsigned char	flags;
196#define TC_RED_ECN		1
197#define TC_RED_HARDDROP		2
198#define TC_RED_ADAPTATIVE	4
199};
200
201struct tc_red_xstats {
202	__u32           early;          /* Early drops */
203	__u32           pdrop;          /* Drops due to queue limits */
204	__u32           other;          /* Drops due to drop() calls */
205	__u32           marked;         /* Marked packets */
206};
207
208/* GRED section */
209
210#define MAX_DPs 16
211
212enum {
213       TCA_GRED_UNSPEC,
214       TCA_GRED_PARMS,
215       TCA_GRED_STAB,
216       TCA_GRED_DPS,
217       TCA_GRED_MAX_P,
218	   __TCA_GRED_MAX,
219};
220
221#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
222
223struct tc_gred_qopt {
224	__u32		limit;        /* HARD maximal queue length (bytes)    */
225	__u32		qth_min;      /* Min average length threshold (bytes) */
226	__u32		qth_max;      /* Max average length threshold (bytes) */
227	__u32		DP;           /* up to 2^32 DPs */
228	__u32		backlog;
229	__u32		qave;
230	__u32		forced;
231	__u32		early;
232	__u32		other;
233	__u32		pdrop;
234	__u8		Wlog;         /* log(W)               */
235	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
236	__u8		Scell_log;    /* cell size for idle damping */
237	__u8		prio;         /* prio of this VQ */
238	__u32		packets;
239	__u32		bytesin;
240};
241
242/* gred setup */
243struct tc_gred_sopt {
244	__u32		DPs;
245	__u32		def_DP;
246	__u8		grio;
247	__u8		flags;
248	__u16		pad1;
249};
250
251/* CHOKe section */
252
253enum {
254	TCA_CHOKE_UNSPEC,
255	TCA_CHOKE_PARMS,
256	TCA_CHOKE_STAB,
257	TCA_CHOKE_MAX_P,
258	__TCA_CHOKE_MAX,
259};
260
261#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
262
263struct tc_choke_qopt {
264	__u32		limit;		/* Hard queue length (packets)	*/
265	__u32		qth_min;	/* Min average threshold (packets) */
266	__u32		qth_max;	/* Max average threshold (packets) */
267	unsigned char   Wlog;		/* log(W)		*/
268	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
269	unsigned char   Scell_log;	/* cell size for idle damping */
270	unsigned char	flags;		/* see RED flags */
271};
272
273struct tc_choke_xstats {
274	__u32		early;          /* Early drops */
275	__u32		pdrop;          /* Drops due to queue limits */
276	__u32		other;          /* Drops due to drop() calls */
277	__u32		marked;         /* Marked packets */
278	__u32		matched;	/* Drops due to flow match */
279};
280
281/* HTB section */
282#define TC_HTB_NUMPRIO		8
283#define TC_HTB_MAXDEPTH		8
284#define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
285
286struct tc_htb_opt {
287	struct tc_ratespec 	rate;
288	struct tc_ratespec 	ceil;
289	__u32	buffer;
290	__u32	cbuffer;
291	__u32	quantum;
292	__u32	level;		/* out only */
293	__u32	prio;
294};
295struct tc_htb_glob {
296	__u32 version;		/* to match HTB/TC */
297    	__u32 rate2quantum;	/* bps->quantum divisor */
298    	__u32 defcls;		/* default class number */
299	__u32 debug;		/* debug flags */
300
301	/* stats */
302	__u32 direct_pkts; /* count of non shaped packets */
303};
304enum {
305	TCA_HTB_UNSPEC,
306	TCA_HTB_PARMS,
307	TCA_HTB_INIT,
308	TCA_HTB_CTAB,
309	TCA_HTB_RTAB,
310	__TCA_HTB_MAX,
311};
312
313#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
314
315struct tc_htb_xstats {
316	__u32 lends;
317	__u32 borrows;
318	__u32 giants;	/* too big packets (rate will not be accurate) */
319	__u32 tokens;
320	__u32 ctokens;
321};
322
323/* HFSC section */
324
325struct tc_hfsc_qopt {
326	__u16	defcls;		/* default class */
327};
328
329struct tc_service_curve {
330	__u32	m1;		/* slope of the first segment in bps */
331	__u32	d;		/* x-projection of the first segment in us */
332	__u32	m2;		/* slope of the second segment in bps */
333};
334
335struct tc_hfsc_stats {
336	__u64	work;		/* total work done */
337	__u64	rtwork;		/* work done by real-time criteria */
338	__u32	period;		/* current period */
339	__u32	level;		/* class level in hierarchy */
340};
341
342enum {
343	TCA_HFSC_UNSPEC,
344	TCA_HFSC_RSC,
345	TCA_HFSC_FSC,
346	TCA_HFSC_USC,
347	__TCA_HFSC_MAX,
348};
349
350#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
351
352
353/* CBQ section */
354
355#define TC_CBQ_MAXPRIO		8
356#define TC_CBQ_MAXLEVEL		8
357#define TC_CBQ_DEF_EWMA		5
358
359struct tc_cbq_lssopt {
360	unsigned char	change;
361	unsigned char	flags;
362#define TCF_CBQ_LSS_BOUNDED	1
363#define TCF_CBQ_LSS_ISOLATED	2
364	unsigned char  	ewma_log;
365	unsigned char  	level;
366#define TCF_CBQ_LSS_FLAGS	1
367#define TCF_CBQ_LSS_EWMA	2
368#define TCF_CBQ_LSS_MAXIDLE	4
369#define TCF_CBQ_LSS_MINIDLE	8
370#define TCF_CBQ_LSS_OFFTIME	0x10
371#define TCF_CBQ_LSS_AVPKT	0x20
372	__u32		maxidle;
373	__u32		minidle;
374	__u32		offtime;
375	__u32		avpkt;
376};
377
378struct tc_cbq_wrropt {
379	unsigned char	flags;
380	unsigned char	priority;
381	unsigned char	cpriority;
382	unsigned char	__reserved;
383	__u32		allot;
384	__u32		weight;
385};
386
387struct tc_cbq_ovl {
388	unsigned char	strategy;
389#define	TC_CBQ_OVL_CLASSIC	0
390#define	TC_CBQ_OVL_DELAY	1
391#define	TC_CBQ_OVL_LOWPRIO	2
392#define	TC_CBQ_OVL_DROP		3
393#define	TC_CBQ_OVL_RCLASSIC	4
394	unsigned char	priority2;
395	__u16		pad;
396	__u32		penalty;
397};
398
399struct tc_cbq_police {
400	unsigned char	police;
401	unsigned char	__res1;
402	unsigned short	__res2;
403};
404
405struct tc_cbq_fopt {
406	__u32		split;
407	__u32		defmap;
408	__u32		defchange;
409};
410
411struct tc_cbq_xstats {
412	__u32		borrows;
413	__u32		overactions;
414	__s32		avgidle;
415	__s32		undertime;
416};
417
418enum {
419	TCA_CBQ_UNSPEC,
420	TCA_CBQ_LSSOPT,
421	TCA_CBQ_WRROPT,
422	TCA_CBQ_FOPT,
423	TCA_CBQ_OVL_STRATEGY,
424	TCA_CBQ_RATE,
425	TCA_CBQ_RTAB,
426	TCA_CBQ_POLICE,
427	__TCA_CBQ_MAX,
428};
429
430#define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
431
432/* dsmark section */
433
434enum {
435	TCA_DSMARK_UNSPEC,
436	TCA_DSMARK_INDICES,
437	TCA_DSMARK_DEFAULT_INDEX,
438	TCA_DSMARK_SET_TC_INDEX,
439	TCA_DSMARK_MASK,
440	TCA_DSMARK_VALUE,
441	__TCA_DSMARK_MAX,
442};
443
444#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
445
446/* ATM  section */
447
448enum {
449	TCA_ATM_UNSPEC,
450	TCA_ATM_FD,		/* file/socket descriptor */
451	TCA_ATM_PTR,		/* pointer to descriptor - later */
452	TCA_ATM_HDR,		/* LL header */
453	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
454	TCA_ATM_ADDR,		/* PVC address (for output only) */
455	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
456	__TCA_ATM_MAX,
457};
458
459#define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
460
461/* Network emulator */
462
463enum {
464	TCA_NETEM_UNSPEC,
465	TCA_NETEM_CORR,
466	TCA_NETEM_DELAY_DIST,
467	TCA_NETEM_REORDER,
468	TCA_NETEM_CORRUPT,
469	TCA_NETEM_LOSS,
470	TCA_NETEM_RATE,
471	__TCA_NETEM_MAX,
472};
473
474#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
475
476struct tc_netem_qopt {
477	__u32	latency;	/* added delay (us) */
478	__u32   limit;		/* fifo limit (packets) */
479	__u32	loss;		/* random packet loss (0=none ~0=100%) */
480	__u32	gap;		/* re-ordering gap (0 for none) */
481	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
482	__u32	jitter;		/* random jitter in latency (us) */
483};
484
485struct tc_netem_corr {
486	__u32	delay_corr;	/* delay correlation */
487	__u32	loss_corr;	/* packet loss correlation */
488	__u32	dup_corr;	/* duplicate correlation  */
489};
490
491struct tc_netem_reorder {
492	__u32	probability;
493	__u32	correlation;
494};
495
496struct tc_netem_corrupt {
497	__u32	probability;
498	__u32	correlation;
499};
500
501struct tc_netem_rate {
502	__u32	rate;	/* byte/s */
503	__s32	packet_overhead;
504	__u32	cell_size;
505	__s32	cell_overhead;
506};
507
508enum {
509	NETEM_LOSS_UNSPEC,
510	NETEM_LOSS_GI,		/* General Intuitive - 4 state model */
511	NETEM_LOSS_GE,		/* Gilbert Elliot models */
512	__NETEM_LOSS_MAX
513};
514#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
515
516/* State transition probabilities for 4 state model */
517struct tc_netem_gimodel {
518	__u32	p13;
519	__u32	p31;
520	__u32	p32;
521	__u32	p14;
522	__u32	p23;
523};
524
525/* Gilbert-Elliot models */
526struct tc_netem_gemodel {
527	__u32 p;
528	__u32 r;
529	__u32 h;
530	__u32 k1;
531};
532
533#define NETEM_DIST_SCALE	8192
534#define NETEM_DIST_MAX		16384
535
536/* DRR */
537
538enum {
539	TCA_DRR_UNSPEC,
540	TCA_DRR_QUANTUM,
541	__TCA_DRR_MAX
542};
543
544#define TCA_DRR_MAX	(__TCA_DRR_MAX - 1)
545
546struct tc_drr_stats {
547	__u32	deficit;
548};
549
550/* MQPRIO */
551#define TC_QOPT_BITMASK 15
552#define TC_QOPT_MAX_QUEUE 16
553
554struct tc_mqprio_qopt {
555	__u8	num_tc;
556	__u8	prio_tc_map[TC_QOPT_BITMASK + 1];
557	__u8	hw;
558	__u16	count[TC_QOPT_MAX_QUEUE];
559	__u16	offset[TC_QOPT_MAX_QUEUE];
560};
561
562/* SFB */
563
564enum {
565	TCA_SFB_UNSPEC,
566	TCA_SFB_PARMS,
567	__TCA_SFB_MAX,
568};
569
570#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
571
572/*
573 * Note: increment, decrement are Q0.16 fixed-point values.
574 */
575struct tc_sfb_qopt {
576	__u32 rehash_interval;	/* delay between hash move, in ms */
577	__u32 warmup_time;	/* double buffering warmup time in ms (warmup_time < rehash_interval) */
578	__u32 max;		/* max len of qlen_min */
579	__u32 bin_size;		/* maximum queue length per bin */
580	__u32 increment;	/* probability increment, (d1 in Blue) */
581	__u32 decrement;	/* probability decrement, (d2 in Blue) */
582	__u32 limit;		/* max SFB queue length */
583	__u32 penalty_rate;	/* inelastic flows are rate limited to 'rate' pps */
584	__u32 penalty_burst;
585};
586
587struct tc_sfb_xstats {
588	__u32 earlydrop;
589	__u32 penaltydrop;
590	__u32 bucketdrop;
591	__u32 queuedrop;
592	__u32 childdrop; /* drops in child qdisc */
593	__u32 marked;
594	__u32 maxqlen;
595	__u32 maxprob;
596	__u32 avgprob;
597};
598
599#define SFB_MAX_PROB 0xFFFF
600
601/* QFQ */
602enum {
603	TCA_QFQ_UNSPEC,
604	TCA_QFQ_WEIGHT,
605	TCA_QFQ_LMAX,
606	__TCA_QFQ_MAX
607};
608
609#define TCA_QFQ_MAX	(__TCA_QFQ_MAX - 1)
610
611struct tc_qfq_stats {
612	__u32 weight;
613	__u32 lmax;
614};
615
616#endif
617