Merge branch 'clockevents/fixes' of git://git.linaro.org/people/daniel.lezcano/linux...
[linux-drm-fsl-dcu.git] / include / uapi / 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 /* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
77 enum tc_link_layer {
78         TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */
79         TC_LINKLAYER_ETHERNET,
80         TC_LINKLAYER_ATM,
81 };
82 #define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */
83
84 struct tc_ratespec {
85         unsigned char   cell_log;
86         __u8            linklayer; /* lower 4 bits */
87         unsigned short  overhead;
88         short           cell_align;
89         unsigned short  mpu;
90         __u32           rate;
91 };
92
93 #define TC_RTAB_SIZE    1024
94
95 struct tc_sizespec {
96         unsigned char   cell_log;
97         unsigned char   size_log;
98         short           cell_align;
99         int             overhead;
100         unsigned int    linklayer;
101         unsigned int    mpu;
102         unsigned int    mtu;
103         unsigned int    tsize;
104 };
105
106 enum {
107         TCA_STAB_UNSPEC,
108         TCA_STAB_BASE,
109         TCA_STAB_DATA,
110         __TCA_STAB_MAX
111 };
112
113 #define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
114
115 /* FIFO section */
116
117 struct tc_fifo_qopt {
118         __u32   limit;  /* Queue length: bytes for bfifo, packets for pfifo */
119 };
120
121 /* PRIO section */
122
123 #define TCQ_PRIO_BANDS  16
124 #define TCQ_MIN_PRIO_BANDS 2
125
126 struct tc_prio_qopt {
127         int     bands;                  /* Number of bands */
128         __u8    priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
129 };
130
131 /* MULTIQ section */
132
133 struct tc_multiq_qopt {
134         __u16   bands;                  /* Number of bands */
135         __u16   max_bands;              /* Maximum number of queues */
136 };
137
138 /* PLUG section */
139
140 #define TCQ_PLUG_BUFFER                0
141 #define TCQ_PLUG_RELEASE_ONE           1
142 #define TCQ_PLUG_RELEASE_INDEFINITE    2
143 #define TCQ_PLUG_LIMIT                 3
144
145 struct tc_plug_qopt {
146         /* TCQ_PLUG_BUFFER: Inset a plug into the queue and
147          *  buffer any incoming packets
148          * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
149          *   to beginning of the next plug.
150          * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
151          *   Stop buffering packets until the next TCQ_PLUG_BUFFER
152          *   command is received (just act as a pass-thru queue).
153          * TCQ_PLUG_LIMIT: Increase/decrease queue size
154          */
155         int             action;
156         __u32           limit;
157 };
158
159 /* TBF section */
160
161 struct tc_tbf_qopt {
162         struct tc_ratespec rate;
163         struct tc_ratespec peakrate;
164         __u32           limit;
165         __u32           buffer;
166         __u32           mtu;
167 };
168
169 enum {
170         TCA_TBF_UNSPEC,
171         TCA_TBF_PARMS,
172         TCA_TBF_RTAB,
173         TCA_TBF_PTAB,
174         TCA_TBF_RATE64,
175         TCA_TBF_PRATE64,
176         __TCA_TBF_MAX,
177 };
178
179 #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
180
181
182 /* TEQL section */
183
184 /* TEQL does not require any parameters */
185
186 /* SFQ section */
187
188 struct tc_sfq_qopt {
189         unsigned        quantum;        /* Bytes per round allocated to flow */
190         int             perturb_period; /* Period of hash perturbation */
191         __u32           limit;          /* Maximal packets in queue */
192         unsigned        divisor;        /* Hash divisor  */
193         unsigned        flows;          /* Maximal number of flows  */
194 };
195
196 struct tc_sfqred_stats {
197         __u32           prob_drop;      /* Early drops, below max threshold */
198         __u32           forced_drop;    /* Early drops, after max threshold */
199         __u32           prob_mark;      /* Marked packets, below max threshold */
200         __u32           forced_mark;    /* Marked packets, after max threshold */
201         __u32           prob_mark_head; /* Marked packets, below max threshold */
202         __u32           forced_mark_head;/* Marked packets, after max threshold */
203 };
204
205 struct tc_sfq_qopt_v1 {
206         struct tc_sfq_qopt v0;
207         unsigned int    depth;          /* max number of packets per flow */
208         unsigned int    headdrop;
209 /* SFQRED parameters */
210         __u32           limit;          /* HARD maximal flow queue length (bytes) */
211         __u32           qth_min;        /* Min average length threshold (bytes) */
212         __u32           qth_max;        /* Max average length threshold (bytes) */
213         unsigned char   Wlog;           /* log(W)               */
214         unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
215         unsigned char   Scell_log;      /* cell size for idle damping */
216         unsigned char   flags;
217         __u32           max_P;          /* probability, high resolution */
218 /* SFQRED stats */
219         struct tc_sfqred_stats stats;
220 };
221
222
223 struct tc_sfq_xstats {
224         __s32           allot;
225 };
226
227 /* RED section */
228
229 enum {
230         TCA_RED_UNSPEC,
231         TCA_RED_PARMS,
232         TCA_RED_STAB,
233         TCA_RED_MAX_P,
234         __TCA_RED_MAX,
235 };
236
237 #define TCA_RED_MAX (__TCA_RED_MAX - 1)
238
239 struct tc_red_qopt {
240         __u32           limit;          /* HARD maximal queue length (bytes)    */
241         __u32           qth_min;        /* Min average length threshold (bytes) */
242         __u32           qth_max;        /* Max average length threshold (bytes) */
243         unsigned char   Wlog;           /* log(W)               */
244         unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
245         unsigned char   Scell_log;      /* cell size for idle damping */
246         unsigned char   flags;
247 #define TC_RED_ECN              1
248 #define TC_RED_HARDDROP         2
249 #define TC_RED_ADAPTATIVE       4
250 };
251
252 struct tc_red_xstats {
253         __u32           early;          /* Early drops */
254         __u32           pdrop;          /* Drops due to queue limits */
255         __u32           other;          /* Drops due to drop() calls */
256         __u32           marked;         /* Marked packets */
257 };
258
259 /* GRED section */
260
261 #define MAX_DPs 16
262
263 enum {
264        TCA_GRED_UNSPEC,
265        TCA_GRED_PARMS,
266        TCA_GRED_STAB,
267        TCA_GRED_DPS,
268        TCA_GRED_MAX_P,
269            __TCA_GRED_MAX,
270 };
271
272 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
273
274 struct tc_gred_qopt {
275         __u32           limit;        /* HARD maximal queue length (bytes)    */
276         __u32           qth_min;      /* Min average length threshold (bytes) */
277         __u32           qth_max;      /* Max average length threshold (bytes) */
278         __u32           DP;           /* up to 2^32 DPs */
279         __u32           backlog;
280         __u32           qave;
281         __u32           forced;
282         __u32           early;
283         __u32           other;
284         __u32           pdrop;
285         __u8            Wlog;         /* log(W)               */
286         __u8            Plog;         /* log(P_max/(qth_max-qth_min)) */
287         __u8            Scell_log;    /* cell size for idle damping */
288         __u8            prio;         /* prio of this VQ */
289         __u32           packets;
290         __u32           bytesin;
291 };
292
293 /* gred setup */
294 struct tc_gred_sopt {
295         __u32           DPs;
296         __u32           def_DP;
297         __u8            grio;
298         __u8            flags;
299         __u16           pad1;
300 };
301
302 /* CHOKe section */
303
304 enum {
305         TCA_CHOKE_UNSPEC,
306         TCA_CHOKE_PARMS,
307         TCA_CHOKE_STAB,
308         TCA_CHOKE_MAX_P,
309         __TCA_CHOKE_MAX,
310 };
311
312 #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
313
314 struct tc_choke_qopt {
315         __u32           limit;          /* Hard queue length (packets)  */
316         __u32           qth_min;        /* Min average threshold (packets) */
317         __u32           qth_max;        /* Max average threshold (packets) */
318         unsigned char   Wlog;           /* log(W)               */
319         unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
320         unsigned char   Scell_log;      /* cell size for idle damping */
321         unsigned char   flags;          /* see RED flags */
322 };
323
324 struct tc_choke_xstats {
325         __u32           early;          /* Early drops */
326         __u32           pdrop;          /* Drops due to queue limits */
327         __u32           other;          /* Drops due to drop() calls */
328         __u32           marked;         /* Marked packets */
329         __u32           matched;        /* Drops due to flow match */
330 };
331
332 /* HTB section */
333 #define TC_HTB_NUMPRIO          8
334 #define TC_HTB_MAXDEPTH         8
335 #define TC_HTB_PROTOVER         3 /* the same as HTB and TC's major */
336
337 struct tc_htb_opt {
338         struct tc_ratespec      rate;
339         struct tc_ratespec      ceil;
340         __u32   buffer;
341         __u32   cbuffer;
342         __u32   quantum;
343         __u32   level;          /* out only */
344         __u32   prio;
345 };
346 struct tc_htb_glob {
347         __u32 version;          /* to match HTB/TC */
348         __u32 rate2quantum;     /* bps->quantum divisor */
349         __u32 defcls;           /* default class number */
350         __u32 debug;            /* debug flags */
351
352         /* stats */
353         __u32 direct_pkts; /* count of non shaped packets */
354 };
355 enum {
356         TCA_HTB_UNSPEC,
357         TCA_HTB_PARMS,
358         TCA_HTB_INIT,
359         TCA_HTB_CTAB,
360         TCA_HTB_RTAB,
361         TCA_HTB_DIRECT_QLEN,
362         TCA_HTB_RATE64,
363         TCA_HTB_CEIL64,
364         __TCA_HTB_MAX,
365 };
366
367 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
368
369 struct tc_htb_xstats {
370         __u32 lends;
371         __u32 borrows;
372         __u32 giants;   /* too big packets (rate will not be accurate) */
373         __u32 tokens;
374         __u32 ctokens;
375 };
376
377 /* HFSC section */
378
379 struct tc_hfsc_qopt {
380         __u16   defcls;         /* default class */
381 };
382
383 struct tc_service_curve {
384         __u32   m1;             /* slope of the first segment in bps */
385         __u32   d;              /* x-projection of the first segment in us */
386         __u32   m2;             /* slope of the second segment in bps */
387 };
388
389 struct tc_hfsc_stats {
390         __u64   work;           /* total work done */
391         __u64   rtwork;         /* work done by real-time criteria */
392         __u32   period;         /* current period */
393         __u32   level;          /* class level in hierarchy */
394 };
395
396 enum {
397         TCA_HFSC_UNSPEC,
398         TCA_HFSC_RSC,
399         TCA_HFSC_FSC,
400         TCA_HFSC_USC,
401         __TCA_HFSC_MAX,
402 };
403
404 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
405
406
407 /* CBQ section */
408
409 #define TC_CBQ_MAXPRIO          8
410 #define TC_CBQ_MAXLEVEL         8
411 #define TC_CBQ_DEF_EWMA         5
412
413 struct tc_cbq_lssopt {
414         unsigned char   change;
415         unsigned char   flags;
416 #define TCF_CBQ_LSS_BOUNDED     1
417 #define TCF_CBQ_LSS_ISOLATED    2
418         unsigned char   ewma_log;
419         unsigned char   level;
420 #define TCF_CBQ_LSS_FLAGS       1
421 #define TCF_CBQ_LSS_EWMA        2
422 #define TCF_CBQ_LSS_MAXIDLE     4
423 #define TCF_CBQ_LSS_MINIDLE     8
424 #define TCF_CBQ_LSS_OFFTIME     0x10
425 #define TCF_CBQ_LSS_AVPKT       0x20
426         __u32           maxidle;
427         __u32           minidle;
428         __u32           offtime;
429         __u32           avpkt;
430 };
431
432 struct tc_cbq_wrropt {
433         unsigned char   flags;
434         unsigned char   priority;
435         unsigned char   cpriority;
436         unsigned char   __reserved;
437         __u32           allot;
438         __u32           weight;
439 };
440
441 struct tc_cbq_ovl {
442         unsigned char   strategy;
443 #define TC_CBQ_OVL_CLASSIC      0
444 #define TC_CBQ_OVL_DELAY        1
445 #define TC_CBQ_OVL_LOWPRIO      2
446 #define TC_CBQ_OVL_DROP         3
447 #define TC_CBQ_OVL_RCLASSIC     4
448         unsigned char   priority2;
449         __u16           pad;
450         __u32           penalty;
451 };
452
453 struct tc_cbq_police {
454         unsigned char   police;
455         unsigned char   __res1;
456         unsigned short  __res2;
457 };
458
459 struct tc_cbq_fopt {
460         __u32           split;
461         __u32           defmap;
462         __u32           defchange;
463 };
464
465 struct tc_cbq_xstats {
466         __u32           borrows;
467         __u32           overactions;
468         __s32           avgidle;
469         __s32           undertime;
470 };
471
472 enum {
473         TCA_CBQ_UNSPEC,
474         TCA_CBQ_LSSOPT,
475         TCA_CBQ_WRROPT,
476         TCA_CBQ_FOPT,
477         TCA_CBQ_OVL_STRATEGY,
478         TCA_CBQ_RATE,
479         TCA_CBQ_RTAB,
480         TCA_CBQ_POLICE,
481         __TCA_CBQ_MAX,
482 };
483
484 #define TCA_CBQ_MAX     (__TCA_CBQ_MAX - 1)
485
486 /* dsmark section */
487
488 enum {
489         TCA_DSMARK_UNSPEC,
490         TCA_DSMARK_INDICES,
491         TCA_DSMARK_DEFAULT_INDEX,
492         TCA_DSMARK_SET_TC_INDEX,
493         TCA_DSMARK_MASK,
494         TCA_DSMARK_VALUE,
495         __TCA_DSMARK_MAX,
496 };
497
498 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
499
500 /* ATM  section */
501
502 enum {
503         TCA_ATM_UNSPEC,
504         TCA_ATM_FD,             /* file/socket descriptor */
505         TCA_ATM_PTR,            /* pointer to descriptor - later */
506         TCA_ATM_HDR,            /* LL header */
507         TCA_ATM_EXCESS,         /* excess traffic class (0 for CLP)  */
508         TCA_ATM_ADDR,           /* PVC address (for output only) */
509         TCA_ATM_STATE,          /* VC state (ATM_VS_*; for output only) */
510         __TCA_ATM_MAX,
511 };
512
513 #define TCA_ATM_MAX     (__TCA_ATM_MAX - 1)
514
515 /* Network emulator */
516
517 enum {
518         TCA_NETEM_UNSPEC,
519         TCA_NETEM_CORR,
520         TCA_NETEM_DELAY_DIST,
521         TCA_NETEM_REORDER,
522         TCA_NETEM_CORRUPT,
523         TCA_NETEM_LOSS,
524         TCA_NETEM_RATE,
525         TCA_NETEM_ECN,
526         __TCA_NETEM_MAX,
527 };
528
529 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
530
531 struct tc_netem_qopt {
532         __u32   latency;        /* added delay (us) */
533         __u32   limit;          /* fifo limit (packets) */
534         __u32   loss;           /* random packet loss (0=none ~0=100%) */
535         __u32   gap;            /* re-ordering gap (0 for none) */
536         __u32   duplicate;      /* random packet dup  (0=none ~0=100%) */
537         __u32   jitter;         /* random jitter in latency (us) */
538 };
539
540 struct tc_netem_corr {
541         __u32   delay_corr;     /* delay correlation */
542         __u32   loss_corr;      /* packet loss correlation */
543         __u32   dup_corr;       /* duplicate correlation  */
544 };
545
546 struct tc_netem_reorder {
547         __u32   probability;
548         __u32   correlation;
549 };
550
551 struct tc_netem_corrupt {
552         __u32   probability;
553         __u32   correlation;
554 };
555
556 struct tc_netem_rate {
557         __u32   rate;   /* byte/s */
558         __s32   packet_overhead;
559         __u32   cell_size;
560         __s32   cell_overhead;
561 };
562
563 enum {
564         NETEM_LOSS_UNSPEC,
565         NETEM_LOSS_GI,          /* General Intuitive - 4 state model */
566         NETEM_LOSS_GE,          /* Gilbert Elliot models */
567         __NETEM_LOSS_MAX
568 };
569 #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
570
571 /* State transition probabilities for 4 state model */
572 struct tc_netem_gimodel {
573         __u32   p13;
574         __u32   p31;
575         __u32   p32;
576         __u32   p14;
577         __u32   p23;
578 };
579
580 /* Gilbert-Elliot models */
581 struct tc_netem_gemodel {
582         __u32 p;
583         __u32 r;
584         __u32 h;
585         __u32 k1;
586 };
587
588 #define NETEM_DIST_SCALE        8192
589 #define NETEM_DIST_MAX          16384
590
591 /* DRR */
592
593 enum {
594         TCA_DRR_UNSPEC,
595         TCA_DRR_QUANTUM,
596         __TCA_DRR_MAX
597 };
598
599 #define TCA_DRR_MAX     (__TCA_DRR_MAX - 1)
600
601 struct tc_drr_stats {
602         __u32   deficit;
603 };
604
605 /* MQPRIO */
606 #define TC_QOPT_BITMASK 15
607 #define TC_QOPT_MAX_QUEUE 16
608
609 struct tc_mqprio_qopt {
610         __u8    num_tc;
611         __u8    prio_tc_map[TC_QOPT_BITMASK + 1];
612         __u8    hw;
613         __u16   count[TC_QOPT_MAX_QUEUE];
614         __u16   offset[TC_QOPT_MAX_QUEUE];
615 };
616
617 /* SFB */
618
619 enum {
620         TCA_SFB_UNSPEC,
621         TCA_SFB_PARMS,
622         __TCA_SFB_MAX,
623 };
624
625 #define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
626
627 /*
628  * Note: increment, decrement are Q0.16 fixed-point values.
629  */
630 struct tc_sfb_qopt {
631         __u32 rehash_interval;  /* delay between hash move, in ms */
632         __u32 warmup_time;      /* double buffering warmup time in ms (warmup_time < rehash_interval) */
633         __u32 max;              /* max len of qlen_min */
634         __u32 bin_size;         /* maximum queue length per bin */
635         __u32 increment;        /* probability increment, (d1 in Blue) */
636         __u32 decrement;        /* probability decrement, (d2 in Blue) */
637         __u32 limit;            /* max SFB queue length */
638         __u32 penalty_rate;     /* inelastic flows are rate limited to 'rate' pps */
639         __u32 penalty_burst;
640 };
641
642 struct tc_sfb_xstats {
643         __u32 earlydrop;
644         __u32 penaltydrop;
645         __u32 bucketdrop;
646         __u32 queuedrop;
647         __u32 childdrop; /* drops in child qdisc */
648         __u32 marked;
649         __u32 maxqlen;
650         __u32 maxprob;
651         __u32 avgprob;
652 };
653
654 #define SFB_MAX_PROB 0xFFFF
655
656 /* QFQ */
657 enum {
658         TCA_QFQ_UNSPEC,
659         TCA_QFQ_WEIGHT,
660         TCA_QFQ_LMAX,
661         __TCA_QFQ_MAX
662 };
663
664 #define TCA_QFQ_MAX     (__TCA_QFQ_MAX - 1)
665
666 struct tc_qfq_stats {
667         __u32 weight;
668         __u32 lmax;
669 };
670
671 /* CODEL */
672
673 enum {
674         TCA_CODEL_UNSPEC,
675         TCA_CODEL_TARGET,
676         TCA_CODEL_LIMIT,
677         TCA_CODEL_INTERVAL,
678         TCA_CODEL_ECN,
679         __TCA_CODEL_MAX
680 };
681
682 #define TCA_CODEL_MAX   (__TCA_CODEL_MAX - 1)
683
684 struct tc_codel_xstats {
685         __u32   maxpacket; /* largest packet we've seen so far */
686         __u32   count;     /* how many drops we've done since the last time we
687                             * entered dropping state
688                             */
689         __u32   lastcount; /* count at entry to dropping state */
690         __u32   ldelay;    /* in-queue delay seen by most recently dequeued packet */
691         __s32   drop_next; /* time to drop next packet */
692         __u32   drop_overlimit; /* number of time max qdisc packet limit was hit */
693         __u32   ecn_mark;  /* number of packets we ECN marked instead of dropped */
694         __u32   dropping;  /* are we in dropping state ? */
695 };
696
697 /* FQ_CODEL */
698
699 enum {
700         TCA_FQ_CODEL_UNSPEC,
701         TCA_FQ_CODEL_TARGET,
702         TCA_FQ_CODEL_LIMIT,
703         TCA_FQ_CODEL_INTERVAL,
704         TCA_FQ_CODEL_ECN,
705         TCA_FQ_CODEL_FLOWS,
706         TCA_FQ_CODEL_QUANTUM,
707         __TCA_FQ_CODEL_MAX
708 };
709
710 #define TCA_FQ_CODEL_MAX        (__TCA_FQ_CODEL_MAX - 1)
711
712 enum {
713         TCA_FQ_CODEL_XSTATS_QDISC,
714         TCA_FQ_CODEL_XSTATS_CLASS,
715 };
716
717 struct tc_fq_codel_qd_stats {
718         __u32   maxpacket;      /* largest packet we've seen so far */
719         __u32   drop_overlimit; /* number of time max qdisc
720                                  * packet limit was hit
721                                  */
722         __u32   ecn_mark;       /* number of packets we ECN marked
723                                  * instead of being dropped
724                                  */
725         __u32   new_flow_count; /* number of time packets
726                                  * created a 'new flow'
727                                  */
728         __u32   new_flows_len;  /* count of flows in new list */
729         __u32   old_flows_len;  /* count of flows in old list */
730 };
731
732 struct tc_fq_codel_cl_stats {
733         __s32   deficit;
734         __u32   ldelay;         /* in-queue delay seen by most recently
735                                  * dequeued packet
736                                  */
737         __u32   count;
738         __u32   lastcount;
739         __u32   dropping;
740         __s32   drop_next;
741 };
742
743 struct tc_fq_codel_xstats {
744         __u32   type;
745         union {
746                 struct tc_fq_codel_qd_stats qdisc_stats;
747                 struct tc_fq_codel_cl_stats class_stats;
748         };
749 };
750
751 /* FQ */
752
753 enum {
754         TCA_FQ_UNSPEC,
755
756         TCA_FQ_PLIMIT,          /* limit of total number of packets in queue */
757
758         TCA_FQ_FLOW_PLIMIT,     /* limit of packets per flow */
759
760         TCA_FQ_QUANTUM,         /* RR quantum */
761
762         TCA_FQ_INITIAL_QUANTUM,         /* RR quantum for new flow */
763
764         TCA_FQ_RATE_ENABLE,     /* enable/disable rate limiting */
765
766         TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
767
768         TCA_FQ_FLOW_MAX_RATE,   /* per flow max rate */
769
770         TCA_FQ_BUCKETS_LOG,     /* log2(number of buckets) */
771
772         TCA_FQ_FLOW_REFILL_DELAY,       /* flow credit refill delay in usec */
773
774         __TCA_FQ_MAX
775 };
776
777 #define TCA_FQ_MAX      (__TCA_FQ_MAX - 1)
778
779 struct tc_fq_qd_stats {
780         __u64   gc_flows;
781         __u64   highprio_packets;
782         __u64   tcp_retrans;
783         __u64   throttled;
784         __u64   flows_plimit;
785         __u64   pkts_too_long;
786         __u64   allocation_errors;
787         __s64   time_next_delayed_flow;
788         __u32   flows;
789         __u32   inactive_flows;
790         __u32   throttled_flows;
791         __u32   pad;
792 };
793 #endif