Kconfig 19 KB

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