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