1# 2# Traffic control configuration. 3# 4 5menu "QoS and/or fair queueing" 6 7config NET_SCHED 8 bool "QoS and/or fair queueing" 9 ---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 <ftp://ftp.tux.org/pub/net/ip-routing/>. 27 That package also contains some documentation; for more, check out 28 <http://linux-net.osdl.org/index.php/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 45choice 46 prompt "Packet scheduler clock source" 47 default NET_SCH_CLK_GETTIMEOFDAY 48 ---help--- 49 Packet schedulers need a monotonic clock that increments at a static 50 rate. The kernel provides several suitable interfaces, each with 51 different properties: 52 53 - high resolution (us or better) 54 - fast to read (minimal locking, no i/o access) 55 - synchronized on all processors 56 - handles cpu clock frequency changes 57 58 but nothing provides all of the above. 59 60config NET_SCH_CLK_JIFFIES 61 bool "Timer interrupt" 62 ---help--- 63 Say Y here if you want to use the timer interrupt (jiffies) as clock 64 source. This clock source is fast, synchronized on all processors and 65 handles cpu clock frequency changes, but its resolution is too low 66 for accurate shaping except at very low speed. 67 68config NET_SCH_CLK_GETTIMEOFDAY 69 bool "gettimeofday" 70 ---help--- 71 Say Y here if you want to use gettimeofday as clock source. This clock 72 source has high resolution, is synchronized on all processors and 73 handles cpu clock frequency changes, but it is slow. 74 75 Choose this if you need a high resolution clock source but can't use 76 the CPU's cycle counter. 77 78# don't allow on SMP x86 because they can have unsynchronized TSCs. 79# gettimeofday is a good alternative 80config NET_SCH_CLK_CPU 81 bool "CPU cycle counter" 82 depends on ((X86_TSC || X86_64) && !SMP) || ALPHA || SPARC64 || PPC64 || IA64 83 ---help--- 84 Say Y here if you want to use the CPU's cycle counter as clock source. 85 This is a cheap and high resolution clock source, but on some 86 architectures it is not synchronized on all processors and doesn't 87 handle cpu clock frequency changes. 88 89 The useable cycle counters are: 90 91 x86/x86_64 - Timestamp Counter 92 alpha - Cycle Counter 93 sparc64 - %ticks register 94 ppc64 - Time base 95 ia64 - Interval Time Counter 96 97 Choose this if your CPU's cycle counter is working properly. 98 99endchoice 100 101comment "Queueing/Scheduling" 102 103config NET_SCH_CBQ 104 tristate "Class Based Queueing (CBQ)" 105 ---help--- 106 Say Y here if you want to use the Class-Based Queueing (CBQ) packet 107 scheduling algorithm. This algorithm classifies the waiting packets 108 into a tree-like hierarchy of classes; the leaves of this tree are 109 in turn scheduled by separate algorithms. 110 111 See the top of <file:net/sched/sch_cbq.c> for more details. 112 113 CBQ is a commonly used scheduler, so if you're unsure, you should 114 say Y here. Then say Y to all the queueing algorithms below that you 115 want to use as leaf disciplines. 116 117 To compile this code as a module, choose M here: the 118 module will be called sch_cbq. 119 120config NET_SCH_HTB 121 tristate "Hierarchical Token Bucket (HTB)" 122 ---help--- 123 Say Y here if you want to use the Hierarchical Token Buckets (HTB) 124 packet scheduling algorithm. See 125 <http://luxik.cdi.cz/~devik/qos/htb/> for complete manual and 126 in-depth articles. 127 128 HTB is very similar to 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 "Hierarchical Fair Service Curve (HFSC)" 136 ---help--- 137 Say Y here if you want to use the Hierarchical Fair Service Curve 138 (HFSC) packet scheduling algorithm. 139 140 To compile this code as a module, choose M here: the 141 module will be called sch_hfsc. 142 143config NET_SCH_ATM 144 tristate "ATM Virtual Circuits (ATM)" 145 depends on ATM 146 ---help--- 147 Say Y here if you want to use the ATM pseudo-scheduler. This 148 provides a framework for invoking classifiers, which in turn 149 select classes of this queuing discipline. Each class maps 150 the flow(s) it is handling to a given virtual circuit. 151 152 See the top of <file:net/sched/sch_atm.c>) for more details. 153 154 To compile this code as a module, choose M here: the 155 module will be called sch_atm. 156 157config NET_SCH_PRIO 158 tristate "Multi Band Priority Queueing (PRIO)" 159 ---help--- 160 Say Y here if you want to use an n-band priority queue packet 161 scheduler. 162 163 To compile this code as a module, choose M here: the 164 module will be called sch_prio. 165 166config NET_SCH_RED 167 tristate "Random Early Detection (RED)" 168 ---help--- 169 Say Y here if you want to use the Random Early Detection (RED) 170 packet scheduling algorithm. 171 172 See the top of <file:net/sched/sch_red.c> for more details. 173 174 To compile this code as a module, choose M here: the 175 module will be called sch_red. 176 177config NET_SCH_SFQ 178 tristate "Stochastic Fairness Queueing (SFQ)" 179 ---help--- 180 Say Y here if you want to use the Stochastic Fairness Queueing (SFQ) 181 packet scheduling algorithm . 182 183 See the top of <file:net/sched/sch_sfq.c> for more details. 184 185 To compile this code as a module, choose M here: the 186 module will be called sch_sfq. 187 188config NET_SCH_TEQL 189 tristate "True Link Equalizer (TEQL)" 190 ---help--- 191 Say Y here if you want to use the True Link Equalizer (TLE) packet 192 scheduling algorithm. This queueing discipline allows the combination 193 of several physical devices into one virtual device. 194 195 See the top of <file:net/sched/sch_teql.c> for more details. 196 197 To compile this code as a module, choose M here: the 198 module will be called sch_teql. 199 200config NET_SCH_TBF 201 tristate "Token Bucket Filter (TBF)" 202 ---help--- 203 Say Y here if you want to use the Token Bucket Filter (TBF) packet 204 scheduling algorithm. 205 206 See the top of <file:net/sched/sch_tbf.c> for more details. 207 208 To compile this code as a module, choose M here: the 209 module will be called sch_tbf. 210 211config NET_SCH_GRED 212 tristate "Generic Random Early Detection (GRED)" 213 ---help--- 214 Say Y here if you want to use the Generic Random Early Detection 215 (GRED) packet scheduling algorithm for some of your network devices 216 (see the top of <file:net/sched/sch_red.c> for details and 217 references about the algorithm). 218 219 To compile this code as a module, choose M here: the 220 module will be called sch_gred. 221 222config NET_SCH_DSMARK 223 tristate "Differentiated Services marker (DSMARK)" 224 ---help--- 225 Say Y if you want to schedule packets according to the 226 Differentiated Services architecture proposed in RFC 2475. 227 Technical information on this method, with pointers to associated 228 RFCs, is available at <http://www.gta.ufrj.br/diffserv/>. 229 230 To compile this code as a module, choose M here: the 231 module will be called sch_dsmark. 232 233config NET_SCH_NETEM 234 tristate "Network emulator (NETEM)" 235 ---help--- 236 Say Y if you want to emulate network delay, loss, and packet 237 re-ordering. This is often useful to simulate networks when 238 testing applications or protocols. 239 240 To compile this driver as a module, choose M here: the module 241 will be called sch_netem. 242 243 If unsure, say N. 244 245config NET_SCH_INGRESS 246 tristate "Ingress Qdisc" 247 ---help--- 248 Say Y here if you want to use classifiers for incoming packets. 249 If unsure, say Y. 250 251 To compile this code as a module, choose M here: the 252 module will be called sch_ingress. 253 254comment "Classification" 255 256config NET_CLS 257 boolean 258 259config NET_CLS_BASIC 260 tristate "Elementary classification (BASIC)" 261 select NET_CLS 262 ---help--- 263 Say Y here if you want to be able to classify packets using 264 only extended matches and actions. 265 266 To compile this code as a module, choose M here: the 267 module will be called cls_basic. 268 269config NET_CLS_TCINDEX 270 tristate "Traffic-Control Index (TCINDEX)" 271 select NET_CLS 272 ---help--- 273 Say Y here if you want to be able to classify packets based on 274 traffic control indices. You will want this feature if you want 275 to implement Differentiated Services together with DSMARK. 276 277 To compile this code as a module, choose M here: the 278 module will be called cls_tcindex. 279 280config NET_CLS_ROUTE4 281 tristate "Routing decision (ROUTE)" 282 select NET_CLS_ROUTE 283 select NET_CLS 284 ---help--- 285 If you say Y here, you will be able to classify packets 286 according to the route table entry they matched. 287 288 To compile this code as a module, choose M here: the 289 module will be called cls_route. 290 291config NET_CLS_ROUTE 292 bool 293 294config NET_CLS_FW 295 tristate "Netfilter mark (FW)" 296 select NET_CLS 297 ---help--- 298 If you say Y here, you will be able to classify packets 299 according to netfilter/firewall marks. 300 301 To compile this code as a module, choose M here: the 302 module will be called cls_fw. 303 304config NET_CLS_U32 305 tristate "Universal 32bit comparisons w/ hashing (U32)" 306 select NET_CLS 307 ---help--- 308 Say Y here to be able to classify packetes using a universal 309 32bit pieces based comparison scheme. 310 311 To compile this code as a module, choose M here: the 312 module will be called cls_u32. 313 314config CLS_U32_PERF 315 bool "Performance counters support" 316 depends on NET_CLS_U32 317 ---help--- 318 Say Y here to make u32 gather additional statistics useful for 319 fine tuning u32 classifiers. 320 321config CLS_U32_MARK 322 bool "Netfilter marks support" 323 depends on NET_CLS_U32 && NETFILTER 324 ---help--- 325 Say Y here to be able to use netfilter marks as u32 key. 326 327config NET_CLS_RSVP 328 tristate "IPv4 Resource Reservation Protocol (RSVP)" 329 select NET_CLS 330 select NET_ESTIMATOR 331 ---help--- 332 The Resource Reservation Protocol (RSVP) permits end systems to 333 request a minimum and maximum data flow rate for a connection; this 334 is important for real time data such as streaming sound or video. 335 336 Say Y here if you want to be able to classify outgoing packets based 337 on their RSVP requests. 338 339 To compile this code as a module, choose M here: the 340 module will be called cls_rsvp. 341 342config NET_CLS_RSVP6 343 tristate "IPv6 Resource Reservation Protocol (RSVP6)" 344 select NET_CLS 345 select NET_ESTIMATOR 346 ---help--- 347 The Resource Reservation Protocol (RSVP) permits end systems to 348 request a minimum and maximum data flow rate for a connection; this 349 is important for real time data such as streaming sound or video. 350 351 Say Y here if you want to be able to classify outgoing packets based 352 on their RSVP requests and you are using the IPv6. 353 354 To compile this code as a module, choose M here: the 355 module will be called cls_rsvp6. 356 357config NET_EMATCH 358 bool "Extended Matches" 359 select NET_CLS 360 ---help--- 361 Say Y here if you want to use extended matches on top of classifiers 362 and select the extended matches below. 363 364 Extended matches are small classification helpers not worth writing 365 a separate classifier for. 366 367 A recent version of the iproute2 package is required to use 368 extended matches. 369 370config NET_EMATCH_STACK 371 int "Stack size" 372 depends on NET_EMATCH 373 default "32" 374 ---help--- 375 Size of the local stack variable used while evaluating the tree of 376 ematches. Limits the depth of the tree, i.e. the number of 377 encapsulated precedences. Every level requires 4 bytes of additional 378 stack space. 379 380config NET_EMATCH_CMP 381 tristate "Simple packet data comparison" 382 depends on NET_EMATCH 383 ---help--- 384 Say Y here if you want to be able to classify packets based on 385 simple packet data comparisons for 8, 16, and 32bit values. 386 387 To compile this code as a module, choose M here: the 388 module will be called em_cmp. 389 390config NET_EMATCH_NBYTE 391 tristate "Multi byte comparison" 392 depends on NET_EMATCH 393 ---help--- 394 Say Y here if you want to be able to classify packets based on 395 multiple byte comparisons mainly useful for IPv6 address comparisons. 396 397 To compile this code as a module, choose M here: the 398 module will be called em_nbyte. 399 400config NET_EMATCH_U32 401 tristate "U32 key" 402 depends on NET_EMATCH 403 ---help--- 404 Say Y here if you want to be able to classify packets using 405 the famous u32 key in combination with logic relations. 406 407 To compile this code as a module, choose M here: the 408 module will be called em_u32. 409 410config NET_EMATCH_META 411 tristate "Metadata" 412 depends on NET_EMATCH 413 ---help--- 414 Say Y here if you want to be able to classify packets based on 415 metadata such as load average, netfilter attributes, socket 416 attributes and routing decisions. 417 418 To compile this code as a module, choose M here: the 419 module will be called em_meta. 420 421config NET_EMATCH_TEXT 422 tristate "Textsearch" 423 depends on NET_EMATCH 424 select TEXTSEARCH 425 select TEXTSEARCH_KMP 426 select TEXTSEARCH_BM 427 select TEXTSEARCH_FSM 428 ---help--- 429 Say Y here if you want to be able to classify packets based on 430 textsearch comparisons. 431 432 To compile this code as a module, choose M here: the 433 module will be called em_text. 434 435config NET_CLS_ACT 436 bool "Actions" 437 select NET_ESTIMATOR 438 ---help--- 439 Say Y here if you want to use traffic control actions. Actions 440 get attached to classifiers and are invoked after a successful 441 classification. They are used to overwrite the classification 442 result, instantly drop or redirect packets, etc. 443 444 A recent version of the iproute2 package is required to use 445 extended matches. 446 447config NET_ACT_POLICE 448 tristate "Traffic Policing" 449 depends on NET_CLS_ACT 450 ---help--- 451 Say Y here if you want to do traffic policing, i.e. strict 452 bandwidth limiting. This action replaces the existing policing 453 module. 454 455 To compile this code as a module, choose M here: the 456 module will be called police. 457 458config NET_ACT_GACT 459 tristate "Generic actions" 460 depends on NET_CLS_ACT 461 ---help--- 462 Say Y here to take generic actions such as dropping and 463 accepting packets. 464 465 To compile this code as a module, choose M here: the 466 module will be called gact. 467 468config GACT_PROB 469 bool "Probability support" 470 depends on NET_ACT_GACT 471 ---help--- 472 Say Y here to use the generic action randomly or deterministically. 473 474config NET_ACT_MIRRED 475 tristate "Redirecting and Mirroring" 476 depends on NET_CLS_ACT 477 ---help--- 478 Say Y here to allow packets to be mirrored or redirected to 479 other devices. 480 481 To compile this code as a module, choose M here: the 482 module will be called mirred. 483 484config NET_ACT_IPT 485 tristate "IPtables targets" 486 depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES 487 ---help--- 488 Say Y here to be able to invoke iptables targets after succesful 489 classification. 490 491 To compile this code as a module, choose M here: the 492 module will be called ipt. 493 494config NET_ACT_PEDIT 495 tristate "Packet Editing" 496 depends on NET_CLS_ACT 497 ---help--- 498 Say Y here if you want to mangle the content of packets. 499 500 To compile this code as a module, choose M here: the 501 module will be called pedit. 502 503config NET_ACT_SIMP 504 tristate "Simple Example (Debug)" 505 depends on NET_CLS_ACT 506 ---help--- 507 Say Y here to add a simple action for demonstration purposes. 508 It is meant as an example and for debugging purposes. It will 509 print a configured policy string followed by the packet count 510 to the console for every packet that passes by. 511 512 If unsure, say N. 513 514 To compile this code as a module, choose M here: the 515 module will be called simple. 516 517config NET_CLS_POLICE 518 bool "Traffic Policing (obsolete)" 519 depends on NET_CLS_ACT!=y 520 select NET_ESTIMATOR 521 ---help--- 522 Say Y here if you want to do traffic policing, i.e. strict 523 bandwidth limiting. This option is obsoleted by the traffic 524 policer implemented as action, it stays here for compatibility 525 reasons. 526 527config NET_CLS_IND 528 bool "Incoming device classification" 529 depends on NET_CLS_U32 || NET_CLS_FW 530 ---help--- 531 Say Y here to extend the u32 and fw classifier to support 532 classification based on the incoming device. This option is 533 likely to disappear in favour of the metadata ematch. 534 535config NET_ESTIMATOR 536 bool "Rate estimator" 537 ---help--- 538 Say Y here to allow using rate estimators to estimate the current 539 rate-of-flow for network devices, queues, etc. This module is 540 automaticaly selected if needed but can be selected manually for 541 statstical purposes. 542 543endif # NET_SCHED 544 545endmenu 546