File: /usr/src/linux/include/linux/pkt_sched.h

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     
30     struct 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     #ifdef __KERNEL__
42     	spinlock_t *lock;
43     #endif
44     };
45     
46     struct tc_estimator
47     {
48     	char		interval;
49     	unsigned char	ewma_log;
50     };
51     
52     /* "Handles"
53        ---------
54     
55         All the traffic control objects have 32bit identifiers, or "handles".
56     
57         They can be considered as opaque numbers from user API viewpoint,
58         but actually they always consist of two fields: major and
59         minor numbers, which are interpreted by kernel specially,
60         that may be used by applications, though not recommended.
61     
62         F.e. qdisc handles always have minor number equal to zero,
63         classes (or flows) have major equal to parent qdisc major, and
64         minor uniquely identifying class inside qdisc.
65     
66         Macros to manipulate handles:
67      */
68     
69     #define TC_H_MAJ_MASK (0xFFFF0000U)
70     #define TC_H_MIN_MASK (0x0000FFFFU)
71     #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
72     #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
73     #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
74     
75     #define TC_H_UNSPEC	(0U)
76     #define TC_H_ROOT	(0xFFFFFFFFU)
77     #define TC_H_INGRESS    (0xFFFFFFF1U)
78     
79     struct tc_ratespec
80     {
81     	unsigned char	cell_log;
82     	unsigned char	__reserved;
83     	unsigned short	feature;
84     	short		addend;
85     	unsigned short	mpu;
86     	__u32		rate;
87     };
88     
89     /* FIFO section */
90     
91     struct tc_fifo_qopt
92     {
93     	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
94     };
95     
96     /* PRIO section */
97     
98     #define TCQ_PRIO_BANDS	16
99     
100     struct tc_prio_qopt
101     {
102     	int	bands;			/* Number of bands */
103     	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
104     };
105     
106     /* CSZ section */
107     
108     struct tc_csz_qopt
109     {
110     	int		flows;		/* Maximal number of guaranteed flows */
111     	unsigned char	R_log;		/* Fixed point position for round number */
112     	unsigned char	delta_log;	/* Log of maximal managed time interval */
113     	__u8		priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> CSZ band */
114     };
115     
116     struct tc_csz_copt
117     {
118     	struct tc_ratespec slice;
119     	struct tc_ratespec rate;
120     	struct tc_ratespec peakrate;
121     	__u32		limit;
122     	__u32		buffer;
123     	__u32		mtu;
124     };
125     
126     enum
127     {
128     	TCA_CSZ_UNSPEC,
129     	TCA_CSZ_PARMS,
130     	TCA_CSZ_RTAB,
131     	TCA_CSZ_PTAB,
132     };
133     
134     /* TBF section */
135     
136     struct tc_tbf_qopt
137     {
138     	struct tc_ratespec rate;
139     	struct tc_ratespec peakrate;
140     	__u32		limit;
141     	__u32		buffer;
142     	__u32		mtu;
143     };
144     
145     enum
146     {
147     	TCA_TBF_UNSPEC,
148     	TCA_TBF_PARMS,
149     	TCA_TBF_RTAB,
150     	TCA_TBF_PTAB,
151     };
152     
153     
154     /* TEQL section */
155     
156     /* TEQL does not require any parameters */
157     
158     /* SFQ section */
159     
160     struct tc_sfq_qopt
161     {
162     	unsigned	quantum;	/* Bytes per round allocated to flow */
163     	int		perturb_period;	/* Period of hash perturbation */
164     	__u32		limit;		/* Maximal packets in queue */
165     	unsigned	divisor;	/* Hash divisor  */
166     	unsigned	flows;		/* Maximal number of flows  */
167     };
168     
169     /*
170      *  NOTE: limit, divisor and flows are hardwired to code at the moment.
171      *
172      *	limit=flows=128, divisor=1024;
173      *
174      *	The only reason for this is efficiency, it is possible
175      *	to change these parameters in compile time.
176      */
177     
178     /* RED section */
179     
180     enum
181     {
182     	TCA_RED_UNSPEC,
183     	TCA_RED_PARMS,
184     	TCA_RED_STAB,
185     };
186     
187     struct tc_red_qopt
188     {
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     };
198     
199     struct tc_red_xstats
200     {
201     	__u32           early;          /* Early drops */
202     	__u32           pdrop;          /* Drops due to queue limits */
203     	__u32           other;          /* Drops due to drop() calls */
204     	__u32           marked;         /* Marked packets */
205     };
206     
207     /* GRED section */
208     
209     #define MAX_DPs 16
210     
211     enum
212     {
213            TCA_GRED_UNSPEC,
214            TCA_GRED_PARMS,
215            TCA_GRED_STAB,
216            TCA_GRED_DPS,
217     };
218     
219     #define TCA_SET_OFF TCA_GRED_PARMS
220     struct tc_gred_qopt
221     {
222            __u32           limit;          /* HARD maximal queue length (bytes)    
223     */
224            __u32           qth_min;        /* Min average length threshold (bytes) 
225     */
226            __u32           qth_max;        /* Max average length threshold (bytes) 
227     */
228            __u32           DP;             /* upto 2^32 DPs */
229            __u32           backlog;        
230            __u32           qave;   
231            __u32           forced; 
232            __u32           early;  
233            __u32           other;  
234            __u32           pdrop;  
235     
236            unsigned char   Wlog;           /* log(W)               */
237            unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
238            unsigned char   Scell_log;      /* cell size for idle damping */
239            __u8            prio;		/* prio of this VQ */
240            __u32	packets;
241            __u32	bytesin;
242     };
243     /* gred setup */
244     struct tc_gred_sopt
245     {
246            __u32           DPs;
247            __u32           def_DP;
248            __u8            grio;
249     };
250     
251     /* CBQ section */
252     
253     #define TC_CBQ_MAXPRIO		8
254     #define TC_CBQ_MAXLEVEL		8
255     #define TC_CBQ_DEF_EWMA		5
256     
257     struct tc_cbq_lssopt
258     {
259     	unsigned char	change;
260     	unsigned char	flags;
261     #define TCF_CBQ_LSS_BOUNDED	1
262     #define TCF_CBQ_LSS_ISOLATED	2
263     	unsigned char  	ewma_log;
264     	unsigned char  	level;
265     #define TCF_CBQ_LSS_FLAGS	1
266     #define TCF_CBQ_LSS_EWMA	2
267     #define TCF_CBQ_LSS_MAXIDLE	4
268     #define TCF_CBQ_LSS_MINIDLE	8
269     #define TCF_CBQ_LSS_OFFTIME	0x10
270     #define TCF_CBQ_LSS_AVPKT	0x20
271     	__u32		maxidle;
272     	__u32		minidle;
273     	__u32		offtime;
274     	__u32		avpkt;
275     };
276     
277     struct tc_cbq_wrropt
278     {
279     	unsigned char	flags;
280     	unsigned char	priority;
281     	unsigned char	cpriority;
282     	unsigned char	__reserved;
283     	__u32		allot;
284     	__u32		weight;
285     };
286     
287     struct tc_cbq_ovl
288     {
289     	unsigned char	strategy;
290     #define	TC_CBQ_OVL_CLASSIC	0
291     #define	TC_CBQ_OVL_DELAY	1
292     #define	TC_CBQ_OVL_LOWPRIO	2
293     #define	TC_CBQ_OVL_DROP		3
294     #define	TC_CBQ_OVL_RCLASSIC	4
295     	unsigned char	priority2;
296     	__u32		penalty;
297     };
298     
299     struct tc_cbq_police
300     {
301     	unsigned char	police;
302     	unsigned char	__res1;
303     	unsigned short	__res2;
304     };
305     
306     struct tc_cbq_fopt
307     {
308     	__u32		split;
309     	__u32		defmap;
310     	__u32		defchange;
311     };
312     
313     struct tc_cbq_xstats
314     {
315     	__u32		borrows;
316     	__u32		overactions;
317     	__s32		avgidle;
318     	__s32		undertime;
319     };
320     
321     enum
322     {
323     	TCA_CBQ_UNSPEC,
324     	TCA_CBQ_LSSOPT,
325     	TCA_CBQ_WRROPT,
326     	TCA_CBQ_FOPT,
327     	TCA_CBQ_OVL_STRATEGY,
328     	TCA_CBQ_RATE,
329     	TCA_CBQ_RTAB,
330     	TCA_CBQ_POLICE,
331     };
332     
333     #define TCA_CBQ_MAX	TCA_CBQ_POLICE
334     
335     /* dsmark section */
336     
337     enum {
338     	TCA_DSMARK_UNSPEC,
339     	TCA_DSMARK_INDICES,
340     	TCA_DSMARK_DEFAULT_INDEX,
341     	TCA_DSMARK_SET_TC_INDEX,
342     	TCA_DSMARK_MASK,
343     	TCA_DSMARK_VALUE
344     };
345     
346     #define TCA_DSMARK_MAX TCA_DSMARK_VALUE
347     
348     /* ATM  section */
349     
350     enum {
351     	TCA_ATM_UNSPEC,
352     	TCA_ATM_FD,		/* file/socket descriptor */
353     	TCA_ATM_PTR,		/* pointer to descriptor - later */
354     	TCA_ATM_HDR,		/* LL header */
355     	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
356     	TCA_ATM_ADDR,		/* PVC address (for output only) */
357     	TCA_ATM_STATE		/* VC state (ATM_VS_*; for output only) */
358     };
359     
360     #define TCA_ATM_MAX	TCA_ATM_STATE
361     
362     #endif
363