#
# Copyright (c) 2013 Qualcomm Atheros, Inc.
#

#
# 802.1d Ethernet Bridging
#

config BRIDGE
	tristate "802.1d Ethernet Bridging"
	select LLC
	select STP
	---help---
	  If you say Y here, then your Linux box will be able to act as an
	  Ethernet bridge, which means that the different Ethernet segments it
	  is connected to will appear as one Ethernet to the participants.
	  Several such bridges can work together to create even larger
	  networks of Ethernets using the IEEE 802.1 spanning tree algorithm.
	  As this is a standard, Linux bridges will cooperate properly with
	  other third party bridge products.

	  In order to use the Ethernet bridge, you'll need the bridge
	  configuration tools; see <file:Documentation/networking/bridge.txt>
	  for location. Please read the Bridge mini-HOWTO for more
	  information.

	  If you enable iptables support along with the bridge support then you
	  turn your bridge into a bridging IP firewall.
	  iptables will then see the IP packets being bridged, so you need to
	  take this into account when setting up your firewall rules.
	  Enabling arptables support when bridging will let arptables see
	  bridged ARP traffic in the arptables FORWARD chain.

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

	  If unsure, say N.

config HYBRID_BRIDGE_SUPPORT
	bool "802.1d Ethernet Hybrid Bridging"
	select LLC
	select STP
	default n
	---help---
	  If you say Y here, then the Ethernet hybrid bridge will be enabled. It extends
	  the Ethernet bridge features, like path swithing, bridge snooping and etc.

	  [!] NOTE, It is independence with Ethernet bridge, so if you say Y here, the
	  Ethernet bridge will be disabled by this macro.

	  If unsure, say N.

config HYBRID_BRIDGE_SNOOPING
	bool "IGMP/MLD snooping"
	depends on HYBRID_BRIDGE_SUPPORT
	depends on INET
	default n
	---help---
	  If you say Y here, then the Ethernet hybrid bridge will be able selectively
	  forward multicast traffic based on IGMP/MLD traffic received from
	  each port.

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

	  If unsure, say N.


