Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | #ifndef __LINUX_PKT_SCHED_H |
2 | #define __LINUX_PKT_SCHED_H |
||
3 | |||
4 | /* Logical priority bands not depending on specific packet scheduler. |
||
5 | Every scheduler will map them to real traffic classes, if it has |
||
6 | no more precise mechanism to classify packets. |
||
7 | |||
8 | These numbers have no special meaning, though their coincidence |
||
9 | with obsolete IPv6 values is not occasional :-). New IPv6 drafts |
||
10 | preferred full anarchy inspired by diffserv group. |
||
11 | |||
12 | Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy |
||
13 | class, actually, as rule it will be handled with more care than |
||
14 | filler or even bulk. |
||
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 | /* Generic queue statistics, available for all the elements. |
||
27 | Particular schedulers may have also their private records. |
||
28 | */ |
||
29 | |||
30 | struct tc_stats |
||
31 | { |
||
32 | __u64 bytes; /* NUmber of enqueues bytes */ |
||
33 | __u32 packets; /* Number of enqueued packets */ |
||
34 | __u32 drops; /* Packets dropped because of lack of resources */ |
||
35 | __u32 overlimits; /* Number of throttle events when this |
||
36 | * flow goes out of allocated bandwidth */ |
||
37 | __u32 bps; /* Current flow byte rate */ |
||
38 | __u32 pps; /* Current flow packet rate */ |
||
39 | __u32 qlen; |
||
40 | __u32 backlog; |
||
41 | #ifdef __KERNEL__ |
||
42 | spinlock_t *lock; |
||
43 | #endif |
||
44 | }; |
||
45 | |||
46 | struct tc_estimator |
||
47 | { |
||
48 | signed char interval; |
||
49 | unsigned char ewma_log; |
||
50 | }; |
||
51 | |||
52 | /* "Handles" |
||
53 | --------- |
||
54 | |||
55 | All the traffic control objects have 32bit identifiers, or "handles". |
||
56 | |||
57 | They can be considered as opaque numbers from user API viewpoint, |
||
58 | but actually they always consist of two fields: major and |
||
59 | minor numbers, which are interpreted by kernel specially, |
||
60 | that may be used by applications, though not recommended. |
||
61 | |||
62 | F.e. qdisc handles always have minor number equal to zero, |
||
63 | classes (or flows) have major equal to parent qdisc major, and |
||
64 | minor uniquely identifying class inside qdisc. |
||
65 | |||
66 | Macros to manipulate handles: |
||
67 | */ |
||
68 | |||
69 | #define TC_H_MAJ_MASK (0xFFFF0000U) |
||
70 | #define TC_H_MIN_MASK (0x0000FFFFU) |
||
71 | #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK) |
||
72 | #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK) |
||
73 | #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK)) |
||
74 | |||
75 | #define TC_H_UNSPEC (0U) |
||
76 | #define TC_H_ROOT (0xFFFFFFFFU) |
||
77 | #define TC_H_INGRESS (0xFFFFFFF1U) |
||
78 | |||
79 | struct tc_ratespec |
||
80 | { |
||
81 | unsigned char cell_log; |
||
82 | unsigned char __reserved; |
||
83 | unsigned short feature; |
||
84 | short addend; |
||
85 | unsigned short mpu; |
||
86 | __u32 rate; |
||
87 | }; |
||
88 | |||
89 | /* FIFO section */ |
||
90 | |||
91 | struct tc_fifo_qopt |
||
92 | { |
||
93 | __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ |
||
94 | }; |
||
95 | |||
96 | /* PRIO section */ |
||
97 | |||
98 | #define TCQ_PRIO_BANDS 16 |
||
99 | |||
100 | struct tc_prio_qopt |
||
101 | { |
||
102 | int bands; /* Number of bands */ |
||
103 | __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ |
||
104 | }; |
||
105 | |||
106 | /* CSZ section */ |
||
107 | |||
108 | struct tc_csz_qopt |
||
109 | { |
||
110 | int flows; /* Maximal number of guaranteed flows */ |
||
111 | unsigned char R_log; /* Fixed point position for round number */ |
||
112 | unsigned char delta_log; /* Log of maximal managed time interval */ |
||
113 | __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> CSZ band */ |
||
114 | }; |
||
115 | |||
116 | struct tc_csz_copt |
||
117 | { |
||
118 | struct tc_ratespec slice; |
||
119 | struct tc_ratespec rate; |
||
120 | struct tc_ratespec peakrate; |
||
121 | __u32 limit; |
||
122 | __u32 buffer; |
||
123 | __u32 mtu; |
||
124 | }; |
||
125 | |||
126 | enum |
||
127 | { |
||
128 | TCA_CSZ_UNSPEC, |
||
129 | TCA_CSZ_PARMS, |
||
130 | TCA_CSZ_RTAB, |
||
131 | TCA_CSZ_PTAB, |
||
132 | }; |
||
133 | |||
134 | /* TBF section */ |
||
135 | |||
136 | struct tc_tbf_qopt |
||
137 | { |
||
138 | struct tc_ratespec rate; |
||
139 | struct tc_ratespec peakrate; |
||
140 | __u32 limit; |
||
141 | __u32 buffer; |
||
142 | __u32 mtu; |
||
143 | }; |
||
144 | |||
145 | enum |
||
146 | { |
||
147 | TCA_TBF_UNSPEC, |
||
148 | TCA_TBF_PARMS, |
||
149 | TCA_TBF_RTAB, |
||
150 | TCA_TBF_PTAB, |
||
151 | }; |
||
152 | |||
153 | |||
154 | /* TEQL section */ |
||
155 | |||
156 | /* TEQL does not require any parameters */ |
||
157 | |||
158 | /* SFQ section */ |
||
159 | |||
160 | struct tc_sfq_qopt |
||
161 | { |
||
162 | unsigned quantum; /* Bytes per round allocated to flow */ |
||
163 | int perturb_period; /* Period of hash perturbation */ |
||
164 | __u32 limit; /* Maximal packets in queue */ |
||
165 | unsigned divisor; /* Hash divisor */ |
||
166 | unsigned flows; /* Maximal number of flows */ |
||
167 | }; |
||
168 | |||
169 | /* |
||
170 | * NOTE: limit, divisor and flows are hardwired to code at the moment. |
||
171 | * |
||
172 | * limit=flows=128, divisor=1024; |
||
173 | * |
||
174 | * The only reason for this is efficiency, it is possible |
||
175 | * to change these parameters in compile time. |
||
176 | */ |
||
177 | |||
178 | /* RED section */ |
||
179 | |||
180 | enum |
||
181 | { |
||
182 | TCA_RED_UNSPEC, |
||
183 | TCA_RED_PARMS, |
||
184 | TCA_RED_STAB, |
||
185 | }; |
||
186 | |||
187 | struct tc_red_qopt |
||
188 | { |
||
189 | __u32 limit; /* HARD maximal queue length (bytes) */ |
||
190 | __u32 qth_min; /* Min average length threshold (bytes) */ |
||
191 | __u32 qth_max; /* Max average length threshold (bytes) */ |
||
192 | unsigned char Wlog; /* log(W) */ |
||
193 | unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ |
||
194 | unsigned char Scell_log; /* cell size for idle damping */ |
||
195 | unsigned char flags; |
||
196 | #define TC_RED_ECN 1 |
||
197 | }; |
||
198 | |||
199 | struct tc_red_xstats |
||
200 | { |
||
201 | __u32 early; /* Early drops */ |
||
202 | __u32 pdrop; /* Drops due to queue limits */ |
||
203 | __u32 other; /* Drops due to drop() calls */ |
||
204 | __u32 marked; /* Marked packets */ |
||
205 | }; |
||
206 | |||
207 | /* GRED section */ |
||
208 | |||
209 | #define MAX_DPs 16 |
||
210 | |||
211 | enum |
||
212 | { |
||
213 | TCA_GRED_UNSPEC, |
||
214 | TCA_GRED_PARMS, |
||
215 | TCA_GRED_STAB, |
||
216 | TCA_GRED_DPS, |
||
217 | }; |
||
218 | |||
219 | #define TCA_SET_OFF TCA_GRED_PARMS |
||
220 | struct tc_gred_qopt |
||
221 | { |
||
222 | __u32 limit; /* HARD maximal queue length (bytes) |
||
223 | */ |
||
224 | __u32 qth_min; /* Min average length threshold (bytes) |
||
225 | */ |
||
226 | __u32 qth_max; /* Max average length threshold (bytes) |
||
227 | */ |
||
228 | __u32 DP; /* upto 2^32 DPs */ |
||
229 | __u32 backlog; |
||
230 | __u32 qave; |
||
231 | __u32 forced; |
||
232 | __u32 early; |
||
233 | __u32 other; |
||
234 | __u32 pdrop; |
||
235 | |||
236 | unsigned char Wlog; /* log(W) */ |
||
237 | unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ |
||
238 | unsigned char Scell_log; /* cell size for idle damping */ |
||
239 | __u8 prio; /* prio of this VQ */ |
||
240 | __u32 packets; |
||
241 | __u32 bytesin; |
||
242 | }; |
||
243 | /* gred setup */ |
||
244 | struct tc_gred_sopt |
||
245 | { |
||
246 | __u32 DPs; |
||
247 | __u32 def_DP; |
||
248 | __u8 grio; |
||
249 | }; |
||
250 | |||
251 | /* HTB section */ |
||
252 | #define TC_HTB_NUMPRIO 8 |
||
253 | #define TC_HTB_MAXDEPTH 8 |
||
254 | #define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ |
||
255 | |||
256 | struct tc_htb_opt |
||
257 | { |
||
258 | struct tc_ratespec rate; |
||
259 | struct tc_ratespec ceil; |
||
260 | __u32 buffer; |
||
261 | __u32 cbuffer; |
||
262 | __u32 quantum; |
||
263 | __u32 level; /* out only */ |
||
264 | __u32 prio; |
||
265 | }; |
||
266 | struct tc_htb_glob |
||
267 | { |
||
268 | __u32 version; /* to match HTB/TC */ |
||
269 | __u32 rate2quantum; /* bps->quantum divisor */ |
||
270 | __u32 defcls; /* default class number */ |
||
271 | __u32 debug; /* debug flags */ |
||
272 | |||
273 | /* stats */ |
||
274 | __u32 direct_pkts; /* count of non shapped packets */ |
||
275 | }; |
||
276 | enum |
||
277 | { |
||
278 | TCA_HTB_UNSPEC, |
||
279 | TCA_HTB_PARMS, |
||
280 | TCA_HTB_INIT, |
||
281 | TCA_HTB_CTAB, |
||
282 | TCA_HTB_RTAB, |
||
283 | }; |
||
284 | struct tc_htb_xstats |
||
285 | { |
||
286 | __u32 lends; |
||
287 | __u32 borrows; |
||
288 | __u32 giants; /* too big packets (rate will not be accurate) */ |
||
289 | __u32 tokens; |
||
290 | __u32 ctokens; |
||
291 | }; |
||
292 | |||
293 | /* CBQ section */ |
||
294 | |||
295 | #define TC_CBQ_MAXPRIO 8 |
||
296 | #define TC_CBQ_MAXLEVEL 8 |
||
297 | #define TC_CBQ_DEF_EWMA 5 |
||
298 | |||
299 | struct tc_cbq_lssopt |
||
300 | { |
||
301 | unsigned char change; |
||
302 | unsigned char flags; |
||
303 | #define TCF_CBQ_LSS_BOUNDED 1 |
||
304 | #define TCF_CBQ_LSS_ISOLATED 2 |
||
305 | unsigned char ewma_log; |
||
306 | unsigned char level; |
||
307 | #define TCF_CBQ_LSS_FLAGS 1 |
||
308 | #define TCF_CBQ_LSS_EWMA 2 |
||
309 | #define TCF_CBQ_LSS_MAXIDLE 4 |
||
310 | #define TCF_CBQ_LSS_MINIDLE 8 |
||
311 | #define TCF_CBQ_LSS_OFFTIME 0x10 |
||
312 | #define TCF_CBQ_LSS_AVPKT 0x20 |
||
313 | __u32 maxidle; |
||
314 | __u32 minidle; |
||
315 | __u32 offtime; |
||
316 | __u32 avpkt; |
||
317 | }; |
||
318 | |||
319 | struct tc_cbq_wrropt |
||
320 | { |
||
321 | unsigned char flags; |
||
322 | unsigned char priority; |
||
323 | unsigned char cpriority; |
||
324 | unsigned char __reserved; |
||
325 | __u32 allot; |
||
326 | __u32 weight; |
||
327 | }; |
||
328 | |||
329 | struct tc_cbq_ovl |
||
330 | { |
||
331 | unsigned char strategy; |
||
332 | #define TC_CBQ_OVL_CLASSIC 0 |
||
333 | #define TC_CBQ_OVL_DELAY 1 |
||
334 | #define TC_CBQ_OVL_LOWPRIO 2 |
||
335 | #define TC_CBQ_OVL_DROP 3 |
||
336 | #define TC_CBQ_OVL_RCLASSIC 4 |
||
337 | unsigned char priority2; |
||
338 | __u32 penalty; |
||
339 | }; |
||
340 | |||
341 | struct tc_cbq_police |
||
342 | { |
||
343 | unsigned char police; |
||
344 | unsigned char __res1; |
||
345 | unsigned short __res2; |
||
346 | }; |
||
347 | |||
348 | struct tc_cbq_fopt |
||
349 | { |
||
350 | __u32 split; |
||
351 | __u32 defmap; |
||
352 | __u32 defchange; |
||
353 | }; |
||
354 | |||
355 | struct tc_cbq_xstats |
||
356 | { |
||
357 | __u32 borrows; |
||
358 | __u32 overactions; |
||
359 | __s32 avgidle; |
||
360 | __s32 undertime; |
||
361 | }; |
||
362 | |||
363 | enum |
||
364 | { |
||
365 | TCA_CBQ_UNSPEC, |
||
366 | TCA_CBQ_LSSOPT, |
||
367 | TCA_CBQ_WRROPT, |
||
368 | TCA_CBQ_FOPT, |
||
369 | TCA_CBQ_OVL_STRATEGY, |
||
370 | TCA_CBQ_RATE, |
||
371 | TCA_CBQ_RTAB, |
||
372 | TCA_CBQ_POLICE, |
||
373 | }; |
||
374 | |||
375 | #define TCA_CBQ_MAX TCA_CBQ_POLICE |
||
376 | |||
377 | /* dsmark section */ |
||
378 | |||
379 | enum { |
||
380 | TCA_DSMARK_UNSPEC, |
||
381 | TCA_DSMARK_INDICES, |
||
382 | TCA_DSMARK_DEFAULT_INDEX, |
||
383 | TCA_DSMARK_SET_TC_INDEX, |
||
384 | TCA_DSMARK_MASK, |
||
385 | TCA_DSMARK_VALUE |
||
386 | }; |
||
387 | |||
388 | #define TCA_DSMARK_MAX TCA_DSMARK_VALUE |
||
389 | |||
390 | /* ATM section */ |
||
391 | |||
392 | enum { |
||
393 | TCA_ATM_UNSPEC, |
||
394 | TCA_ATM_FD, /* file/socket descriptor */ |
||
395 | TCA_ATM_PTR, /* pointer to descriptor - later */ |
||
396 | TCA_ATM_HDR, /* LL header */ |
||
397 | TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */ |
||
398 | TCA_ATM_ADDR, /* PVC address (for output only) */ |
||
399 | TCA_ATM_STATE /* VC state (ATM_VS_*; for output only) */ |
||
400 | }; |
||
401 | |||
402 | #define TCA_ATM_MAX TCA_ATM_STATE |
||
403 | |||
404 | #endif |