.\"
.\"	This program is free software; you can redistribute it and/or modify
.\"	it under the terms of the GNU General Public License as published by
.\"	the Free Software Foundation; either version 2 of the License, or
.\"	(at your option) any later version.
.\"
.\"	This program is distributed in the hope that it will be useful,
.\"	but WITHOUT ANY WARRANTY; without even the implied warranty of
.\"	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\"	GNU General Public License for more details.
.\"
.\"	You should have received a copy of the GNU General Public License
.\"	along with this program; if not, write to the Free Software
.\"	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
.\"
.\"
.TH BRCTL 8 "November 7, 2001" "" ""
.SH NAME
brctl \- ethernet bridge administration
.SH SYNOPSIS
.BR "brctl [command]"
.SH DESCRIPTION
.B brctl
is used to set up, maintain, and inspect the ethernet bridge
configuration in the Linux kernel.

An ethernet bridge is a device commonly used to connect different
networks of ethernets together, so that these ethernets will appear as
one ethernet to the participants.

Each of the ethernets being connected corresponds to one physical
interface in the bridge. These individual ethernets are bundled into
one bigger ('logical') ethernet, this bigger ethernet corresponds to
the bridge network interface.


.SH INSTANCES
The command
.B brctl addbr <name>
creates a new instance of the ethernet bridge. The network interface
corresponding to the bridge will be called <name>.

The command
.B brctl delbr <name>
deletes the instance <name> of the ethernet bridge. The network
interface corresponding to the bridge must be down before it can be
deleted!

The command
.B brctl show
shows all current instances of the ethernet bridge.


.SH PORTS
Each bridge has a number of ports attached to it. Network traffic
coming in on any of these ports will be forwarded to the other ports
transparently, so that the bridge is invisible to the rest of the
network (i.e. it will not show up in
.IR traceroute(8)
).

The command
.B brctl addif <brname> <ifname>
will make the interface <ifname> a port of the bridge <brname>. This
means that all frames received on <ifname> will be processed as if
destined for the bridge. Also, when sending frames on <brname>,
<ifname> will be considered as a potential output interface.

The command
.B brctl delif <brname> <ifname>
will detach the interface <ifname> from the bridge <brname>.

The command
.B brctl show <brname>
will show some information on the bridge and its attached ports.


.SH AGEING
The bridge keeps track of ethernet addresses seen on each port. When
it needs to forward a frame, and it happens to know on which port the
destination ethernet address (specified in the frame) is located, it
can 'cheat' by forwarding the frame to that port only, thus saving a
lot of redundant copies and transmits.

However, the ethernet address location data is not static
data. Machines can move to other ports, network cards can be replaced
(which changes the machine's ethernet address), etc.

.B brctl showmacs <brname>
shows a list of learned MAC addresses for this bridge.

.B brctl setageing <brname> <time>
sets the ethernet (MAC) address ageing time, in seconds. After <time>
seconds of not having seen a frame coming from a certain address, the
bridge will time out (delete) that address from the Forwarding
DataBase (fdb).

.B brctl setgcint <brname> <time>
sets the garbage collection interval for the bridge <brname> to <time>
seconds. This means that the bridge will check the forwarding database
for timed out entries every <time> seconds.


.SH SPANNING TREE PROTOCOL
Multiple ethernet bridges can work together to create even larger
networks of ethernets using the IEEE 802.1d spanning tree
protocol. This protocol is used for finding the shortest path between
two ethernets, and for eliminating loops from the topology. As this
protocol is a standard, Linux bridges will interwork properly with
other third party bridge products. Bridges communicate with each other
by sending and receiving BPDUs (Bridge Protocol Data Units). These
BPDUs can be recognised by an ethernet destination address of
01:80:c2:00:00:00.

The spanning tree protocol can also be turned off (for those
situations where it just doesn't make sense, for example when this
Linux box is the only bridge on the LAN, or when you know that there
are no loops in the topology.)

.IR brctl(8)
can be used for configuring certain spanning tree protocol
parameters. For an explanation of these parameters, see the IEEE
802.1d specification (or send me an email). The default values should
be just fine. If you don't know what these parameters mean, you
probably won't feel the desire to tweak them.

.B brctl stp <bridge> <state>
controls this bridge instance's participation in the spanning tree
protocol. If <state> is "on" or "yes" the STP will be turned on,
otherwise it will be turned off.  When turned off, the bridge will not
send or receive BPDUs, and will thus not participate in the spanning
tree protocol. If your bridge isn't the only bridge on the LAN, or if
there are loops in the LAN's topology, DO NOT turn this option off. If
you turn this option off, please know what you are doing.


.B brctl setbridgeprio <bridge> <priority>
sets the bridge's priority to <priority>. The priority value is an
unsigned 16-bit quantity (a number between 0 and 65535), and has no
dimension. Lower priority values are 'better'. The bridge with the
lowest priority will be elected 'root bridge'.

.B brctl setfd <bridge> <time>
sets the bridge's 'bridge forward delay' to <time> seconds.

.B brctl sethello <bridge> <time>
sets the bridge's 'bridge hello time' to <time> seconds.

.B brctl setmaxage <bridge> <time>
sets the bridge's 'maximum message age' to <time> seconds.

.B brctl setpathcost <bridge> <port> <cost>
sets the port cost of the port <port> to <cost>. This is a
dimensionless metric.

.B brctl setportprio <bridge> <port> <priority>
sets the port <port>'s priority to <priority>. The priority value is
an unsigned 8-bit quantity (a number between 0 and 255), and has no
dimension. This metric is used in the designated port and root port
selection algorithms.

.SH NOTES
.BR brctl(8)
is obsolete. Some features such as STP guard, harpin mode, fastleave and root
block are intentionally not implemented in this command.
Instead use
.B bridge
command from
.B iproute2
package for a more full set of features.

.SH SEE ALSO
.BR iptables(8)

.SH AUTHOR
Lennert Buytenhek <buytenh@gnu.org>
Stephen Hemminger <stephen@networkplumber.org>
