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