OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [LINUX_2_4_26_OR32/] [linux/] [linux-2.4/] [include/] [linux/] [pkt_sched.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#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
/* HFSC section */
294
 
295
struct tc_hfsc_qopt
296
{
297
        __u16   defcls;         /* default class */
298
};
299
 
300
struct tc_service_curve
301
{
302
        __u32   m1;             /* slope of the first segment in bps */
303
        __u32   d;              /* x-projection of the first segment in us */
304
        __u32   m2;             /* slope of the second segment in bps */
305
};
306
 
307
struct tc_hfsc_stats
308
{
309
        __u64   work;           /* total work done */
310
        __u64   rtwork;         /* work done by real-time criteria */
311
        __u32   period;         /* current period */
312
        __u32   level;          /* class level in hierarchy */
313
};
314
 
315
enum
316
{
317
        TCA_HFSC_UNSPEC,
318
        TCA_HFSC_RSC,
319
        TCA_HFSC_FSC,
320
        TCA_HFSC_USC,
321
        TCA_HFSC_MAX = TCA_HFSC_USC
322
};
323
 
324
/* CBQ section */
325
 
326
#define TC_CBQ_MAXPRIO          8
327
#define TC_CBQ_MAXLEVEL         8
328
#define TC_CBQ_DEF_EWMA         5
329
 
330
struct tc_cbq_lssopt
331
{
332
        unsigned char   change;
333
        unsigned char   flags;
334
#define TCF_CBQ_LSS_BOUNDED     1
335
#define TCF_CBQ_LSS_ISOLATED    2
336
        unsigned char   ewma_log;
337
        unsigned char   level;
338
#define TCF_CBQ_LSS_FLAGS       1
339
#define TCF_CBQ_LSS_EWMA        2
340
#define TCF_CBQ_LSS_MAXIDLE     4
341
#define TCF_CBQ_LSS_MINIDLE     8
342
#define TCF_CBQ_LSS_OFFTIME     0x10
343
#define TCF_CBQ_LSS_AVPKT       0x20
344
        __u32           maxidle;
345
        __u32           minidle;
346
        __u32           offtime;
347
        __u32           avpkt;
348
};
349
 
350
struct tc_cbq_wrropt
351
{
352
        unsigned char   flags;
353
        unsigned char   priority;
354
        unsigned char   cpriority;
355
        unsigned char   __reserved;
356
        __u32           allot;
357
        __u32           weight;
358
};
359
 
360
struct tc_cbq_ovl
361
{
362
        unsigned char   strategy;
363
#define TC_CBQ_OVL_CLASSIC      0
364
#define TC_CBQ_OVL_DELAY        1
365
#define TC_CBQ_OVL_LOWPRIO      2
366
#define TC_CBQ_OVL_DROP         3
367
#define TC_CBQ_OVL_RCLASSIC     4
368
        unsigned char   priority2;
369
        __u32           penalty;
370
};
371
 
372
struct tc_cbq_police
373
{
374
        unsigned char   police;
375
        unsigned char   __res1;
376
        unsigned short  __res2;
377
};
378
 
379
struct tc_cbq_fopt
380
{
381
        __u32           split;
382
        __u32           defmap;
383
        __u32           defchange;
384
};
385
 
386
struct tc_cbq_xstats
387
{
388
        __u32           borrows;
389
        __u32           overactions;
390
        __s32           avgidle;
391
        __s32           undertime;
392
};
393
 
394
enum
395
{
396
        TCA_CBQ_UNSPEC,
397
        TCA_CBQ_LSSOPT,
398
        TCA_CBQ_WRROPT,
399
        TCA_CBQ_FOPT,
400
        TCA_CBQ_OVL_STRATEGY,
401
        TCA_CBQ_RATE,
402
        TCA_CBQ_RTAB,
403
        TCA_CBQ_POLICE,
404
};
405
 
406
#define TCA_CBQ_MAX     TCA_CBQ_POLICE
407
 
408
/* dsmark section */
409
 
410
enum {
411
        TCA_DSMARK_UNSPEC,
412
        TCA_DSMARK_INDICES,
413
        TCA_DSMARK_DEFAULT_INDEX,
414
        TCA_DSMARK_SET_TC_INDEX,
415
        TCA_DSMARK_MASK,
416
        TCA_DSMARK_VALUE
417
};
418
 
419
#define TCA_DSMARK_MAX TCA_DSMARK_VALUE
420
 
421
/* ATM  section */
422
 
423
enum {
424
        TCA_ATM_UNSPEC,
425
        TCA_ATM_FD,             /* file/socket descriptor */
426
        TCA_ATM_PTR,            /* pointer to descriptor - later */
427
        TCA_ATM_HDR,            /* LL header */
428
        TCA_ATM_EXCESS,         /* excess traffic class (0 for CLP)  */
429
        TCA_ATM_ADDR,           /* PVC address (for output only) */
430
        TCA_ATM_STATE           /* VC state (ATM_VS_*; for output only) */
431
};
432
 
433
#define TCA_ATM_MAX     TCA_ATM_STATE
434
 
435
/* Delay section */
436
struct tc_dly_qopt
437
{
438
        __u32   latency;
439
        __u32   limit;
440
};
441
 
442
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.