#
# Open vSwitch
#

config OPENVSWITCH
	tristate "Open vSwitch"
	depends on INET
	depends on !NF_CONNTRACK || \
		   (NF_CONNTRACK && ((!NF_DEFRAG_IPV6 || NF_DEFRAG_IPV6) && \
				     (!NF_NAT || NF_NAT) && \
				     (!NF_NAT_IPV4 || NF_NAT_IPV4) && \
				     (!NF_NAT_IPV6 || NF_NAT_IPV6)))
	select LIBCRC32C
	select MPLS
	select NET_MPLS_GSO
	select DST_CACHE
	---help---
	  Open vSwitch is a multilayer Ethernet switch targeted at virtualized
	  environments.  In addition to supporting a variety of features
	  expected in a traditional hardware switch, it enables fine-grained
	  programmatic extension and flow-based control of the network.  This
	  control is useful in a wide variety of applications but is
	  particularly important in multi-server virtualization deployments,
	  which are often characterized by highly dynamic endpoints and the
	  need to maintain logical abstractions for multiple tenants.

	  The Open vSwitch datapath provides an in-kernel fast path for packet
	  forwarding.  It is complemented by a userspace daemon, ovs-vswitchd,
	  which is able to accept configuration from a variety of sources and
	  translate it into packet processing rules.

	  See http://openvswitch.org for more information and userspace
	  utilities.

	  To compile this code as a module, choose M here: the module will be
	  called openvswitch.

	  If unsure, say N.

config OPENVSWITCH_GRE
	tristate "Open vSwitch GRE tunneling support"
	depends on OPENVSWITCH
	depends on NET_IPGRE
	default OPENVSWITCH
	---help---
	  If you say Y here, then the Open vSwitch will be able create GRE
	  vport.

	  Say N to exclude this support and reduce the binary size.

	  If unsure, say Y.

config OPENVSWITCH_VXLAN
	tristate "Open vSwitch VXLAN tunneling support"
	depends on OPENVSWITCH
	depends on VXLAN
	default OPENVSWITCH
	---help---
	  If you say Y here, then the Open vSwitch will be able create vxlan vport.

	  Say N to exclude this support and reduce the binary size.

	  If unsure, say Y.

config OPENVSWITCH_GENEVE
	tristate "Open vSwitch Geneve tunneling support"
	depends on OPENVSWITCH
	depends on GENEVE
	default OPENVSWITCH
	---help---
	  If you say Y here, then the Open vSwitch will be able create geneve vport.

	  Say N to exclude this support and reduce the binary size.
