xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/pkt_sched.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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 };
42 
43 struct 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 
76 struct tc_ratespec
77 {
78 	unsigned char	cell_log;
79 	unsigned char	__reserved;
80 	unsigned short	overhead;
81 	short		cell_align;
82 	unsigned short	mpu;
83 	__u32		rate;
84 };
85 
86 #define TC_RTAB_SIZE	1024
87 
88 /* FIFO section */
89 
90 struct tc_fifo_qopt
91 {
92 	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
93 };
94 
95 /* PRIO section */
96 
97 #define TCQ_PRIO_BANDS	16
98 #define TCQ_MIN_PRIO_BANDS 2
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 enum
107 {
108 	TCA_PRIO_UNSPEC,
109 	TCA_PRIO_MQ,
110 	__TCA_PRIO_MAX
111 };
112 
113 #define TCA_PRIO_MAX    (__TCA_PRIO_MAX - 1)
114 
115 /* TBF section */
116 
117 struct tc_tbf_qopt
118 {
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_TBF_UNSPEC,
129 	TCA_TBF_PARMS,
130 	TCA_TBF_RTAB,
131 	TCA_TBF_PTAB,
132 	__TCA_TBF_MAX,
133 };
134 
135 #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
136 
137 
138 /* TEQL section */
139 
140 /* TEQL does not require any parameters */
141 
142 /* SFQ section */
143 
144 struct tc_sfq_qopt
145 {
146 	unsigned	quantum;	/* Bytes per round allocated to flow */
147 	int		perturb_period;	/* Period of hash perturbation */
148 	__u32		limit;		/* Maximal packets in queue */
149 	unsigned	divisor;	/* Hash divisor  */
150 	unsigned	flows;		/* Maximal number of flows  */
151 };
152 
153 struct tc_sfq_xstats
154 {
155 	__s32		allot;
156 };
157 
158 /*
159  *  NOTE: limit, divisor and flows are hardwired to code at the moment.
160  *
161  *	limit=flows=128, divisor=1024;
162  *
163  *	The only reason for this is efficiency, it is possible
164  *	to change these parameters in compile time.
165  */
166 
167 /* RED section */
168 
169 enum
170 {
171 	TCA_RED_UNSPEC,
172 	TCA_RED_PARMS,
173 	TCA_RED_STAB,
174 	__TCA_RED_MAX,
175 };
176 
177 #define TCA_RED_MAX (__TCA_RED_MAX - 1)
178 
179 struct tc_red_qopt
180 {
181 	__u32		limit;		/* HARD maximal queue length (bytes)	*/
182 	__u32		qth_min;	/* Min average length threshold (bytes) */
183 	__u32		qth_max;	/* Max average length threshold (bytes) */
184 	unsigned char   Wlog;		/* log(W)		*/
185 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
186 	unsigned char   Scell_log;	/* cell size for idle damping */
187 	unsigned char	flags;
188 #define TC_RED_ECN	1
189 #define TC_RED_HARDDROP	2
190 };
191 
192 struct tc_red_xstats
193 {
194 	__u32           early;          /* Early drops */
195 	__u32           pdrop;          /* Drops due to queue limits */
196 	__u32           other;          /* Drops due to drop() calls */
197 	__u32           marked;         /* Marked packets */
198 };
199 
200 /* GRED section */
201 
202 #define MAX_DPs 16
203 
204 enum
205 {
206        TCA_GRED_UNSPEC,
207        TCA_GRED_PARMS,
208        TCA_GRED_STAB,
209        TCA_GRED_DPS,
210 	   __TCA_GRED_MAX,
211 };
212 
213 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
214 
215 struct tc_gred_qopt
216 {
217 	__u32		limit;        /* HARD maximal queue length (bytes)    */
218 	__u32		qth_min;      /* Min average length threshold (bytes) */
219 	__u32		qth_max;      /* Max average length threshold (bytes) */
220 	__u32		DP;           /* upto 2^32 DPs */
221 	__u32		backlog;
222 	__u32		qave;
223 	__u32		forced;
224 	__u32		early;
225 	__u32		other;
226 	__u32		pdrop;
227 	__u8		Wlog;         /* log(W)               */
228 	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
229 	__u8		Scell_log;    /* cell size for idle damping */
230 	__u8		prio;         /* prio of this VQ */
231 	__u32		packets;
232 	__u32		bytesin;
233 };
234 
235 /* gred setup */
236 struct tc_gred_sopt
237 {
238 	__u32		DPs;
239 	__u32		def_DP;
240 	__u8		grio;
241 	__u8		flags;
242 	__u16		pad1;
243 };
244 
245 /* HTB section */
246 #define TC_HTB_NUMPRIO		8
247 #define TC_HTB_MAXDEPTH		8
248 #define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
249 
250 struct tc_htb_opt
251 {
252 	struct tc_ratespec 	rate;
253 	struct tc_ratespec 	ceil;
254 	__u32	buffer;
255 	__u32	cbuffer;
256 	__u32	quantum;
257 	__u32	level;		/* out only */
258 	__u32	prio;
259 };
260 struct tc_htb_glob
261 {
262 	__u32 version;		/* to match HTB/TC */
263     	__u32 rate2quantum;	/* bps->quantum divisor */
264     	__u32 defcls;		/* default class number */
265 	__u32 debug;		/* debug flags */
266 
267 	/* stats */
268 	__u32 direct_pkts; /* count of non shapped packets */
269 };
270 enum
271 {
272 	TCA_HTB_UNSPEC,
273 	TCA_HTB_PARMS,
274 	TCA_HTB_INIT,
275 	TCA_HTB_CTAB,
276 	TCA_HTB_RTAB,
277 	__TCA_HTB_MAX,
278 };
279 
280 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
281 
282 struct tc_htb_xstats
283 {
284 	__u32 lends;
285 	__u32 borrows;
286 	__u32 giants;	/* too big packets (rate will not be accurate) */
287 	__u32 tokens;
288 	__u32 ctokens;
289 };
290 
291 /* HFSC section */
292 
293 struct tc_hfsc_qopt
294 {
295 	__u16	defcls;		/* default class */
296 };
297 
298 struct tc_service_curve
299 {
300 	__u32	m1;		/* slope of the first segment in bps */
301 	__u32	d;		/* x-projection of the first segment in us */
302 	__u32	m2;		/* slope of the second segment in bps */
303 };
304 
305 struct tc_hfsc_stats
306 {
307 	__u64	work;		/* total work done */
308 	__u64	rtwork;		/* work done by real-time criteria */
309 	__u32	period;		/* current period */
310 	__u32	level;		/* class level in hierarchy */
311 };
312 
313 enum
314 {
315 	TCA_HFSC_UNSPEC,
316 	TCA_HFSC_RSC,
317 	TCA_HFSC_FSC,
318 	TCA_HFSC_USC,
319 	__TCA_HFSC_MAX,
320 };
321 
322 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
323 
324 
325 /* CBQ section */
326 
327 #define TC_CBQ_MAXPRIO		8
328 #define TC_CBQ_MAXLEVEL		8
329 #define TC_CBQ_DEF_EWMA		5
330 
331 struct tc_cbq_lssopt
332 {
333 	unsigned char	change;
334 	unsigned char	flags;
335 #define TCF_CBQ_LSS_BOUNDED	1
336 #define TCF_CBQ_LSS_ISOLATED	2
337 	unsigned char  	ewma_log;
338 	unsigned char  	level;
339 #define TCF_CBQ_LSS_FLAGS	1
340 #define TCF_CBQ_LSS_EWMA	2
341 #define TCF_CBQ_LSS_MAXIDLE	4
342 #define TCF_CBQ_LSS_MINIDLE	8
343 #define TCF_CBQ_LSS_OFFTIME	0x10
344 #define TCF_CBQ_LSS_AVPKT	0x20
345 	__u32		maxidle;
346 	__u32		minidle;
347 	__u32		offtime;
348 	__u32		avpkt;
349 };
350 
351 struct tc_cbq_wrropt
352 {
353 	unsigned char	flags;
354 	unsigned char	priority;
355 	unsigned char	cpriority;
356 	unsigned char	__reserved;
357 	__u32		allot;
358 	__u32		weight;
359 };
360 
361 struct tc_cbq_ovl
362 {
363 	unsigned char	strategy;
364 #define	TC_CBQ_OVL_CLASSIC	0
365 #define	TC_CBQ_OVL_DELAY	1
366 #define	TC_CBQ_OVL_LOWPRIO	2
367 #define	TC_CBQ_OVL_DROP		3
368 #define	TC_CBQ_OVL_RCLASSIC	4
369 	unsigned char	priority2;
370 	__u16		pad;
371 	__u32		penalty;
372 };
373 
374 struct tc_cbq_police
375 {
376 	unsigned char	police;
377 	unsigned char	__res1;
378 	unsigned short	__res2;
379 };
380 
381 struct tc_cbq_fopt
382 {
383 	__u32		split;
384 	__u32		defmap;
385 	__u32		defchange;
386 };
387 
388 struct tc_cbq_xstats
389 {
390 	__u32		borrows;
391 	__u32		overactions;
392 	__s32		avgidle;
393 	__s32		undertime;
394 };
395 
396 enum
397 {
398 	TCA_CBQ_UNSPEC,
399 	TCA_CBQ_LSSOPT,
400 	TCA_CBQ_WRROPT,
401 	TCA_CBQ_FOPT,
402 	TCA_CBQ_OVL_STRATEGY,
403 	TCA_CBQ_RATE,
404 	TCA_CBQ_RTAB,
405 	TCA_CBQ_POLICE,
406 	__TCA_CBQ_MAX,
407 };
408 
409 #define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
410 
411 /* dsmark section */
412 
413 enum {
414 	TCA_DSMARK_UNSPEC,
415 	TCA_DSMARK_INDICES,
416 	TCA_DSMARK_DEFAULT_INDEX,
417 	TCA_DSMARK_SET_TC_INDEX,
418 	TCA_DSMARK_MASK,
419 	TCA_DSMARK_VALUE,
420 	__TCA_DSMARK_MAX,
421 };
422 
423 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
424 
425 /* ATM  section */
426 
427 enum {
428 	TCA_ATM_UNSPEC,
429 	TCA_ATM_FD,		/* file/socket descriptor */
430 	TCA_ATM_PTR,		/* pointer to descriptor - later */
431 	TCA_ATM_HDR,		/* LL header */
432 	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
433 	TCA_ATM_ADDR,		/* PVC address (for output only) */
434 	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
435 	__TCA_ATM_MAX,
436 };
437 
438 #define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
439 
440 /* Network emulator */
441 
442 enum
443 {
444 	TCA_NETEM_UNSPEC,
445 	TCA_NETEM_CORR,
446 	TCA_NETEM_DELAY_DIST,
447 	TCA_NETEM_REORDER,
448 	TCA_NETEM_CORRUPT,
449 	__TCA_NETEM_MAX,
450 };
451 
452 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
453 
454 struct tc_netem_qopt
455 {
456 	__u32	latency;	/* added delay (us) */
457 	__u32   limit;		/* fifo limit (packets) */
458 	__u32	loss;		/* random packet loss (0=none ~0=100%) */
459 	__u32	gap;		/* re-ordering gap (0 for none) */
460 	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
461 	__u32	jitter;		/* random jitter in latency (us) */
462 };
463 
464 struct tc_netem_corr
465 {
466 	__u32	delay_corr;	/* delay correlation */
467 	__u32	loss_corr;	/* packet loss correlation */
468 	__u32	dup_corr;	/* duplicate correlation  */
469 };
470 
471 struct tc_netem_reorder
472 {
473 	__u32	probability;
474 	__u32	correlation;
475 };
476 
477 struct tc_netem_corrupt
478 {
479 	__u32	probability;
480 	__u32	correlation;
481 };
482 
483 #define NETEM_DIST_SCALE	8192
484 
485 #endif
486