Kconfig 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. #
  2. # Traffic control configuration.
  3. #
  4. menuconfig NET_SCHED
  5. bool "QoS and/or fair queueing"
  6. ---help---
  7. When the kernel has several packets to send out over a network
  8. device, it has to decide which ones to send first, which ones to
  9. delay, and which ones to drop. This is the job of the packet
  10. scheduler, and several different algorithms for how to do this
  11. "fairly" have been proposed.
  12. If you say N here, you will get the standard packet scheduler, which
  13. is a FIFO (first come, first served). If you say Y here, you will be
  14. able to choose from among several alternative algorithms which can
  15. then be attached to different network devices. This is useful for
  16. example if some of your network devices are real time devices that
  17. need a certain minimum data flow rate, or if you need to limit the
  18. maximum data flow rate for traffic which matches specified criteria.
  19. This code is considered to be experimental.
  20. To administer these schedulers, you'll need the user-level utilities
  21. from the package iproute2+tc at <ftp://ftp.tux.org/pub/net/ip-routing/>.
  22. That package also contains some documentation; for more, check out
  23. <http://snafu.freedom.org/linux2.2/iproute-notes.html>.
  24. This Quality of Service (QoS) support will enable you to use
  25. Differentiated Services (diffserv) and Resource Reservation Protocol
  26. (RSVP) on your Linux router if you also say Y to "QoS support",
  27. "Packet classifier API" and to some classifiers below. Documentation
  28. and software is at <http://diffserv.sourceforge.net/>.
  29. If you say Y here and to "/proc file system" below, you will be able
  30. to read status information about packet schedulers from the file
  31. /proc/net/psched.
  32. The available schedulers are listed in the following questions; you
  33. can say Y to as many as you like. If unsure, say N now.
  34. choice
  35. prompt "Packet scheduler clock source"
  36. depends on NET_SCHED
  37. default NET_SCH_CLK_JIFFIES
  38. help
  39. Packet schedulers need a monotonic clock that increments at a static
  40. rate. The kernel provides several suitable interfaces, each with
  41. different properties:
  42. - high resolution (us or better)
  43. - fast to read (minimal locking, no i/o access)
  44. - synchronized on all processors
  45. - handles cpu clock frequency changes
  46. but nothing provides all of the above.
  47. config NET_SCH_CLK_JIFFIES
  48. bool "Timer interrupt"
  49. help
  50. Say Y here if you want to use the timer interrupt (jiffies) as clock
  51. source. This clock source is fast, synchronized on all processors and
  52. handles cpu clock frequency changes, but its resolution is too low
  53. for accurate shaping except at very low speed.
  54. config NET_SCH_CLK_GETTIMEOFDAY
  55. bool "gettimeofday"
  56. help
  57. Say Y here if you want to use gettimeofday as clock source. This clock
  58. source has high resolution, is synchronized on all processors and
  59. handles cpu clock frequency changes, but it is slow.
  60. Choose this if you need a high resolution clock source but can't use
  61. the CPU's cycle counter.
  62. # don't allow on SMP x86 because they can have unsynchronized TSCs.
  63. # gettimeofday is a good alternative
  64. config NET_SCH_CLK_CPU
  65. bool "CPU cycle counter"
  66. depends on ((X86_TSC || X86_64) && !SMP) || ALPHA || SPARC64 || PPC64 || IA64
  67. help
  68. Say Y here if you want to use the CPU's cycle counter as clock source.
  69. This is a cheap and high resolution clock source, but on some
  70. architectures it is not synchronized on all processors and doesn't
  71. handle cpu clock frequency changes.
  72. The useable cycle counters are:
  73. x86/x86_64 - Timestamp Counter
  74. alpha - Cycle Counter
  75. sparc64 - %ticks register
  76. ppc64 - Time base
  77. ia64 - Interval Time Counter
  78. Choose this if your CPU's cycle counter is working properly.
  79. endchoice
  80. config NET_SCH_CBQ
  81. tristate "CBQ packet scheduler"
  82. depends on NET_SCHED
  83. ---help---
  84. Say Y here if you want to use the Class-Based Queueing (CBQ) packet
  85. scheduling algorithm for some of your network devices. This
  86. algorithm classifies the waiting packets into a tree-like hierarchy
  87. of classes; the leaves of this tree are in turn scheduled by
  88. separate algorithms (called "disciplines" in this context).
  89. See the top of <file:net/sched/sch_cbq.c> for references about the
  90. CBQ algorithm.
  91. CBQ is a commonly used scheduler, so if you're unsure, you should
  92. say Y here. Then say Y to all the queueing algorithms below that you
  93. want to use as CBQ disciplines. Then say Y to "Packet classifier
  94. API" and say Y to all the classifiers you want to use; a classifier
  95. is a routine that allows you to sort your outgoing traffic into
  96. classes based on a certain criterion.
  97. To compile this code as a module, choose M here: the
  98. module will be called sch_cbq.
  99. config NET_SCH_HTB
  100. tristate "HTB packet scheduler"
  101. depends on NET_SCHED
  102. ---help---
  103. Say Y here if you want to use the Hierarchical Token Buckets (HTB)
  104. packet scheduling algorithm for some of your network devices. See
  105. <http://luxik.cdi.cz/~devik/qos/htb/> for complete manual and
  106. in-depth articles.
  107. HTB is very similar to the CBQ regarding its goals however is has
  108. different properties and different algorithm.
  109. To compile this code as a module, choose M here: the
  110. module will be called sch_htb.
  111. config NET_SCH_HFSC
  112. tristate "HFSC packet scheduler"
  113. depends on NET_SCHED
  114. ---help---
  115. Say Y here if you want to use the Hierarchical Fair Service Curve
  116. (HFSC) packet scheduling algorithm for some of your network devices.
  117. To compile this code as a module, choose M here: the
  118. module will be called sch_hfsc.
  119. #tristate ' H-PFQ packet scheduler' CONFIG_NET_SCH_HPFQ
  120. config NET_SCH_ATM
  121. tristate "ATM pseudo-scheduler"
  122. depends on NET_SCHED && ATM
  123. ---help---
  124. Say Y here if you want to use the ATM pseudo-scheduler. This
  125. provides a framework for invoking classifiers (aka "filters"), which
  126. in turn select classes of this queuing discipline. Each class maps
  127. the flow(s) it is handling to a given virtual circuit (see the top of
  128. <file:net/sched/sch_atm.c>).
  129. To compile this code as a module, choose M here: the
  130. module will be called sch_atm.
  131. config NET_SCH_PRIO
  132. tristate "The simplest PRIO pseudoscheduler"
  133. depends on NET_SCHED
  134. help
  135. Say Y here if you want to use an n-band priority queue packet
  136. "scheduler" for some of your network devices or as a leaf discipline
  137. for the CBQ scheduling algorithm. If unsure, say Y.
  138. To compile this code as a module, choose M here: the
  139. module will be called sch_prio.
  140. config NET_SCH_RED
  141. tristate "RED queue"
  142. depends on NET_SCHED
  143. help
  144. Say Y here if you want to use the Random Early Detection (RED)
  145. packet scheduling algorithm for some of your network devices (see
  146. the top of <file:net/sched/sch_red.c> for details and references
  147. about the algorithm).
  148. To compile this code as a module, choose M here: the
  149. module will be called sch_red.
  150. config NET_SCH_SFQ
  151. tristate "SFQ queue"
  152. depends on NET_SCHED
  153. ---help---
  154. Say Y here if you want to use the Stochastic Fairness Queueing (SFQ)
  155. packet scheduling algorithm for some of your network devices or as a
  156. leaf discipline for the CBQ scheduling algorithm (see the top of
  157. <file:net/sched/sch_sfq.c> for details and references about the SFQ
  158. algorithm).
  159. To compile this code as a module, choose M here: the
  160. module will be called sch_sfq.
  161. config NET_SCH_TEQL
  162. tristate "TEQL queue"
  163. depends on NET_SCHED
  164. ---help---
  165. Say Y here if you want to use the True Link Equalizer (TLE) packet
  166. scheduling algorithm for some of your network devices or as a leaf
  167. discipline for the CBQ scheduling algorithm. This queueing
  168. discipline allows the combination of several physical devices into
  169. one virtual device. (see the top of <file:net/sched/sch_teql.c> for
  170. details).
  171. To compile this code as a module, choose M here: the
  172. module will be called sch_teql.
  173. config NET_SCH_TBF
  174. tristate "TBF queue"
  175. depends on NET_SCHED
  176. help
  177. Say Y here if you want to use the Simple Token Bucket Filter (TBF)
  178. packet scheduling algorithm for some of your network devices or as a
  179. leaf discipline for the CBQ scheduling algorithm (see the top of
  180. <file:net/sched/sch_tbf.c> for a description of the TBF algorithm).
  181. To compile this code as a module, choose M here: the
  182. module will be called sch_tbf.
  183. config NET_SCH_GRED
  184. tristate "GRED queue"
  185. depends on NET_SCHED
  186. help
  187. Say Y here if you want to use the Generic Random Early Detection
  188. (GRED) packet scheduling algorithm for some of your network devices
  189. (see the top of <file:net/sched/sch_red.c> for details and
  190. references about the algorithm).
  191. To compile this code as a module, choose M here: the
  192. module will be called sch_gred.
  193. config NET_SCH_DSMARK
  194. tristate "Diffserv field marker"
  195. depends on NET_SCHED
  196. help
  197. Say Y if you want to schedule packets according to the
  198. Differentiated Services architecture proposed in RFC 2475.
  199. Technical information on this method, with pointers to associated
  200. RFCs, is available at <http://www.gta.ufrj.br/diffserv/>.
  201. To compile this code as a module, choose M here: the
  202. module will be called sch_dsmark.
  203. config NET_SCH_NETEM
  204. tristate "Network emulator"
  205. depends on NET_SCHED
  206. help
  207. Say Y if you want to emulate network delay, loss, and packet
  208. re-ordering. This is often useful to simulate networks when
  209. testing applications or protocols.
  210. To compile this driver as a module, choose M here: the module
  211. will be called sch_netem.
  212. If unsure, say N.
  213. config NET_SCH_INGRESS
  214. tristate "Ingress Qdisc"
  215. depends on NET_SCHED
  216. help
  217. If you say Y here, you will be able to police incoming bandwidth
  218. and drop packets when this bandwidth exceeds your desired rate.
  219. If unsure, say Y.
  220. To compile this code as a module, choose M here: the
  221. module will be called sch_ingress.
  222. config NET_QOS
  223. bool "QoS support"
  224. depends on NET_SCHED
  225. ---help---
  226. Say Y here if you want to include Quality Of Service scheduling
  227. features, which means that you will be able to request certain
  228. rate-of-flow limits for your network devices.
  229. This Quality of Service (QoS) support will enable you to use
  230. Differentiated Services (diffserv) and Resource Reservation Protocol
  231. (RSVP) on your Linux router if you also say Y to "Packet classifier
  232. API" and to some classifiers below. Documentation and software is at
  233. <http://diffserv.sourceforge.net/>.
  234. Note that the answer to this question won't directly affect the
  235. kernel: saying N will just cause the configurator to skip all
  236. the questions about QoS support.
  237. config NET_ESTIMATOR
  238. bool "Rate estimator"
  239. depends on NET_QOS
  240. help
  241. In order for Quality of Service scheduling to work, the current
  242. rate-of-flow for a network device has to be estimated; if you say Y
  243. here, the kernel will do just that.
  244. config NET_CLS
  245. bool "Packet classifier API"
  246. depends on NET_SCHED
  247. ---help---
  248. The CBQ scheduling algorithm requires that network packets which are
  249. scheduled to be sent out over a network device be classified
  250. according to some criterion. If you say Y here, you will get a
  251. choice of several different packet classifiers with the following
  252. questions.
  253. This will enable you to use Differentiated Services (diffserv) and
  254. Resource Reservation Protocol (RSVP) on your Linux router.
  255. Documentation and software is at
  256. <http://diffserv.sourceforge.net/>.
  257. config NET_CLS_BASIC
  258. tristate "Basic classifier"
  259. depends on NET_CLS
  260. ---help---
  261. Say Y here if you want to be able to classify packets using
  262. only extended matches and actions.
  263. To compile this code as a module, choose M here: the
  264. module will be called cls_basic.
  265. config NET_CLS_TCINDEX
  266. tristate "TC index classifier"
  267. depends on NET_CLS
  268. help
  269. If you say Y here, you will be able to classify outgoing packets
  270. according to the tc_index field of the skb. You will want this
  271. feature if you want to implement Differentiated Services using
  272. sch_dsmark. If unsure, say Y.
  273. To compile this code as a module, choose M here: the
  274. module will be called cls_tcindex.
  275. config NET_CLS_ROUTE4
  276. tristate "Routing table based classifier"
  277. depends on NET_CLS
  278. select NET_CLS_ROUTE
  279. help
  280. If you say Y here, you will be able to classify outgoing packets
  281. according to the route table entry they matched. If unsure, say Y.
  282. To compile this code as a module, choose M here: the
  283. module will be called cls_route.
  284. config NET_CLS_ROUTE
  285. bool
  286. default n
  287. config NET_CLS_FW
  288. tristate "Firewall based classifier"
  289. depends on NET_CLS
  290. help
  291. If you say Y here, you will be able to classify outgoing packets
  292. according to firewall criteria you specified.
  293. To compile this code as a module, choose M here: the
  294. module will be called cls_fw.
  295. config NET_CLS_U32
  296. tristate "U32 classifier"
  297. depends on NET_CLS
  298. help
  299. If you say Y here, you will be able to classify outgoing packets
  300. according to their destination address. If unsure, say Y.
  301. To compile this code as a module, choose M here: the
  302. module will be called cls_u32.
  303. config CLS_U32_PERF
  304. bool "U32 classifier performance counters"
  305. depends on NET_CLS_U32
  306. help
  307. gathers stats that could be used to tune u32 classifier performance.
  308. Requires a new iproute2
  309. You MUST NOT turn this on if you dont have an update iproute2.
  310. config NET_CLS_IND
  311. bool "classify input device (slows things u32/fw) "
  312. depends on NET_CLS_U32 || NET_CLS_FW
  313. help
  314. This option will be killed eventually when a
  315. metadata action appears because it slows things a little
  316. Available only for u32 and fw classifiers.
  317. Requires a new iproute2
  318. You MUST NOT turn this on if you dont have an update iproute2.
  319. config CLS_U32_MARK
  320. bool "Use nfmark as a key in U32 classifier"
  321. depends on NET_CLS_U32 && NETFILTER
  322. help
  323. This allows you to match mark in a u32 filter.
  324. Example:
  325. tc filter add dev eth0 protocol ip parent 1:0 prio 5 u32 \
  326. match mark 0x0090 0xffff \
  327. match ip dst 4.4.4.4 \
  328. flowid 1:90
  329. You must use a new iproute2 to use this feature.
  330. config NET_CLS_RSVP
  331. tristate "Special RSVP classifier"
  332. depends on NET_CLS && NET_QOS
  333. ---help---
  334. The Resource Reservation Protocol (RSVP) permits end systems to
  335. request a minimum and maximum data flow rate for a connection; this
  336. is important for real time data such as streaming sound or video.
  337. Say Y here if you want to be able to classify outgoing packets based
  338. on their RSVP requests.
  339. To compile this code as a module, choose M here: the
  340. module will be called cls_rsvp.
  341. config NET_CLS_RSVP6
  342. tristate "Special RSVP classifier for IPv6"
  343. depends on NET_CLS && NET_QOS
  344. ---help---
  345. The Resource Reservation Protocol (RSVP) permits end systems to
  346. request a minimum and maximum data flow rate for a connection; this
  347. is important for real time data such as streaming sound or video.
  348. Say Y here if you want to be able to classify outgoing packets based
  349. on their RSVP requests and you are using the new Internet Protocol
  350. IPv6 as opposed to the older and more common IPv4.
  351. To compile this code as a module, choose M here: the
  352. module will be called cls_rsvp6.
  353. config NET_EMATCH
  354. bool "Extended Matches"
  355. depends on NET_CLS
  356. ---help---
  357. Say Y here if you want to use extended matches on top of classifiers
  358. and select the extended matches below.
  359. Extended matches are small classification helpers not worth writing
  360. a separate classifier.
  361. You must have a recent version of the iproute2 tools in order to use
  362. extended matches.
  363. config NET_EMATCH_STACK
  364. int "Stack size"
  365. depends on NET_EMATCH
  366. default "32"
  367. ---help---
  368. Size of the local stack variable used while evaluating the tree of
  369. ematches. Limits the depth of the tree, i.e. the number of
  370. encapsulated precedences. Every level requires 4 bytes of additional
  371. stack space.
  372. config NET_EMATCH_CMP
  373. tristate "Simple packet data comparison"
  374. depends on NET_EMATCH
  375. ---help---
  376. Say Y here if you want to be able to classify packets based on
  377. simple packet data comparisons for 8, 16, and 32bit values.
  378. To compile this code as a module, choose M here: the
  379. module will be called em_cmp.
  380. config NET_EMATCH_NBYTE
  381. tristate "Multi byte comparison"
  382. depends on NET_EMATCH
  383. ---help---
  384. Say Y here if you want to be able to classify packets based on
  385. multiple byte comparisons mainly useful for IPv6 address comparisons.
  386. To compile this code as a module, choose M here: the
  387. module will be called em_nbyte.
  388. config NET_EMATCH_U32
  389. tristate "U32 hashing key"
  390. depends on NET_EMATCH
  391. ---help---
  392. Say Y here if you want to be able to classify packets using
  393. the famous u32 key in combination with logic relations.
  394. To compile this code as a module, choose M here: the
  395. module will be called em_u32.
  396. config NET_EMATCH_META
  397. tristate "Metadata"
  398. depends on NET_EMATCH
  399. ---help---
  400. Say Y here if you want to be ablt to classify packets based on
  401. metadata such as load average, netfilter attributes, socket
  402. attributes and routing decisions.
  403. To compile this code as a module, choose M here: the
  404. module will be called em_meta.
  405. config NET_EMATCH_TEXT
  406. tristate "Textsearch"
  407. depends on NET_EMATCH
  408. select TEXTSEARCH
  409. select TEXTSEARCH_KMP
  410. select TEXTSEARCH_BM
  411. select TEXTSEARCH_FSM
  412. ---help---
  413. Say Y here if you want to be ablt to classify packets based on
  414. textsearch comparisons.
  415. To compile this code as a module, choose M here: the
  416. module will be called em_text.
  417. config NET_CLS_ACT
  418. bool "Packet ACTION"
  419. depends on EXPERIMENTAL && NET_CLS && NET_QOS
  420. ---help---
  421. This option requires you have a new iproute2. It enables
  422. tc extensions which can be used with tc classifiers.
  423. You MUST NOT turn this on if you dont have an update iproute2.
  424. config NET_ACT_POLICE
  425. tristate "Policing Actions"
  426. depends on NET_CLS_ACT
  427. ---help---
  428. If you are using a newer iproute2 select this one, otherwise use one
  429. below to select a policer.
  430. You MUST NOT turn this on if you dont have an update iproute2.
  431. config NET_ACT_GACT
  432. tristate "generic Actions"
  433. depends on NET_CLS_ACT
  434. ---help---
  435. You must have new iproute2 to use this feature.
  436. This adds simple filtering actions like drop, accept etc.
  437. config GACT_PROB
  438. bool "generic Actions probability"
  439. depends on NET_ACT_GACT
  440. ---help---
  441. Allows generic actions to be randomly or deterministically used.
  442. config NET_ACT_MIRRED
  443. tristate "Packet In/Egress redirecton/mirror Actions"
  444. depends on NET_CLS_ACT
  445. ---help---
  446. requires new iproute2
  447. This allows packets to be mirrored or redirected to netdevices
  448. config NET_ACT_IPT
  449. tristate "iptables Actions"
  450. depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
  451. ---help---
  452. requires new iproute2
  453. This allows iptables targets to be used by tc filters
  454. config NET_ACT_PEDIT
  455. tristate "Generic Packet Editor Actions"
  456. depends on NET_CLS_ACT
  457. ---help---
  458. requires new iproute2
  459. This allows for packets to be generically edited
  460. config NET_CLS_POLICE
  461. bool "Traffic policing (needed for in/egress)"
  462. depends on NET_CLS && NET_QOS && NET_CLS_ACT!=y
  463. help
  464. Say Y to support traffic policing (bandwidth limits). Needed for
  465. ingress and egress rate limiting.
  466. config NET_ACT_SIMP
  467. tristate "Simple action"
  468. depends on NET_CLS_ACT
  469. ---help---
  470. You must have new iproute2 to use this feature.
  471. This adds a very simple action for demonstration purposes
  472. The idea is to give action authors a basic example to look at.
  473. All this action will do is print on the console the configured
  474. policy string followed by _ then packet count.