]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/blob - include/linux/pkt_sched.h
Update to kernel v3.3 headers
[lisovros/iproute2_canprio.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_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
172 struct tc_sfq_xstats {
173         __s32           allot;
174 };
175
176 /* RED section */
177
178 enum {
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
188 struct 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
201 struct 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
212 enum {
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
223 struct 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 */
243 struct 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
253 enum {
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
263 struct 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
273 struct 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
286 struct 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 };
295 struct 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 };
304 enum {
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
315 struct 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
325 struct tc_hfsc_qopt {
326         __u16   defcls;         /* default class */
327 };
328
329 struct 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
335 struct 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
342 enum {
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
359 struct 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
378 struct 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
387 struct 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
399 struct tc_cbq_police {
400         unsigned char   police;
401         unsigned char   __res1;
402         unsigned short  __res2;
403 };
404
405 struct tc_cbq_fopt {
406         __u32           split;
407         __u32           defmap;
408         __u32           defchange;
409 };
410
411 struct tc_cbq_xstats {
412         __u32           borrows;
413         __u32           overactions;
414         __s32           avgidle;
415         __s32           undertime;
416 };
417
418 enum {
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
434 enum {
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
448 enum {
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
463 enum {
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
476 struct 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
485 struct tc_netem_corr {
486         __u32   delay_corr;     /* delay correlation */
487         __u32   loss_corr;      /* packet loss correlation */
488         __u32   dup_corr;       /* duplicate correlation  */
489 };
490
491 struct tc_netem_reorder {
492         __u32   probability;
493         __u32   correlation;
494 };
495
496 struct tc_netem_corrupt {
497         __u32   probability;
498         __u32   correlation;
499 };
500
501 struct tc_netem_rate {
502         __u32   rate;   /* byte/s */
503         __s32   packet_overhead;
504         __u32   cell_size;
505         __s32   cell_overhead;
506 };
507
508 enum {
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 */
517 struct tc_netem_gimodel {
518         __u32   p13;
519         __u32   p31;
520         __u32   p32;
521         __u32   p14;
522         __u32   p23;
523 };
524
525 /* Gilbert-Elliot models */
526 struct 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
538 enum {
539         TCA_DRR_UNSPEC,
540         TCA_DRR_QUANTUM,
541         __TCA_DRR_MAX
542 };
543
544 #define TCA_DRR_MAX     (__TCA_DRR_MAX - 1)
545
546 struct tc_drr_stats {
547         __u32   deficit;
548 };
549
550 /* MQPRIO */
551 #define TC_QOPT_BITMASK 15
552 #define TC_QOPT_MAX_QUEUE 16
553
554 struct 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
564 enum {
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  */
575 struct 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
587 struct 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 */
602 enum {
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
611 struct tc_qfq_stats {
612         __u32 weight;
613         __u32 lmax;
614 };
615
616 #endif