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{
34 __u64 bytes;
35 __u32 packets;
36 __u32 drops;
37 __u32 overlimits;
38
39 __u32 bps;
40 __u32 pps;
41 __u32 qlen;
42 __u32 backlog;
43};
44
45struct tc_estimator
46{
47 signed char interval;
48 unsigned char ewma_log;
49};
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68#define TC_H_MAJ_MASK (0xFFFF0000U)
69#define TC_H_MIN_MASK (0x0000FFFFU)
70#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
71#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
72#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
73
74#define TC_H_UNSPEC (0U)
75#define TC_H_ROOT (0xFFFFFFFFU)
76#define TC_H_INGRESS (0xFFFFFFF1U)
77
78struct tc_ratespec
79{
80 unsigned char cell_log;
81 unsigned char __reserved;
82 unsigned short overhead;
83 short cell_align;
84 unsigned short mpu;
85 __u32 rate;
86};
87
88#define TC_RTAB_SIZE 1024
89
90struct tc_sizespec {
91 unsigned char cell_log;
92 unsigned char size_log;
93 short cell_align;
94 int overhead;
95 unsigned int linklayer;
96 unsigned int mpu;
97 unsigned int mtu;
98 unsigned int tsize;
99};
100
101enum {
102 TCA_STAB_UNSPEC,
103 TCA_STAB_BASE,
104 TCA_STAB_DATA,
105 __TCA_STAB_MAX
106};
107
108#define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
109
110
111
112struct tc_fifo_qopt
113{
114 __u32 limit;
115};
116
117
118
119#define TCQ_PRIO_BANDS 16
120#define TCQ_MIN_PRIO_BANDS 2
121
122struct tc_prio_qopt
123{
124 int bands;
125 __u8 priomap[TC_PRIO_MAX+1];
126};
127
128
129
130struct tc_multiq_qopt {
131 __u16 bands;
132 __u16 max_bands;
133};
134
135
136
137struct tc_tbf_qopt
138{
139 struct tc_ratespec rate;
140 struct tc_ratespec peakrate;
141 __u32 limit;
142 __u32 buffer;
143 __u32 mtu;
144};
145
146enum
147{
148 TCA_TBF_UNSPEC,
149 TCA_TBF_PARMS,
150 TCA_TBF_RTAB,
151 TCA_TBF_PTAB,
152 __TCA_TBF_MAX,
153};
154
155#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
156
157
158
159
160
161
162
163
164struct tc_sfq_qopt
165{
166 unsigned quantum;
167 int perturb_period;
168 __u32 limit;
169 unsigned divisor;
170 unsigned flows;
171};
172
173struct tc_sfq_xstats
174{
175 __s32 allot;
176};
177
178
179
180
181
182
183
184
185
186
187
188
189enum
190{
191 TCA_RED_UNSPEC,
192 TCA_RED_PARMS,
193 TCA_RED_STAB,
194 __TCA_RED_MAX,
195};
196
197#define TCA_RED_MAX (__TCA_RED_MAX - 1)
198
199struct tc_red_qopt
200{
201 __u32 limit;
202 __u32 qth_min;
203 __u32 qth_max;
204 unsigned char Wlog;
205 unsigned char Plog;
206 unsigned char Scell_log;
207 unsigned char flags;
208#define TC_RED_ECN 1
209#define TC_RED_HARDDROP 2
210};
211
212struct tc_red_xstats
213{
214 __u32 early;
215 __u32 pdrop;
216 __u32 other;
217 __u32 marked;
218};
219
220
221
222#define MAX_DPs 16
223
224enum
225{
226 TCA_GRED_UNSPEC,
227 TCA_GRED_PARMS,
228 TCA_GRED_STAB,
229 TCA_GRED_DPS,
230 __TCA_GRED_MAX,
231};
232
233#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
234
235struct tc_gred_qopt
236{
237 __u32 limit;
238 __u32 qth_min;
239 __u32 qth_max;
240 __u32 DP;
241 __u32 backlog;
242 __u32 qave;
243 __u32 forced;
244 __u32 early;
245 __u32 other;
246 __u32 pdrop;
247 __u8 Wlog;
248 __u8 Plog;
249 __u8 Scell_log;
250 __u8 prio;
251 __u32 packets;
252 __u32 bytesin;
253};
254
255
256struct tc_gred_sopt
257{
258 __u32 DPs;
259 __u32 def_DP;
260 __u8 grio;
261 __u8 flags;
262 __u16 pad1;
263};
264
265
266#define TC_HTB_NUMPRIO 8
267#define TC_HTB_MAXDEPTH 8
268#define TC_HTB_PROTOVER 3
269
270struct tc_htb_opt
271{
272 struct tc_ratespec rate;
273 struct tc_ratespec ceil;
274 __u32 buffer;
275 __u32 cbuffer;
276 __u32 quantum;
277 __u32 level;
278 __u32 prio;
279};
280struct tc_htb_glob
281{
282 __u32 version;
283 __u32 rate2quantum;
284 __u32 defcls;
285 __u32 debug;
286
287
288 __u32 direct_pkts;
289};
290enum
291{
292 TCA_HTB_UNSPEC,
293 TCA_HTB_PARMS,
294 TCA_HTB_INIT,
295 TCA_HTB_CTAB,
296 TCA_HTB_RTAB,
297 __TCA_HTB_MAX,
298};
299
300#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
301
302struct tc_htb_xstats
303{
304 __u32 lends;
305 __u32 borrows;
306 __u32 giants;
307 __u32 tokens;
308 __u32 ctokens;
309};
310
311
312
313struct tc_hfsc_qopt
314{
315 __u16 defcls;
316};
317
318struct tc_service_curve
319{
320 __u32 m1;
321 __u32 d;
322 __u32 m2;
323};
324
325struct tc_hfsc_stats
326{
327 __u64 work;
328 __u64 rtwork;
329 __u32 period;
330 __u32 level;
331};
332
333enum
334{
335 TCA_HFSC_UNSPEC,
336 TCA_HFSC_RSC,
337 TCA_HFSC_FSC,
338 TCA_HFSC_USC,
339 __TCA_HFSC_MAX,
340};
341
342#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
343
344
345
346
347#define TC_CBQ_MAXPRIO 8
348#define TC_CBQ_MAXLEVEL 8
349#define TC_CBQ_DEF_EWMA 5
350
351struct tc_cbq_lssopt
352{
353 unsigned char change;
354 unsigned char flags;
355#define TCF_CBQ_LSS_BOUNDED 1
356#define TCF_CBQ_LSS_ISOLATED 2
357 unsigned char ewma_log;
358 unsigned char level;
359#define TCF_CBQ_LSS_FLAGS 1
360#define TCF_CBQ_LSS_EWMA 2
361#define TCF_CBQ_LSS_MAXIDLE 4
362#define TCF_CBQ_LSS_MINIDLE 8
363#define TCF_CBQ_LSS_OFFTIME 0x10
364#define TCF_CBQ_LSS_AVPKT 0x20
365 __u32 maxidle;
366 __u32 minidle;
367 __u32 offtime;
368 __u32 avpkt;
369};
370
371struct tc_cbq_wrropt
372{
373 unsigned char flags;
374 unsigned char priority;
375 unsigned char cpriority;
376 unsigned char __reserved;
377 __u32 allot;
378 __u32 weight;
379};
380
381struct tc_cbq_ovl
382{
383 unsigned char strategy;
384#define TC_CBQ_OVL_CLASSIC 0
385#define TC_CBQ_OVL_DELAY 1
386#define TC_CBQ_OVL_LOWPRIO 2
387#define TC_CBQ_OVL_DROP 3
388#define TC_CBQ_OVL_RCLASSIC 4
389 unsigned char priority2;
390 __u16 pad;
391 __u32 penalty;
392};
393
394struct tc_cbq_police
395{
396 unsigned char police;
397 unsigned char __res1;
398 unsigned short __res2;
399};
400
401struct tc_cbq_fopt
402{
403 __u32 split;
404 __u32 defmap;
405 __u32 defchange;
406};
407
408struct tc_cbq_xstats
409{
410 __u32 borrows;
411 __u32 overactions;
412 __s32 avgidle;
413 __s32 undertime;
414};
415
416enum
417{
418 TCA_CBQ_UNSPEC,
419 TCA_CBQ_LSSOPT,
420 TCA_CBQ_WRROPT,
421 TCA_CBQ_FOPT,
422 TCA_CBQ_OVL_STRATEGY,
423 TCA_CBQ_RATE,
424 TCA_CBQ_RTAB,
425 TCA_CBQ_POLICE,
426 __TCA_CBQ_MAX,
427};
428
429#define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1)
430
431
432
433enum {
434 TCA_DSMARK_UNSPEC,
435 TCA_DSMARK_INDICES,
436 TCA_DSMARK_DEFAULT_INDEX,
437 TCA_DSMARK_SET_TC_INDEX,
438 TCA_DSMARK_MASK,
439 TCA_DSMARK_VALUE,
440 __TCA_DSMARK_MAX,
441};
442
443#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
444
445
446
447enum {
448 TCA_ATM_UNSPEC,
449 TCA_ATM_FD,
450 TCA_ATM_PTR,
451 TCA_ATM_HDR,
452 TCA_ATM_EXCESS,
453 TCA_ATM_ADDR,
454 TCA_ATM_STATE,
455 __TCA_ATM_MAX,
456};
457
458#define TCA_ATM_MAX (__TCA_ATM_MAX - 1)
459
460
461
462enum
463{
464 TCA_NETEM_UNSPEC,
465 TCA_NETEM_CORR,
466 TCA_NETEM_DELAY_DIST,
467 TCA_NETEM_REORDER,
468 TCA_NETEM_CORRUPT,
469 __TCA_NETEM_MAX,
470};
471
472#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
473
474struct tc_netem_qopt
475{
476 __u32 latency;
477 __u32 limit;
478 __u32 loss;
479 __u32 gap;
480 __u32 duplicate;
481 __u32 jitter;
482};
483
484struct tc_netem_corr
485{
486 __u32 delay_corr;
487 __u32 loss_corr;
488 __u32 dup_corr;
489};
490
491struct tc_netem_reorder
492{
493 __u32 probability;
494 __u32 correlation;
495};
496
497struct tc_netem_corrupt
498{
499 __u32 probability;
500 __u32 correlation;
501};
502
503#define NETEM_DIST_SCALE 8192
504
505
506
507enum
508{
509 TCA_DRR_UNSPEC,
510 TCA_DRR_QUANTUM,
511 __TCA_DRR_MAX
512};
513
514#define TCA_DRR_MAX (__TCA_DRR_MAX - 1)
515
516struct tc_drr_stats
517{
518 __u32 deficit;
519};
520
521#endif
522