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