# 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
	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 20, 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
