#
# IP configuration
#
config IP_MULTICAST
	bool "IP: multicasting"
	help
	  This is code for addressing several networked computers at once,
	  enlarging your kernel by about 2 KB. You need multicasting if you
	  intend to participate in the MBONE, a high bandwidth network on top
	  of the Internet which carries audio and video broadcasts. More
	  information about the MBONE is on the WWW at
	  <http://www-itg.lbl.gov/mbone/>. Information about the multicast
	  capabilities of the various network cards is contained in
	  <file:Documentation/networking/multicast.txt>. For most people, it's
	  safe to say N.

config IP_ADVANCED_ROUTER
	bool "IP: advanced router"
	---help---
	  If you intend to run your Linux box mostly as a router, i.e. as a
	  computer that forwards and redistributes network packets, say Y; you
	  will then be presented with several options that allow more precise
	  control about the routing process.

	  The answer to this question won't directly affect the kernel:
	  answering N will just cause the configurator to skip all the
	  questions about advanced routing.

	  Note that your box can only act as a router if you enable IP
	  forwarding in your kernel; you can do that by saying Y to "/proc
	  file system support" and "Sysctl support" below and executing the
	  line

	  echo "1" > /proc/sys/net/ipv4/ip_forward

	  at boot time after the /proc file system has been mounted.

	  If you turn on IP forwarding, you will also get the rp_filter, which
	  automatically rejects incoming packets if the routing table entry
	  for their source address doesn't match the network interface they're
	  arriving on. This has security advantages because it prevents the
	  so-called IP spoofing, however it can pose problems if you use
	  asymmetric routing (packets from you to a host take a different path
	  than packets from that host to you) or if you operate a non-routing
	  host which has several IP addresses on different interfaces. To turn
	  rp_filter off use:

	  echo 0 > /proc/sys/net/ipv4/conf/<device>/rp_filter
	  or
	  echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

	  If unsure, say N here.

choice 
	prompt "Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure)"
	depends on IP_ADVANCED_ROUTER
	default ASK_IP_FIB_HASH

config ASK_IP_FIB_HASH
	bool "FIB_HASH"
	---help---
	Current FIB is very proven and good enough for most users.

config IP_FIB_TRIE
	bool "FIB_TRIE"
	---help---
	Use new experimental LC-trie as FIB lookup algoritm. 
        This improves lookup performance if you have a large
	number of routes.

	LC-trie is a longest matching prefix lookup algorithm which
	performs better than FIB_HASH for large routing tables.
	But, it consumes more memory and is more complex.
	
	LC-trie is described in:
	
 	IP-address lookup using LC-tries. Stefan Nilsson and Gunnar Karlsson
 	IEEE Journal on Selected Areas in Communications, 17(6):1083-1092, June 1999
	An experimental study of compression methods for dynamic tries
 	Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
 	http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/
       
endchoice

config IP_FIB_HASH
	def_bool ASK_IP_FIB_HASH || !IP_ADVANCED_ROUTER

config IP_MULTIPLE_TABLES
	bool "IP: policy routing"
	depends on IP_ADVANCED_ROUTER
	select FIB_RULES
	---help---
	  Normally, a router decides what to do with a received packet based
	  solely on the packet's final destination address. If you say Y here,
	  the Linux router will also be able to take the packet's source
	  address into account. Furthermore, the TOS (Type-Of-Service) field
	  of the packet can be used for routing decisions as well.

	  If you are interested in this, please see the preliminary
	  documentation at <http://www.compendium.com.ar/policy-routing.txt>
	  and <ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex>.
	  You will need supporting software from
	  <ftp://ftp.tux.org/pub/net/ip-routing/>.

	  If unsure, say N.

config IP_ROUTE_FWMARK
	bool "IP: use netfilter MARK value as routing key"
	depends on IP_MULTIPLE_TABLES && NETFILTER
	help
	  If you say Y here, you will be able to specify different routes for
	  packets with different mark values (see iptables(8), MARK target).

config IP_ROUTE_MULTIPATH
	bool "IP: equal cost multipath"
	depends on IP_ADVANCED_ROUTER
	help
	  Normally, the routing tables specify a single action to be taken in
	  a deterministic manner for a given packet. If you say Y here
	  however, it becomes possible to attach several actions to a packet
	  pattern, in effect specifying several alternative paths to travel
	  for those packets. The router considers all these paths to be of
	  equal "cost" and chooses one of them in a non-deterministic fashion
	  if a matching packet arrives.

