xref: /linux/net/sched/Kconfig (revision 13abf8130139c2ccd4962a7e5a8902be5e6cb5a7)
1#
2# Traffic control configuration.
3#
4
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
41choice
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
225	  (GRED) packet scheduling algorithm for some of your network devices
226	  (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
445	  encapsulated precedences. Every level requires 4 bytes of additional
446	  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
489config NET_EMATCH_TEXT
490	tristate "Textsearch"
491	depends on NET_EMATCH
492	select TEXTSEARCH
493	select TEXTSEARCH_KMP
494	select TEXTSEARCH_BM
495	select TEXTSEARCH_FSM
496	---help---
497	  Say Y here if you want to be ablt to classify packets based on
498	  textsearch comparisons.
499
500	  To compile this code as a module, choose M here: the
501	  module will be called em_text.
502
503config NET_CLS_ACT
504	bool "Packet ACTION"
505	depends on EXPERIMENTAL && NET_CLS && NET_QOS
506	---help---
507	This option requires you have a new iproute2. It enables
508	tc extensions which can be used with tc classifiers.
509	  You MUST NOT turn this on if you dont have an update iproute2.
510
511config NET_ACT_POLICE
512	tristate "Policing Actions"
513        depends on NET_CLS_ACT
514        ---help---
515        If you are using a newer iproute2 select this one, otherwise use one
516	below to select a policer.
517	  You MUST NOT turn this on if you dont have an update iproute2.
518
519config NET_ACT_GACT
520        tristate "generic Actions"
521        depends on NET_CLS_ACT
522        ---help---
523        You must have new iproute2 to use this feature.
524        This adds simple filtering actions like drop, accept etc.
525
526config GACT_PROB
527        bool "generic Actions probability"
528        depends on NET_ACT_GACT
529        ---help---
530        Allows generic actions to be randomly or deterministically used.
531
532config NET_ACT_MIRRED
533        tristate "Packet In/Egress redirecton/mirror Actions"
534        depends on NET_CLS_ACT
535        ---help---
536        requires new iproute2
537        This allows packets to be mirrored or redirected to netdevices
538
539config NET_ACT_IPT
540        tristate "iptables Actions"
541        depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
542        ---help---
543        requires new iproute2
544        This allows iptables targets to be used by tc filters
545
546config NET_ACT_PEDIT
547        tristate "Generic Packet Editor Actions"
548        depends on NET_CLS_ACT
549        ---help---
550        requires new iproute2
551        This allows for packets to be generically edited
552
553config NET_CLS_POLICE
554	bool "Traffic policing (needed for in/egress)"
555	depends on NET_CLS && NET_QOS && NET_CLS_ACT!=y
556	help
557	  Say Y to support traffic policing (bandwidth limits).  Needed for
558	  ingress and egress rate limiting.
559
560config NET_ACT_SIMP
561        tristate "Simple action"
562        depends on NET_CLS_ACT
563        ---help---
564        You must have new iproute2 to use this feature.
565        This adds a very simple action for demonstration purposes
566	The idea is to give action authors a basic example to look at.
567	All this action will do is print on the console the configured
568	policy string followed by _ then packet count.
569
570