blob: 59d3e71f8b85296c820a0099010d50341d0135fb [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#
2# Traffic control configuration.
3#
Sam Ravnborg6a2e9b72005-07-11 21:13:56 -07004
5menuconfig NET_SCHED
6 bool "QoS and/or fair queueing"
7 ---help---
8 When the kernel has several packets to send out over a network
9 device, it has to decide which ones to send first, which ones to
10 delay, and which ones to drop. This is the job of the packet
11 scheduler, and several different algorithms for how to do this
12 "fairly" have been proposed.
13
14 If you say N here, you will get the standard packet scheduler, which
15 is a FIFO (first come, first served). If you say Y here, you will be
16 able to choose from among several alternative algorithms which can
17 then be attached to different network devices. This is useful for
18 example if some of your network devices are real time devices that
19 need a certain minimum data flow rate, or if you need to limit the
20 maximum data flow rate for traffic which matches specified criteria.
21 This code is considered to be experimental.
22
23 To administer these schedulers, you'll need the user-level utilities
24 from the package iproute2+tc at <ftp://ftp.tux.org/pub/net/ip-routing/>.
25 That package also contains some documentation; for more, check out
26 <http://snafu.freedom.org/linux2.2/iproute-notes.html>.
27
28 This Quality of Service (QoS) support will enable you to use
29 Differentiated Services (diffserv) and Resource Reservation Protocol
30 (RSVP) on your Linux router if you also say Y to "QoS support",
31 "Packet classifier API" and to some classifiers below. Documentation
32 and software is at <http://diffserv.sourceforge.net/>.
33
34 If you say Y here and to "/proc file system" below, you will be able
35 to read status information about packet schedulers from the file
36 /proc/net/psched.
37
38 The available schedulers are listed in the following questions; you
39 can say Y to as many as you like. If unsure, say N now.
40
Linus Torvalds1da177e2005-04-16 15:20:36 -070041choice
42 prompt "Packet scheduler clock source"
43 depends on NET_SCHED
44 default NET_SCH_CLK_JIFFIES
45 help
46 Packet schedulers need a monotonic clock that increments at a static
47 rate. The kernel provides several suitable interfaces, each with
48 different properties:
49
50 - high resolution (us or better)
51 - fast to read (minimal locking, no i/o access)
52 - synchronized on all processors
53 - handles cpu clock frequency changes
54
55 but nothing provides all of the above.
56
57config NET_SCH_CLK_JIFFIES
58 bool "Timer interrupt"
59 help
60 Say Y here if you want to use the timer interrupt (jiffies) as clock
61 source. This clock source is fast, synchronized on all processors and
62 handles cpu clock frequency changes, but its resolution is too low
63 for accurate shaping except at very low speed.
64
65config NET_SCH_CLK_GETTIMEOFDAY
66 bool "gettimeofday"
67 help
68 Say Y here if you want to use gettimeofday as clock source. This clock
69 source has high resolution, is synchronized on all processors and
70 handles cpu clock frequency changes, but it is slow.
71
72 Choose this if you need a high resolution clock source but can't use
73 the CPU's cycle counter.
74
75config NET_SCH_CLK_CPU
76 bool "CPU cycle counter"
77 depends on X86_TSC || X86_64 || ALPHA || SPARC64 || PPC64 || IA64
78 help
79 Say Y here if you want to use the CPU's cycle counter as clock source.
80 This is a cheap and high resolution clock source, but on some
81 architectures it is not synchronized on all processors and doesn't
82 handle cpu clock frequency changes.
83
84 The useable cycle counters are:
85
86 x86/x86_64 - Timestamp Counter
87 alpha - Cycle Counter
88 sparc64 - %ticks register
89 ppc64 - Time base
90 ia64 - Interval Time Counter
91
92 Choose this if your CPU's cycle counter is working properly.
93
94endchoice
95
96config NET_SCH_CBQ
97 tristate "CBQ packet scheduler"
98 depends on NET_SCHED
99 ---help---
100 Say Y here if you want to use the Class-Based Queueing (CBQ) packet
101 scheduling algorithm for some of your network devices. This
102 algorithm classifies the waiting packets into a tree-like hierarchy
103 of classes; the leaves of this tree are in turn scheduled by
104 separate algorithms (called "disciplines" in this context).
105
106 See the top of <file:net/sched/sch_cbq.c> for references about the
107 CBQ algorithm.
108
109 CBQ is a commonly used scheduler, so if you're unsure, you should
110 say Y here. Then say Y to all the queueing algorithms below that you
111 want to use as CBQ disciplines. Then say Y to "Packet classifier
112 API" and say Y to all the classifiers you want to use; a classifier
113 is a routine that allows you to sort your outgoing traffic into
114 classes based on a certain criterion.
115
116 To compile this code as a module, choose M here: the
117 module will be called sch_cbq.
118
119config NET_SCH_HTB
120 tristate "HTB packet scheduler"
121 depends on NET_SCHED
122 ---help---
123 Say Y here if you want to use the Hierarchical Token Buckets (HTB)
124 packet scheduling algorithm for some of your network devices. See
125 <http://luxik.cdi.cz/~devik/qos/htb/> for complete manual and
126 in-depth articles.
127
128 HTB is very similar to the CBQ regarding its goals however is has
129 different properties and different algorithm.
130
131 To compile this code as a module, choose M here: the
132 module will be called sch_htb.
133
134config NET_SCH_HFSC
135 tristate "HFSC packet scheduler"
136 depends on NET_SCHED
137 ---help---
138 Say Y here if you want to use the Hierarchical Fair Service Curve
139 (HFSC) packet scheduling algorithm for some of your network devices.
140
141 To compile this code as a module, choose M here: the
142 module will be called sch_hfsc.
143
144#tristate ' H-PFQ packet scheduler' CONFIG_NET_SCH_HPFQ
145config NET_SCH_ATM
146 tristate "ATM pseudo-scheduler"
147 depends on NET_SCHED && ATM
148 ---help---
149 Say Y here if you want to use the ATM pseudo-scheduler. This
150 provides a framework for invoking classifiers (aka "filters"), which
151 in turn select classes of this queuing discipline. Each class maps
152 the flow(s) it is handling to a given virtual circuit (see the top of
153 <file:net/sched/sch_atm.c>).
154
155 To compile this code as a module, choose M here: the
156 module will be called sch_atm.
157
158config NET_SCH_PRIO
159 tristate "The simplest PRIO pseudoscheduler"
160 depends on NET_SCHED
161 help
162 Say Y here if you want to use an n-band priority queue packet
163 "scheduler" for some of your network devices or as a leaf discipline
164 for the CBQ scheduling algorithm. If unsure, say Y.
165
166 To compile this code as a module, choose M here: the
167 module will be called sch_prio.
168
169config NET_SCH_RED
170 tristate "RED queue"
171 depends on NET_SCHED
172 help
173 Say Y here if you want to use the Random Early Detection (RED)
174 packet scheduling algorithm for some of your network devices (see
175 the top of <file:net/sched/sch_red.c> for details and references
176 about the algorithm).
177
178 To compile this code as a module, choose M here: the
179 module will be called sch_red.
180
181config NET_SCH_SFQ
182 tristate "SFQ queue"
183 depends on NET_SCHED
184 ---help---
185 Say Y here if you want to use the Stochastic Fairness Queueing (SFQ)
186 packet scheduling algorithm for some of your network devices or as a
187 leaf discipline for the CBQ scheduling algorithm (see the top of
188 <file:net/sched/sch_sfq.c> for details and references about the SFQ
189 algorithm).
190
191 To compile this code as a module, choose M here: the
192 module will be called sch_sfq.
193
194config NET_SCH_TEQL
195 tristate "TEQL queue"
196 depends on NET_SCHED
197 ---help---
198 Say Y here if you want to use the True Link Equalizer (TLE) packet
199 scheduling algorithm for some of your network devices or as a leaf
200 discipline for the CBQ scheduling algorithm. This queueing
201 discipline allows the combination of several physical devices into
202 one virtual device. (see the top of <file:net/sched/sch_teql.c> for
203 details).
204
205 To compile this code as a module, choose M here: the
206 module will be called sch_teql.
207
208config NET_SCH_TBF
209 tristate "TBF queue"
210 depends on NET_SCHED
211 help
212 Say Y here if you want to use the Simple Token Bucket Filter (TBF)
213 packet scheduling algorithm for some of your network devices or as a
214 leaf discipline for the CBQ scheduling algorithm (see the top of
215 <file:net/sched/sch_tbf.c> for a description of the TBF algorithm).
216
217 To compile this code as a module, choose M here: the
218 module will be called sch_tbf.
219
220config NET_SCH_GRED
221 tristate "GRED queue"
222 depends on NET_SCHED
223 help
224 Say Y here if you want to use the Generic Random Early Detection
Lucas Correia Villa Real20cc6be2005-05-03 14:34:20 -0700225 (GRED) packet scheduling algorithm for some of your network devices
Linus Torvalds1da177e2005-04-16 15:20:36 -0700226 (see the top of <file:net/sched/sch_red.c> for details and
227 references about the algorithm).
228
229 To compile this code as a module, choose M here: the
230 module will be called sch_gred.
231
232config NET_SCH_DSMARK
233 tristate "Diffserv field marker"
234 depends on NET_SCHED
235 help
236 Say Y if you want to schedule packets according to the
237 Differentiated Services architecture proposed in RFC 2475.
238 Technical information on this method, with pointers to associated
239 RFCs, is available at <http://www.gta.ufrj.br/diffserv/>.
240
241 To compile this code as a module, choose M here: the
242 module will be called sch_dsmark.
243
244config NET_SCH_NETEM
245 tristate "Network emulator"
246 depends on NET_SCHED
247 help
248 Say Y if you want to emulate network delay, loss, and packet
249 re-ordering. This is often useful to simulate networks when
250 testing applications or protocols.
251
252 To compile this driver as a module, choose M here: the module
253 will be called sch_netem.
254
255 If unsure, say N.
256
257config NET_SCH_INGRESS
258 tristate "Ingress Qdisc"
259 depends on NET_SCHED
260 help
261 If you say Y here, you will be able to police incoming bandwidth
262 and drop packets when this bandwidth exceeds your desired rate.
263 If unsure, say Y.
264
265 To compile this code as a module, choose M here: the
266 module will be called sch_ingress.
267
268config NET_QOS
269 bool "QoS support"
270 depends on NET_SCHED
271 ---help---
272 Say Y here if you want to include Quality Of Service scheduling
273 features, which means that you will be able to request certain
274 rate-of-flow limits for your network devices.
275
276 This Quality of Service (QoS) support will enable you to use
277 Differentiated Services (diffserv) and Resource Reservation Protocol
278 (RSVP) on your Linux router if you also say Y to "Packet classifier
279 API" and to some classifiers below. Documentation and software is at
280 <http://diffserv.sourceforge.net/>.
281
282 Note that the answer to this question won't directly affect the
283 kernel: saying N will just cause the configurator to skip all
284 the questions about QoS support.
285
286config NET_ESTIMATOR
287 bool "Rate estimator"
288 depends on NET_QOS
289 help
290 In order for Quality of Service scheduling to work, the current
291 rate-of-flow for a network device has to be estimated; if you say Y
292 here, the kernel will do just that.
293
294config NET_CLS
295 bool "Packet classifier API"
296 depends on NET_SCHED
297 ---help---
298 The CBQ scheduling algorithm requires that network packets which are
299 scheduled to be sent out over a network device be classified
300 according to some criterion. If you say Y here, you will get a
301 choice of several different packet classifiers with the following
302 questions.
303
304 This will enable you to use Differentiated Services (diffserv) and
305 Resource Reservation Protocol (RSVP) on your Linux router.
306 Documentation and software is at
307 <http://diffserv.sourceforge.net/>.
308
309config NET_CLS_BASIC
310 tristate "Basic classifier"
311 depends on NET_CLS
312 ---help---
313 Say Y here if you want to be able to classify packets using
314 only extended matches and actions.
315
316 To compile this code as a module, choose M here: the
317 module will be called cls_basic.
318
319config NET_CLS_TCINDEX
320 tristate "TC index classifier"
321 depends on NET_CLS
322 help
323 If you say Y here, you will be able to classify outgoing packets
324 according to the tc_index field of the skb. You will want this
325 feature if you want to implement Differentiated Services using
326 sch_dsmark. If unsure, say Y.
327
328 To compile this code as a module, choose M here: the
329 module will be called cls_tcindex.
330
331config NET_CLS_ROUTE4
332 tristate "Routing table based classifier"
333 depends on NET_CLS
334 select NET_CLS_ROUTE
335 help
336 If you say Y here, you will be able to classify outgoing packets
337 according to the route table entry they matched. If unsure, say Y.
338
339 To compile this code as a module, choose M here: the
340 module will be called cls_route.
341
342config NET_CLS_ROUTE
343 bool
344 default n
345
346config NET_CLS_FW
347 tristate "Firewall based classifier"
348 depends on NET_CLS
349 help
350 If you say Y here, you will be able to classify outgoing packets
351 according to firewall criteria you specified.
352
353 To compile this code as a module, choose M here: the
354 module will be called cls_fw.
355
356config NET_CLS_U32
357 tristate "U32 classifier"
358 depends on NET_CLS
359 help
360 If you say Y here, you will be able to classify outgoing packets
361 according to their destination address. If unsure, say Y.
362
363 To compile this code as a module, choose M here: the
364 module will be called cls_u32.
365
366config CLS_U32_PERF
367 bool "U32 classifier performance counters"
368 depends on NET_CLS_U32
369 help
370 gathers stats that could be used to tune u32 classifier performance.
371 Requires a new iproute2
372 You MUST NOT turn this on if you dont have an update iproute2.
373
374config NET_CLS_IND
375 bool "classify input device (slows things u32/fw) "
376 depends on NET_CLS_U32 || NET_CLS_FW
377 help
378 This option will be killed eventually when a
379 metadata action appears because it slows things a little
380 Available only for u32 and fw classifiers.
381 Requires a new iproute2
382 You MUST NOT turn this on if you dont have an update iproute2.
383
384config CLS_U32_MARK
385 bool "Use nfmark as a key in U32 classifier"
386 depends on NET_CLS_U32 && NETFILTER
387 help
388 This allows you to match mark in a u32 filter.
389 Example:
390 tc filter add dev eth0 protocol ip parent 1:0 prio 5 u32 \
391 match mark 0x0090 0xffff \
392 match ip dst 4.4.4.4 \
393 flowid 1:90
394 You must use a new iproute2 to use this feature.
395
396config NET_CLS_RSVP
397 tristate "Special RSVP classifier"
398 depends on NET_CLS && NET_QOS
399 ---help---
400 The Resource Reservation Protocol (RSVP) permits end systems to
401 request a minimum and maximum data flow rate for a connection; this
402 is important for real time data such as streaming sound or video.
403
404 Say Y here if you want to be able to classify outgoing packets based
405 on their RSVP requests.
406
407 To compile this code as a module, choose M here: the
408 module will be called cls_rsvp.
409
410config NET_CLS_RSVP6
411 tristate "Special RSVP classifier for IPv6"
412 depends on NET_CLS && NET_QOS
413 ---help---
414 The Resource Reservation Protocol (RSVP) permits end systems to
415 request a minimum and maximum data flow rate for a connection; this
416 is important for real time data such as streaming sound or video.
417
418 Say Y here if you want to be able to classify outgoing packets based
419 on their RSVP requests and you are using the new Internet Protocol
420 IPv6 as opposed to the older and more common IPv4.
421
422 To compile this code as a module, choose M here: the
423 module will be called cls_rsvp6.
424
425config NET_EMATCH
426 bool "Extended Matches"
427 depends on NET_CLS
428 ---help---
429 Say Y here if you want to use extended matches on top of classifiers
430 and select the extended matches below.
431
432 Extended matches are small classification helpers not worth writing
433 a separate classifier.
434
435 You must have a recent version of the iproute2 tools in order to use
436 extended matches.
437
438config NET_EMATCH_STACK
439 int "Stack size"
440 depends on NET_EMATCH
441 default "32"
442 ---help---
443 Size of the local stack variable used while evaluating the tree of
444 ematches. Limits the depth of the tree, i.e. the number of
Thomas Grafb8249792005-06-08 15:10:22 -0700445 encapsulated precedences. Every level requires 4 bytes of additional
Linus Torvalds1da177e2005-04-16 15:20:36 -0700446 stack space.
447
448config NET_EMATCH_CMP
449 tristate "Simple packet data comparison"
450 depends on NET_EMATCH
451 ---help---
452 Say Y here if you want to be able to classify packets based on
453 simple packet data comparisons for 8, 16, and 32bit values.
454
455 To compile this code as a module, choose M here: the
456 module will be called em_cmp.
457
458config NET_EMATCH_NBYTE
459 tristate "Multi byte comparison"
460 depends on NET_EMATCH
461 ---help---
462 Say Y here if you want to be able to classify packets based on
463 multiple byte comparisons mainly useful for IPv6 address comparisons.
464
465 To compile this code as a module, choose M here: the
466 module will be called em_nbyte.
467
468config NET_EMATCH_U32
469 tristate "U32 hashing key"
470 depends on NET_EMATCH
471 ---help---
472 Say Y here if you want to be able to classify packets using
473 the famous u32 key in combination with logic relations.
474
475 To compile this code as a module, choose M here: the
476 module will be called em_u32.
477
478config NET_EMATCH_META
479 tristate "Metadata"
480 depends on NET_EMATCH
481 ---help---
482 Say Y here if you want to be ablt to classify packets based on
483 metadata such as load average, netfilter attributes, socket
484 attributes and routing decisions.
485
486 To compile this code as a module, choose M here: the
487 module will be called em_meta.
488
Thomas Grafd675c982005-06-23 21:00:58 -0700489config NET_EMATCH_TEXT
490 tristate "Textsearch"
491 depends on NET_EMATCH
David S. Millerf2d368f2005-06-23 23:55:41 -0700492 select TEXTSEARCH
David S. Millerf7704342005-06-24 17:39:03 -0700493 select TEXTSEARCH_KMP
494 select TEXTSEARCH_FSM
Thomas Grafd675c982005-06-23 21:00:58 -0700495 ---help---
496 Say Y here if you want to be ablt to classify packets based on
David S. Millerf7704342005-06-24 17:39:03 -0700497 textsearch comparisons.
Thomas Grafd675c982005-06-23 21:00:58 -0700498
499 To compile this code as a module, choose M here: the
500 module will be called em_text.
501
Linus Torvalds1da177e2005-04-16 15:20:36 -0700502config NET_CLS_ACT
503 bool "Packet ACTION"
504 depends on EXPERIMENTAL && NET_CLS && NET_QOS
505 ---help---
506 This option requires you have a new iproute2. It enables
507 tc extensions which can be used with tc classifiers.
508 You MUST NOT turn this on if you dont have an update iproute2.
509
510config NET_ACT_POLICE
511 tristate "Policing Actions"
512 depends on NET_CLS_ACT
513 ---help---
514 If you are using a newer iproute2 select this one, otherwise use one
515 below to select a policer.
516 You MUST NOT turn this on if you dont have an update iproute2.
517
518config NET_ACT_GACT
519 tristate "generic Actions"
520 depends on NET_CLS_ACT
521 ---help---
522 You must have new iproute2 to use this feature.
523 This adds simple filtering actions like drop, accept etc.
524
525config GACT_PROB
526 bool "generic Actions probability"
527 depends on NET_ACT_GACT
528 ---help---
529 Allows generic actions to be randomly or deterministically used.
530
531config NET_ACT_MIRRED
532 tristate "Packet In/Egress redirecton/mirror Actions"
533 depends on NET_CLS_ACT
534 ---help---
535 requires new iproute2
536 This allows packets to be mirrored or redirected to netdevices
537
538config NET_ACT_IPT
539 tristate "iptables Actions"
540 depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
541 ---help---
542 requires new iproute2
543 This allows iptables targets to be used by tc filters
544
545config NET_ACT_PEDIT
546 tristate "Generic Packet Editor Actions"
547 depends on NET_CLS_ACT
548 ---help---
549 requires new iproute2
550 This allows for packets to be generically edited
551
552config NET_CLS_POLICE
553 bool "Traffic policing (needed for in/egress)"
554 depends on NET_CLS && NET_QOS && NET_CLS_ACT!=y
555 help
556 Say Y to support traffic policing (bandwidth limits). Needed for
557 ingress and egress rate limiting.
558
Jamal Hadi Salimdb753072005-04-24 20:10:16 -0700559config NET_ACT_SIMP
560 tristate "Simple action"
561 depends on NET_CLS_ACT
562 ---help---
563 You must have new iproute2 to use this feature.
564 This adds a very simple action for demonstration purposes
565 The idea is to give action authors a basic example to look at.
566 All this action will do is print on the console the configured
567 policy string followed by _ then packet count.
568