config IP_ROUTE_MULTIPATH_CACHED
	bool "IP: equal cost multipath with caching support (EXPERIMENTAL)"
	depends on IP_ROUTE_MULTIPATH
	help
	  Normally, equal cost multipath routing is not supported by the
	  routing cache. If you say Y here, alternative routes are cached
	  and on cache lookup a route is chosen in a configurable fashion.

	  If unsure, say N.

config IP_ROUTE_MULTIPATH_RR
	tristate "MULTIPATH: round robin algorithm"
	depends on IP_ROUTE_MULTIPATH_CACHED
	help
	  Mulitpath routes are chosen according to Round Robin

config IP_ROUTE_MULTIPATH_RANDOM
	tristate "MULTIPATH: random algorithm"
	depends on IP_ROUTE_MULTIPATH_CACHED
	help
	  Multipath routes are chosen in a random fashion. Actually,
	  there is no weight for a route. The advantage of this policy
	  is that it is implemented stateless and therefore introduces only
	  a very small delay.

config IP_ROUTE_MULTIPATH_WRANDOM
	tristate "MULTIPATH: weighted random algorithm"
	depends on IP_ROUTE_MULTIPATH_CACHED
	help
	  Multipath routes are chosen in a weighted random fashion. 
	  The per route weights are the weights visible via ip route 2. As the
	  corresponding state management introduces some overhead routing delay
	  is increased.

config IP_ROUTE_MULTIPATH_DRR
	tristate "MULTIPATH: interface round robin algorithm"
	depends on IP_ROUTE_MULTIPATH_CACHED
	help
	  Connections are distributed in a round robin fashion over the
	  available interfaces. This policy makes sense if the connections 
	  should be primarily distributed on interfaces and not on routes. 

config IP_ROUTE_VERBOSE
	bool "IP: verbose route monitoring"
	depends on IP_ADVANCED_ROUTER
	help
	  If you say Y here, which is recommended, then the kernel will print
	  verbose messages regarding the routing, for example warnings about
	  received packets which look strange and could be evidence of an
	  attack or a misconfigured system somewhere. The information is
	  handled by the klogd daemon which is responsible for kernel messages
	  ("man klogd").

