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