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