Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pkt_sched.h
Go to the documentation of this file.
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 */
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 struct tc_ratespec {
77  unsigned char cell_log;
78  unsigned char __reserved;
79  unsigned short overhead;
80  short cell_align;
81  unsigned short mpu;
83 };
84 
85 #define TC_RTAB_SIZE 1024
86 
87 struct tc_sizespec {
88  unsigned char cell_log;
89  unsigned char size_log;
90  short cell_align;
91  int overhead;
92  unsigned int linklayer;
93  unsigned int mpu;
94  unsigned int mtu;
95  unsigned int tsize;
96 };
97 
98 enum {
103 };
104 
105 #define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
106 
107 /* FIFO section */
108 
109 struct tc_fifo_qopt {
110  __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */
111 };
112 
113 /* PRIO section */
114 
115 #define TCQ_PRIO_BANDS 16
116 #define TCQ_MIN_PRIO_BANDS 2
117 
118 struct tc_prio_qopt {
119  int bands; /* Number of bands */
120  __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
121 };
122 
123 /* MULTIQ section */
124 
126  __u16 bands; /* Number of bands */
127  __u16 max_bands; /* Maximum number of queues */
128 };
129 
130 /* PLUG section */
131 
132 #define TCQ_PLUG_BUFFER 0
133 #define TCQ_PLUG_RELEASE_ONE 1
134 #define TCQ_PLUG_RELEASE_INDEFINITE 2
135 #define TCQ_PLUG_LIMIT 3
136 
137 struct tc_plug_qopt {
138  /* TCQ_PLUG_BUFFER: Inset a plug into the queue and
139  * buffer any incoming packets
140  * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
141  * to beginning of the next plug.
142  * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
143  * Stop buffering packets until the next TCQ_PLUG_BUFFER
144  * command is received (just act as a pass-thru queue).
145  * TCQ_PLUG_LIMIT: Increase/decrease queue size
146  */
147  int action;
149 };
150 
151 /* TBF section */
152 
153 struct tc_tbf_qopt {
159 };
160 
161 enum {
167 };
168 
169 #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
170 
171 
172 /* TEQL section */
173 
174 /* TEQL does not require any parameters */
175 
176 /* SFQ section */
177 
178 struct tc_sfq_qopt {
179  unsigned quantum; /* Bytes per round allocated to flow */
180  int perturb_period; /* Period of hash perturbation */
181  __u32 limit; /* Maximal packets in queue */
182  unsigned divisor; /* Hash divisor */
183  unsigned flows; /* Maximal number of flows */
184 };
185 
187  __u32 prob_drop; /* Early drops, below max threshold */
188  __u32 forced_drop; /* Early drops, after max threshold */
189  __u32 prob_mark; /* Marked packets, below max threshold */
190  __u32 forced_mark; /* Marked packets, after max threshold */
191  __u32 prob_mark_head; /* Marked packets, below max threshold */
192  __u32 forced_mark_head;/* Marked packets, after max threshold */
193 };
194 
196  struct tc_sfq_qopt v0;
197  unsigned int depth; /* max number of packets per flow */
198  unsigned int headdrop;
199 /* SFQRED parameters */
200  __u32 limit; /* HARD maximal flow queue length (bytes) */
201  __u32 qth_min; /* Min average length threshold (bytes) */
202  __u32 qth_max; /* Max average length threshold (bytes) */
203  unsigned char Wlog; /* log(W) */
204  unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
205  unsigned char Scell_log; /* cell size for idle damping */
206  unsigned char flags;
207  __u32 max_P; /* probability, high resolution */
208 /* SFQRED stats */
210 };
211 
212 
215 };
216 
217 /* RED section */
218 
219 enum {
225 };
226 
227 #define TCA_RED_MAX (__TCA_RED_MAX - 1)
228 
229 struct tc_red_qopt {
230  __u32 limit; /* HARD maximal queue length (bytes) */
231  __u32 qth_min; /* Min average length threshold (bytes) */
232  __u32 qth_max; /* Max average length threshold (bytes) */
233  unsigned char Wlog; /* log(W) */
234  unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
235  unsigned char Scell_log; /* cell size for idle damping */
236  unsigned char flags;
237 #define TC_RED_ECN 1
238 #define TC_RED_HARDDROP 2
239 #define TC_RED_ADAPTATIVE 4
240 };
241 
243  __u32 early; /* Early drops */
244  __u32 pdrop; /* Drops due to queue limits */
245  __u32 other; /* Drops due to drop() calls */
246  __u32 marked; /* Marked packets */
247 };
248 
249 /* GRED section */
250 
251 #define MAX_DPs 16
252 
253 enum {
260 };
261 
262 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
263 
264 struct tc_gred_qopt {
265  __u32 limit; /* HARD maximal queue length (bytes) */
266  __u32 qth_min; /* Min average length threshold (bytes) */
267  __u32 qth_max; /* Max average length threshold (bytes) */
268  __u32 DP; /* up to 2^32 DPs */
275  __u8 Wlog; /* log(W) */
276  __u8 Plog; /* log(P_max/(qth_max-qth_min)) */
277  __u8 Scell_log; /* cell size for idle damping */
278  __u8 prio; /* prio of this VQ */
281 };
282 
283 /* gred setup */
284 struct tc_gred_sopt {
290 };
291 
292 /* CHOKe section */
293 
294 enum {
300 };
301 
302 #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
303 
305  __u32 limit; /* Hard queue length (packets) */
306  __u32 qth_min; /* Min average threshold (packets) */
307  __u32 qth_max; /* Max average threshold (packets) */
308  unsigned char Wlog; /* log(W) */
309  unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
310  unsigned char Scell_log; /* cell size for idle damping */
311  unsigned char flags; /* see RED flags */
312 };
313 
315  __u32 early; /* Early drops */
316  __u32 pdrop; /* Drops due to queue limits */
317  __u32 other; /* Drops due to drop() calls */
318  __u32 marked; /* Marked packets */
319  __u32 matched; /* Drops due to flow match */
320 };
321 
322 /* HTB section */
323 #define TC_HTB_NUMPRIO 8
324 #define TC_HTB_MAXDEPTH 8
325 #define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */
326 
327 struct tc_htb_opt {
333  __u32 level; /* out only */
335 };
336 struct tc_htb_glob {
337  __u32 version; /* to match HTB/TC */
338  __u32 rate2quantum; /* bps->quantum divisor */
339  __u32 defcls; /* default class number */
340  __u32 debug; /* debug flags */
341 
342  /* stats */
343  __u32 direct_pkts; /* count of non shaped packets */
344 };
345 enum {
352 };
353 
354 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
355 
359  __u32 giants; /* too big packets (rate will not be accurate) */
362 };
363 
364 /* HFSC section */
365 
366 struct tc_hfsc_qopt {
367  __u16 defcls; /* default class */
368 };
369 
371  __u32 m1; /* slope of the first segment in bps */
372  __u32 d; /* x-projection of the first segment in us */
373  __u32 m2; /* slope of the second segment in bps */
374 };
375 
377  __u64 work; /* total work done */
378  __u64 rtwork; /* work done by real-time criteria */
379  __u32 period; /* current period */
380  __u32 level; /* class level in hierarchy */
381 };
382 
383 enum {
389 };
390 
391 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
392 
393 
394 /* CBQ section */
395 
396 #define TC_CBQ_MAXPRIO 8
397 #define TC_CBQ_MAXLEVEL 8
398 #define TC_CBQ_DEF_EWMA 5
399 
401  unsigned char change;
402  unsigned char flags;
403 #define TCF_CBQ_LSS_BOUNDED 1
404 #define TCF_CBQ_LSS_ISOLATED 2
405  unsigned char ewma_log;
406  unsigned char level;
407 #define TCF_CBQ_LSS_FLAGS 1
408 #define TCF_CBQ_LSS_EWMA 2
409 #define TCF_CBQ_LSS_MAXIDLE 4
410 #define TCF_CBQ_LSS_MINIDLE 8
411 #define TCF_CBQ_LSS_OFFTIME 0x10
412 #define TCF_CBQ_LSS_AVPKT 0x20
417 };
418 
420  unsigned char flags;
421  unsigned char priority;
422  unsigned char cpriority;
423  unsigned char __reserved;
426 };
427 
428 struct tc_cbq_ovl {
429  unsigned char strategy;
430 #define TC_CBQ_OVL_CLASSIC 0
431 #define TC_CBQ_OVL_DELAY 1
432 #define TC_CBQ_OVL_LOWPRIO 2
433 #define TC_CBQ_OVL_DROP 3
434 #define TC_CBQ_OVL_RCLASSIC 4
435  unsigned char priority2;
438 };
439 
441  unsigned char police;
442  unsigned char __res1;
443  unsigned short __res2;
444 };
445 
446 struct tc_cbq_fopt {
450 };
451 
457 };
458 
459 enum {
469 };
470 
471 #define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1)
472 
473 /* dsmark section */
474 
475 enum {
483 };
484 
485 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
486 
487 /* ATM section */
488 
489 enum {
491  TCA_ATM_FD, /* file/socket descriptor */
492  TCA_ATM_PTR, /* pointer to descriptor - later */
493  TCA_ATM_HDR, /* LL header */
494  TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */
495  TCA_ATM_ADDR, /* PVC address (for output only) */
496  TCA_ATM_STATE, /* VC state (ATM_VS_*; for output only) */
498 };
499 
500 #define TCA_ATM_MAX (__TCA_ATM_MAX - 1)
501 
502 /* Network emulator */
503 
504 enum {
514 };
515 
516 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
517 
519  __u32 latency; /* added delay (us) */
520  __u32 limit; /* fifo limit (packets) */
521  __u32 loss; /* random packet loss (0=none ~0=100%) */
522  __u32 gap; /* re-ordering gap (0 for none) */
523  __u32 duplicate; /* random packet dup (0=none ~0=100%) */
524  __u32 jitter; /* random jitter in latency (us) */
525 };
526 
528  __u32 delay_corr; /* delay correlation */
529  __u32 loss_corr; /* packet loss correlation */
530  __u32 dup_corr; /* duplicate correlation */
531 };
532 
536 };
537 
541 };
542 
544  __u32 rate; /* byte/s */
548 };
549 
550 enum {
552  NETEM_LOSS_GI, /* General Intuitive - 4 state model */
553  NETEM_LOSS_GE, /* Gilbert Elliot models */
555 };
556 #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
557 
558 /* State transition probabilities for 4 state model */
565 };
566 
567 /* Gilbert-Elliot models */
573 };
574 
575 #define NETEM_DIST_SCALE 8192
576 #define NETEM_DIST_MAX 16384
577 
578 /* DRR */
579 
580 enum {
584 };
585 
586 #define TCA_DRR_MAX (__TCA_DRR_MAX - 1)
587 
588 struct tc_drr_stats {
590 };
591 
592 /* MQPRIO */
593 #define TC_QOPT_BITMASK 15
594 #define TC_QOPT_MAX_QUEUE 16
595 
602 };
603 
604 /* SFB */
605 
606 enum {
610 };
611 
612 #define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
613 
614 /*
615  * Note: increment, decrement are Q0.16 fixed-point values.
616  */
617 struct tc_sfb_qopt {
618  __u32 rehash_interval; /* delay between hash move, in ms */
619  __u32 warmup_time; /* double buffering warmup time in ms (warmup_time < rehash_interval) */
620  __u32 max; /* max len of qlen_min */
621  __u32 bin_size; /* maximum queue length per bin */
622  __u32 increment; /* probability increment, (d1 in Blue) */
623  __u32 decrement; /* probability decrement, (d2 in Blue) */
624  __u32 limit; /* max SFB queue length */
625  __u32 penalty_rate; /* inelastic flows are rate limited to 'rate' pps */
627 };
628 
634  __u32 childdrop; /* drops in child qdisc */
639 };
640 
641 #define SFB_MAX_PROB 0xFFFF
642 
643 /* QFQ */
644 enum {
649 };
650 
651 #define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1)
652 
653 struct tc_qfq_stats {
656 };
657 
658 /* CODEL */
659 
660 enum {
667 };
668 
669 #define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1)
670 
672  __u32 maxpacket; /* largest packet we've seen so far */
673  __u32 count; /* how many drops we've done since the last time we
674  * entered dropping state
675  */
676  __u32 lastcount; /* count at entry to dropping state */
677  __u32 ldelay; /* in-queue delay seen by most recently dequeued packet */
678  __s32 drop_next; /* time to drop next packet */
679  __u32 drop_overlimit; /* number of time max qdisc packet limit was hit */
680  __u32 ecn_mark; /* number of packets we ECN marked instead of dropped */
681  __u32 dropping; /* are we in dropping state ? */
682 };
683 
684 /* FQ_CODEL */
685 
686 enum {
695 };
696 
697 #define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1)
698 
699 enum {
702 };
703 
705  __u32 maxpacket; /* largest packet we've seen so far */
706  __u32 drop_overlimit; /* number of time max qdisc
707  * packet limit was hit
708  */
709  __u32 ecn_mark; /* number of packets we ECN marked
710  * instead of being dropped
711  */
712  __u32 new_flow_count; /* number of time packets
713  * created a 'new flow'
714  */
715  __u32 new_flows_len; /* count of flows in new list */
716  __u32 old_flows_len; /* count of flows in old list */
717 };
718 
721  __u32 ldelay; /* in-queue delay seen by most recently
722  * dequeued packet
723  */
728 };
729 
732  union {
735  };
736 };
737 
738 #endif