# SPDX-License-Identifier: GPL-2.0-only
#
# 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
	  <https://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.rst>.

	  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 need more information, see the Linux Advanced
	  Routing and Traffic Control documentation at
	  <https://lartc.org/howto/lartc.rpdb.html>

	  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/admin-guide/nfs/nfsroot.rst> 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/admin-guide/nfs/nfsroot.rst> 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/admin-guide/nfs/nfsroot.rst> 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
	select GRO_CELLS
	default n

config NET_IPGRE
	tristate "IP: GRE tunnels over IP"
	depends on 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_COMMON
	bool
	depends on IP_MROUTE || IPV6_MROUTE

config IP_MROUTE
	bool "IP: multicast routing"
	depends on IP_MULTICAST
	select IP_MROUTE_COMMON
	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 <https://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
	select XFRM
	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 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_AH
	help
	  Support for IPsec AH (Authentication Header).

	  AH can be used with various authentication algorithms.  Besides
	  enabling AH support itself, this option enables the generic
	  implementations of the algorithms that RFC 8221 lists as MUST be
	  implemented.  If you need any other algorithms, you'll need to enable
	  them in the crypto API.  You should also enable accelerated
	  implementations of any needed algorithms when available.

	  If unsure, say Y.

config INET_ESP
	tristate "IP: ESP transformation"
	select XFRM_ESP
	help
	  Support for IPsec ESP (Encapsulating Security Payload).

	  ESP can be used with various encryption and authentication algorithms.
	  Besides enabling ESP support itself, this option enables the generic
	  implementations of the algorithms that RFC 8221 lists as MUST be
	  implemented.  If you need any other algorithms, you'll need to enable
	  them in the crypto API.  You should also enable accelerated
	  implementations of any needed algorithms when available.

	  If unsure, say Y.

config INET_ESP_OFFLOAD
	tristate "IP: ESP transformation offload"
	depends on INET_ESP
	select XFRM_OFFLOAD
	default n
	help
	  Support for ESP transformation offload. This makes sense
	  only if this system really does IPsec and want to do it
	  with high throughput. A typical desktop system does not
	  need it, even if it does IPsec.

	  If unsure, say N.

config INET_ESPINTCP
	bool "IP: ESP in TCP encapsulation (RFC 8229)"
	depends on XFRM && INET_ESP
	select STREAM_PARSER
	select NET_SOCK_MSG
	select XFRM_ESPINTCP
	help
	  Support for RFC 8229 encapsulation of ESP and IKE over
	  TCP/IPv4 sockets.

	  If unsure, say N.

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_TABLE_PERTURB_ORDER
	int "INET: Source port perturbation table size (as power of 2)" if EXPERT
	default 16
	help
	  Source port perturbation table size (as power of 2) for
	  RFC 6056 3.3.4.  Algorithm 4: Double-Hash Port Selection Algorithm.

	  The default is almost always what you want.
	  Only change this if you know what you are doing.

config INET_XFRM_TUNNEL
	tristate
	select INET_TUNNEL
	default n

config INET_TUNNEL
	tristate
	default n

config INET_DIAG
	tristate "INET: socket monitoring interface"
	default y
	help
	  Support for INET (TCP, UDP, 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
	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
	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 https://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://caia.swin.edu.au/cv/dahayes/content/networking2011-cdg-preprint.pdf

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 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_SIGPOOL
	tristate

config TCP_AO
	bool "TCP: Authentication Option (RFC5925)"
	select CRYPTO
	select CRYPTO_LIB_UTILS
	select TCP_SIGPOOL
	depends on 64BIT # seq-number extension needs WRITE_ONCE(u64)
	help
	  TCP-AO specifies the use of stronger Message Authentication Codes (MACs),
	  protects against replays for long-lived TCP connections, and
	  provides more details on the association of security with TCP
	  connections than TCP MD5 (See RFC5925)

	  If unsure, say N.

config TCP_MD5SIG
	bool "TCP: MD5 Signature Option support (RFC2385)"
	select CRYPTO_LIB_MD5
	select CRYPTO_LIB_UTILS
	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.
