[TCP]: Add H-TCP congestion control module.
[linux-2.6.git] / net / ipv4 / Kconfig
1 #
2 # IP configuration
3 #
4 choice 
5         prompt "Choose IP: FIB lookup"
6         depends on INET
7         default IP_FIB_HASH
8
9 config IP_FIB_HASH
10         bool "FIB_HASH"
11         ---help---
12         Current FIB is very proven and good enough for most users.
13
14 config IP_FIB_TRIE
15         bool "FIB_TRIE"
16         ---help---
17         Use new experimental LC-trie as FIB lookup algoritm. 
18         This improves lookup performance
19         
20         LC-trie is described in:
21         
22         IP-address lookup using LC-tries. Stefan Nilsson and Gunnar Karlsson
23         IEEE Journal on Selected Areas in Communications, 17(6):1083-1092, June 1999
24         An experimental study of compression methods for dynamic tries
25         Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
26         http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/
27        
28 endchoice
29
30 config IP_MULTICAST
31         bool "IP: multicasting"
32         depends on INET
33         help
34           This is code for addressing several networked computers at once,
35           enlarging your kernel by about 2 KB. You need multicasting if you
36           intend to participate in the MBONE, a high bandwidth network on top
37           of the Internet which carries audio and video broadcasts. More
38           information about the MBONE is on the WWW at
39           <http://www-itg.lbl.gov/mbone/>. Information about the multicast
40           capabilities of the various network cards is contained in
41           <file:Documentation/networking/multicast.txt>. For most people, it's
42           safe to say N.
43
44 config IP_ADVANCED_ROUTER
45         bool "IP: advanced router"
46         depends on INET
47         ---help---
48           If you intend to run your Linux box mostly as a router, i.e. as a
49           computer that forwards and redistributes network packets, say Y; you
50           will then be presented with several options that allow more precise
51           control about the routing process.
52
53           The answer to this question won't directly affect the kernel:
54           answering N will just cause the configurator to skip all the
55           questions about advanced routing.
56
57           Note that your box can only act as a router if you enable IP
58           forwarding in your kernel; you can do that by saying Y to "/proc
59           file system support" and "Sysctl support" below and executing the
60           line
61
62           echo "1" > /proc/sys/net/ipv4/ip_forward
63
64           at boot time after the /proc file system has been mounted.
65
66           If you turn on IP forwarding, you will also get the rp_filter, which
67           automatically rejects incoming packets if the routing table entry
68           for their source address doesn't match the network interface they're
69           arriving on. This has security advantages because it prevents the
70           so-called IP spoofing, however it can pose problems if you use
71           asymmetric routing (packets from you to a host take a different path
72           than packets from that host to you) or if you operate a non-routing
73           host which has several IP addresses on different interfaces. To turn
74           rp_filter off use:
75
76           echo 0 > /proc/sys/net/ipv4/conf/<device>/rp_filter
77           or
78           echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
79
80           If unsure, say N here.
81
82 config IP_MULTIPLE_TABLES
83         bool "IP: policy routing"
84         depends on IP_ADVANCED_ROUTER
85         ---help---
86           Normally, a router decides what to do with a received packet based
87           solely on the packet's final destination address. If you say Y here,
88           the Linux router will also be able to take the packet's source
89           address into account. Furthermore, the TOS (Type-Of-Service) field
90           of the packet can be used for routing decisions as well.
91
92           If you are interested in this, please see the preliminary
93           documentation at <http://www.compendium.com.ar/policy-routing.txt>
94           and <ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex>.
95           You will need supporting software from
96           <ftp://ftp.tux.org/pub/net/ip-routing/>.
97
98           If unsure, say N.
99
100 config IP_ROUTE_FWMARK
101         bool "IP: use netfilter MARK value as routing key"
102         depends on IP_MULTIPLE_TABLES && NETFILTER
103         help
104           If you say Y here, you will be able to specify different routes for
105           packets with different mark values (see iptables(8), MARK target).
106
107 config IP_ROUTE_MULTIPATH
108         bool "IP: equal cost multipath"
109         depends on IP_ADVANCED_ROUTER
110         help
111           Normally, the routing tables specify a single action to be taken in
112           a deterministic manner for a given packet. If you say Y here
113           however, it becomes possible to attach several actions to a packet
114           pattern, in effect specifying several alternative paths to travel
115           for those packets. The router considers all these paths to be of
116           equal "cost" and chooses one of them in a non-deterministic fashion
117           if a matching packet arrives.
118
119 config IP_ROUTE_MULTIPATH_CACHED
120         bool "IP: equal cost multipath with caching support (EXPERIMENTAL)"
121         depends on: IP_ROUTE_MULTIPATH
122         help
123           Normally, equal cost multipath routing is not supported by the
124           routing cache. If you say Y here, alternative routes are cached
125           and on cache lookup a route is chosen in a configurable fashion.
126
127           If unsure, say N.
128
129 config IP_ROUTE_MULTIPATH_RR
130         tristate "MULTIPATH: round robin algorithm"
131         depends on IP_ROUTE_MULTIPATH_CACHED
132         help
133           Mulitpath routes are chosen according to Round Robin
134
135 config IP_ROUTE_MULTIPATH_RANDOM
136         tristate "MULTIPATH: random algorithm"
137         depends on IP_ROUTE_MULTIPATH_CACHED
138         help
139           Multipath routes are chosen in a random fashion. Actually,
140           there is no weight for a route. The advantage of this policy
141           is that it is implemented stateless and therefore introduces only
142           a very small delay.
143
144 config IP_ROUTE_MULTIPATH_WRANDOM
145         tristate "MULTIPATH: weighted random algorithm"
146         depends on IP_ROUTE_MULTIPATH_CACHED
147         help
148           Multipath routes are chosen in a weighted random fashion. 
149           The per route weights are the weights visible via ip route 2. As the
150           corresponding state management introduces some overhead routing delay
151           is increased.
152
153 config IP_ROUTE_MULTIPATH_DRR
154         tristate "MULTIPATH: interface round robin algorithm"
155         depends on IP_ROUTE_MULTIPATH_CACHED
156         help
157           Connections are distributed in a round robin fashion over the
158           available interfaces. This policy makes sense if the connections 
159           should be primarily distributed on interfaces and not on routes. 
160
161 config IP_ROUTE_VERBOSE
162         bool "IP: verbose route monitoring"
163         depends on IP_ADVANCED_ROUTER
164         help
165           If you say Y here, which is recommended, then the kernel will print
166           verbose messages regarding the routing, for example warnings about
167           received packets which look strange and could be evidence of an
168           attack or a misconfigured system somewhere. The information is
169           handled by the klogd daemon which is responsible for kernel messages
170           ("man klogd").
171
172 config IP_PNP
173         bool "IP: kernel level autoconfiguration"
174         depends on INET
175         help
176           This enables automatic configuration of IP addresses of devices and
177           of the routing table during kernel boot, based on either information
178           supplied on the kernel command line or by BOOTP or RARP protocols.
179           You need to say Y only for diskless machines requiring network
180           access to boot (in which case you want to say Y to "Root file system
181           on NFS" as well), because all other machines configure the network
182           in their startup scripts.
183
184 config IP_PNP_DHCP
185         bool "IP: DHCP support"
186         depends on IP_PNP
187         ---help---
188           If you want your Linux box to mount its whole root file system (the
189           one containing the directory /) from some other computer over the
190           net via NFS and you want the IP address of your computer to be
191           discovered automatically at boot time using the DHCP protocol (a
192           special protocol designed for doing this job), say Y here. In case
193           the boot ROM of your network card was designed for booting Linux and
194           does DHCP itself, providing all necessary information on the kernel
195           command line, you can say N here.
196
197           If unsure, say Y. Note that if you want to use DHCP, a DHCP server
198           must be operating on your network.  Read
199           <file:Documentation/nfsroot.txt> for details.
200
201 config IP_PNP_BOOTP
202         bool "IP: BOOTP support"
203         depends on IP_PNP
204         ---help---
205           If you want your Linux box to mount its whole root file system (the
206           one containing the directory /) from some other computer over the
207           net via NFS and you want the IP address of your computer to be
208           discovered automatically at boot time using the BOOTP protocol (a
209           special protocol designed for doing this job), say Y here. In case
210           the boot ROM of your network card was designed for booting Linux and
211           does BOOTP itself, providing all necessary information on the kernel
212           command line, you can say N here. If unsure, say Y. Note that if you
213           want to use BOOTP, a BOOTP server must be operating on your network.
214           Read <file:Documentation/nfsroot.txt> for details.
215
216 config IP_PNP_RARP
217         bool "IP: RARP support"
218         depends on IP_PNP
219         help
220           If you want your Linux box to mount its whole root file system (the
221           one containing the directory /) from some other computer over the
222           net via NFS and you want the IP address of your computer to be
223           discovered automatically at boot time using the RARP protocol (an
224           older protocol which is being obsoleted by BOOTP and DHCP), say Y
225           here. Note that if you want to use RARP, a RARP server must be
226           operating on your network. Read <file:Documentation/nfsroot.txt> for
227           details.
228
229 # not yet ready..
230 #   bool '    IP: ARP support' CONFIG_IP_PNP_ARP                
231 config NET_IPIP
232         tristate "IP: tunneling"
233         depends on INET
234         select INET_TUNNEL
235         ---help---
236           Tunneling means encapsulating data of one protocol type within
237           another protocol and sending it over a channel that understands the
238           encapsulating protocol. This particular tunneling driver implements
239           encapsulation of IP within IP, which sounds kind of pointless, but
240           can be useful if you want to make your (or some other) machine
241           appear on a different network than it physically is, or to use
242           mobile-IP facilities (allowing laptops to seamlessly move between
243           networks without changing their IP addresses).
244
245           Saying Y to this option will produce two modules ( = code which can
246           be inserted in and removed from the running kernel whenever you
247           want). Most people won't need this and can say N.
248
249 config NET_IPGRE
250         tristate "IP: GRE tunnels over IP"
251         depends on INET
252         select XFRM
253         help
254           Tunneling means encapsulating data of one protocol type within
255           another protocol and sending it over a channel that understands the
256           encapsulating protocol. This particular tunneling driver implements
257           GRE (Generic Routing Encapsulation) and at this time allows
258           encapsulating of IPv4 or IPv6 over existing IPv4 infrastructure.
259           This driver is useful if the other endpoint is a Cisco router: Cisco
260           likes GRE much better than the other Linux tunneling driver ("IP
261           tunneling" above). In addition, GRE allows multicast redistribution
262           through the tunnel.
263
264 config NET_IPGRE_BROADCAST
265         bool "IP: broadcast GRE over IP"
266         depends on IP_MULTICAST && NET_IPGRE
267         help
268           One application of GRE/IP is to construct a broadcast WAN (Wide Area
269           Network), which looks like a normal Ethernet LAN (Local Area
270           Network), but can be distributed all over the Internet. If you want
271           to do that, say Y here and to "IP multicast routing" below.
272
273 config IP_MROUTE
274         bool "IP: multicast routing"
275         depends on IP_MULTICAST
276         help
277           This is used if you want your machine to act as a router for IP
278           packets that have several destination addresses. It is needed on the
279           MBONE, a high bandwidth network on top of the Internet which carries
280           audio and video broadcasts. In order to do that, you would most
281           likely run the program mrouted. Information about the multicast
282           capabilities of the various network cards is contained in
283           <file:Documentation/networking/multicast.txt>. If you haven't heard
284           about it, you don't need it.
285
286 config IP_PIMSM_V1
287         bool "IP: PIM-SM version 1 support"
288         depends on IP_MROUTE
289         help
290           Kernel side support for Sparse Mode PIM (Protocol Independent
291           Multicast) version 1. This multicast routing protocol is used widely
292           because Cisco supports it. You need special software to use it
293           (pimd-v1). Please see <http://netweb.usc.edu/pim/> for more
294           information about PIM.
295
296           Say Y if you want to use PIM-SM v1. Note that you can say N here if
297           you just want to use Dense Mode PIM.
298
299 config IP_PIMSM_V2
300         bool "IP: PIM-SM version 2 support"
301         depends on IP_MROUTE
302         help
303           Kernel side support for Sparse Mode PIM version 2. In order to use
304           this, you need an experimental routing daemon supporting it (pimd or
305           gated-5). This routing protocol is not used widely, so say N unless
306           you want to play with it.
307
308 config ARPD
309         bool "IP: ARP daemon support (EXPERIMENTAL)"
310         depends on INET && EXPERIMENTAL
311         ---help---
312           Normally, the kernel maintains an internal cache which maps IP
313           addresses to hardware addresses on the local network, so that
314           Ethernet/Token Ring/ etc. frames are sent to the proper address on
315           the physical networking layer. For small networks having a few
316           hundred directly connected hosts or less, keeping this address
317           resolution (ARP) cache inside the kernel works well. However,
318           maintaining an internal ARP cache does not work well for very large
319           switched networks, and will use a lot of kernel memory if TCP/IP
320           connections are made to many machines on the network.
321
322           If you say Y here, the kernel's internal ARP cache will never grow
323           to more than 256 entries (the oldest entries are expired in a LIFO
324           manner) and communication will be attempted with the user space ARP
325           daemon arpd. Arpd then answers the address resolution request either
326           from its own cache or by asking the net.
327
328           This code is experimental and also obsolete. If you want to use it,
329           you need to find a version of the daemon arpd on the net somewhere,
330           and you should also say Y to "Kernel/User network link driver",
331           below. If unsure, say N.
332
333 config SYN_COOKIES
334         bool "IP: TCP syncookie support (disabled per default)"
335         depends on INET
336         ---help---
337           Normal TCP/IP networking is open to an attack known as "SYN
338           flooding". This denial-of-service attack prevents legitimate remote
339           users from being able to connect to your computer during an ongoing
340           attack and requires very little work from the attacker, who can
341           operate from anywhere on the Internet.
342
343           SYN cookies provide protection against this type of attack. If you
344           say Y here, the TCP/IP stack will use a cryptographic challenge
345           protocol known as "SYN cookies" to enable legitimate users to
346           continue to connect, even when your machine is under attack. There
347           is no need for the legitimate users to change their TCP/IP software;
348           SYN cookies work transparently to them. For technical information
349           about SYN cookies, check out <http://cr.yp.to/syncookies.html>.
350
351           If you are SYN flooded, the source address reported by the kernel is
352           likely to have been forged by the attacker; it is only reported as
353           an aid in tracing the packets to their actual source and should not
354           be taken as absolute truth.
355
356           SYN cookies may prevent correct error reporting on clients when the
357           server is really overloaded. If this happens frequently better turn
358           them off.
359
360           If you say Y here, note that SYN cookies aren't enabled by default;
361           you can enable them by saying Y to "/proc file system support" and
362           "Sysctl support" below and executing the command
363
364           echo 1 >/proc/sys/net/ipv4/tcp_syncookies
365
366           at boot time after the /proc file system has been mounted.
367
368           If unsure, say N.
369
370 config INET_AH
371         tristate "IP: AH transformation"
372         depends on INET
373         select XFRM
374         select CRYPTO
375         select CRYPTO_HMAC
376         select CRYPTO_MD5
377         select CRYPTO_SHA1
378         ---help---
379           Support for IPsec AH.
380
381           If unsure, say Y.
382
383 config INET_ESP
384         tristate "IP: ESP transformation"
385         depends on INET
386         select XFRM
387         select CRYPTO
388         select CRYPTO_HMAC
389         select CRYPTO_MD5
390         select CRYPTO_SHA1
391         select CRYPTO_DES
392         ---help---
393           Support for IPsec ESP.
394
395           If unsure, say Y.
396
397 config INET_IPCOMP
398         tristate "IP: IPComp transformation"
399         depends on INET
400         select XFRM
401         select INET_TUNNEL
402         select CRYPTO
403         select CRYPTO_DEFLATE
404         ---help---
405           Support for IP Payload Compression Protocol (IPComp) (RFC3173),
406           typically needed for IPsec.
407           
408           If unsure, say Y.
409
410 config INET_TUNNEL
411         tristate "IP: tunnel transformation"
412         depends on INET
413         select XFRM
414         ---help---
415           Support for generic IP tunnel transformation, which is required by
416           the IP tunneling module as well as tunnel mode IPComp.
417           
418           If unsure, say Y.
419
420 config IP_TCPDIAG
421         tristate "IP: TCP socket monitoring interface"
422         depends on INET
423         default y
424         ---help---
425           Support for TCP socket monitoring interface used by native Linux
426           tools such as ss. ss is included in iproute2, currently downloadable
427           at <http://developer.osdl.org/dev/iproute2>. If you want IPv6 support
428           and have selected IPv6 as a module, you need to build this as a
429           module too.
430           
431           If unsure, say Y.
432
433 config IP_TCPDIAG_IPV6
434         def_bool (IP_TCPDIAG=y && IPV6=y) || (IP_TCPDIAG=m && IPV6)
435
436 # TCP Reno is builtin (required as fallback)
437 menu "TCP congestion control"
438         depends on INET
439
440 config TCP_CONG_BIC
441         tristate "Binary Increase Congestion (BIC) control"
442         depends on INET
443         default y
444         ---help---
445         BIC-TCP is a sender-side only change that ensures a linear RTT
446         fairness under large windows while offering both scalability and
447         bounded TCP-friendliness. The protocol combines two schemes
448         called additive increase and binary search increase. When the
449         congestion window is large, additive increase with a large
450         increment ensures linear RTT fairness as well as good
451         scalability. Under small congestion windows, binary search
452         increase provides TCP friendliness.
453         See http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/
454
455 config TCP_CONG_WESTWOOD
456         tristate "TCP Westwood+"
457         depends on INET
458         default m
459         ---help---
460         TCP Westwood+ is a sender-side only modification of the TCP Reno
461         protocol stack that optimizes the performance of TCP congestion
462         control. It is based on end-to-end bandwidth estimation to set
463         congestion window and slow start threshold after a congestion
464         episode. Using this estimation, TCP Westwood+ adaptively sets a
465         slow start threshold and a congestion window which takes into
466         account the bandwidth used  at the time congestion is experienced.
467         TCP Westwood+ significantly increases fairness wrt TCP Reno in
468         wired networks and throughput over wireless links.
469
470 config TCP_CONG_HTCP
471         tristate "H-TCP"
472         depends on INET
473         default m
474         ---help---
475         H-TCP is a send-side only modifications of the TCP Reno
476         protocol stack that optimizes the performance of TCP
477         congestion control for high speed network links. It uses a
478         modeswitch to change the alpha and beta parameters of TCP Reno
479         based on network conditions and in a way so as to be fair with
480         other Reno and H-TCP flows.
481
482 config TCP_CONG_HSTCP
483         tristate "High Speed TCP"
484         depends on INET && EXPERIMENTAL
485         default n
486         ---help---
487         Sally Floyd's High Speed TCP (RFC 3649) congestion control.
488         A modification to TCP's congestion control mechanism for use
489         with large congestion windows. A table indicates how much to
490         increase the congestion window by when an ACK is received.
491         For more detail see http://www.icir.org/floyd/hstcp.html
492
493 config TCP_CONG_HYBLA
494         tristate "TCP-Hybla congestion control algorithm"
495         depends on INET && EXPERIMENTAL
496         default n
497         ---help---
498         TCP-Hybla is a sender-side only change that eliminates penalization of
499         long-RTT, large-bandwidth connections, like when satellite legs are
500         involved, expecially when sharing a common bottleneck with normal
501         terrestrial connections.
502
503 config TCP_CONG_VEGAS
504         tristate "TCP Vegas"
505         depends on INET && EXPERIMENTAL
506         default n
507         ---help---
508         TCP Vegas is a sender-side only change to TCP that anticipates
509         the onset of congestion by estimating the bandwidth. TCP Vegas
510         adjusts the sending rate by modifying the congestion
511         window. TCP Vegas should provide less packet loss, but it is
512         not as aggressive as TCP Reno.
513
514
515 endmenu
516
517 source "net/ipv4/ipvs/Kconfig"
518