#
# Open vSwitch
#

config OPENVSWITCH
	tristate "Open vSwitch"
	select LIBCRC32C
	---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
	bool "Open vSwitch GRE tunneling support"
	depends on INET
	depends on OPENVSWITCH
	depends on NET_IPGRE_DEMUX && !(OPENVSWITCH=y && NET_IPGRE_DEMUX=m)
	default y
	---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
	bool "Open vSwitch VXLAN tunneling support"
	depends on INET
	depends on OPENVSWITCH
	depends on VXLAN && !(OPENVSWITCH=y && VXLAN=m)
	default y
	---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.
