pkt_sched.h
001: #ifndef __LINUX_PKT_SCHED_H
002: #define __LINUX_PKT_SCHED_H
003:
004: #include <linux/types.h>
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019: #define TC_PRIO_BESTEFFORT 0
020: #define TC_PRIO_FILLER 1
021: #define TC_PRIO_BULK 2
022: #define TC_PRIO_INTERACTIVE_BULK 4
023: #define TC_PRIO_INTERACTIVE 6
024: #define TC_PRIO_CONTROL 7
025:
026: #define TC_PRIO_MAX 15
027:
028:
029:
030:
031:
032: struct tc_stats {
033: __u64 bytes;
034: __u32 packets;
035: __u32 drops;
036: __u32 overlimits;
037:
038: __u32 bps;
039: __u32 pps;
040: __u32 qlen;
041: __u32 backlog;
042: };
043:
044: struct tc_estimator {
045: signed char interval;
046: unsigned char ewma_log;
047: };
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066: #define TC_H_MAJ_MASK (0xFFFF0000U)
067: #define TC_H_MIN_MASK (0x0000FFFFU)
068: #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
069: #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
070: #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
071:
072: #define TC_H_UNSPEC (0U)
073: #define TC_H_ROOT (0xFFFFFFFFU)
074: #define TC_H_INGRESS (0xFFFFFFF1U)
075:
076: struct tc_ratespec {
077: unsigned char cell_log;
078: unsigned char __reserved;
079: unsigned short overhead;
080: short cell_align;
081: unsigned short mpu;
082: __u32 rate;
083: };
084:
085: #define TC_RTAB_SIZE 1024
086:
087: struct tc_sizespec {
088: unsigned char cell_log;
089: unsigned char size_log;
090: short cell_align;
091: int overhead;
092: unsigned int linklayer;
093: unsigned int mpu;
094: unsigned int mtu;
095: unsigned int tsize;
096: };
097:
098: enum {
099: TCA_STAB_UNSPEC,
100: TCA_STAB_BASE,
101: TCA_STAB_DATA,
102: __TCA_STAB_MAX
103: };
104:
105: #define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
106:
107:
108:
109: struct tc_fifo_qopt {
110: __u32 limit;
111: };
112:
113:
114:
115: #define TCQ_PRIO_BANDS 16
116: #define TCQ_MIN_PRIO_BANDS 2
117:
118: struct tc_prio_qopt {
119: int bands;
120: __u8 priomap[TC_PRIO_MAX+1];
121: };
122:
123:
124:
125: struct tc_multiq_qopt {
126: __u16 bands;
127: __u16 max_bands;
128: };
129:
130:
131:
132: struct tc_tbf_qopt {
133: struct tc_ratespec rate;
134: struct tc_ratespec peakrate;
135: __u32 limit;
136: __u32 buffer;
137: __u32 mtu;
138: };
139:
140: enum {
141: TCA_TBF_UNSPEC,
142: TCA_TBF_PARMS,
143: TCA_TBF_RTAB,
144: TCA_TBF_PTAB,
145: __TCA_TBF_MAX,
146: };
147:
148: #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
149:
150:
151:
152:
153:
154:
155:
156:
157: struct tc_sfq_qopt {
158: unsigned quantum;
159: int perturb_period;
160: __u32 limit;
161: unsigned divisor;
162: unsigned flows;
163: };
164:
165: struct tc_sfq_xstats {
166: __s32 allot;
167: };
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180: enum {
181: TCA_RED_UNSPEC,
182: TCA_RED_PARMS,
183: TCA_RED_STAB,
184: __TCA_RED_MAX,
185: };
186:
187: #define TCA_RED_MAX (__TCA_RED_MAX - 1)
188:
189: struct tc_red_qopt {
190: __u32 limit;
191: __u32 qth_min;
192: __u32 qth_max;
193: unsigned char Wlog;
194: unsigned char Plog;
195: unsigned char Scell_log;
196: unsigned char flags;
197: #define TC_RED_ECN 1
198: #define TC_RED_HARDDROP 2
199: };
200:
201: struct tc_red_xstats {
202: __u32 early;
203: __u32 pdrop;
204: __u32 other;
205: __u32 marked;
206: };
207:
208:
209:
210: #define MAX_DPs 16
211:
212: enum {
213: TCA_GRED_UNSPEC,
214: TCA_GRED_PARMS,
215: TCA_GRED_STAB,
216: TCA_GRED_DPS,
217: __TCA_GRED_MAX,
218: };
219:
220: #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
221:
222: struct tc_gred_qopt {
223: __u32 limit;
224: __u32 qth_min;
225: __u32 qth_max;
226: __u32 DP;
227: __u32 backlog;
228: __u32 qave;
229: __u32 forced;
230: __u32 early;
231: __u32 other;
232: __u32 pdrop;
233: __u8 Wlog;
234: __u8 Plog;
235: __u8 Scell_log;
236: __u8 prio;
237: __u32 packets;
238: __u32 bytesin;
239: };
240:
241:
242: struct tc_gred_sopt {
243: __u32 DPs;
244: __u32 def_DP;
245: __u8 grio;
246: __u8 flags;
247: __u16 pad1;
248: };
249:
250:
251:
252: enum {
253: TCA_CHOKE_UNSPEC,
254: TCA_CHOKE_PARMS,
255: TCA_CHOKE_STAB,
256: __TCA_CHOKE_MAX,
257: };
258:
259: #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
260:
261: struct tc_choke_qopt {
262: __u32 limit;
263: __u32 qth_min;
264: __u32 qth_max;
265: unsigned char Wlog;
266: unsigned char Plog;
267: unsigned char Scell_log;
268: unsigned char flags;
269: };
270:
271: struct tc_choke_xstats {
272: __u32 early;
273: __u32 pdrop;
274: __u32 other;
275: __u32 marked;
276: __u32 matched;
277: };
278:
279:
280: #define TC_HTB_NUMPRIO 8
281: #define TC_HTB_MAXDEPTH 8
282: #define TC_HTB_PROTOVER 3
283:
284: struct tc_htb_opt {
285: struct tc_ratespec rate;
286: struct tc_ratespec ceil;
287: __u32 buffer;
288: __u32 cbuffer;
289: __u32 quantum;
290: __u32 level;
291: __u32 prio;
292: };
293: struct tc_htb_glob {
294: __u32 version;
295: __u32 rate2quantum;
296: __u32 defcls;
297: __u32 debug;
298:
299:
300: __u32 direct_pkts;
301: };
302: enum {
303: TCA_HTB_UNSPEC,
304: TCA_HTB_PARMS,
305: TCA_HTB_INIT,
306: TCA_HTB_CTAB,
307: TCA_HTB_RTAB,
308: __TCA_HTB_MAX,
309: };
310:
311: #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
312:
313: struct tc_htb_xstats {
314: __u32 lends;
315: __u32 borrows;
316: __u32 giants;
317: __u32 tokens;
318: __u32 ctokens;
319: };
320:
321:
322:
323: struct tc_hfsc_qopt {
324: __u16 defcls;
325: };
326:
327: struct tc_service_curve {
328: __u32 m1;
329: __u32 d;
330: __u32 m2;
331: };
332:
333: struct tc_hfsc_stats {
334: __u64 work;
335: __u64 rtwork;
336: __u32 period;
337: __u32 level;
338: };
339:
340: enum {
341: TCA_HFSC_UNSPEC,
342: TCA_HFSC_RSC,
343: TCA_HFSC_FSC,
344: TCA_HFSC_USC,
345: __TCA_HFSC_MAX,
346: };
347:
348: #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
349:
350:
351:
352:
353: #define TC_CBQ_MAXPRIO 8
354: #define TC_CBQ_MAXLEVEL 8
355: #define TC_CBQ_DEF_EWMA 5
356:
357: struct tc_cbq_lssopt {
358: unsigned char change;
359: unsigned char flags;
360: #define TCF_CBQ_LSS_BOUNDED 1
361: #define TCF_CBQ_LSS_ISOLATED 2
362: unsigned char ewma_log;
363: unsigned char level;
364: #define TCF_CBQ_LSS_FLAGS 1
365: #define TCF_CBQ_LSS_EWMA 2
366: #define TCF_CBQ_LSS_MAXIDLE 4
367: #define TCF_CBQ_LSS_MINIDLE 8
368: #define TCF_CBQ_LSS_OFFTIME 0x10
369: #define TCF_CBQ_LSS_AVPKT 0x20
370: __u32 maxidle;
371: __u32 minidle;
372: __u32 offtime;
373: __u32 avpkt;
374: };
375:
376: struct tc_cbq_wrropt {
377: unsigned char flags;
378: unsigned char priority;
379: unsigned char cpriority;
380: unsigned char __reserved;
381: __u32 allot;
382: __u32 weight;
383: };
384:
385: struct tc_cbq_ovl {
386: unsigned char strategy;
387: #define TC_CBQ_OVL_CLASSIC 0
388: #define TC_CBQ_OVL_DELAY 1
389: #define TC_CBQ_OVL_LOWPRIO 2
390: #define TC_CBQ_OVL_DROP 3
391: #define TC_CBQ_OVL_RCLASSIC 4
392: unsigned char priority2;
393: __u16 pad;
394: __u32 penalty;
395: };
396:
397: struct tc_cbq_police {
398: unsigned char police;
399: unsigned char __res1;
400: unsigned short __res2;
401: };
402:
403: struct tc_cbq_fopt {
404: __u32 split;
405: __u32 defmap;
406: __u32 defchange;
407: };
408:
409: struct tc_cbq_xstats {
410: __u32 borrows;
411: __u32 overactions;
412: __s32 avgidle;
413: __s32 undertime;
414: };
415:
416: enum {
417: TCA_CBQ_UNSPEC,
418: TCA_CBQ_LSSOPT,
419: TCA_CBQ_WRROPT,
420: TCA_CBQ_FOPT,
421: TCA_CBQ_OVL_STRATEGY,
422: TCA_CBQ_RATE,
423: TCA_CBQ_RTAB,
424: TCA_CBQ_POLICE,
425: __TCA_CBQ_MAX,
426: };
427:
428: #define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1)
429:
430:
431:
432: enum {
433: TCA_DSMARK_UNSPEC,
434: TCA_DSMARK_INDICES,
435: TCA_DSMARK_DEFAULT_INDEX,
436: TCA_DSMARK_SET_TC_INDEX,
437: TCA_DSMARK_MASK,
438: TCA_DSMARK_VALUE,
439: __TCA_DSMARK_MAX,
440: };
441:
442: #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
443:
444:
445:
446: enum {
447: TCA_ATM_UNSPEC,
448: TCA_ATM_FD,
449: TCA_ATM_PTR,
450: TCA_ATM_HDR,
451: TCA_ATM_EXCESS,
452: TCA_ATM_ADDR,
453: TCA_ATM_STATE,
454: __TCA_ATM_MAX,
455: };
456:
457: #define TCA_ATM_MAX (__TCA_ATM_MAX - 1)
458:
459:
460:
461: enum {
462: TCA_NETEM_UNSPEC,
463: TCA_NETEM_CORR,
464: TCA_NETEM_DELAY_DIST,
465: TCA_NETEM_REORDER,
466: TCA_NETEM_CORRUPT,
467: TCA_NETEM_LOSS,
468: __TCA_NETEM_MAX,
469: };
470:
471: #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
472:
473: struct tc_netem_qopt {
474: __u32 latency;
475: __u32 limit;
476: __u32 loss;
477: __u32 gap;
478: __u32 duplicate;
479: __u32 jitter;
480: };
481:
482: struct tc_netem_corr {
483: __u32 delay_corr;
484: __u32 loss_corr;
485: __u32 dup_corr;
486: };
487:
488: struct tc_netem_reorder {
489: __u32 probability;
490: __u32 correlation;
491: };
492:
493: struct tc_netem_corrupt {
494: __u32 probability;
495: __u32 correlation;
496: };
497:
498: enum {
499: NETEM_LOSS_UNSPEC,
500: NETEM_LOSS_GI,
501: NETEM_LOSS_GE,
502: __NETEM_LOSS_MAX
503: };
504: #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
505:
506:
507: struct tc_netem_gimodel {
508: __u32 p13;
509: __u32 p31;
510: __u32 p32;
511: __u32 p14;
512: __u32 p23;
513: };
514:
515:
516: struct tc_netem_gemodel {
517: __u32 p;
518: __u32 r;
519: __u32 h;
520: __u32 k1;
521: };
522:
523: #define NETEM_DIST_SCALE 8192
524: #define NETEM_DIST_MAX 16384
525:
526:
527:
528: enum {
529: TCA_DRR_UNSPEC,
530: TCA_DRR_QUANTUM,
531: __TCA_DRR_MAX
532: };
533:
534: #define TCA_DRR_MAX (__TCA_DRR_MAX - 1)
535:
536: struct tc_drr_stats {
537: __u32 deficit;
538: };
539:
540:
541: #define TC_QOPT_BITMASK 15
542: #define TC_QOPT_MAX_QUEUE 16
543:
544: struct tc_mqprio_qopt {
545: __u8 num_tc;
546: __u8 prio_tc_map[TC_QOPT_BITMASK + 1];
547: __u8 hw;
548: __u16 count[TC_QOPT_MAX_QUEUE];
549: __u16 offset[TC_QOPT_MAX_QUEUE];
550: };
551:
552:
553:
554: enum {
555: TCA_SFB_UNSPEC,
556: TCA_SFB_PARMS,
557: __TCA_SFB_MAX,
558: };
559:
560: #define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
561:
562:
563:
564:
565: struct tc_sfb_qopt {
566: __u32 rehash_interval;
567: __u32 warmup_time;
568: __u32 max;
569: __u32 bin_size;
570: __u32 increment;
571: __u32 decrement;
572: __u32 limit;
573: __u32 penalty_rate;
574: __u32 penalty_burst;
575: };
576:
577: struct tc_sfb_xstats {
578: __u32 earlydrop;
579: __u32 penaltydrop;
580: __u32 bucketdrop;
581: __u32 queuedrop;
582: __u32 childdrop;
583: __u32 marked;
584: __u32 maxqlen;
585: __u32 maxprob;
586: __u32 avgprob;
587: };
588:
589: #define SFB_MAX_PROB 0xFFFF
590:
591:
592: enum {
593: TCA_QFQ_UNSPEC,
594: TCA_QFQ_WEIGHT,
595: TCA_QFQ_LMAX,
596: __TCA_QFQ_MAX
597: };
598:
599: #define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1)
600:
601: struct tc_qfq_stats {
602: __u32 weight;
603: __u32 lmax;
604: };
605:
606: #endif
607:
© Andrew Scott 2006 -
2025,
All Rights Reserved