1#ifndef __LINUX_PKT_SCHED_H
2#define __LINUX_PKT_SCHED_H
3
4#include <linux/types.h>
5
6
7
8
9
10
11
12
13
14
15
16
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
29
30
31
32struct tc_stats {
33 __u64 bytes;
34 __u32 packets;
35 __u32 drops;
36 __u32 overlimits;
37
38 __u32 bps;
39 __u32 pps;
40 __u32 qlen;
41 __u32 backlog;
42};
43
44struct tc_estimator {
45 signed char interval;
46 unsigned char ewma_log;
47};
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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
77enum tc_link_layer {
78 TC_LINKLAYER_UNAWARE,
79 TC_LINKLAYER_ETHERNET,
80 TC_LINKLAYER_ATM,
81};
82#define TC_LINKLAYER_MASK 0x0F
83
84struct tc_ratespec {
85 unsigned char cell_log;
86 __u8 linklayer;
87 unsigned short overhead;
88 short cell_align;
89 unsigned short mpu;
90 __u32 rate;
91};
92
93#define TC_RTAB_SIZE 1024
94
95struct 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
106enum {
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
116
117struct tc_fifo_qopt {
118 __u32 limit;
119};
120
121
122
123#define TCQ_PRIO_BANDS 16
124#define TCQ_MIN_PRIO_BANDS 2
125
126struct tc_prio_qopt {
127 int bands;
128 __u8 priomap[TC_PRIO_MAX+1];
129};
130
131
132
133struct tc_multiq_qopt {
134 __u16 bands;
135 __u16 max_bands;
136};
137
138
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
145struct tc_plug_qopt {
146
147
148
149
150
151
152
153
154
155 int action;
156 __u32 limit;
157};
158
159
160
161struct tc_tbf_qopt {
162 struct tc_ratespec rate;
163 struct tc_ratespec peakrate;
164 __u32 limit;
165 __u32 buffer;
166 __u32 mtu;
167};
168
169enum {
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_BURST,
177 TCA_TBF_PBURST,
178 TCA_TBF_PAD,
179 __TCA_TBF_MAX,
180};
181
182#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
183
184
185
186
187
188
189
190
191struct tc_sfq_qopt {
192 unsigned quantum;
193 int perturb_period;
194 __u32 limit;
195 unsigned divisor;
196 unsigned flows;
197};
198
199struct tc_sfqred_stats {
200 __u32 prob_drop;
201 __u32 forced_drop;
202 __u32 prob_mark;
203 __u32 forced_mark;
204 __u32 prob_mark_head;
205 __u32 forced_mark_head;
206};
207
208struct tc_sfq_qopt_v1 {
209 struct tc_sfq_qopt v0;
210 unsigned int depth;
211 unsigned int headdrop;
212
213 __u32 limit;
214 __u32 qth_min;
215 __u32 qth_max;
216 unsigned char Wlog;
217 unsigned char Plog;
218 unsigned char Scell_log;
219 unsigned char flags;
220 __u32 max_P;
221
222 struct tc_sfqred_stats stats;
223};
224
225
226struct tc_sfq_xstats {
227 __s32 allot;
228};
229
230
231
232enum {
233 TCA_RED_UNSPEC,
234 TCA_RED_PARMS,
235 TCA_RED_STAB,
236 TCA_RED_MAX_P,
237 __TCA_RED_MAX,
238};
239
240#define TCA_RED_MAX (__TCA_RED_MAX - 1)
241
242struct tc_red_qopt {
243 __u32 limit;
244 __u32 qth_min;
245 __u32 qth_max;
246 unsigned char Wlog;
247 unsigned char Plog;
248 unsigned char Scell_log;
249 unsigned char flags;
250#define TC_RED_ECN 1
251#define TC_RED_HARDDROP 2
252#define TC_RED_ADAPTATIVE 4
253};
254
255struct tc_red_xstats {
256 __u32 early;
257 __u32 pdrop;
258 __u32 other;
259 __u32 marked;
260};
261
262
263
264#define MAX_DPs 16
265
266enum {
267 TCA_GRED_UNSPEC,
268 TCA_GRED_PARMS,
269 TCA_GRED_STAB,
270 TCA_GRED_DPS,
271 TCA_GRED_MAX_P,
272 TCA_GRED_LIMIT,
273 __TCA_GRED_MAX,
274};
275
276#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
277
278struct tc_gred_qopt {
279 __u32 limit;
280 __u32 qth_min;
281 __u32 qth_max;
282 __u32 DP;
283 __u32 backlog;
284 __u32 qave;
285 __u32 forced;
286 __u32 early;
287 __u32 other;
288 __u32 pdrop;
289 __u8 Wlog;
290 __u8 Plog;
291 __u8 Scell_log;
292 __u8 prio;
293 __u32 packets;
294 __u32 bytesin;
295};
296
297
298struct tc_gred_sopt {
299 __u32 DPs;
300 __u32 def_DP;
301 __u8 grio;
302 __u8 flags;
303 __u16 pad1;
304};
305
306
307
308enum {
309 TCA_CHOKE_UNSPEC,
310 TCA_CHOKE_PARMS,
311 TCA_CHOKE_STAB,
312 TCA_CHOKE_MAX_P,
313 __TCA_CHOKE_MAX,
314};
315
316#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
317
318struct tc_choke_qopt {
319 __u32 limit;
320 __u32 qth_min;
321 __u32 qth_max;
322 unsigned char Wlog;
323 unsigned char Plog;
324 unsigned char Scell_log;
325 unsigned char flags;
326};
327
328struct tc_choke_xstats {
329 __u32 early;
330 __u32 pdrop;
331 __u32 other;
332 __u32 marked;
333 __u32 matched;
334};
335
336
337#define TC_HTB_NUMPRIO 8
338#define TC_HTB_MAXDEPTH 8
339#define TC_HTB_PROTOVER 3
340
341struct tc_htb_opt {
342 struct tc_ratespec rate;
343 struct tc_ratespec ceil;
344 __u32 buffer;
345 __u32 cbuffer;
346 __u32 quantum;
347 __u32 level;
348 __u32 prio;
349};
350struct tc_htb_glob {
351 __u32 version;
352 __u32 rate2quantum;
353 __u32 defcls;
354 __u32 debug;
355
356
357 __u32 direct_pkts;
358};
359enum {
360 TCA_HTB_UNSPEC,
361 TCA_HTB_PARMS,
362 TCA_HTB_INIT,
363 TCA_HTB_CTAB,
364 TCA_HTB_RTAB,
365 TCA_HTB_DIRECT_QLEN,
366 TCA_HTB_RATE64,
367 TCA_HTB_CEIL64,
368 TCA_HTB_PAD,
369 __TCA_HTB_MAX,
370};
371
372#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
373
374struct tc_htb_xstats {
375 __u32 lends;
376 __u32 borrows;
377 __u32 giants;
378 __u32 tokens;
379 __u32 ctokens;
380};
381
382
383
384struct tc_hfsc_qopt {
385 __u16 defcls;
386};
387
388struct tc_service_curve {
389 __u32 m1;
390 __u32 d;
391 __u32 m2;
392};
393
394struct tc_hfsc_stats {
395 __u64 work;
396 __u64 rtwork;
397 __u32 period;
398 __u32 level;
399};
400
401enum {
402 TCA_HFSC_UNSPEC,
403 TCA_HFSC_RSC,
404 TCA_HFSC_FSC,
405 TCA_HFSC_USC,
406 __TCA_HFSC_MAX,
407};
408
409#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
410
411
412
413
414#define TC_CBQ_MAXPRIO 8
415#define TC_CBQ_MAXLEVEL 8
416#define TC_CBQ_DEF_EWMA 5
417
418struct tc_cbq_lssopt {
419 unsigned char change;
420 unsigned char flags;
421#define TCF_CBQ_LSS_BOUNDED 1
422#define TCF_CBQ_LSS_ISOLATED 2
423 unsigned char ewma_log;
424 unsigned char level;
425#define TCF_CBQ_LSS_FLAGS 1
426#define TCF_CBQ_LSS_EWMA 2
427#define TCF_CBQ_LSS_MAXIDLE 4
428#define TCF_CBQ_LSS_MINIDLE 8
429#define TCF_CBQ_LSS_OFFTIME 0x10
430#define TCF_CBQ_LSS_AVPKT 0x20
431 __u32 maxidle;
432 __u32 minidle;
433 __u32 offtime;
434 __u32 avpkt;
435};
436
437struct tc_cbq_wrropt {
438 unsigned char flags;
439 unsigned char priority;
440 unsigned char cpriority;
441 unsigned char __reserved;
442 __u32 allot;
443 __u32 weight;
444};
445
446struct tc_cbq_ovl {
447 unsigned char strategy;
448#define TC_CBQ_OVL_CLASSIC 0
449#define TC_CBQ_OVL_DELAY 1
450#define TC_CBQ_OVL_LOWPRIO 2
451#define TC_CBQ_OVL_DROP 3
452#define TC_CBQ_OVL_RCLASSIC 4
453 unsigned char priority2;
454 __u16 pad;
455 __u32 penalty;
456};
457
458struct tc_cbq_police {
459 unsigned char police;
460 unsigned char __res1;
461 unsigned short __res2;
462};
463
464struct tc_cbq_fopt {
465 __u32 split;
466 __u32 defmap;
467 __u32 defchange;
468};
469
470struct tc_cbq_xstats {
471 __u32 borrows;
472 __u32 overactions;
473 __s32 avgidle;
474 __s32 undertime;
475};
476
477enum {
478 TCA_CBQ_UNSPEC,
479 TCA_CBQ_LSSOPT,
480 TCA_CBQ_WRROPT,
481 TCA_CBQ_FOPT,
482 TCA_CBQ_OVL_STRATEGY,
483 TCA_CBQ_RATE,
484 TCA_CBQ_RTAB,
485 TCA_CBQ_POLICE,
486 __TCA_CBQ_MAX,
487};
488
489#define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1)
490
491
492
493enum {
494 TCA_DSMARK_UNSPEC,
495 TCA_DSMARK_INDICES,
496 TCA_DSMARK_DEFAULT_INDEX,
497 TCA_DSMARK_SET_TC_INDEX,
498 TCA_DSMARK_MASK,
499 TCA_DSMARK_VALUE,
500 __TCA_DSMARK_MAX,
501};
502
503#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
504
505
506
507enum {
508 TCA_ATM_UNSPEC,
509 TCA_ATM_FD,
510 TCA_ATM_PTR,
511 TCA_ATM_HDR,
512 TCA_ATM_EXCESS,
513 TCA_ATM_ADDR,
514 TCA_ATM_STATE,
515 __TCA_ATM_MAX,
516};
517
518#define TCA_ATM_MAX (__TCA_ATM_MAX - 1)
519
520
521
522enum {
523 TCA_NETEM_UNSPEC,
524 TCA_NETEM_CORR,
525 TCA_NETEM_DELAY_DIST,
526 TCA_NETEM_REORDER,
527 TCA_NETEM_CORRUPT,
528 TCA_NETEM_LOSS,
529 TCA_NETEM_RATE,
530 TCA_NETEM_ECN,
531 TCA_NETEM_RATE64,
532 TCA_NETEM_PAD,
533 __TCA_NETEM_MAX,
534};
535
536#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
537
538struct tc_netem_qopt {
539 __u32 latency;
540 __u32 limit;
541 __u32 loss;
542 __u32 gap;
543 __u32 duplicate;
544 __u32 jitter;
545};
546
547struct tc_netem_corr {
548 __u32 delay_corr;
549 __u32 loss_corr;
550 __u32 dup_corr;
551};
552
553struct tc_netem_reorder {
554 __u32 probability;
555 __u32 correlation;
556};
557
558struct tc_netem_corrupt {
559 __u32 probability;
560 __u32 correlation;
561};
562
563struct tc_netem_rate {
564 __u32 rate;
565 __s32 packet_overhead;
566 __u32 cell_size;
567 __s32 cell_overhead;
568};
569
570enum {
571 NETEM_LOSS_UNSPEC,
572 NETEM_LOSS_GI,
573 NETEM_LOSS_GE,
574 __NETEM_LOSS_MAX
575};
576#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
577
578
579struct tc_netem_gimodel {
580 __u32 p13;
581 __u32 p31;
582 __u32 p32;
583 __u32 p14;
584 __u32 p23;
585};
586
587
588struct tc_netem_gemodel {
589 __u32 p;
590 __u32 r;
591 __u32 h;
592 __u32 k1;
593};
594
595#define NETEM_DIST_SCALE 8192
596#define NETEM_DIST_MAX 16384
597
598
599
600enum {
601 TCA_DRR_UNSPEC,
602 TCA_DRR_QUANTUM,
603 __TCA_DRR_MAX
604};
605
606#define TCA_DRR_MAX (__TCA_DRR_MAX - 1)
607
608struct tc_drr_stats {
609 __u32 deficit;
610};
611
612
613#define TC_QOPT_BITMASK 15
614#define TC_QOPT_MAX_QUEUE 16
615
616struct tc_mqprio_qopt {
617 __u8 num_tc;
618 __u8 prio_tc_map[TC_QOPT_BITMASK + 1];
619 __u8 hw;
620 __u16 count[TC_QOPT_MAX_QUEUE];
621 __u16 offset[TC_QOPT_MAX_QUEUE];
622};
623
624
625
626enum {
627 TCA_SFB_UNSPEC,
628 TCA_SFB_PARMS,
629 __TCA_SFB_MAX,
630};
631
632#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
633
634
635
636
637struct tc_sfb_qopt {
638 __u32 rehash_interval;
639 __u32 warmup_time;
640 __u32 max;
641 __u32 bin_size;
642 __u32 increment;
643 __u32 decrement;
644 __u32 limit;
645 __u32 penalty_rate;
646 __u32 penalty_burst;
647};
648
649struct tc_sfb_xstats {
650 __u32 earlydrop;
651 __u32 penaltydrop;
652 __u32 bucketdrop;
653 __u32 queuedrop;
654 __u32 childdrop;
655 __u32 marked;
656 __u32 maxqlen;
657 __u32 maxprob;
658 __u32 avgprob;
659};
660
661#define SFB_MAX_PROB 0xFFFF
662
663
664enum {
665 TCA_QFQ_UNSPEC,
666 TCA_QFQ_WEIGHT,
667 TCA_QFQ_LMAX,
668 __TCA_QFQ_MAX
669};
670
671#define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1)
672
673struct tc_qfq_stats {
674 __u32 weight;
675 __u32 lmax;
676};
677
678
679
680enum {
681 TCA_CODEL_UNSPEC,
682 TCA_CODEL_TARGET,
683 TCA_CODEL_LIMIT,
684 TCA_CODEL_INTERVAL,
685 TCA_CODEL_ECN,
686 TCA_CODEL_CE_THRESHOLD,
687 __TCA_CODEL_MAX
688};
689
690#define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1)
691
692struct tc_codel_xstats {
693 __u32 maxpacket;
694 __u32 count;
695
696
697 __u32 lastcount;
698 __u32 ldelay;
699 __s32 drop_next;
700 __u32 drop_overlimit;
701 __u32 ecn_mark;
702 __u32 dropping;
703 __u32 ce_mark;
704};
705
706
707
708enum {
709 TCA_FQ_CODEL_UNSPEC,
710 TCA_FQ_CODEL_TARGET,
711 TCA_FQ_CODEL_LIMIT,
712 TCA_FQ_CODEL_INTERVAL,
713 TCA_FQ_CODEL_ECN,
714 TCA_FQ_CODEL_FLOWS,
715 TCA_FQ_CODEL_QUANTUM,
716 TCA_FQ_CODEL_CE_THRESHOLD,
717 TCA_FQ_CODEL_DROP_BATCH_SIZE,
718 TCA_FQ_CODEL_MEMORY_LIMIT,
719 __TCA_FQ_CODEL_MAX
720};
721
722#define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1)
723
724enum {
725 TCA_FQ_CODEL_XSTATS_QDISC,
726 TCA_FQ_CODEL_XSTATS_CLASS,
727};
728
729struct tc_fq_codel_qd_stats {
730 __u32 maxpacket;
731 __u32 drop_overlimit;
732
733
734 __u32 ecn_mark;
735
736
737 __u32 new_flow_count;
738
739
740 __u32 new_flows_len;
741 __u32 old_flows_len;
742 __u32 ce_mark;
743 __u32 memory_usage;
744 __u32 drop_overmemory;
745};
746
747struct tc_fq_codel_cl_stats {
748 __s32 deficit;
749 __u32 ldelay;
750
751
752 __u32 count;
753 __u32 lastcount;
754 __u32 dropping;
755 __s32 drop_next;
756};
757
758struct tc_fq_codel_xstats {
759 __u32 type;
760 union {
761 struct tc_fq_codel_qd_stats qdisc_stats;
762 struct tc_fq_codel_cl_stats class_stats;
763 };
764};
765
766
767
768enum {
769 TCA_FQ_UNSPEC,
770
771 TCA_FQ_PLIMIT,
772
773 TCA_FQ_FLOW_PLIMIT,
774
775 TCA_FQ_QUANTUM,
776
777 TCA_FQ_INITIAL_QUANTUM,
778
779 TCA_FQ_RATE_ENABLE,
780
781 TCA_FQ_FLOW_DEFAULT_RATE,
782
783 TCA_FQ_FLOW_MAX_RATE,
784
785 TCA_FQ_BUCKETS_LOG,
786
787 TCA_FQ_FLOW_REFILL_DELAY,
788
789 TCA_FQ_ORPHAN_MASK,
790
791 __TCA_FQ_MAX
792};
793
794#define TCA_FQ_MAX (__TCA_FQ_MAX - 1)
795
796struct tc_fq_qd_stats {
797 __u64 gc_flows;
798 __u64 highprio_packets;
799 __u64 tcp_retrans;
800 __u64 throttled;
801 __u64 flows_plimit;
802 __u64 pkts_too_long;
803 __u64 allocation_errors;
804 __s64 time_next_delayed_flow;
805 __u32 flows;
806 __u32 inactive_flows;
807 __u32 throttled_flows;
808 __u32 pad;
809};
810#endif
811