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