#
# 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.savetz.com/mbone/>. 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 should consider 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 on use:

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

	  Note that some distributions enable it in startup scripts.
	  For details about rp_filter strict and loose mode read
	  <file:Documentation/networking/ip-sysctl.txt>.

	  If unsure, say N here.

config IP_FIB_TRIE_STATS
	bool "FIB TRIE statistics"
	depends on IP_ADVANCED_ROUTER
	---help---
	  Keep track of statistics on structure of FIB TRIE table.
	  Useful for testing and measuring TRIE performance.

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_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_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_ROUTE_CLASSID
	bool

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/filesystems/nfs/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/filesystems/nfs/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/filesystems/nfs/nfsroot.txt> for details.

config NET_IPIP
	tristate "IP: tunneling"
	select INET_TUNNEL
	select NET_IP_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_DEMUX
	tristate "IP: GRE demultiplexer"
	help
	 This is helper module to demultiplex GRE packets on GRE version field criteria.
	 Required by ip_gre and pptp modules.

config NET_IP_TUNNEL
	tristate
	select DST_CACHE
	default n

config NET_IPGRE
	tristate "IP: GRE tunnels over IP"
	depends on (IPV6 || IPV6=n) && NET_IPGRE_DEMUX
	select NET_IP_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
	  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. If you haven't heard about it, you
	  don't need it.

config IP_MROUTE_MULTIPLE_TABLES
	bool "IP: multicast policy routing"
	depends on IP_MROUTE && IP_ADVANCED_ROUTER
	select FIB_RULES
	help
	  Normally, a multicast router runs a userspace daemon and decides
	  what to do with a multicast packet based on the source and
	  destination addresses. If you say Y here, the multicast router
	  will also be able to take interfaces and packet marks into
	  account and run multiple instances of userspace daemons
	  simultaneously, each one handling a single table.

	  If unsure, say N.

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 SYN_COOKIES
	bool "IP: TCP syncookie support"
	---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, you can disable SYN cookies at run time by
	  saying Y to "/proc file system support" and
	  "Sysctl support" below and executing the command

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

	  after the /proc file system has been mounted.

	  If unsure, say N.

config NET_IPVTI
	tristate "Virtual (secure) IP: tunneling"
	select INET_TUNNEL
	select NET_IP_TUNNEL
	depends on INET_XFRM_MODE_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 can be used with xfrm mode tunnel to give
	  the notion of a secure tunnel for IPSEC and then use routing protocol
	  on top.

config NET_UDP_TUNNEL
	tristate
	select NET_IP_TUNNEL
	default n

config NET_FOU
	tristate "IP: Foo (IP protocols) over UDP"
	select XFRM
	select NET_UDP_TUNNEL
	---help---
	  Foo over UDP allows any IP protocol to be directly encapsulated
	  over UDP include tunnels (IPIP, GRE, SIT). By encapsulating in UDP
	  network mechanisms and optimizations for UDP (such as ECMP
	  and RSS) can be leveraged to provide better service.

config NET_FOU_IP_TUNNELS
	bool "IP: FOU encapsulation of IP tunnels"
	depends on NET_IPIP || NET_IPGRE || IPV6_SIT
	select NET_FOU
	---help---
	  Allow configuration of FOU or GUE encapsulation for IP tunnels.
	  When this option is enabled IP tunnels can be configured to use
	  FOU or GUE encapsulation.

config INET_AH
	tristate "IP: AH transformation"
	select XFRM_ALGO
	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_ALGO
	select CRYPTO
	select CRYPTO_AUTHENC
	select CRYPTO_HMAC
	select CRYPTO_MD5
	select CRYPTO_CBC
	select CRYPTO_SHA1
	select CRYPTO_DES
	select CRYPTO_ECHAINIV
	---help---
	  Support for IPsec ESP.

	  If unsure, say Y.

config INET_IPCOMP
	tristate "IP: IPComp transformation"
	select INET_XFRM_TUNNEL
	select XFRM_IPCOMP
	---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_XFRM_MODE_BEET
	tristate "IP: IPsec BEET mode"
	default y
	select XFRM
	---help---
	  Support for IPsec BEET 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://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2

	  If unsure, say Y.

config INET_TCP_DIAG
	depends on INET_DIAG
	def_tristate INET_DIAG

config INET_UDP_DIAG
	tristate "UDP: socket monitoring interface"
	depends on INET_DIAG && (IPV6 || IPV6=n)
	default n
	---help---
	  Support for UDP socket monitoring interface used by the ss tool.
	  If unsure, say Y.

config INET_RAW_DIAG
	tristate "RAW: socket monitoring interface"
	depends on INET_DIAG && (IPV6 || IPV6=n)
	default n
	---help---
	  Support for RAW socket monitoring interface used by the ss tool.
	  If unsure, say Y.

config INET_DIAG_DESTROY
	bool "INET: allow privileged process to administratively close sockets"
	depends on INET_DIAG
	default n
	---help---
	  Provides a SOCK_DESTROY operation that allows privileged processes
	  (e.g., a connection manager or a network administration tool such as
	  ss) to close sockets opened by other processes. Closing a socket in
	  this way interrupts any blocking read/write/connect operations on
	  the socket and causes future socket calls to behave as if the socket
	  had been disconnected.
	  If unsure, say N.

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"
	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"
	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, especially when sharing a common bottleneck with normal
	terrestrial connections.

