# SPDX-License-Identifier: GPL-2.0-only
#
# IP Virtual Server configuration
#
menuconfig IP_VS
	tristate "IP virtual server support"
	depends on INET && NETFILTER
	depends on (NF_CONNTRACK || NF_CONNTRACK=n)
	help
	  IP Virtual Server support will let you build a high-performance
	  virtual server based on cluster of two or more real servers. This
	  option must be enabled for at least one of the clustered computers
	  that will take care of intercepting incoming connections to a
	  single IP address and scheduling them to real servers.

	  Three request dispatching techniques are implemented, they are
	  virtual server via NAT, virtual server via tunneling and virtual
	  server via direct routing. The several scheduling algorithms can
	  be used to choose which server the connection is directed to,
	  thus load balancing can be achieved among the servers.  For more
	  information and its administration program, please visit the
	  following URL: <http://www.linuxvirtualserver.org/>.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

if IP_VS

config	IP_VS_IPV6
	bool "IPv6 support for IPVS"
	depends on IPV6 = y || IP_VS = IPV6
	select NF_DEFRAG_IPV6
	help
	  Add IPv6 support to IPVS.

	  Say Y if unsure.

config	IP_VS_DEBUG
	bool "IP virtual server debugging"
	help
	  Say Y here if you want to get additional messages useful in
	  debugging the IP virtual server code. You can change the debug
	  level in /proc/sys/net/ipv4/vs/debug_level

config	IP_VS_TAB_BITS
	int "IPVS connection table size (the Nth power of 2)"
	range 8 20 if !64BIT
	range 8 27 if 64BIT
	default 12
	help
	  The IPVS connection hash table uses the chaining scheme to handle
	  hash collisions. Using a big IPVS connection hash table will greatly
	  reduce conflicts when there are hundreds of thousands of connections
	  in the hash table.

	  Note the table size must be power of 2. The table size will be the
	  value of 2 to the your input number power. The number to choose is
	  from 8 to 27 for 64BIT(20 otherwise), the default number is 12,
	  which means the table size is 4096. Don't input the number too
	  small, otherwise you will lose performance on it. You can adapt the
	  table size yourself, according to your virtual server application.
	  It is good to set the table size not far less than the number of
	  connections per second multiplying average lasting time of
	  connection in the table.  For example, your virtual server gets 200
	  connections per second, the connection lasts for 200 seconds in
	  average in the connection table, the table size should be not far
	  less than 200x200, it is good to set the table size 32768 (2**15).

	  Another note that each connection occupies 128 bytes effectively and
	  each hash entry uses 8 bytes, so you can estimate how much memory is
	  needed for your box.

	  You can overwrite this number setting conn_tab_bits module parameter
	  or by appending ip_vs.conn_tab_bits=? to the kernel command line if
	  IP VS was compiled built-in.

comment "IPVS transport protocol load balancing support"

config	IP_VS_PROTO_TCP
	bool "TCP load balancing support"
	help
	  This option enables support for load balancing TCP transport
	  protocol. Say Y if unsure.

config	IP_VS_PROTO_UDP
	bool "UDP load balancing support"
	help
	  This option enables support for load balancing UDP transport
	  protocol. Say Y if unsure.

config	IP_VS_PROTO_AH_ESP
	def_bool IP_VS_PROTO_ESP || IP_VS_PROTO_AH

config	IP_VS_PROTO_ESP
	bool "ESP load balancing support"
	help
	  This option enables support for load balancing ESP (Encapsulation
	  Security Payload) transport protocol. Say Y if unsure.

config	IP_VS_PROTO_AH
	bool "AH load balancing support"
	help
	  This option enables support for load balancing AH (Authentication
	  Header) transport protocol. Say Y if unsure.

config  IP_VS_PROTO_SCTP
	bool "SCTP load balancing support"
	select LIBCRC32C
	help
	  This option enables support for load balancing SCTP transport
	  protocol. Say Y if unsure.

comment "IPVS scheduler"

config	IP_VS_RR
	tristate "round-robin scheduling"
	help
	  The robin-robin scheduling algorithm simply directs network
	  connections to different real servers in a round-robin manner.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.
 
