blob: 9ac3853b63847866f44ae03f42879392ad763c29 [file] [log] [blame]
Kyle Swenson8d8f6542021-03-15 11:02:55 -06001#
2# Traffic control configuration.
3#
4
5menuconfig NET_SCHED
Kyle Swensone01461f2021-03-15 11:14:57 -06006 def_bool y
Kyle Swenson8d8f6542021-03-15 11:02:55 -06007 select NET_SCH_FIFO
Kyle Swensone01461f2021-03-15 11:14:57 -06008 select NET_SCH_FQ_CODEL
Kyle Swenson8d8f6542021-03-15 11:02:55 -06009 ---help---
10 When the kernel has several packets to send out over a network
11 device, it has to decide which ones to send first, which ones to
12 delay, and which ones to drop. This is the job of the queueing
13 disciplines, several different algorithms for how to do this
14 "fairly" have been proposed.
15
16 If you say N here, you will get the standard packet scheduler, which
17 is a FIFO (first come, first served). If you say Y here, you will be
18 able to choose from among several alternative algorithms which can
19 then be attached to different network devices. This is useful for
20 example if some of your network devices are real time devices that
21 need a certain minimum data flow rate, or if you need to limit the
22 maximum data flow rate for traffic which matches specified criteria.
23 This code is considered to be experimental.
24
25 To administer these schedulers, you'll need the user-level utilities
26 from the package iproute2+tc at
27 <https://www.kernel.org/pub/linux/utils/net/iproute2/>. That package
28 also contains some documentation; for more, check out
29 <http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2>.
30
31 This Quality of Service (QoS) support will enable you to use
32 Differentiated Services (diffserv) and Resource Reservation Protocol
33 (RSVP) on your Linux router if you also say Y to the corresponding
34 classifiers below. Documentation and software is at
35 <http://diffserv.sourceforge.net/>.
36
37 If you say Y here and to "/proc file system" below, you will be able
38 to read status information about packet schedulers from the file
39 /proc/net/psched.
40
41 The available schedulers are listed in the following questions; you
42 can say Y to as many as you like. If unsure, say N now.
43
44if NET_SCHED
45
46comment "Queueing/Scheduling"
47
48config NET_SCH_CBQ
49 tristate "Class Based Queueing (CBQ)"
50 ---help---
51 Say Y here if you want to use the Class-Based Queueing (CBQ) packet
52 scheduling algorithm. This algorithm classifies the waiting packets
53 into a tree-like hierarchy of classes; the leaves of this tree are
54 in turn scheduled by separate algorithms.
55
56 See the top of <file:net/sched/sch_cbq.c> for more details.
57
58 CBQ is a commonly used scheduler, so if you're unsure, you should
59 say Y here. Then say Y to all the queueing algorithms below that you
60 want to use as leaf disciplines.
61
62 To compile this code as a module, choose M here: the
63 module will be called sch_cbq.
64
65config NET_SCH_HTB
66 tristate "Hierarchical Token Bucket (HTB)"
67 ---help---
68 Say Y here if you want to use the Hierarchical Token Buckets (HTB)
69 packet scheduling algorithm. See
70 <http://luxik.cdi.cz/~devik/qos/htb/> for complete manual and
71 in-depth articles.
72
73 HTB is very similar to CBQ regarding its goals however is has
74 different properties and different algorithm.
75
76 To compile this code as a module, choose M here: the
77 module will be called sch_htb.
78
79config NET_SCH_HFSC
80 tristate "Hierarchical Fair Service Curve (HFSC)"
81 ---help---
82 Say Y here if you want to use the Hierarchical Fair Service Curve
83 (HFSC) packet scheduling algorithm.
84
85 To compile this code as a module, choose M here: the
86 module will be called sch_hfsc.
87
88config NET_SCH_ATM
89 tristate "ATM Virtual Circuits (ATM)"
90 depends on ATM
91 ---help---
92 Say Y here if you want to use the ATM pseudo-scheduler. This
93 provides a framework for invoking classifiers, which in turn
94 select classes of this queuing discipline. Each class maps
95 the flow(s) it is handling to a given virtual circuit.
96
97 See the top of <file:net/sched/sch_atm.c> for more details.
98
99 To compile this code as a module, choose M here: the
100 module will be called sch_atm.
101
102config NET_SCH_PRIO
103 tristate "Multi Band Priority Queueing (PRIO)"
104 ---help---
105 Say Y here if you want to use an n-band priority queue packet
106 scheduler.
107
108 To compile this code as a module, choose M here: the
109 module will be called sch_prio.
110
111config NET_SCH_MULTIQ
112 tristate "Hardware Multiqueue-aware Multi Band Queuing (MULTIQ)"
113 ---help---
114 Say Y here if you want to use an n-band queue packet scheduler
115 to support devices that have multiple hardware transmit queues.
116
117 To compile this code as a module, choose M here: the
118 module will be called sch_multiq.
119
120config NET_SCH_RED
121 tristate "Random Early Detection (RED)"
122 ---help---
123 Say Y here if you want to use the Random Early Detection (RED)
124 packet scheduling algorithm.
125
126 See the top of <file:net/sched/sch_red.c> for more details.
127
128 To compile this code as a module, choose M here: the
129 module will be called sch_red.
130
131config NET_SCH_SFB
132 tristate "Stochastic Fair Blue (SFB)"
133 ---help---
134 Say Y here if you want to use the Stochastic Fair Blue (SFB)
135 packet scheduling algorithm.
136
137 See the top of <file:net/sched/sch_sfb.c> for more details.
138
139 To compile this code as a module, choose M here: the
140 module will be called sch_sfb.
141
142config NET_SCH_SFQ
143 tristate "Stochastic Fairness Queueing (SFQ)"
144 ---help---
145 Say Y here if you want to use the Stochastic Fairness Queueing (SFQ)
146 packet scheduling algorithm.
147
148 See the top of <file:net/sched/sch_sfq.c> for more details.
149
150 To compile this code as a module, choose M here: the
151 module will be called sch_sfq.
152
153config NET_SCH_TEQL
154 tristate "True Link Equalizer (TEQL)"
155 ---help---
156 Say Y here if you want to use the True Link Equalizer (TLE) packet
157 scheduling algorithm. This queueing discipline allows the combination
158 of several physical devices into one virtual device.
159
160 See the top of <file:net/sched/sch_teql.c> for more details.
161
162 To compile this code as a module, choose M here: the
163 module will be called sch_teql.
164
165config NET_SCH_TBF
166 tristate "Token Bucket Filter (TBF)"
167 ---help---
168 Say Y here if you want to use the Token Bucket Filter (TBF) packet
169 scheduling algorithm.
170
171 See the top of <file:net/sched/sch_tbf.c> for more details.
172
173 To compile this code as a module, choose M here: the
174 module will be called sch_tbf.
175
176config NET_SCH_GRED
177 tristate "Generic Random Early Detection (GRED)"
178 ---help---
179 Say Y here if you want to use the Generic Random Early Detection
180 (GRED) packet scheduling algorithm for some of your network devices
181 (see the top of <file:net/sched/sch_red.c> for details and
182 references about the algorithm).
183
184 To compile this code as a module, choose M here: the
185 module will be called sch_gred.
186
187config NET_SCH_DSMARK
188 tristate "Differentiated Services marker (DSMARK)"
189 ---help---
190 Say Y if you want to schedule packets according to the
191 Differentiated Services architecture proposed in RFC 2475.
192 Technical information on this method, with pointers to associated
193 RFCs, is available at <http://www.gta.ufrj.br/diffserv/>.
194
195 To compile this code as a module, choose M here: the
196 module will be called sch_dsmark.
197
198config NET_SCH_NETEM
199 tristate "Network emulator (NETEM)"
200 ---help---
201 Say Y if you want to emulate network delay, loss, and packet
202 re-ordering. This is often useful to simulate networks when
203 testing applications or protocols.
204
205 To compile this driver as a module, choose M here: the module
206 will be called sch_netem.
207
208 If unsure, say N.
209
210config NET_SCH_DRR
211 tristate "Deficit Round Robin scheduler (DRR)"
212 help
213 Say Y here if you want to use the Deficit Round Robin (DRR) packet
214 scheduling algorithm.
215
216 To compile this driver as a module, choose M here: the module
217 will be called sch_drr.
218
219 If unsure, say N.
220
221config NET_SCH_MQPRIO
222 tristate "Multi-queue priority scheduler (MQPRIO)"
223 help
224 Say Y here if you want to use the Multi-queue Priority scheduler.
225 This scheduler allows QOS to be offloaded on NICs that have support
226 for offloading QOS schedulers.
227
228 To compile this driver as a module, choose M here: the module will
229 be called sch_mqprio.
230
231 If unsure, say N.
232
233config NET_SCH_CHOKE
234 tristate "CHOose and Keep responsive flow scheduler (CHOKE)"
235 help
236 Say Y here if you want to use the CHOKe packet scheduler (CHOose
237 and Keep for responsive flows, CHOose and Kill for unresponsive
238 flows). This is a variation of RED which trys to penalize flows
239 that monopolize the queue.
240
241 To compile this code as a module, choose M here: the
242 module will be called sch_choke.
243
244config NET_SCH_QFQ
245 tristate "Quick Fair Queueing scheduler (QFQ)"
246 help
247 Say Y here if you want to use the Quick Fair Queueing Scheduler (QFQ)
248 packet scheduling algorithm.
249
250 To compile this driver as a module, choose M here: the module
251 will be called sch_qfq.
252
253 If unsure, say N.
254
255config NET_SCH_CODEL
256 tristate "Controlled Delay AQM (CODEL)"
257 help
258 Say Y here if you want to use the Controlled Delay (CODEL)
259 packet scheduling algorithm.
260
261 To compile this driver as a module, choose M here: the module
262 will be called sch_codel.
263
264 If unsure, say N.
265
266config NET_SCH_FQ_CODEL
267 tristate "Fair Queue Controlled Delay AQM (FQ_CODEL)"
268 help
269 Say Y here if you want to use the FQ Controlled Delay (FQ_CODEL)
270 packet scheduling algorithm.
271
272 To compile this driver as a module, choose M here: the module
273 will be called sch_fq_codel.
274
275 If unsure, say N.
276
277config NET_SCH_FQ
278 tristate "Fair Queue"
279 help
280 Say Y here if you want to use the FQ packet scheduling algorithm.
281
282 FQ does flow separation, and is able to respect pacing requirements
283 set by TCP stack into sk->sk_pacing_rate (for localy generated
284 traffic)
285
286 To compile this driver as a module, choose M here: the module
287 will be called sch_fq.
288
289 If unsure, say N.
290
291config NET_SCH_HHF
292 tristate "Heavy-Hitter Filter (HHF)"
293 help
294 Say Y here if you want to use the Heavy-Hitter Filter (HHF)
295 packet scheduling algorithm.
296
297 To compile this driver as a module, choose M here: the module
298 will be called sch_hhf.
299
300config NET_SCH_PIE
301 tristate "Proportional Integral controller Enhanced (PIE) scheduler"
302 help
303 Say Y here if you want to use the Proportional Integral controller
304 Enhanced scheduler packet scheduling algorithm.
305 For more information, please see
306 http://tools.ietf.org/html/draft-pan-tsvwg-pie-00
307
308 To compile this driver as a module, choose M here: the module
309 will be called sch_pie.
310
311 If unsure, say N.
312
313config NET_SCH_INGRESS
314 tristate "Ingress Qdisc"
315 depends on NET_CLS_ACT
316 select NET_INGRESS
317 ---help---
318 Say Y here if you want to use classifiers for incoming packets.
319 If unsure, say Y.
320
321 To compile this code as a module, choose M here: the
322 module will be called sch_ingress.
323
324config NET_SCH_PLUG
325 tristate "Plug network traffic until release (PLUG)"
326 ---help---
327
328 This queuing discipline allows userspace to plug/unplug a network
329 output queue, using the netlink interface. When it receives an
330 enqueue command it inserts a plug into the outbound queue that
331 causes following packets to enqueue until a dequeue command arrives
332 over netlink, causing the plug to be removed and resuming the normal
333 packet flow.
334
335 This module also provides a generic "network output buffering"
336 functionality (aka output commit), wherein upon arrival of a dequeue
337 command, only packets up to the first plug are released for delivery.
338 The Remus HA project uses this module to enable speculative execution
339 of virtual machines by allowing the generated network output to be rolled
340 back if needed.
341
342 For more information, please refer to <http://wiki.xenproject.org/wiki/Remus>
343
344 Say Y here if you are using this kernel for Xen dom0 and
345 want to protect Xen guests with Remus.
346
347 To compile this code as a module, choose M here: the
348 module will be called sch_plug.
349
350comment "Classification"
351
352config NET_CLS
353 bool
354
355config NET_CLS_BASIC
356 tristate "Elementary classification (BASIC)"
357 select NET_CLS
358 ---help---
359 Say Y here if you want to be able to classify packets using
360 only extended matches and actions.
361
362 To compile this code as a module, choose M here: the
363 module will be called cls_basic.
364
365config NET_CLS_TCINDEX
366 tristate "Traffic-Control Index (TCINDEX)"
367 select NET_CLS
368 ---help---
369 Say Y here if you want to be able to classify packets based on
370 traffic control indices. You will want this feature if you want
371 to implement Differentiated Services together with DSMARK.
372
373 To compile this code as a module, choose M here: the
374 module will be called cls_tcindex.
375
376config NET_CLS_ROUTE4
377 tristate "Routing decision (ROUTE)"
378 depends on INET
379 select IP_ROUTE_CLASSID
380 select NET_CLS
381 ---help---
382 If you say Y here, you will be able to classify packets
383 according to the route table entry they matched.
384
385 To compile this code as a module, choose M here: the
386 module will be called cls_route.
387
388config NET_CLS_FW
389 tristate "Netfilter mark (FW)"
390 select NET_CLS
391 ---help---
392 If you say Y here, you will be able to classify packets
393 according to netfilter/firewall marks.
394
395 To compile this code as a module, choose M here: the
396 module will be called cls_fw.
397
398config NET_CLS_U32
399 tristate "Universal 32bit comparisons w/ hashing (U32)"
400 select NET_CLS
401 ---help---
402 Say Y here to be able to classify packets using a universal
403 32bit pieces based comparison scheme.
404
405 To compile this code as a module, choose M here: the
406 module will be called cls_u32.
407
408config CLS_U32_PERF
409 bool "Performance counters support"
410 depends on NET_CLS_U32
411 ---help---
412 Say Y here to make u32 gather additional statistics useful for
413 fine tuning u32 classifiers.
414
415config CLS_U32_MARK
416 bool "Netfilter marks support"
417 depends on NET_CLS_U32
418 ---help---
419 Say Y here to be able to use netfilter marks as u32 key.
420
421config NET_CLS_RSVP
422 tristate "IPv4 Resource Reservation Protocol (RSVP)"
423 select NET_CLS
424 ---help---
425 The Resource Reservation Protocol (RSVP) permits end systems to
426 request a minimum and maximum data flow rate for a connection; this
427 is important for real time data such as streaming sound or video.
428
429 Say Y here if you want to be able to classify outgoing packets based
430 on their RSVP requests.
431
432 To compile this code as a module, choose M here: the
433 module will be called cls_rsvp.
434
435config NET_CLS_RSVP6
436 tristate "IPv6 Resource Reservation Protocol (RSVP6)"
437 select NET_CLS
438 ---help---
439 The Resource Reservation Protocol (RSVP) permits end systems to
440 request a minimum and maximum data flow rate for a connection; this
441 is important for real time data such as streaming sound or video.
442
443 Say Y here if you want to be able to classify outgoing packets based
444 on their RSVP requests and you are using the IPv6 protocol.
445
446 To compile this code as a module, choose M here: the
447 module will be called cls_rsvp6.
448
449config NET_CLS_FLOW
450 tristate "Flow classifier"
451 select NET_CLS
452 ---help---
453 If you say Y here, you will be able to classify packets based on
454 a configurable combination of packet keys. This is mostly useful
455 in combination with SFQ.
456
457 To compile this code as a module, choose M here: the
458 module will be called cls_flow.
459
460config NET_CLS_CGROUP
461 tristate "Control Group Classifier"
462 select NET_CLS
463 select CGROUP_NET_CLASSID
464 depends on CGROUPS
465 ---help---
466 Say Y here if you want to classify packets based on the control
467 cgroup of their process.
468
469 To compile this code as a module, choose M here: the
470 module will be called cls_cgroup.
471
472config NET_CLS_BPF
473 tristate "BPF-based classifier"
474 select NET_CLS
475 ---help---
476 If you say Y here, you will be able to classify packets based on
477 programmable BPF (JIT'ed) filters as an alternative to ematches.
478
479 To compile this code as a module, choose M here: the module will
480 be called cls_bpf.
481
482config NET_CLS_FLOWER
483 tristate "Flower classifier"
484 select NET_CLS
485 ---help---
486 If you say Y here, you will be able to classify packets based on
487 a configurable combination of packet keys and masks.
488
489 To compile this code as a module, choose M here: the module will
490 be called cls_flower.
491
492config NET_EMATCH
493 bool "Extended Matches"
494 select NET_CLS
495 ---help---
496 Say Y here if you want to use extended matches on top of classifiers
497 and select the extended matches below.
498
499 Extended matches are small classification helpers not worth writing
500 a separate classifier for.
501
502 A recent version of the iproute2 package is required to use
503 extended matches.
504
505config NET_EMATCH_STACK
506 int "Stack size"
507 depends on NET_EMATCH
508 default "32"
509 ---help---
510 Size of the local stack variable used while evaluating the tree of
511 ematches. Limits the depth of the tree, i.e. the number of
512 encapsulated precedences. Every level requires 4 bytes of additional
513 stack space.
514
515config NET_EMATCH_CMP
516 tristate "Simple packet data comparison"
517 depends on NET_EMATCH
518 ---help---
519 Say Y here if you want to be able to classify packets based on
520 simple packet data comparisons for 8, 16, and 32bit values.
521
522 To compile this code as a module, choose M here: the
523 module will be called em_cmp.
524
525config NET_EMATCH_NBYTE
526 tristate "Multi byte comparison"
527 depends on NET_EMATCH
528 ---help---
529 Say Y here if you want to be able to classify packets based on
530 multiple byte comparisons mainly useful for IPv6 address comparisons.
531
532 To compile this code as a module, choose M here: the
533 module will be called em_nbyte.
534
535config NET_EMATCH_U32
536 tristate "U32 key"
537 depends on NET_EMATCH
538 ---help---
539 Say Y here if you want to be able to classify packets using
540 the famous u32 key in combination with logic relations.
541
542 To compile this code as a module, choose M here: the
543 module will be called em_u32.
544
545config NET_EMATCH_META
546 tristate "Metadata"
547 depends on NET_EMATCH
548 ---help---
549 Say Y here if you want to be able to classify packets based on
550 metadata such as load average, netfilter attributes, socket
551 attributes and routing decisions.
552
553 To compile this code as a module, choose M here: the
554 module will be called em_meta.
555
556config NET_EMATCH_TEXT
557 tristate "Textsearch"
558 depends on NET_EMATCH
559 select TEXTSEARCH
560 select TEXTSEARCH_KMP
561 select TEXTSEARCH_BM
562 select TEXTSEARCH_FSM
563 ---help---
564 Say Y here if you want to be able to classify packets based on
565 textsearch comparisons.
566
567 To compile this code as a module, choose M here: the
568 module will be called em_text.
569
570config NET_EMATCH_CANID
571 tristate "CAN Identifier"
572 depends on NET_EMATCH && (CAN=y || CAN=m)
573 ---help---
574 Say Y here if you want to be able to classify CAN frames based
575 on CAN Identifier.
576
577 To compile this code as a module, choose M here: the
578 module will be called em_canid.
579
580config NET_EMATCH_IPSET
581 tristate "IPset"
582 depends on NET_EMATCH && IP_SET
583 ---help---
584 Say Y here if you want to be able to classify packets based on
585 ipset membership.
586
587 To compile this code as a module, choose M here: the
588 module will be called em_ipset.
589
590config NET_CLS_ACT
591 bool "Actions"
592 ---help---
593 Say Y here if you want to use traffic control actions. Actions
594 get attached to classifiers and are invoked after a successful
595 classification. They are used to overwrite the classification
596 result, instantly drop or redirect packets, etc.
597
598 A recent version of the iproute2 package is required to use
599 extended matches.
600
601config NET_ACT_POLICE
602 tristate "Traffic Policing"
603 depends on NET_CLS_ACT
604 ---help---
605 Say Y here if you want to do traffic policing, i.e. strict
606 bandwidth limiting. This action replaces the existing policing
607 module.
608
609 To compile this code as a module, choose M here: the
610 module will be called act_police.
611
612config NET_ACT_GACT
613 tristate "Generic actions"
614 depends on NET_CLS_ACT
615 ---help---
616 Say Y here to take generic actions such as dropping and
617 accepting packets.
618
619 To compile this code as a module, choose M here: the
620 module will be called act_gact.
621
622config GACT_PROB
623 bool "Probability support"
624 depends on NET_ACT_GACT
625 ---help---
626 Say Y here to use the generic action randomly or deterministically.
627
628config NET_ACT_MIRRED
629 tristate "Redirecting and Mirroring"
630 depends on NET_CLS_ACT
631 ---help---
632 Say Y here to allow packets to be mirrored or redirected to
633 other devices.
634
635 To compile this code as a module, choose M here: the
636 module will be called act_mirred.
637
638config NET_ACT_IPT
639 tristate "IPtables targets"
640 depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
641 ---help---
642 Say Y here to be able to invoke iptables targets after successful
643 classification.
644
645 To compile this code as a module, choose M here: the
646 module will be called act_ipt.
647
648config NET_ACT_NAT
649 tristate "Stateless NAT"
650 depends on NET_CLS_ACT
651 ---help---
652 Say Y here to do stateless NAT on IPv4 packets. You should use
653 netfilter for NAT unless you know what you are doing.
654
655 To compile this code as a module, choose M here: the
656 module will be called act_nat.
657
658config NET_ACT_PEDIT
659 tristate "Packet Editing"
660 depends on NET_CLS_ACT
661 ---help---
662 Say Y here if you want to mangle the content of packets.
663
664 To compile this code as a module, choose M here: the
665 module will be called act_pedit.
666
667config NET_ACT_SIMP
668 tristate "Simple Example (Debug)"
669 depends on NET_CLS_ACT
670 ---help---
671 Say Y here to add a simple action for demonstration purposes.
672 It is meant as an example and for debugging purposes. It will
673 print a configured policy string followed by the packet count
674 to the console for every packet that passes by.
675
676 If unsure, say N.
677
678 To compile this code as a module, choose M here: the
679 module will be called act_simple.
680
681config NET_ACT_SKBEDIT
682 tristate "SKB Editing"
683 depends on NET_CLS_ACT
684 ---help---
685 Say Y here to change skb priority or queue_mapping settings.
686
687 If unsure, say N.
688
689 To compile this code as a module, choose M here: the
690 module will be called act_skbedit.
691
692config NET_ACT_CSUM
693 tristate "Checksum Updating"
694 depends on NET_CLS_ACT && INET
695 ---help---
696 Say Y here to update some common checksum after some direct
697 packet alterations.
698
699 To compile this code as a module, choose M here: the
700 module will be called act_csum.
701
702config NET_ACT_VLAN
703 tristate "Vlan manipulation"
704 depends on NET_CLS_ACT
705 ---help---
706 Say Y here to push or pop vlan headers.
707
708 If unsure, say N.
709
710 To compile this code as a module, choose M here: the
711 module will be called act_vlan.
712
713config NET_ACT_BPF
714 tristate "BPF based action"
715 depends on NET_CLS_ACT
716 ---help---
717 Say Y here to execute BPF code on packets. The BPF code will decide
718 if the packet should be dropped or not.
719
720 If unsure, say N.
721
722 To compile this code as a module, choose M here: the
723 module will be called act_bpf.
724
725config NET_ACT_CONNMARK
726 tristate "Netfilter Connection Mark Retriever"
727 depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
728 depends on NF_CONNTRACK && NF_CONNTRACK_MARK
729 ---help---
730 Say Y here to allow retrieving of conn mark
731
732 If unsure, say N.
733
734 To compile this code as a module, choose M here: the
735 module will be called act_connmark.
736
737config NET_CLS_IND
738 bool "Incoming device classification"
739 depends on NET_CLS_U32 || NET_CLS_FW
740 ---help---
741 Say Y here to extend the u32 and fw classifier to support
742 classification based on the incoming device. This option is
743 likely to disappear in favour of the metadata ematch.
744
745endif # NET_SCHED
746
747config NET_SCH_FIFO
748 bool