config TCP_CONG_VEGAS
	tristate "TCP Vegas"
	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_NV
       tristate "TCP NV"
       default n
       ---help---
       TCP NV is a follow up to TCP Vegas. It has been modified to deal with
       10G networks, measurement noise introduced by LRO, GRO and interrupt
       coalescence. In addition, it will decrease its cwnd multiplicatively
       instead of linearly.

       Note that in general congestion avoidance (cwnd decreased when # packets
       queued grows) cannot coexist with congestion control (cwnd decreased only
       when there is packet loss) due to fairness issues. One scenario when they
       can coexist safely is when the CA flows have RTTs << CC flows RTTs.

       For further details see http://www.brakmo.org/networking/tcp-nv/

config TCP_CONG_SCALABLE
	tristate "Scalable TCP"
	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.deneholme.net/tom/scalable/

config TCP_CONG_LP
	tristate "TCP Low Priority"
	default n
	---help---
	TCP Low Priority (TCP-LP), a distributed algorithm whose goal is
	to utilize 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"
	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://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1177186> 

config TCP_CONG_YEAH
	tristate "YeAH TCP"
	select TCP_CONG_VEGAS
	default n
	---help---
	YeAH-TCP is a sender-side high-speed enabled TCP congestion control
	algorithm, which uses a mixed loss/delay approach to compute the
	congestion window. It's design goals target high efficiency,
	internal, RTT and Reno fairness, resilience to link loss while
	keeping network elements load as low as possible.

	For further details look here:
	  http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf

config TCP_CONG_ILLINOIS
	tristate "TCP Illinois"
	default n
	---help---
	TCP-Illinois is a sender-side modification of TCP Reno for
	high speed long delay links. It uses round-trip-time to
	adjust the alpha and beta parameters to achieve a higher average
	throughput and maintain fairness.

	For further details see:
	  http://www.ews.uiuc.edu/~shaoliu/tcpillinois/index.html

config TCP_CONG_DCTCP
	tristate "DataCenter TCP (DCTCP)"
	default n
	---help---
	DCTCP leverages Explicit Congestion Notification (ECN) in the network to
	provide multi-bit feedback to the end hosts. It is designed to provide:

	- High burst tolerance (incast due to partition/aggregate),
	- Low latency (short flows, queries),
	- High throughput (continuous data updates, large file transfers) with
	  commodity, shallow-buffered switches.

	All switches in the data center network running DCTCP must support
	ECN marking and be configured for marking when reaching defined switch
	buffer thresholds. The default ECN marking threshold heuristic for
	DCTCP on switches is 20 packets (30KB) at 1Gbps, and 65 packets
	(~100KB) at 10Gbps, but might need further careful tweaking.

	For further details see:
	  http://simula.stanford.edu/~alizade/Site/DCTCP_files/dctcp-final.pdf

config TCP_CONG_CDG
	tristate "CAIA Delay-Gradient (CDG)"
	default n
	---help---
	CAIA Delay-Gradient (CDG) is a TCP congestion control that modifies
	the TCP sender in order to:

	  o Use the delay gradient as a congestion signal.
	  o Back off with an average probability that is independent of the RTT.
	  o Coexist with flows that use loss-based congestion control.
	  o Tolerate packet loss unrelated to congestion.

	For further details see:
	  D.A. Hayes and G. Armitage. "Revisiting TCP congestion control using
	  delay gradients." In Networking 2011. Preprint: http://goo.gl/No3vdg

config TCP_CONG_BBR
	tristate "BBR TCP"
	default n
	---help---

	BBR (Bottleneck Bandwidth and RTT) TCP congestion control aims to
	maximize network utilization and minimize queues. It builds an explicit
	model of the the bottleneck delivery rate and path round-trip
	propagation delay. It tolerates packet loss and delay unrelated to
	congestion. It can operate over LAN, WAN, cellular, wifi, or cable
	modem links. It can coexist with flows that use loss-based congestion
	control, and can operate with shallow buffers, deep buffers,
	bufferbloat, policers, or AQM schemes that do not provide a delay
	signal. It requires the fq ("Fair Queue") pacing packet scheduler.

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_HYBLA
		bool "Hybla" if TCP_CONG_HYBLA=y

	config DEFAULT_VEGAS
		bool "Vegas" if TCP_CONG_VEGAS=y

	config DEFAULT_VENO
		bool "Veno" if TCP_CONG_VENO=y

	config DEFAULT_WESTWOOD
		bool "Westwood" if TCP_CONG_WESTWOOD=y

	config DEFAULT_DCTCP
		bool "DCTCP" if TCP_CONG_DCTCP=y

	config DEFAULT_CDG
		bool "CDG" if TCP_CONG_CDG=y

	config DEFAULT_BBR
		bool "BBR" if TCP_CONG_BBR=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 "hybla" if DEFAULT_HYBLA
	default "vegas" if DEFAULT_VEGAS
	default "westwood" if DEFAULT_WESTWOOD
	default "veno" if DEFAULT_VENO
	default "reno" if DEFAULT_RENO
	default "dctcp" if DEFAULT_DCTCP
	default "cdg" if DEFAULT_CDG
	default "bbr" if DEFAULT_BBR
	default "cubic"

config TCP_MD5SIG
	bool "TCP: MD5 Signature Option support (RFC2385)"
	select CRYPTO
	select CRYPTO_MD5
	---help---
	  RFC2385 specifies a method of giving MD5 protection to TCP sessions.
	  Its main (only?) use is to protect BGP sessions between core routers
	  on the Internet.

	  If unsure, say N.
