# SPDX-License-Identifier: GPL-2.0-only
#
# 802.1d Ethernet Bridging
#

config BRIDGE
	tristate "802.1d Ethernet Bridging"
	select LLC
	select STP
	depends on IPV6 || IPV6=n
	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.rst>
	  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 BRIDGE_IGMP_SNOOPING
	bool "IGMP/MLD snooping"
	depends on BRIDGE
	depends on INET
	default y
	help
	  If you say Y here, then the Ethernet 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 Y.

config BRIDGE_VLAN_FILTERING
	bool "VLAN filtering"
	depends on BRIDGE
	depends on VLAN_8021Q
	default n
	help
	  If you say Y here, then the Ethernet bridge will be able selectively
	  receive and forward traffic based on VLAN information in the packet
	  any VLAN information configured on the bridge port or bridge device.

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

	  If unsure, say Y.

config BRIDGE_MRP
	bool "MRP protocol"
	depends on BRIDGE
	default n
	help
	  If you say Y here, then the Ethernet bridge will be able to run MRP
	  protocol to detect loops

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

	  If unsure, say N.

config BRIDGE_CFM
	bool "CFM protocol"
	depends on BRIDGE
	help
	  If you say Y here, then the Ethernet bridge will be able to run CFM
	  protocol according to 802.1Q section 12.14

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

	  If unsure, say N.
