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
620enum {
621 TC_MQPRIO_HW_OFFLOAD_NONE,
622 TC_MQPRIO_HW_OFFLOAD_TCS,
623 __TC_MQPRIO_HW_OFFLOAD_MAX
624};
625
626#define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1)
627
628struct tc_mqprio_qopt {
629 __u8 num_tc;
630 __u8 prio_tc_map[TC_QOPT_BITMASK + 1];
631 __u8 hw;
632 __u16 count[TC_QOPT_MAX_QUEUE];
633 __u16 offset[TC_QOPT_MAX_QUEUE];
634};
635
636
637
638enum {
639 TCA_SFB_UNSPEC,
640 TCA_SFB_PARMS,
641 __TCA_SFB_MAX,
642};
643
644#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
645
646
647
648
649struct tc_sfb_qopt {
650 __u32 rehash_interval;
651 __u32 warmup_time;
652 __u32 max;
653 __u32 bin_size;
654 __u32 increment;
655 __u32 decrement;
656 __u32 limit;
657 __u32 penalty_rate;
658 __u32 penalty_burst;
659};
660
661struct tc_sfb_xstats {
662 __u32 earlydrop;
663 __u32 penaltydrop;
664 __u32 bucketdrop;
665 __u32 queuedrop;
666 __u32 childdrop;
667 __u32 marked;
668 __u32 maxqlen;
669 __u32 maxprob;
670 __u32 avgprob;
671};
672
673#define SFB_MAX_PROB 0xFFFF
674
675
676enum {
677 TCA_QFQ_UNSPEC,
678 TCA_QFQ_WEIGHT,
679 TCA_QFQ_LMAX,
680 __TCA_QFQ_MAX
681};
682
683#define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1)
684
685struct tc_qfq_stats {
686 __u32 weight;
687 __u32 lmax;
688};
689
690
691
692enum {
693 TCA_CODEL_UNSPEC,
694 TCA_CODEL_TARGET,
695 TCA_CODEL_LIMIT,
696 TCA_CODEL_INTERVAL,
697 TCA_CODEL_ECN,
698 TCA_CODEL_CE_THRESHOLD,
699 __TCA_CODEL_MAX
700};
701
702#define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1)
703
704struct tc_codel_xstats {
705 __u32 maxpacket;
706 __u32 count;
707
708
709 __u32 lastcount;
710 __u32 ldelay;
711 __s32 drop_next;
712 __u32 drop_overlimit;
713 __u32 ecn_mark;
714 __u32 dropping;
715 __u32 ce_mark;
716};
717
718
719
720enum {
721 TCA_FQ_CODEL_UNSPEC,
722 TCA_FQ_CODEL_TARGET,
723 TCA_FQ_CODEL_LIMIT,
724 TCA_FQ_CODEL_INTERVAL,
725 TCA_FQ_CODEL_ECN,
726 TCA_FQ_CODEL_FLOWS,
727 TCA_FQ_CODEL_QUANTUM,
728 TCA_FQ_CODEL_CE_THRESHOLD,
729 TCA_FQ_CODEL_DROP_BATCH_SIZE,
730 TCA_FQ_CODEL_MEMORY_LIMIT,
731 __TCA_FQ_CODEL_MAX
732};
733
734#define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1)
735
736enum {
737 TCA_FQ_CODEL_XSTATS_QDISC,
738 TCA_FQ_CODEL_XSTATS_CLASS,
739};
740
741struct tc_fq_codel_qd_stats {
742 __u32 maxpacket;
743 __u32 drop_overlimit;
744
745
746 __u32 ecn_mark;
747
748
749 __u32 new_flow_count;
750
751
752 __u32 new_flows_len;
753 __u32 old_flows_len;
754 __u32 ce_mark;
755 __u32 memory_usage;
756 __u32 drop_overmemory;
757};
758
759struct tc_fq_codel_cl_stats {
760 __s32 deficit;
761 __u32 ldelay;
762
763
764 __u32 count;
765 __u32 lastcount;
766 __u32 dropping;
767 __s32 drop_next;
768};
769
770struct tc_fq_codel_xstats {
771 __u32 type;
772 union {
773 struct tc_fq_codel_qd_stats qdisc_stats;
774 struct tc_fq_codel_cl_stats class_stats;
775 };
776};
777
778
779
780enum {
781 TCA_FQ_UNSPEC,
782
783 TCA_FQ_PLIMIT,
784
785 TCA_FQ_FLOW_PLIMIT,
786
787 TCA_FQ_QUANTUM,
788
789 TCA_FQ_INITIAL_QUANTUM,
790
791 TCA_FQ_RATE_ENABLE,
792
793 TCA_FQ_FLOW_DEFAULT_RATE,
794
795 TCA_FQ_FLOW_MAX_RATE,
796
797 TCA_FQ_BUCKETS_LOG,
798
799 TCA_FQ_FLOW_REFILL_DELAY,
800
801 TCA_FQ_ORPHAN_MASK,
802
803 TCA_FQ_LOW_RATE_THRESHOLD,
804
805 __TCA_FQ_MAX
806};
807
808#define TCA_FQ_MAX (__TCA_FQ_MAX - 1)
809
810struct tc_fq_qd_stats {
811 __u64 gc_flows;
812 __u64 highprio_packets;
813 __u64 tcp_retrans;
814 __u64 throttled;
815 __u64 flows_plimit;
816 __u64 pkts_too_long;
817 __u64 allocation_errors;
818 __s64 time_next_delayed_flow;
819 __u32 flows;
820 __u32 inactive_flows;
821 __u32 throttled_flows;
822 __u32 unthrottle_latency_ns;
823};
824
825
826
827enum {
828 TCA_HHF_UNSPEC,
829 TCA_HHF_BACKLOG_LIMIT,
830 TCA_HHF_QUANTUM,
831 TCA_HHF_HH_FLOWS_LIMIT,
832 TCA_HHF_RESET_TIMEOUT,
833 TCA_HHF_ADMIT_BYTES,
834 TCA_HHF_EVICT_TIMEOUT,
835 TCA_HHF_NON_HH_WEIGHT,
836 __TCA_HHF_MAX
837};
838
839#define TCA_HHF_MAX (__TCA_HHF_MAX - 1)
840
841struct tc_hhf_xstats {
842 __u32 drop_overlimit;
843
844
845 __u32 hh_overlimit;
846 __u32 hh_tot_count;
847 __u32 hh_cur_count;
848};
849
850
851enum {
852 TCA_PIE_UNSPEC,
853 TCA_PIE_TARGET,
854 TCA_PIE_LIMIT,
855 TCA_PIE_TUPDATE,
856 TCA_PIE_ALPHA,
857 TCA_PIE_BETA,
858 TCA_PIE_ECN,
859 TCA_PIE_BYTEMODE,
860 __TCA_PIE_MAX
861};
862#define TCA_PIE_MAX (__TCA_PIE_MAX - 1)
863
864struct tc_pie_xstats {
865 __u32 prob;
866 __u32 delay;
867 __u32 avg_dq_rate;
868 __u32 packets_in;
869 __u32 dropped;
870 __u32 overlimit;
871 __u32 maxq;
872 __u32 ecn_mark;
873};
874#endif
875