config IP_PNP
	bool "IP: kernel level autoconfiguration"
	help
	  This enables automatic configuration of IP addresses of devices and
	  of the routing table during kernel boot, based on either information
	  supplied on the kernel command line or by BOOTP or RARP protocols.
	  You need to say Y only for diskless machines requiring network
	  access to boot (in which case you want to say Y to "Root file system
	  on NFS" as well), because all other machines configure the network
	  in their startup scripts.

config IP_PNP_DHCP
	bool "IP: DHCP support"
	depends on IP_PNP
	---help---
	  If you want your Linux box to mount its whole root file system (the
	  one containing the directory /) from some other computer over the
	  net via NFS and you want the IP address of your computer to be
	  discovered automatically at boot time using the DHCP protocol (a
	  special protocol designed for doing this job), say Y here. In case
	  the boot ROM of your network card was designed for booting Linux and
	  does DHCP itself, providing all necessary information on the kernel
	  command line, you can say N here.

	  If unsure, say Y. Note that if you want to use DHCP, a DHCP server
	  must be operating on your network.  Read
	  <file:Documentation/nfsroot.txt> for details.

config IP_PNP_BOOTP
	bool "IP: BOOTP support"
	depends on IP_PNP
	---help---
	  If you want your Linux box to mount its whole root file system (the
	  one containing the directory /) from some other computer over the
	  net via NFS and you want the IP address of your computer to be
	  discovered automatically at boot time using the BOOTP protocol (a
	  special protocol designed for doing this job), say Y here. In case
	  the boot ROM of your network card was designed for booting Linux and
	  does BOOTP itself, providing all necessary information on the kernel
	  command line, you can say N here. If unsure, say Y. Note that if you
	  want to use BOOTP, a BOOTP server must be operating on your network.
	  Read <file:Documentation/nfsroot.txt> for details.

config IP_PNP_RARP
	bool "IP: RARP support"
	depends on IP_PNP
	help
	  If you want your Linux box to mount its whole root file system (the
	  one containing the directory /) from some other computer over the
	  net via NFS and you want the IP address of your computer to be
	  discovered automatically at boot time using the RARP protocol (an
	  older protocol which is being obsoleted by BOOTP and DHCP), say Y
	  here. Note that if you want to use RARP, a RARP server must be
	  operating on your network. Read <file:Documentation/nfsroot.txt> for
	  details.

# not yet ready..
#   bool '    IP: ARP support' CONFIG_IP_PNP_ARP		
config NET_IPIP
	tristate "IP: tunneling"
	select INET_TUNNEL
	---help---
	  Tunneling means encapsulating data of one protocol type within
	  another protocol and sending it over a channel that understands the
	  encapsulating protocol. This particular tunneling driver implements
	  encapsulation of IP within IP, which sounds kind of pointless, but
	  can be useful if you want to make your (or some other) machine
	  appear on a different network than it physically is, or to use
	  mobile-IP facilities (allowing laptops to seamlessly move between
	  networks without changing their IP addresses).

	  Saying Y to this option will produce two modules ( = code which can
	  be inserted in and removed from the running kernel whenever you
	  want). Most people won't need this and can say N.

config NET_IPGRE
	tristate "IP: GRE tunnels over IP"
	help
	  Tunneling means encapsulating data of one protocol type within
	  another protocol and sending it over a channel that understands the
	  encapsulating protocol. This particular tunneling driver implements
	  GRE (Generic Routing Encapsulation) and at this time allows
	  encapsulating of IPv4 or IPv6 over existing IPv4 infrastructure.
	  This driver is useful if the other endpoint is a Cisco router: Cisco
	  likes GRE much better than the other Linux tunneling driver ("IP
	  tunneling" above). In addition, GRE allows multicast redistribution
	  through the tunnel.

config NET_IPGRE_BROADCAST
	bool "IP: broadcast GRE over IP"
	depends on IP_MULTICAST && NET_IPGRE
	help
	  One application of GRE/IP is to construct a broadcast WAN (Wide Area
	  Network), which looks like a normal Ethernet LAN (Local Area
	  Network), but can be distributed all over the Internet. If you want
	  to do that, say Y here and to "IP multicast routing" below.

config IP_MROUTE
	bool "IP: multicast routing"
	depends on IP_MULTICAST
	help
	  This is used if you want your machine to act as a router for IP
	  packets that have several destination addresses. It is needed on the
	  MBONE, a high bandwidth network on top of the Internet which carries
	  audio and video broadcasts. In order to do that, you would most
	  likely run the program mrouted. Information about the multicast
	  capabilities of the various network cards is contained in
	  <file:Documentation/networking/multicast.txt>. If you haven't heard
	  about it, you don't need it.

config IP_PIMSM_V1
	bool "IP: PIM-SM version 1 support"
	depends on IP_MROUTE
	help
	  Kernel side support for Sparse Mode PIM (Protocol Independent
	  Multicast) version 1. This multicast routing protocol is used widely
	  because Cisco supports it. You need special software to use it
	  (pimd-v1). Please see <http://netweb.usc.edu/pim/> for more
	  information about PIM.

	  Say Y if you want to use PIM-SM v1. Note that you can say N here if
	  you just want to use Dense Mode PIM.

config IP_PIMSM_V2
	bool "IP: PIM-SM version 2 support"
	depends on IP_MROUTE
	help
	  Kernel side support for Sparse Mode PIM version 2. In order to use
	  this, you need an experimental routing daemon supporting it (pimd or
	  gated-5). This routing protocol is not used widely, so say N unless
	  you want to play with it.

config ARPD
	bool "IP: ARP daemon support (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	---help---
	  Normally, the kernel maintains an internal cache which maps IP
	  addresses to hardware addresses on the local network, so that
	  Ethernet/Token Ring/ etc. frames are sent to the proper address on
	  the physical networking layer. For small networks having a few
	  hundred directly connected hosts or less, keeping this address
	  resolution (ARP) cache inside the kernel works well. However,
	  maintaining an internal ARP cache does not work well for very large
	  switched networks, and will use a lot of kernel memory if TCP/IP
	  connections are made to many machines on the network.

	  If you say Y here, the kernel's internal ARP cache will never grow
	  to more than 256 entries (the oldest entries are expired in a LIFO
	  manner) and communication will be attempted with the user space ARP
	  daemon arpd. Arpd then answers the address resolution request either
	  from its own cache or by asking the net.

	  This code is experimental and also obsolete. If you want to use it,
	  you need to find a version of the daemon arpd on the net somewhere,
	  and you should also say Y to "Kernel/User network link driver",
	  below. If unsure, say N.

config SYN_COOKIES
	bool "IP: TCP syncookie support (disabled per default)"
	---help---
	  Normal TCP/IP networking is open to an attack known as "SYN
	  flooding". This denial-of-service attack prevents legitimate remote
	  users from being able to connect to your computer during an ongoing
	  attack and requires very little work from the attacker, who can
	  operate from anywhere on the Internet.

	  SYN cookies provide protection against this type of attack. If you
	  say Y here, the TCP/IP stack will use a cryptographic challenge
	  protocol known as "SYN cookies" to enable legitimate users to
	  continue to connect, even when your machine is under attack. There
	  is no need for the legitimate users to change their TCP/IP software;
	  SYN cookies work transparently to them. For technical information
	  about SYN cookies, check out <http://cr.yp.to/syncookies.html>.

	  If you are SYN flooded, the source address reported by the kernel is
	  likely to have been forged by the attacker; it is only reported as
	  an aid in tracing the packets to their actual source and should not
	  be taken as absolute truth.

	  SYN cookies may prevent correct error reporting on clients when the
	  server is really overloaded. If this happens frequently better turn
	  them off.

	  If you say Y here, note that SYN cookies aren't enabled by default;
	  you can enable them by saying Y to "/proc file system support" and
	  "Sysctl support" below and executing the command

	  echo 1 >/proc/sys/net/ipv4/tcp_syncookies

	  at boot time after the /proc file system has been mounted.

	  If unsure, say N.

config INET_AH
	tristate "IP: AH transformation"
	select XFRM
	select CRYPTO
	select CRYPTO_HMAC
	select CRYPTO_MD5
	select CRYPTO_SHA1
	---help---
	  Support for IPsec AH.

	  If unsure, say Y.

config INET_ESP
	tristate "IP: ESP transformation"
	select XFRM
	select CRYPTO
	select CRYPTO_HMAC
	select CRYPTO_MD5
	select CRYPTO_CBC
	select CRYPTO_SHA1
	select CRYPTO_DES
	---help---
	  Support for IPsec ESP.

	  If unsure, say Y.

config INET_IPCOMP
	tristate "IP: IPComp transformation"
	select XFRM
	select INET_XFRM_TUNNEL
	select CRYPTO
	select CRYPTO_DEFLATE
	---help---
	  Support for IP Payload Compression Protocol (IPComp) (RFC3173),
	  typically needed for IPsec.
	  
	  If unsure, say Y.

config INET_XFRM_TUNNEL
	tristate
	select INET_TUNNEL
	default n

config INET_TUNNEL
	tristate
	default n

config INET_XFRM_MODE_TRANSPORT
	tristate "IP: IPsec transport mode"
	default y
	select XFRM
	---help---
	  Support for IPsec transport mode.

	  If unsure, say Y.

config INET_XFRM_MODE_TUNNEL
	tristate "IP: IPsec tunnel mode"
	default y
	select XFRM
	---help---
	  Support for IPsec tunnel mode.

	  If unsure, say Y.

config INET_DIAG
	tristate "INET: socket monitoring interface"
	default y
	---help---
	  Support for INET (TCP, DCCP, etc) socket monitoring interface used by
	  native Linux tools such as ss. ss is included in iproute2, currently
	  downloadable at <http://developer.osdl.org/dev/iproute2>. 
	  
	  If unsure, say Y.

config INET_TCP_DIAG
	depends on INET_DIAG
	def_tristate INET_DIAG

menuconfig TCP_CONG_ADVANCED
	bool "TCP: advanced congestion control"
	---help---
	  Support for selection of various TCP congestion control
	  modules.

	  Nearly all users can safely say no here, and a safe default
	  selection will be made (CUBIC with new Reno as a fallback).

	  If unsure, say N.

if TCP_CONG_ADVANCED

config TCP_CONG_BIC
	tristate "Binary Increase Congestion (BIC) control"
	default m
	---help---
	BIC-TCP is a sender-side only change that ensures a linear RTT
	fairness under large windows while offering both scalability and
	bounded TCP-friendliness. The protocol combines two schemes
	called additive increase and binary search increase. When the
	congestion window is large, additive increase with a large
	increment ensures linear RTT fairness as well as good
	scalability. Under small congestion windows, binary search
	increase provides TCP friendliness.
	See http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/

config TCP_CONG_CUBIC
	tristate "CUBIC TCP"
	default y
	---help---
	This is version 2.0 of BIC-TCP which uses a cubic growth function
	among other techniques.
	See http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/cubic-paper.pdf

config TCP_CONG_WESTWOOD
	tristate "TCP Westwood+"
	default m
	---help---
	TCP Westwood+ is a sender-side only modification of the TCP Reno
	protocol stack that optimizes the performance of TCP congestion
	control. It is based on end-to-end bandwidth estimation to set
	congestion window and slow start threshold after a congestion
	episode. Using this estimation, TCP Westwood+ adaptively sets a
	slow start threshold and a congestion window which takes into
	account the bandwidth used  at the time congestion is experienced.
	TCP Westwood+ significantly increases fairness wrt TCP Reno in
	wired networks and throughput over wireless links.

config TCP_CONG_HTCP
        tristate "H-TCP"
        default m
	---help---
	H-TCP is a send-side only modifications of the TCP Reno
	protocol stack that optimizes the performance of TCP
	congestion control for high speed network links. It uses a
	modeswitch to change the alpha and beta parameters of TCP Reno
	based on network conditions and in a way so as to be fair with
	other Reno and H-TCP flows.

config TCP_CONG_HSTCP
	tristate "High Speed TCP"
	depends on EXPERIMENTAL
	default n
	---help---
	Sally Floyd's High Speed TCP (RFC 3649) congestion control.
	A modification to TCP's congestion control mechanism for use
	with large congestion windows. A table indicates how much to
	increase the congestion window by when an ACK is received.
 	For more detail	see http://www.icir.org/floyd/hstcp.html

config TCP_CONG_HYBLA
	tristate "TCP-Hybla congestion control algorithm"
	depends on EXPERIMENTAL
	default n
	---help---
	TCP-Hybla is a sender-side only change that eliminates penalization of
	long-RTT, large-bandwidth connections, like when satellite legs are
	involved, expecially when sharing a common bottleneck with normal
	terrestrial connections.

config TCP_CONG_VEGAS
	tristate "TCP Vegas"
	depends on EXPERIMENTAL
	default n
	---help---
	TCP Vegas is a sender-side only change to TCP that anticipates
	the onset of congestion by estimating the bandwidth. TCP Vegas
	adjusts the sending rate by modifying the congestion
	window. TCP Vegas should provide less packet loss, but it is
	not as aggressive as TCP Reno.

config TCP_CONG_SCALABLE
	tristate "Scalable TCP"
	depends on EXPERIMENTAL
	default n
	---help---
	Scalable TCP is a sender-side only change to TCP which uses a
	MIMD congestion control algorithm which has some nice scaling
	properties, though is known to have fairness issues.
	See http://www-lce.eng.cam.ac.uk/~ctk21/scalable/

config TCP_CONG_LP
	tristate "TCP Low Priority"
	depends on EXPERIMENTAL
	default n
	---help---
	TCP Low Priority (TCP-LP), a distributed algorithm whose goal is
	to utiliza only the excess network bandwidth as compared to the
	``fair share`` of bandwidth as targeted by TCP.
	See http://www-ece.rice.edu/networks/TCP-LP/

config TCP_CONG_VENO
	tristate "TCP Veno"
	depends on EXPERIMENTAL
	default n
	---help---
	TCP Veno is a sender-side only enhancement of TCP to obtain better
	throughput over wireless networks. TCP Veno makes use of state
	distinguishing to circumvent the difficult judgment of the packet loss
	type. TCP Veno cuts down less congestion window in response to random
	loss packets.
	See http://www.ntu.edu.sg/home5/ZHOU0022/papers/CPFu03a.pdf

choice
	prompt "Default TCP congestion control"
	default DEFAULT_CUBIC
	help
	  Select the TCP congestion control that will be used by default
	  for all connections.

	config DEFAULT_BIC
		bool "Bic" if TCP_CONG_BIC=y

	config DEFAULT_CUBIC
		bool "Cubic" if TCP_CONG_CUBIC=y

	config DEFAULT_HTCP
		bool "Htcp" if TCP_CONG_HTCP=y

	config DEFAULT_VEGAS
		bool "Vegas" if TCP_CONG_VEGAS=y

	config DEFAULT_WESTWOOD
		bool "Westwood" if TCP_CONG_WESTWOOD=y

	config DEFAULT_RENO
		bool "Reno"

endchoice

endif

config TCP_CONG_CUBIC
	tristate
	depends on !TCP_CONG_ADVANCED
	default y

config DEFAULT_TCP_CONG
	string
	default "bic" if DEFAULT_BIC
	default "cubic" if DEFAULT_CUBIC
	default "htcp" if DEFAULT_HTCP
	default "vegas" if DEFAULT_VEGAS
	default "westwood" if DEFAULT_WESTWOOD
	default "reno" if DEFAULT_RENO
	default "cubic"

source "net/ipv4/ipvs/Kconfig"

