xref: /openbmc/linux/net/sched/Kconfig (revision da2014a2)
1#
2# Traffic control configuration.
3#
4
5menuconfig NET_SCHED
6	bool "QoS and/or fair queueing"
7	select NET_SCH_FIFO
8	---help---
9	  When the kernel has several packets to send out over a network
10	  device, it has to decide which ones to send first, which ones to
11	  delay, and which ones to drop. This is the job of the queueing
12	  disciplines, several different algorithms for how to do this
13	  "fairly" have been proposed.
14
15	  If you say N here, you will get the standard packet scheduler, which
16	  is a FIFO (first come, first served). If you say Y here, you will be
17	  able to choose from among several alternative algorithms which can
18	  then be attached to different network devices. This is useful for
19	  example if some of your network devices are real time devices that
20	  need a certain minimum data flow rate, or if you need to limit the
21	  maximum data flow rate for traffic which matches specified criteria.
22	  This code is considered to be experimental.
23
24	  To administer these schedulers, you'll need the user-level utilities
25	  from the package iproute2+tc at <ftp://ftp.tux.org/pub/net/ip-routing/>.
26	  That package also contains some documentation; for more, check out
27	  <http://linux-net.osdl.org/index.php/Iproute2>.
28
29	  This Quality of Service (QoS) support will enable you to use
30	  Differentiated Services (diffserv) and Resource Reservation Protocol
31	  (RSVP) on your Linux router if you also say Y to the corresponding
32	  classifiers below.  Documentation and software is at
33	  <http://diffserv.sourceforge.net/>.
34
35	  If you say Y here and to "/proc file system" below, you will be able
36	  to read status information about packet schedulers from the file
37	  /proc/net/psched.
38
39	  The available schedulers are listed in the following questions; you
40	  can say Y to as many as you like. If unsure, say N now.
41
42if NET_SCHED
43
44comment "Queueing/Scheduling"
45
46config NET_SCH_CBQ
47	tristate "Class Based Queueing (CBQ)"
48	---help---
49	  Say Y here if you want to use the Class-Based Queueing (CBQ) packet
50	  scheduling algorithm. This algorithm classifies the waiting packets
51	  into a tree-like hierarchy of classes; the leaves of this tree are
52	  in turn scheduled by separate algorithms.
53
54	  See the top of <file:net/sched/sch_cbq.c> for more details.
55
56	  CBQ is a commonly used scheduler, so if you're unsure, you should
57	  say Y here. Then say Y to all the queueing algorithms below that you
58	  want to use as leaf disciplines.
59
60	  To compile this code as a module, choose M here: the
61	  module will be called sch_cbq.
62
63config NET_SCH_HTB
64	tristate "Hierarchical Token Bucket (HTB)"
65	---help---
66	  Say Y here if you want to use the Hierarchical Token Buckets (HTB)
67	  packet scheduling algorithm. See
68	  <http://luxik.cdi.cz/~devik/qos/htb/> for complete manual and
69	  in-depth articles.
70
71	  HTB is very similar to CBQ regarding its goals however is has
72	  different properties and different algorithm.
73
74	  To compile this code as a module, choose M here: the
75	  module will be called sch_htb.
76
77config NET_SCH_HFSC
78	tristate "Hierarchical Fair Service Curve (HFSC)"
79	---help---
80	  Say Y here if you want to use the Hierarchical Fair Service Curve
81	  (HFSC) packet scheduling algorithm.
82
83	  To compile this code as a module, choose M here: the
84	  module will be called sch_hfsc.
85
86config NET_SCH_ATM
87	tristate "ATM Virtual Circuits (ATM)"
88	depends on ATM
89	---help---
90	  Say Y here if you want to use the ATM pseudo-scheduler.  This
91	  provides a framework for invoking classifiers, which in turn
92	  select classes of this queuing discipline.  Each class maps
93	  the flow(s) it is handling to a given virtual circuit.
94
95	  See the top of <file:net/sched/sch_atm.c> for more details.
96
97	  To compile this code as a module, choose M here: the
98	  module will be called sch_atm.
99
100config NET_SCH_PRIO
101	tristate "Multi Band Priority Queueing (PRIO)"
102	---help---
103	  Say Y here if you want to use an n-band priority queue packet
104	  scheduler.
105
106	  To compile this code as a module, choose M here: the
107	  module will be called sch_prio.
108
109config NET_SCH_RED
110	tristate "Random Early Detection (RED)"
111	---help---
112	  Say Y here if you want to use the Random Early Detection (RED)
113	  packet scheduling algorithm.
114
115	  See the top of <file:net/sched/sch_red.c> for more details.
116
117	  To compile this code as a module, choose M here: the
118	  module will be called sch_red.
119
120config NET_SCH_SFQ
121	tristate "Stochastic Fairness Queueing (SFQ)"
122	---help---
123	  Say Y here if you want to use the Stochastic Fairness Queueing (SFQ)
124	  packet scheduling algorithm.
125
126	  See the top of <file:net/sched/sch_sfq.c> for more details.
127
128	  To compile this code as a module, choose M here: the
129	  module will be called sch_sfq.
130
131config NET_SCH_TEQL
132	tristate "True Link Equalizer (TEQL)"
133	---help---
134	  Say Y here if you want to use the True Link Equalizer (TLE) packet
135	  scheduling algorithm. This queueing discipline allows the combination
136	  of several physical devices into one virtual device.
137
138	  See the top of <file:net/sched/sch_teql.c> for more details.
139
140	  To compile this code as a module, choose M here: the
141	  module will be called sch_teql.
142
143config NET_SCH_TBF
144	tristate "Token Bucket Filter (TBF)"
145	---help---
146	  Say Y here if you want to use the Token Bucket Filter (TBF) packet
147	  scheduling algorithm.
148
149	  See the top of <file:net/sched/sch_tbf.c> for more details.
150
151	  To compile this code as a module, choose M here: the
152	  module will be called sch_tbf.
153
154config NET_SCH_GRED
155	tristate "Generic Random Early Detection (GRED)"
156	---help---
157	  Say Y here if you want to use the Generic Random Early Detection
158	  (GRED) packet scheduling algorithm for some of your network devices
159	  (see the top of <file:net/sched/sch_red.c> for details and
160	  references about the algorithm).
161
162	  To compile this code as a module, choose M here: the
163	  module will be called sch_gred.
164
165config NET_SCH_DSMARK
166	tristate "Differentiated Services marker (DSMARK)"
167	---help---
168	  Say Y if you want to schedule packets according to the
169	  Differentiated Services architecture proposed in RFC 2475.
170	  Technical information on this method, with pointers to associated
171	  RFCs, is available at <http://www.gta.ufrj.br/diffserv/>.
172
173	  To compile this code as a module, choose M here: the
174	  module will be called sch_dsmark.
175
176config NET_SCH_NETEM
177	tristate "Network emulator (NETEM)"
178	---help---
179	  Say Y if you want to emulate network delay, loss, and packet
180	  re-ordering. This is often useful to simulate networks when
181	  testing applications or protocols.
182
183	  To compile this driver as a module, choose M here: the module
184	  will be called sch_netem.
185
186	  If unsure, say N.
187
188config NET_SCH_INGRESS
189	tristate "Ingress Qdisc"
190	depends on NET_CLS_ACT
191	---help---
192	  Say Y here if you want to use classifiers for incoming packets.
193	  If unsure, say Y.
194
195	  To compile this code as a module, choose M here: the
196	  module will be called sch_ingress.
197
198comment "Classification"
199
200config NET_CLS
201	boolean
202
203config NET_CLS_BASIC
204	tristate "Elementary classification (BASIC)"
205	select NET_CLS
206	---help---
207	  Say Y here if you want to be able to classify packets using
208	  only extended matches and actions.
209
210	  To compile this code as a module, choose M here: the
211	  module will be called cls_basic.
212
213config NET_CLS_TCINDEX
214	tristate "Traffic-Control Index (TCINDEX)"
215	select NET_CLS
216	---help---
217	  Say Y here if you want to be able to classify packets based on
218	  traffic control indices. You will want this feature if you want
219	  to implement Differentiated Services together with DSMARK.
220
221	  To compile this code as a module, choose M here: the
222	  module will be called cls_tcindex.
223
224config NET_CLS_ROUTE4
225	tristate "Routing decision (ROUTE)"
226	select NET_CLS_ROUTE
227	select NET_CLS
228	---help---
229	  If you say Y here, you will be able to classify packets
230	  according to the route table entry they matched.
231
232	  To compile this code as a module, choose M here: the
233	  module will be called cls_route.
234
235config NET_CLS_ROUTE
236	bool
237
238config NET_CLS_FW
239	tristate "Netfilter mark (FW)"
240	select NET_CLS
241	---help---
242	  If you say Y here, you will be able to classify packets
243	  according to netfilter/firewall marks.
244
245	  To compile this code as a module, choose M here: the
246	  module will be called cls_fw.
247
248config NET_CLS_U32
249	tristate "Universal 32bit comparisons w/ hashing (U32)"
250	select NET_CLS
251	---help---
252	  Say Y here to be able to classify packets using a universal
253	  32bit pieces based comparison scheme.
254
255	  To compile this code as a module, choose M here: the
256	  module will be called cls_u32.
257
258config CLS_U32_PERF
259	bool "Performance counters support"
260	depends on NET_CLS_U32
261	---help---
262	  Say Y here to make u32 gather additional statistics useful for
263	  fine tuning u32 classifiers.
264
265config CLS_U32_MARK
266	bool "Netfilter marks support"
267	depends on NET_CLS_U32
268	---help---
269	  Say Y here to be able to use netfilter marks as u32 key.
270
271config NET_CLS_RSVP
272	tristate "IPv4 Resource Reservation Protocol (RSVP)"
273	select NET_CLS
274	---help---
275	  The Resource Reservation Protocol (RSVP) permits end systems to
276	  request a minimum and maximum data flow rate for a connection; this
277	  is important for real time data such as streaming sound or video.
278
279	  Say Y here if you want to be able to classify outgoing packets based
280	  on their RSVP requests.
281
282	  To compile this code as a module, choose M here: the
283	  module will be called cls_rsvp.
284
285config NET_CLS_RSVP6
286	tristate "IPv6 Resource Reservation Protocol (RSVP6)"
287	select NET_CLS
288	---help---
289	  The Resource Reservation Protocol (RSVP) permits end systems to
290	  request a minimum and maximum data flow rate for a connection; this
291	  is important for real time data such as streaming sound or video.
292
293	  Say Y here if you want to be able to classify outgoing packets based
294	  on their RSVP requests and you are using the IPv6 protocol.
295
296	  To compile this code as a module, choose M here: the
297	  module will be called cls_rsvp6.
298
299config NET_CLS_FLOW
300	tristate "Flow classifier"
301	select NET_CLS
302	---help---
303	  If you say Y here, you will be able to classify packets based on
304	  a configurable combination of packet keys. This is mostly useful
305	  in combination with SFQ.
306
307	  To compile this code as a module, choose M here: the
308	  module will be called cls_flow.
309
310config NET_EMATCH
311	bool "Extended Matches"
312	select NET_CLS
313	---help---
314	  Say Y here if you want to use extended matches on top of classifiers
315	  and select the extended matches below.
316
317	  Extended matches are small classification helpers not worth writing
318	  a separate classifier for.
319
320	  A recent version of the iproute2 package is required to use
321	  extended matches.
322
323config NET_EMATCH_STACK
324	int "Stack size"
325	depends on NET_EMATCH
326	default "32"
327	---help---
328	  Size of the local stack variable used while evaluating the tree of
329	  ematches. Limits the depth of the tree, i.e. the number of
330	  encapsulated precedences. Every level requires 4 bytes of additional
331	  stack space.
332
333config NET_EMATCH_CMP
334	tristate "Simple packet data comparison"
335	depends on NET_EMATCH
336	---help---
337	  Say Y here if you want to be able to classify packets based on
338	  simple packet data comparisons for 8, 16, and 32bit values.
339
340	  To compile this code as a module, choose M here: the
341	  module will be called em_cmp.
342
343config NET_EMATCH_NBYTE
344	tristate "Multi byte comparison"
345	depends on NET_EMATCH
346	---help---
347	  Say Y here if you want to be able to classify packets based on
348	  multiple byte comparisons mainly useful for IPv6 address comparisons.
349
350	  To compile this code as a module, choose M here: the
351	  module will be called em_nbyte.
352
353config NET_EMATCH_U32
354	tristate "U32 key"
355	depends on NET_EMATCH
356	---help---
357	  Say Y here if you want to be able to classify packets using
358	  the famous u32 key in combination with logic relations.
359
360	  To compile this code as a module, choose M here: the
361	  module will be called em_u32.
362
363config NET_EMATCH_META
364	tristate "Metadata"
365	depends on NET_EMATCH
366	---help---
367	  Say Y here if you want to be able to classify packets based on
368	  metadata such as load average, netfilter attributes, socket
369	  attributes and routing decisions.
370
371	  To compile this code as a module, choose M here: the
372	  module will be called em_meta.
373
374config NET_EMATCH_TEXT
375	tristate "Textsearch"
376	depends on NET_EMATCH
377	select TEXTSEARCH
378	select TEXTSEARCH_KMP
379	select TEXTSEARCH_BM
380	select TEXTSEARCH_FSM
381	---help---
382	  Say Y here if you want to be able to classify packets based on
383	  textsearch comparisons.
384
385	  To compile this code as a module, choose M here: the
386	  module will be called em_text.
387
388config NET_CLS_ACT
389	bool "Actions"
390	---help---
391	  Say Y here if you want to use traffic control actions. Actions
392	  get attached to classifiers and are invoked after a successful
393	  classification. They are used to overwrite the classification
394	  result, instantly drop or redirect packets, etc.
395
396	  A recent version of the iproute2 package is required to use
397	  extended matches.
398
399config NET_ACT_POLICE
400	tristate "Traffic Policing"
401        depends on NET_CLS_ACT
402        ---help---
403	  Say Y here if you want to do traffic policing, i.e. strict
404	  bandwidth limiting. This action replaces the existing policing
405	  module.
406
407	  To compile this code as a module, choose M here: the
408	  module will be called police.
409
410config NET_ACT_GACT
411        tristate "Generic actions"
412        depends on NET_CLS_ACT
413        ---help---
414	  Say Y here to take generic actions such as dropping and
415	  accepting packets.
416
417	  To compile this code as a module, choose M here: the
418	  module will be called gact.
419
420config GACT_PROB
421        bool "Probability support"
422        depends on NET_ACT_GACT
423        ---help---
424	  Say Y here to use the generic action randomly or deterministically.
425
426config NET_ACT_MIRRED
427        tristate "Redirecting and Mirroring"
428        depends on NET_CLS_ACT
429        ---help---
430	  Say Y here to allow packets to be mirrored or redirected to
431	  other devices.
432
433	  To compile this code as a module, choose M here: the
434	  module will be called mirred.
435
436config NET_ACT_IPT
437        tristate "IPtables targets"
438        depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
439        ---help---
440	  Say Y here to be able to invoke iptables targets after successful
441	  classification.
442
443	  To compile this code as a module, choose M here: the
444	  module will be called ipt.
445
446config NET_ACT_NAT
447        tristate "Stateless NAT"
448        depends on NET_CLS_ACT
449        ---help---
450	  Say Y here to do stateless NAT on IPv4 packets.  You should use
451	  netfilter for NAT unless you know what you are doing.
452
453	  To compile this code as a module, choose M here: the
454	  module will be called nat.
455
456config NET_ACT_PEDIT
457        tristate "Packet Editing"
458        depends on NET_CLS_ACT
459        ---help---
460	  Say Y here if you want to mangle the content of packets.
461
462	  To compile this code as a module, choose M here: the
463	  module will be called pedit.
464
465config NET_ACT_SIMP
466        tristate "Simple Example (Debug)"
467        depends on NET_CLS_ACT
468        ---help---
469	  Say Y here to add a simple action for demonstration purposes.
470	  It is meant as an example and for debugging purposes. It will
471	  print a configured policy string followed by the packet count
472	  to the console for every packet that passes by.
473
474	  If unsure, say N.
475
476	  To compile this code as a module, choose M here: the
477	  module will be called simple.
478
479config NET_CLS_IND
480	bool "Incoming device classification"
481	depends on NET_CLS_U32 || NET_CLS_FW
482	---help---
483	  Say Y here to extend the u32 and fw classifier to support
484	  classification based on the incoming device. This option is
485	  likely to disappear in favour of the metadata ematch.
486
487endif # NET_SCHED
488
489config NET_SCH_FIFO
490	bool
491