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