config	IP_VS_WRR
	tristate "weighted round-robin scheduling"
	help
	  The weighted robin-robin scheduling algorithm directs network
	  connections to different real servers based on server weights
	  in a round-robin manner. Servers with higher weights receive
	  new connections first than those with less weights, and servers
	  with higher weights get more connections than those with less
	  weights and servers with equal weights get equal connections.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_LC
	tristate "least-connection scheduling"
	help
	  The least-connection scheduling algorithm directs network
	  connections to the server with the least number of active 
	  connections.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_WLC
	tristate "weighted least-connection scheduling"
	help
	  The weighted least-connection scheduling algorithm directs network
	  connections to the server with the least active connections
	  normalized by the server weight.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config  IP_VS_FO
		tristate "weighted failover scheduling"
	help
	  The weighted failover scheduling algorithm directs network
	  connections to the server with the highest weight that is
	  currently available.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config  IP_VS_OVF
	tristate "weighted overflow scheduling"
	help
	  The weighted overflow scheduling algorithm directs network
	  connections to the server with the highest weight that is
	  currently available and overflows to the next when active
	  connections exceed the node's weight.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_LBLC
	tristate "locality-based least-connection scheduling"
	help
	  The locality-based least-connection scheduling algorithm is for
	  destination IP load balancing. It is usually used in cache cluster.
	  This algorithm usually directs packet destined for an IP address to
	  its server if the server is alive and under load. If the server is
	  overloaded (its active connection numbers is larger than its weight)
	  and there is a server in its half load, then allocate the weighted
	  least-connection server to this IP address.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config  IP_VS_LBLCR
	tristate "locality-based least-connection with replication scheduling"
	help
	  The locality-based least-connection with replication scheduling
	  algorithm is also for destination IP load balancing. It is 
	  usually used in cache cluster. It differs from the LBLC scheduling
	  as follows: the load balancer maintains mappings from a target
	  to a set of server nodes that can serve the target. Requests for
	  a target are assigned to the least-connection node in the target's
	  server set. If all the node in the server set are over loaded,
	  it picks up a least-connection node in the cluster and adds it
	  in the sever set for the target. If the server set has not been
	  modified for the specified time, the most loaded node is removed
	  from the server set, in order to avoid high degree of replication.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_DH
	tristate "destination hashing scheduling"
	help
	  The destination hashing scheduling algorithm assigns network
	  connections to the servers through looking up a statically assigned
	  hash table by their destination IP addresses.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_SH
	tristate "source hashing scheduling"
	help
	  The source hashing scheduling algorithm assigns network
	  connections to the servers through looking up a statically assigned
	  hash table by their source IP addresses.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_MH
	tristate "maglev hashing scheduling"
	help
	  The maglev consistent hashing scheduling algorithm provides the
	  Google's Maglev hashing algorithm as a IPVS scheduler. It assigns
	  network connections to the servers through looking up a statically
	  assigned special hash table called the lookup table. Maglev hashing
	  is to assign a preference list of all the lookup table positions
	  to each destination.

	  Through this operation, The maglev hashing gives an almost equal
	  share of the lookup table to each of the destinations and provides
	  minimal disruption by using the lookup table. When the set of
	  destinations changes, a connection will likely be sent to the same
	  destination as it was before.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_SED
	tristate "shortest expected delay scheduling"
	help
	  The shortest expected delay scheduling algorithm assigns network
	  connections to the server with the shortest expected delay. The 
	  expected delay that the job will experience is (Ci + 1) / Ui if 
	  sent to the ith server, in which Ci is the number of connections
	  on the ith server and Ui is the fixed service rate (weight)
	  of the ith server.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_NQ
	tristate "never queue scheduling"
	help
	  The never queue scheduling algorithm adopts a two-speed model.
	  When there is an idle server available, the job will be sent to
	  the idle server, instead of waiting for a fast one. When there
	  is no idle server available, the job will be sent to the server
	  that minimize its expected delay (The Shortest Expected Delay
	  scheduling algorithm).

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_TWOS
	tristate "weighted random twos choice least-connection scheduling"
	help
	  The weighted random twos choice least-connection scheduling
	  algorithm picks two random real servers and directs network
	  connections to the server with the least active connections
	  normalized by the server weight.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

comment 'IPVS SH scheduler'

config IP_VS_SH_TAB_BITS
	int "IPVS source hashing table size (the Nth power of 2)"
	range 4 20
	default 8
	help
	  The source hashing scheduler maps source IPs to destinations
	  stored in a hash table. This table is tiled by each destination
	  until all slots in the table are filled. When using weights to
	  allow destinations to receive more connections, the table is
	  tiled an amount proportional to the weights specified. The table
	  needs to be large enough to effectively fit all the destinations
	  multiplied by their respective weights.

comment 'IPVS MH scheduler'

config IP_VS_MH_TAB_INDEX
	int "IPVS maglev hashing table index of size (the prime numbers)"
	range 8 17
	default 12
	help
	  The maglev hashing scheduler maps source IPs to destinations
	  stored in a hash table. This table is assigned by a preference
	  list of the positions to each destination until all slots in
	  the table are filled. The index determines the prime for size of
	  the table as 251, 509, 1021, 2039, 4093, 8191, 16381, 32749,
	  65521 or 131071. When using weights to allow destinations to
	  receive more connections, the table is assigned an amount
	  proportional to the weights specified. The table needs to be large
	  enough to effectively fit all the destinations multiplied by their
	  respective weights.

comment 'IPVS application helper'

config	IP_VS_FTP
	tristate "FTP protocol helper"
	depends on IP_VS_PROTO_TCP && NF_CONNTRACK && NF_NAT && \
		NF_CONNTRACK_FTP
	select IP_VS_NFCT
	help
	  FTP is a protocol that transfers IP address and/or port number in
	  the payload. In the virtual server via Network Address Translation,
	  the IP address and port number of real servers cannot be sent to
	  clients in ftp connections directly, so FTP protocol helper is
	  required for tracking the connection and mangling it back to that of
	  virtual service.

	  If you want to compile it in kernel, say Y. To compile it as a
	  module, choose M here. If unsure, say N.

config	IP_VS_NFCT
	bool "Netfilter connection tracking"
	depends on NF_CONNTRACK
	help
	  The Netfilter connection tracking support allows the IPVS
	  connection state to be exported to the Netfilter framework
	  for filtering purposes.

config	IP_VS_PE_SIP
	tristate "SIP persistence engine"
	depends on IP_VS_PROTO_UDP
	depends on NF_CONNTRACK_SIP
	help
	  Allow persistence based on the SIP Call-ID

endif # IP_VS
