]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - include/linux/pkt_sched.h
Merge tag 'spi-for-linus' of git://git.secretlab.ca/git/linux-2.6
[karo-tx-linux.git] / include / linux / pkt_sched.h
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
32 struct 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
44 struct 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
76 struct 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
87 struct 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
98 enum {
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
109 struct 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
118 struct 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
125 struct tc_multiq_qopt {
126         __u16   bands;                  /* Number of bands */
127         __u16   max_bands;              /* Maximum number of queues */
128 };
129
130 /* TBF section */
131
132 struct tc_tbf_qopt {
133         struct tc_ratespec rate;
134         struct tc_ratespec peakrate;
135         __u32           limit;
136         __u32           buffer;
137         __u32           mtu;
138 };
139
140 enum {
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
157 struct 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
165 struct tc_sfqred_stats {
166         __u32           prob_drop;      /* Early drops, below max threshold */
167         __u32           forced_drop;    /* Early drops, after max threshold */
168         __u32           prob_mark;      /* Marked packets, below max threshold */
169         __u32           forced_mark;    /* Marked packets, after max threshold */
170         __u32           prob_mark_head; /* Marked packets, below max threshold */
171         __u32           forced_mark_head;/* Marked packets, after max threshold */
172 };
173
174 struct tc_sfq_qopt_v1 {
175         struct tc_sfq_qopt v0;
176         unsigned int    depth;          /* max number of packets per flow */
177         unsigned int    headdrop;
178 /* SFQRED parameters */
179         __u32           limit;          /* HARD maximal flow queue length (bytes) */
180         __u32           qth_min;        /* Min average length threshold (bytes) */
181         __u32           qth_max;        /* Max average length threshold (bytes) */
182         unsigned char   Wlog;           /* log(W)               */
183         unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
184         unsigned char   Scell_log;      /* cell size for idle damping */
185         unsigned char   flags;
186         __u32           max_P;          /* probability, high resolution */
187 /* SFQRED stats */
188         struct tc_sfqred_stats stats;
189 };
190
191
192 struct tc_sfq_xstats {
193         __s32           allot;
194 };
195
196 /* RED section */
197
198 enum {
199         TCA_RED_UNSPEC,
200         TCA_RED_PARMS,
201         TCA_RED_STAB,
202         TCA_RED_MAX_P,
203         __TCA_RED_MAX,
204 };
205
206 #define TCA_RED_MAX (__TCA_RED_MAX - 1)
207
208 struct tc_red_qopt {
209         __u32           limit;          /* HARD maximal queue length (bytes)    */
210         __u32           qth_min;        /* Min average length threshold (bytes) */
211         __u32           qth_max;        /* Max average length threshold (bytes) */
212         unsigned char   Wlog;           /* log(W)               */
213         unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
214         unsigned char   Scell_log;      /* cell size for idle damping */
215         unsigned char   flags;
216 #define TC_RED_ECN              1
217 #define TC_RED_HARDDROP         2
218 #define TC_RED_ADAPTATIVE       4
219 };
220
221 struct tc_red_xstats {
222         __u32           early;          /* Early drops */
223         __u32           pdrop;          /* Drops due to queue limits */
224         __u32           other;          /* Drops due to drop() calls */
225         __u32           marked;         /* Marked packets */
226 };
227
228 /* GRED section */
229
230 #define MAX_DPs 16
231
232 enum {
233        TCA_GRED_UNSPEC,
234        TCA_GRED_PARMS,
235        TCA_GRED_STAB,
236        TCA_GRED_DPS,
237        TCA_GRED_MAX_P,
238            __TCA_GRED_MAX,
239 };
240
241 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
242
243 struct tc_gred_qopt {
244         __u32           limit;        /* HARD maximal queue length (bytes)    */
245         __u32           qth_min;      /* Min average length threshold (bytes) */
246         __u32           qth_max;      /* Max average length threshold (bytes) */
247         __u32           DP;           /* up to 2^32 DPs */
248         __u32           backlog;
249         __u32           qave;
250         __u32           forced;
251         __u32           early;
252         __u32           other;
253         __u32           pdrop;
254         __u8            Wlog;         /* log(W)               */
255         __u8            Plog;         /* log(P_max/(qth_max-qth_min)) */
256         __u8            Scell_log;    /* cell size for idle damping */
257         __u8            prio;         /* prio of this VQ */
258         __u32           packets;
259         __u32           bytesin;
260 };
261
262 /* gred setup */
263 struct tc_gred_sopt {
264         __u32           DPs;
265         __u32           def_DP;
266         __u8            grio;
267         __u8            flags;
268         __u16           pad1;
269 };
270
271 /* CHOKe section */
272
273 enum {
274         TCA_CHOKE_UNSPEC,
275         TCA_CHOKE_PARMS,
276         TCA_CHOKE_STAB,
277         TCA_CHOKE_MAX_P,
278         __TCA_CHOKE_MAX,
279 };
280
281 #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
282
283 struct tc_choke_qopt {
284         __u32           limit;          /* Hard queue length (packets)  */
285         __u32           qth_min;        /* Min average threshold (packets) */
286         __u32           qth_max;        /* Max average threshold (packets) */
287         unsigned char   Wlog;           /* log(W)               */
288         unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
289         unsigned char   Scell_log;      /* cell size for idle damping */
290         unsigned char   flags;          /* see RED flags */
291 };
292
293 struct tc_choke_xstats {
294         __u32           early;          /* Early drops */
295         __u32           pdrop;          /* Drops due to queue limits */
296         __u32           other;          /* Drops due to drop() calls */
297         __u32           marked;         /* Marked packets */
298         __u32           matched;        /* Drops due to flow match */
299 };
300
301 /* HTB section */
302 #define TC_HTB_NUMPRIO          8
303 #define TC_HTB_MAXDEPTH         8
304 #define TC_HTB_PROTOVER         3 /* the same as HTB and TC's major */
305
306 struct tc_htb_opt {
307         struct tc_ratespec      rate;
308         struct tc_ratespec      ceil;
309         __u32   buffer;
310         __u32   cbuffer;
311         __u32   quantum;
312         __u32   level;          /* out only */
313         __u32   prio;
314 };
315 struct tc_htb_glob {
316         __u32 version;          /* to match HTB/TC */
317         __u32 rate2quantum;     /* bps->quantum divisor */
318         __u32 defcls;           /* default class number */
319         __u32 debug;            /* debug flags */
320
321         /* stats */
322         __u32 direct_pkts; /* count of non shaped packets */
323 };
324 enum {
325         TCA_HTB_UNSPEC,
326         TCA_HTB_PARMS,
327         TCA_HTB_INIT,
328         TCA_HTB_CTAB,
329         TCA_HTB_RTAB,
330         __TCA_HTB_MAX,
331 };
332
333 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
334
335 struct tc_htb_xstats {
336         __u32 lends;
337         __u32 borrows;
338         __u32 giants;   /* too big packets (rate will not be accurate) */
339         __u32 tokens;
340         __u32 ctokens;
341 };
342
343 /* HFSC section */
344
345 struct tc_hfsc_qopt {
346         __u16   defcls;         /* default class */
347 };
348
349 struct tc_service_curve {
350         __u32   m1;             /* slope of the first segment in bps */
351         __u32   d;              /* x-projection of the first segment in us */
352         __u32   m2;             /* slope of the second segment in bps */
353 };
354
355 struct tc_hfsc_stats {
356         __u64   work;           /* total work done */
357         __u64   rtwork;         /* work done by real-time criteria */
358         __u32   period;         /* current period */
359         __u32   level;          /* class level in hierarchy */
360 };
361
362 enum {
363         TCA_HFSC_UNSPEC,
364         TCA_HFSC_RSC,
365         TCA_HFSC_FSC,
366         TCA_HFSC_USC,
367         __TCA_HFSC_MAX,
368 };
369
370 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
371
372
373 /* CBQ section */
374
375 #define TC_CBQ_MAXPRIO          8
376 #define TC_CBQ_MAXLEVEL         8
377 #define TC_CBQ_DEF_EWMA         5
378
379 struct tc_cbq_lssopt {
380         unsigned char   change;
381         unsigned char   flags;
382 #define TCF_CBQ_LSS_BOUNDED     1
383 #define TCF_CBQ_LSS_ISOLATED    2
384         unsigned char   ewma_log;
385         unsigned char   level;
386 #define TCF_CBQ_LSS_FLAGS       1
387 #define TCF_CBQ_LSS_EWMA        2
388 #define TCF_CBQ_LSS_MAXIDLE     4
389 #define TCF_CBQ_LSS_MINIDLE     8
390 #define TCF_CBQ_LSS_OFFTIME     0x10
391 #define TCF_CBQ_LSS_AVPKT       0x20
392         __u32           maxidle;
393         __u32           minidle;
394         __u32           offtime;
395         __u32           avpkt;
396 };
397
398 struct tc_cbq_wrropt {
399         unsigned char   flags;
400         unsigned char   priority;
401         unsigned char   cpriority;
402         unsigned char   __reserved;
403         __u32           allot;
404         __u32           weight;
405 };
406
407 struct tc_cbq_ovl {
408         unsigned char   strategy;
409 #define TC_CBQ_OVL_CLASSIC      0
410 #define TC_CBQ_OVL_DELAY        1
411 #define TC_CBQ_OVL_LOWPRIO      2
412 #define TC_CBQ_OVL_DROP         3
413 #define TC_CBQ_OVL_RCLASSIC     4
414         unsigned char   priority2;
415         __u16           pad;
416         __u32           penalty;
417 };
418
419 struct tc_cbq_police {
420         unsigned char   police;
421         unsigned char   __res1;
422         unsigned short  __res2;
423 };
424
425 struct tc_cbq_fopt {
426         __u32           split;
427         __u32           defmap;
428         __u32           defchange;
429 };
430
431 struct tc_cbq_xstats {
432         __u32           borrows;
433         __u32           overactions;
434         __s32           avgidle;
435         __s32           undertime;
436 };
437
438 enum {
439         TCA_CBQ_UNSPEC,
440         TCA_CBQ_LSSOPT,
441         TCA_CBQ_WRROPT,
442         TCA_CBQ_FOPT,
443         TCA_CBQ_OVL_STRATEGY,
444         TCA_CBQ_RATE,
445         TCA_CBQ_RTAB,
446         TCA_CBQ_POLICE,
447         __TCA_CBQ_MAX,
448 };
449
450 #define TCA_CBQ_MAX     (__TCA_CBQ_MAX - 1)
451
452 /* dsmark section */
453
454 enum {
455         TCA_DSMARK_UNSPEC,
456         TCA_DSMARK_INDICES,
457         TCA_DSMARK_DEFAULT_INDEX,
458         TCA_DSMARK_SET_TC_INDEX,
459         TCA_DSMARK_MASK,
460         TCA_DSMARK_VALUE,
461         __TCA_DSMARK_MAX,
462 };
463
464 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
465
466 /* ATM  section */
467
468 enum {
469         TCA_ATM_UNSPEC,
470         TCA_ATM_FD,             /* file/socket descriptor */
471         TCA_ATM_PTR,            /* pointer to descriptor - later */
472         TCA_ATM_HDR,            /* LL header */
473         TCA_ATM_EXCESS,         /* excess traffic class (0 for CLP)  */
474         TCA_ATM_ADDR,           /* PVC address (for output only) */
475         TCA_ATM_STATE,          /* VC state (ATM_VS_*; for output only) */
476         __TCA_ATM_MAX,
477 };
478
479 #define TCA_ATM_MAX     (__TCA_ATM_MAX - 1)
480
481 /* Network emulator */
482
483 enum {
484         TCA_NETEM_UNSPEC,
485         TCA_NETEM_CORR,
486         TCA_NETEM_DELAY_DIST,
487         TCA_NETEM_REORDER,
488         TCA_NETEM_CORRUPT,
489         TCA_NETEM_LOSS,
490         TCA_NETEM_RATE,
491         __TCA_NETEM_MAX,
492 };
493
494 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
495
496 struct tc_netem_qopt {
497         __u32   latency;        /* added delay (us) */
498         __u32   limit;          /* fifo limit (packets) */
499         __u32   loss;           /* random packet loss (0=none ~0=100%) */
500         __u32   gap;            /* re-ordering gap (0 for none) */
501         __u32   duplicate;      /* random packet dup  (0=none ~0=100%) */
502         __u32   jitter;         /* random jitter in latency (us) */
503 };
504
505 struct tc_netem_corr {
506         __u32   delay_corr;     /* delay correlation */
507         __u32   loss_corr;      /* packet loss correlation */
508         __u32   dup_corr;       /* duplicate correlation  */
509 };
510
511 struct tc_netem_reorder {
512         __u32   probability;
513         __u32   correlation;
514 };
515
516 struct tc_netem_corrupt {
517         __u32   probability;
518         __u32   correlation;
519 };
520
521 struct tc_netem_rate {
522         __u32   rate;   /* byte/s */
523         __s32   packet_overhead;
524         __u32   cell_size;
525         __s32   cell_overhead;
526 };
527
528 enum {
529         NETEM_LOSS_UNSPEC,
530         NETEM_LOSS_GI,          /* General Intuitive - 4 state model */
531         NETEM_LOSS_GE,          /* Gilbert Elliot models */
532         __NETEM_LOSS_MAX
533 };
534 #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
535
536 /* State transition probabilities for 4 state model */
537 struct tc_netem_gimodel {
538         __u32   p13;
539         __u32   p31;
540         __u32   p32;
541         __u32   p14;
542         __u32   p23;
543 };
544
545 /* Gilbert-Elliot models */
546 struct tc_netem_gemodel {
547         __u32 p;
548         __u32 r;
549         __u32 h;
550         __u32 k1;
551 };
552
553 #define NETEM_DIST_SCALE        8192
554 #define NETEM_DIST_MAX          16384
555
556 /* DRR */
557
558 enum {
559         TCA_DRR_UNSPEC,
560         TCA_DRR_QUANTUM,
561         __TCA_DRR_MAX
562 };
563
564 #define TCA_DRR_MAX     (__TCA_DRR_MAX - 1)
565
566 struct tc_drr_stats {
567         __u32   deficit;
568 };
569
570 /* MQPRIO */
571 #define TC_QOPT_BITMASK 15
572 #define TC_QOPT_MAX_QUEUE 16
573
574 struct tc_mqprio_qopt {
575         __u8    num_tc;
576         __u8    prio_tc_map[TC_QOPT_BITMASK + 1];
577         __u8    hw;
578         __u16   count[TC_QOPT_MAX_QUEUE];
579         __u16   offset[TC_QOPT_MAX_QUEUE];
580 };
581
582 /* SFB */
583
584 enum {
585         TCA_SFB_UNSPEC,
586         TCA_SFB_PARMS,
587         __TCA_SFB_MAX,
588 };
589
590 #define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
591
592 /*
593  * Note: increment, decrement are Q0.16 fixed-point values.
594  */
595 struct tc_sfb_qopt {
596         __u32 rehash_interval;  /* delay between hash move, in ms */
597         __u32 warmup_time;      /* double buffering warmup time in ms (warmup_time < rehash_interval) */
598         __u32 max;              /* max len of qlen_min */
599         __u32 bin_size;         /* maximum queue length per bin */
600         __u32 increment;        /* probability increment, (d1 in Blue) */
601         __u32 decrement;        /* probability decrement, (d2 in Blue) */
602         __u32 limit;            /* max SFB queue length */
603         __u32 penalty_rate;     /* inelastic flows are rate limited to 'rate' pps */
604         __u32 penalty_burst;
605 };
606
607 struct tc_sfb_xstats {
608         __u32 earlydrop;
609         __u32 penaltydrop;
610         __u32 bucketdrop;
611         __u32 queuedrop;
612         __u32 childdrop; /* drops in child qdisc */
613         __u32 marked;
614         __u32 maxqlen;
615         __u32 maxprob;
616         __u32 avgprob;
617 };
618
619 #define SFB_MAX_PROB 0xFFFF
620
621 /* QFQ */
622 enum {
623         TCA_QFQ_UNSPEC,
624         TCA_QFQ_WEIGHT,
625         TCA_QFQ_LMAX,
626         __TCA_QFQ_MAX
627 };
628
629 #define TCA_QFQ_MAX     (__TCA_QFQ_MAX - 1)
630
631 struct tc_qfq_stats {
632         __u32 weight;
633         __u32 lmax;
634 };
635
636 #endif