~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/pkt_sched.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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         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 /* CBQ section */
252 
253 #define TC_CBQ_MAXPRIO          8
254 #define TC_CBQ_MAXLEVEL         8
255 #define TC_CBQ_DEF_EWMA         5
256 
257 struct tc_cbq_lssopt
258 {
259         unsigned char   change;
260         unsigned char   flags;
261 #define TCF_CBQ_LSS_BOUNDED     1
262 #define TCF_CBQ_LSS_ISOLATED    2
263         unsigned char   ewma_log;
264         unsigned char   level;
265 #define TCF_CBQ_LSS_FLAGS       1
266 #define TCF_CBQ_LSS_EWMA        2
267 #define TCF_CBQ_LSS_MAXIDLE     4
268 #define TCF_CBQ_LSS_MINIDLE     8
269 #define TCF_CBQ_LSS_OFFTIME     0x10
270 #define TCF_CBQ_LSS_AVPKT       0x20
271         __u32           maxidle;
272         __u32           minidle;
273         __u32           offtime;
274         __u32           avpkt;
275 };
276 
277 struct tc_cbq_wrropt
278 {
279         unsigned char   flags;
280         unsigned char   priority;
281         unsigned char   cpriority;
282         unsigned char   __reserved;
283         __u32           allot;
284         __u32           weight;
285 };
286 
287 struct tc_cbq_ovl
288 {
289         unsigned char   strategy;
290 #define TC_CBQ_OVL_CLASSIC      0
291 #define TC_CBQ_OVL_DELAY        1
292 #define TC_CBQ_OVL_LOWPRIO      2
293 #define TC_CBQ_OVL_DROP         3
294 #define TC_CBQ_OVL_RCLASSIC     4
295         unsigned char   priority2;
296         __u32           penalty;
297 };
298 
299 struct tc_cbq_police
300 {
301         unsigned char   police;
302         unsigned char   __res1;
303         unsigned short  __res2;
304 };
305 
306 struct tc_cbq_fopt
307 {
308         __u32           split;
309         __u32           defmap;
310         __u32           defchange;
311 };
312 
313 struct tc_cbq_xstats
314 {
315         __u32           borrows;
316         __u32           overactions;
317         __s32           avgidle;
318         __s32           undertime;
319 };
320 
321 enum
322 {
323         TCA_CBQ_UNSPEC,
324         TCA_CBQ_LSSOPT,
325         TCA_CBQ_WRROPT,
326         TCA_CBQ_FOPT,
327         TCA_CBQ_OVL_STRATEGY,
328         TCA_CBQ_RATE,
329         TCA_CBQ_RTAB,
330         TCA_CBQ_POLICE,
331 };
332 
333 #define TCA_CBQ_MAX     TCA_CBQ_POLICE
334 
335 /* dsmark section */
336 
337 enum {
338         TCA_DSMARK_UNSPEC,
339         TCA_DSMARK_INDICES,
340         TCA_DSMARK_DEFAULT_INDEX,
341         TCA_DSMARK_SET_TC_INDEX,
342         TCA_DSMARK_MASK,
343         TCA_DSMARK_VALUE
344 };
345 
346 #define TCA_DSMARK_MAX TCA_DSMARK_VALUE
347 
348 /* ATM  section */
349 
350 enum {
351         TCA_ATM_UNSPEC,
352         TCA_ATM_FD,             /* file/socket descriptor */
353         TCA_ATM_PTR,            /* pointer to descriptor - later */
354         TCA_ATM_HDR,            /* LL header */
355         TCA_ATM_EXCESS,         /* excess traffic class (0 for CLP)  */
356         TCA_ATM_ADDR,           /* PVC address (for output only) */
357         TCA_ATM_STATE           /* VC state (ATM_VS_*; for output only) */
358 };
359 
360 #define TCA_ATM_MAX     TCA_ATM_STATE
361 
362 #endif
363 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.