Differences between version 2 and predecessor to the previous major change of HowToBRIDGESTPHOWTO.
Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 2 | Last edited on Thursday, October 21, 2004 5:13:37 pm | by AristotlePagaltzis | Revert |
Older page: | version 1 | Last edited on Friday, June 7, 2002 1:06:15 am | by perry | Revert |
@@ -1,2220 +1 @@
-Linux BRIDGE-STP-HOWTO
-!!!Linux BRIDGE-STP-HOWTO
-!Uwe Böhme
-
- Johann-Heinrich-Abt-Straße 7
- 95213
- Münchberg
- Germany
- +49/9251 960877
- +49/9251 960878
- uwe@bnhof.de
-
-
-
-!Lennert Buytenhenkbridge code maintainer and developergnu.org
-
- buytenh@gnu.org
-
-
-Release v0.04
-
-Copyright (c) 2000
-by Uwe Böhme
-
-
-
-__Revision History__Revision v0.0411 January 2001Revised by: U.B.Changed Lennert`s Bridge Homepage URL; added NIC to list.Revision v0.0317 July 2000Revised by: U.B.Overwork pdf. Download links in doc.Revision v0.0216 July 2000Revised by: U.B.Fixed broken graphics in html dsl. Prepared pdf. Typos.Revision v0.0125 June 2000Revised by: U.B.Changes name from BRIDGE-HOWTO to BRIDGE-STP-HOWTO (avoid
-interference with BRIDGE-HOWTO by Christopher Cole) and kill
-version 1.xx.
-Lennert Buytenhenk announced as coauthor.Revision v0.0001 June 2000Revised by: U.B.Initial Release.----; __Table of Contents__; 1. License; 2. Document Home and Downloads: ; 2.1. The Bridge Sources And Utilities; 2.2. The Mailing-List; 2.3. This Document; 3. What Is A Bridge?; 4. Rules On Bridging; 5. Preparing The Bridge: ; 5.1. Get The Files; 5.2. Apply The Patches; 5.3. Configure The Kernel; 5.4. Compile The Kernel; 5.5. Compile The Bridge Utilities; 6. Set Up The Bridge: ; 6.1. __brctl__ Command Synopsis; 6.2. Basic Setup; 7. Advanced Bridge Features: ; 7.1. Spanning Tree Protocol; 7.2. Bridge And The IP-Chains; 8. A Practical Setup Example: ; 8.1. Hardware-setup; 8.2. Software-setup; 8.3. See It Work; 8.4. Bridge Tests: ; 8.4.1. Tear The Patch Wire Test; 8.4.2. Kill The Root Bridge Test; A. Network Interface Cards; B. Recommended Reading; C. FAQAbout The Linux Modular Bridge And STP
-
-
-
-
-
-This document describes how to setup a bridge with the
-recent kernel patches and brctl utility by Lennert Buytenhek.
-and tries to explain about the STP implementation in this
-code.
-
-
-
-
-
-
-
-
-With developer kernel 2.3.47 the new bridging code is part of the
-mainstream.
-There are patches for stable kernels 2.2.14 to 2.2.16, where each
-is also available as a ipchains-patch.
-
-
-----
-!!!1. License
-
-Copyright (c) 2000 by Uwe Böhme.
-This document may be distributed only subject to the terms and conditions
-set forth in the LDP License available at
-http://www.linuxdoc.org/
-
-
-----
-!!!2. Document Home and Downloads
-!!2.1. The Bridge Sources And Utilities
-
-Official url is
-http://www.math.leidenuniv.nl/~buytenh/bridge/.
-With developer kernel 2.3.47 the new bridging code is part of the mainstream.
-
-
-----
-!!2.2. The Mailing-List
-
-The Bridge-Mailinglist is homed at
-http://www.math.leidenuniv.nl/mailman/listinfo/bridge.
-
-
-----
-!!2.3. This Document
-
-This document has it's official homepage at
-http://www.bnhof.de/~uwe/bridge-stp-howto/BRIDGE-STP-HOWTO/.
-It's a part of the Linux Documentation Project located at
-http://www.linuxdoc.org/.
-
-
-
-
-
-
-
-
-__Download Types and Locations__
-
-; Build environment as tar.gziped file:
-
- http://www.bnhof.de/~uwe/bridge-stp-howto/BRIDGE-STP-HOWTO.tar.gz
-
-
-; HTML-gziped file:
-
- http://www.bnhof.de/~uwe/bridge-stp-howto/BRIDGE-STP-HOWTO.html.tar.gz
-
-
-; PDF-gziped file:
-
- http://www.bnhof.de/~uwe/bridge-stp-howto/BRIDGE-STP-HOWTO.pdf.gz
-
-
-; PS-gziped file:
-
- http://www.bnhof.de/~uwe/bridge-stp-howto/BRIDGE-STP-HOWTO.ps.gz
-
-
-----
-!!!3. What Is A Bridge?
-
-A bridge is a device that separates two or more network segments
-within one logical network (e.g. a single IP-subnet).
-
-
-
-
-A bridge is usually placed between two separate groups of computers
-that talk with each other, but not that much with the computers in
-the other group.
-A good example of this is to consider a cluster of Macintoshes and a
-cluster of Unix machines.
-Both of these groups of machines tend to be quite chatty amongst
-themselves, and the traffic they produce on the network causes
-collisions for the other machines who are trying to speak to one
-another.
-
-
-
-
-The job of the bridge is to examine the destination of the
-data packets one at a time and decide whether or not to pass the
-packets to the other side of the Ethernet segment.
-The result is a faster, quieter network with less collisions.
-
-
-
-
-The bridging code decides whether to bridge data or to drop it not
-by looking at the protocol type (IP, IPX, NetBEUI), but by looking at
-the MAC-address unique to each NIC.
-
-
-
-
-__Important: __It's vital to understand that a bridge is neither a router nor
-a fire-wall.
-Spoken in simple term a bridge behaves like a network switch
-(i.e. Layer 2 Switch), making it a transparent network component
-(which is not absolutely true, but nearly).
-Read more about this at Section 4.
-
-
-
-
-In addition, you can overcome hardware incompatibilities with a
-bridge, without leaving the address-range of your IP-net or subnet.
-E.g. it's possible to bridge between different physical media like
-10 Base T and 100 Base TX.
-
-
-
-
-My personal reason for starting to set up a bridge was that in my
-work I had to connect Fast Ethernet components to a existing HP
-Voice Grade network, which is a proprietary networking standard.
-
-
-
-
-
-
-
-
-__Features Above Pure Bridging__
-
-; STP:
-
-The Spanning Tree Protocol is a nifty method of keeping
-Ethernet devices connected in multiple paths working.
-The participating switches negotiate the shortest available path
-by STP.
-This feature will be discussed in
-Section 7.1.
-
-
-; Multiple Bridge Instances:
-
-Multiple bridge instances allow you to have more than one
-bridge on your box up and running, and to control each instance
-separately.
-
-
-; Fire-walling:
-
-There is a patch to the bridging code which allows you
-to use IP chains on the interface inside a bridge.
-More info about this you'll find at
-Section 7.2.
-
-
-----
-!!!4. Rules On Bridging
-
-There is a number of rules you are not allowed to break
-(otherwise your bridge will do).
-
-
-
-
-
-
-
-*
-
-A port can only be a member of one bridge.
-
-
-
-*
-*
-
-A bridge knows nothing about routes.
-
-
-
-*
-*
-
-A bridge knows nothing about higher protocols than ARP.
-That's the reason why it can bridge any possible protocol
-possibly running on your Ethernet.
-
-
-
-*
-*
-
-No matter how many ports you have in your logical bridge,
-it's covered by only one logical interface
-
-
-
-*
-*
-
-As soon as a port (e.g. a NIC) is added to a bridge you have no
-more direct control about it.
-
-
-
-*
-
-
-
-
-__Warning__
-
-If one of the points mentioned above is not clear to you now,
-don't continue reading.
-Read the documents listed in Appendix B
-first.
-
-
-
-
-If you ever tried to ping an unmanaged switch, you will know that
-it doesn't work, because you don't have a IP-address for it.
-To switch datagrams it doesn't need one.
-The other thing is if you want to manage the switch.
-It's too much strain, to take a dumb terminal, walk to the
-place you installed it (normally a dark, dusty and warm
-room, with a lot of green and red Christmas lights), to connect the
-terminal and to change the settings.
-
-
-
-
-What you want is remote management, usually by SNMP, telnet, rlogin
-or (best) ssh.
-For all this services you will need a IP.
-That's the exception to the transparency.
-The new code allows you without any problem to assign a IP address to
-the virtual interface formed by the bridge-instance you will create
-in Section 6.2.
-All NIC's (or other interfaces) in your bridge will happily listen and
-respond to datagrams destined to this IP.
-
-
-
-
-All other data will not interfere with the bridge.
-The bridge just acts like a switch.
-
-
-----
-!!!5. Preparing The Bridge
-
-This section describes what you need and how you do to prepare
-your bridge.
-
-
-----
-!!5.1. Get The Files
-
-Here you can find a list of the files and down-loads you will need
-for the setup of the bridge.
-If you have one of the mentioned files or packages on your
-distribution, of course there is no need to create network load.
-
-
-
-
-I'll only mention the files for the 2.2.14 kernel.
-If you want to try a different one (e.g. 2.2.15 or the recent
-development kernel) just replace the kernel version number and
-look whether you find it.
-
-
-
-
-__Important: __You have read the ''abstract'', didn't you?
-So you know that there is no need to download any kernel-patch if
-you're working with a kernel later than 2.3.47.
-
-
-
-
-
-
-
-
-__File and package list__
-
-; Unpatched kernel-sources:
-
-E.g. linux-2.2.14.tar.bz2 available
-from your local kernel.org mirror.
-Please check first if you find it in your distribution (take
-unpatched kernel-sources).
-If you don't, please check
-The Linux Kernel
-Archive Mirror System for a close by mirror and down-load
-it from there.
-
-
-; Bridge patches:
-
-__Note: __If your kernel is later than 2.3.47 you don't need this.
-The bridging is part of the mainstream from that version.
-
-
-
-
-Get the bridge kernel patches for your kernel
-version from
-http://www.math.leidenuniv.nl/~buytenh/bridge/.
-Identify the file by the kernel number.
-
-
-
-
-
-
-__Note: __There are also patches allowing to work with IP chains.
-I never tried it, for I don't see the need to fire-wall
-inside my LAN, and absolutely no need to bridge against
-the outer world. Feel free to contribute about that issue.
-
-
-
-
-
-
-
-__Kernel patches for the stable 2.2 kernel. __
-
-
-
-
-
-
-__Available Kernel patches__
-
-; bridge-..9-against-2.2.18.diff, the main kernel patch against 2.2.18:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-..9-against-2.2.18.diff
-
-
-; bridge-ipchains-against-..9-against-2.2.18.diff, an add-on patch for bridge firewalling against 2.2.18:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-..9-against-2.2.18.diff
-
-
-; bridge-..8-against-2.2.18pre19.diff, the main kernel patch against 2.2.18pre19.:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-..8-against-2.2.18pre19.diff
-
-
-; bridge-..8-against-2.2.17-.5.diff, the main kernel patch against 2.2.17-.5:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-..8-against-2.2.17-.5.diff
-
-
-; bridge-ipchains-against-..8-against-2.2.18pre19.diff, an add-on patch for bridge firewalling against 2.2.18pre19:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-..8-against-2.2.18pre19.diff
-
-
-; bridge-ipchains-against-..8-against-2.2.17-.5.diff, an add-on patch for bridge firewalling against 2.2.17-.5:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-..8-against-2.2.17-.5.diff
-
-
-; bridge-..7-against-2.2.18pre15.diff, the main kernel patch against 2.2.18pre15:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-..7-against-2.2.18pre15.diff
-
-
-; bridge-ipchains-against-..7-against-2.2.18pre15.diff, an add-on patch for bridge firewalling against 2.2.18pre15:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-..7-against-2.2.18pre15.diff
-
-
-; bridge-..7-against-2.2.17.diff, the main kernel patch against 2.2.17:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-..7-against-2.2.17.diff
-
-
-; bridge-ipchains-against-..7-against-2.2.17.diff, an add-on patch for bridge firewalling against 2.2.17:
-
- http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-..7-against-2.2.17.diff
-
-
-
-
-
-; Bridge configuration utilities:
-
-You also will need the bridge configuration utilities to
-set up the bridge Section 6.
-You can also download them from http://www.math.leidenuniv.nl/~buytenh/bridge/.
-
-
-----
-!!5.2. Apply The Patches
-
-__Note: __If your kernel is later than 2.3.47 you don't need this.
-The bridging is part of the mainstream from that version.
-
-
-
-
-Apply the bridging patch your kernel.
-If you don`t know ''how to'' do that read the
-Kernel-HOWTO which can be found in your distribution or at
-http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html
-
-
-
-
-__Example 1. Applying a kernel patch__
-
-
-root@mbb-1:~ # cd /usr/src/linux-2.2.14
-root@mbb-1:/usr/src/linux-2.2.14 # patch -p1 ` \
-__bridge-..5-against-2.2.14.diff__
-.
-.
-----
-!!5.3. Configure The Kernel
-
-Now it's time we configure our freshly patched kernel to create
-the ability to bridge.
-
-
-
-
-Run __make config__,
-__make menuconfig__ or the
-click-o-rama __make xconfig__.
-Select __bridging__ in the __networking
-option__ section to be compiled as a module.
-AFAIK there is no strong reason why ''not'' to
-compile it as a kernel module, whereas I heard rumors about
-problems with compiling the bridging code directly into the kernel.
-
-
-
-
-
-
-
-root@mbb-1:~ # cd /usr/src/linux-2.2.14
-root@mbb-1:/usr/src/linux-2.2.14 # make menuconfig
-.
-
-
-
-
-----
-!!5.4. Compile The Kernel
-
-Compile your kernel Example 2.
-Make the new compiled kernel-image to be loaded.
-I don't know if the kernel patches only apply to the bridging-module
-or also modify some interfaces inside vmlinuz.
-So it might not be a error to give a reboot after you updated the
-kernel-image.
-
-
-
-
-__Example 2. Commands To Compile Your Kernel__
-
-
-root@mbb-1:/usr/src/linux-2.2.14 # make dep clean zImage modules modules_install zlilo
-...
-----
-!!5.5. Compile The Bridge Utilities
-
-This is how to compile and install from the scratch.
-Just __unzip__ the utilities-tarball, __cd__
-into the newly created directory and give a __make__.
-
-
-
-
-__Example 3. Commands To Compile Your Bridge-Utilities__
-
-
-root@mbb-1:/usr/src/linux-2.2.14 # cd /usr/local/src
-root@mbb-1:/usr/local/src/ # tar xzvf __bridge-utils-.9.1.tar.gz__
-.....
-....
-root@mbb-1:/usr/local/src # cd bridge
-root@mbb-1:/usr/local/src/bridge # make
-.....
-....
-
-
-After the compilation shown in
-Example 3 have worked properly, you
-can copy the executables to let's say
-/usr/local/sbin/ (at least I did).
-So the commands you have to give should be clear, but to be complete
-see Example 4
-
-
-
-
-__Example 4. Copy The Binaries Of The Utilities__
-
-
-root@mbb-1:/usr/local/src/bridge # cd brctl
-root@mbb-1:/usr/local/src/bridge/brctl # cp brctl /usr/local/sbin
-root@mbb-1:/usr/local/src/bridge/brctl # chmod 700 /usr/local/sbin/brctl
-root@mbb-1:/usr/local/src/bridge/brctl # cp brctld /usr/local/sbin
-root@mbb-1:/usr/local/src/bridge/brctl # chmod 700 /usr/local/sbin/brctld
-
-
-Also now you can copy the new man-page to a decent place,
-as shown in Example 5.
-
-
-
-
-__Example 5. Copy The Man-page Of brctl__
-
-
-root@mbb-1:/usr/local/src/bridge # cd doc
-root@mbb-1:/usr/local/src/bridge/doc # gzip -c brctl.8 b /usr/local/man/man8/brctl.8.gz
-----
-!!!6. Set Up The Bridge
-
-Make sure all your network cards are working nicely
-and are accessible.
-If so, __ifconfig__ will show you the hardware layout
-of the network-interface.
-If you have problems making your cards work please read the
-Ethernet-HOWTO at
-http://www.linuxdoc.org/HOWTO/Ethernet-HOWTO.html.
-Don't mess around with IP-addresses or net-masks.
-You will not need it, until you bridge fully operational an up.
-
-
-
-
-After you did the steps mentioned above a
-__modprobe -v bridge__ should show no errors.
-You can check the success by issuing a
-__cat /proc/modules__.
-Also for each of the network cards you want to use in the bridge
-the __ifconfig __whateverNameYourInterfaceHas____
-should give you some information about the interface.
-
-
-
-
-If your bridge-utilities have been
-correctly built and your kernel and bridge-module are OK, then
-issuing a __brctl__ should show a small command
-synopsis.
-
-
-----
-!!6.1. __brctl__ Command Synopsis
-
-
-root@mbb-1:~ # brctl
-commands:
-addbr `bridgeb add bridge
-addif `bridgeb `deviceb add interface to bridge
-delbr `bridgeb delete bridge
-delif `bridgeb `deviceb delete interface from bridge
-show show a list of bridges
-showbr `bridgeb show bridge info
-showmacs `bridgeb show a list of mac addrs
-setageing `bridgeb `timeb set ageing time
-setbridgeprio `bridgeb `priob set bridge priority
-setfd `bridgeb `timeb set bridge forward delay
-setgcint `bridgeb `timeb set garbage collection interval __(11)__
-sethello `bridgeb `timeb set hello time __(12)__
-setmaxage `bridgeb `timeb set max message age __(13)__
-setpathcost `bridgeb `portb `costb set path cost __(14)__
-setportprio `bridgeb `portb `priob set port priority __(15)__
-stp `bridgeb `stateb {dis,en}able stp __(16)__
-
-
-
-; : The
-__brctl addbr __bridgename____
-command creates a logical bridge instance with the name
-__bridgename__.
-You will need at least one logical instance to do any bridging at
-all.
-You can interpret the logical bridge being a container for the
-interfaces taking part in the bridging.
-Each bridging instance is represented by a new network interface.
-
-
-__Example 6. Creating A Instance__
-
-
-root@mbb-1:~ # brctl addbr mybridge1
-:
-
-The corresponding "shutdown" command is
-__brctl delbr __bridgename____.
-
-
-
-
-
-__Caution__
-
-__brctl delbr __bridgename____
-will only work, if there are no more interfaces added to the
-instance you want to delete.
-
-
-
-
-
-; : The
-__brctl addif __bridgename__
-__device____
-command enslaves the network device __device__
-to take part in the bridging of __bridgename__.
-As a simple explanation, each interface enslaved into a instance
-is bridged to the other interfaces of the instance.
-:
-
-The corresponding command to tale a interface out of the bridge
-would be
-__brctl delif __bridgename__
-__device____
-
-
-; : The __brctl show__ command gives you a summary
-about the overall bridge status, and the instances running as
-shown in Example 7.
-If you are interested in detailed information about a instance and
-it's interfaces you will have to check .
-
-
-__Example 7. Output Of __brctl show____
-
-
-root@mbb-1:~ # brctl show
-bridge name bridge id stp enabled
-mybridge1 0000.0800062815f6 yes
-; : The __brctl showbr __bridgename____
-command gives you a summary about a bridge instance and it's enslaved
-interfaces.
-
-
-__Example 8. Output Of __brctl showbr __bridgename______
-
-
-root@mbb-1:~ # brctl showbr mybridge1
-mybridge1
-bridge id 0000.0800062815f6
-designated root 0000.0800062815f6
-root port 0 path cost
-max age 4.00 bridge max age 4.00
-hello time 1.00 bridge hello time 1.00
-forward delay 4.00 bridge forward delay 4.00
-ageing time 300.00 gc interval 4.00
-hello timer .84 tcn timer .00
-topology change timer .00 gc timer 1.84
-flags
-eth0 (1)
-port id 8001 state forwarding
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .00
-designated port 8001 forward delay timer .00
-designated cost 0 hold timer .84
-flags
-eth1 (2)
-port id 8002 state forwarding
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .00
-designated port 8002 forward delay timer .00
-designated cost 0 hold timer .84
-flags
-; : The __brctl showmacs __bridgename____
-command gives you a list of MAC-addresses of the
-interfaces which are enslaved in __bridgename__.
-
-
-__Example 9. Output Of __brctl showmacs __bridgename______
-
-
-root@mbb-1:~ # brctl showmacs mybridge1
-port no mac addr is local? ageing timer
-1 00:10:4b:b6:c6:e4 no 119.25
-1 00:50:04:43:82:85 no .00
-1 00:50:da:45:45:b1 no 76.75
-1 00:a0:24:d0:4c:d6 yes .00
-1 00:a0:24:f0:22:71 no 5.81
-1 08:00:09:b5:dc:41 no 22.22
-1 08:00:09:fb:39:a1 no 27.24
-1 08:00:09:fc:92:2c no 53.13
-4 08:00:09:fc:d2:11 yes .00
-1 08:00:09:fd:23:88 no 230.42
-1 08:00:09:fe:0d:6f no 144.55
-; : Sets the aging time.
-The aging time is the number of seconds a MAC-address will be
-kept in the forwarding database after having received a packet
-from this MAC address.
-The entries in the forwarding database are periodically timed out
-to ensure they won't stay around forever.
-Normally there should be no need to modify this parameter.
-; : Sets the bridge's relative priority.
-The bridge with the lowest priority will be elected as the root
-bridge.
-The root bridge is the "central" bridge in the
-spanning tree.
-More information about STP you find at
-Section 7.1.
-; : Sets the forwarding delay time.
-The forwarding delay time is the time spent in each of the
-Listening and Learning states before the Forwarding state is
-entered.
-; __(11)__: Sets the garbage collection interval.
-Every (this number) seconds, the entire forwarding database is
-checked for timed-out entries.
-The timed-out entries are removed.
-; __(12)__: Sets the hello time.
-Every (this number) seconds, a hello packet is sent out by the Root
-Bridge and the Designated Bridges.
-Hello packets are used to communicate information about the topology
-throughout the entire Bridged Local Area Network.
-More information about STP you find at
-Section 7.1.
-; __(13)__: Sets the maximum message age.
-If the last seen (received) hello packet is more than this number
-of seconds old, the bridge in question will start the takeover
-procedure in attempt to become the Root Bridge itself.
-More information about STP you find at
-Section 7.1.
-; __(14)__: Sets the cost of receiving (or sending, I'm not sure) a packet
-on this interface.
-Faster interfaces should have lower path costs.
-These values are used in the computation of the minimal spanning
-tree.
-More information about STP you find at
-Section 7.1.
-Paths with lower costs are likelier to be used in the spanning tree
-than high-cost paths
-(As an example, think of a gigabit line with a 100Mbit or 10Mbit
-line as a backup line.
-You don't want the 10/100Mbit line to become the primary line there.)
-:
-
- The Linux implementation currently sets the path cost of all eth*
-interfaces to 100, the nominal cost for a 10Mbit connection. There is
-unfortunately no easy way to discern 10Mbit from 100Mbit from 1Gbit
-Ethernet cards, so the bridge cannot use the real interface speed.
-
-
-; __(16)__: With this parameter you can enable or disable the Spanning Tree
-Protocol.
-; __(12)____(14)____(16)__: This parameters are only of interest, if you have more than
-one bridge in your LAN and stp enabled.
-Before modifying them you should read
-Section 7.1.
-----
-!!6.2. Basic Setup
-
-The standard configuration should consist of:
-
-
-
-
-
-
-
-#
-
-Create the bridge interface.
-
-root@mbb-1:~ # brctl addbr mybridge
-
-
-
-
-#
-#
-
-Add interfaces to the bridge.
-
-root@mbb-1:~ # brctl addif mybridge eth0
-root@mbb-1:~ # brctl addif mybridge eth1
-
-
-
-
-#
-#
-
-Zero IP the interfaces.
-
-root@mbb-1:~ # ifconfig eth0 ...
-root@mbb-1:~ # ifconfig eth1 ...
-
-
-
-
-#
-#
-
-Put up the bridge.
-
-root@mbb-1:~ # ifconfig mybridge up
-
-
-
-
-#
-#
-
-Optionally you can configure the virtual interface
-__mybridge__ to take part in your network.
-It behaves like one interface (like a normal network card).
-Exactly that way you configure it, replacing the previous
-command with something like:
-
-root@mbb-1:~ # ifconfig mybridge 192.168.100.5 netmask 255.255.255.0 up
-
-
-
-
-#
-
-A more sophisticated setup script you will find at
-Example 16.
-
-
-
-
-__Important: __If you get the terrible experience of a frozen system or
-some nasty behavior of your nicely shaped linux box at
-
-root@mbb-1:~ # ifconfig eth__n__ 0 ...
-
-please try (after the reboot of the system if necessary)
-before starting any bridge stuff at all a
-
-root@mbb-1:~ # ifconfig eth__n__ promisc up
-
-If again your system is frozen it's you NIC's driver you have to blame,
-not the bridging code.
-
-
-----
-!!!7. Advanced Bridge Features
-
-Here we will cover some advanced features of the new bridge code.
-
-
-----
-!!7.1. Spanning Tree Protocol
-
-__Tell me... __
-
-
-
-
-*
-
-You are a networkadmin...?
-
-
-
-*
-*
-
-You have a switch on top of your ethernet tree...?
-
-
-
-*
-*
-
-You have nightmares of a switch emmiting smoke...?
-
-
-
-*
-*
-
-Your company is not extremely rich and con provide
-another redundant switch just waiting for you to plug the
-patchwires..?
-
-
-
-*
-*
-
-You don't feel like placing your bed close to your
-main network node to plug the wires...?
-
-
-
-*
-
-
-
-
-__Don't wait until you're just another nervous wreck. __Join linux bridge community and enjoy the relaxment a
-stp-enabled inhouse scenario is offering to you.
-
-
-
-
-Ok, let's leave that commercial and get back linux and the bridge.
-Take a look on this small thread from the linux-bridge mailing list.
-
-
-
-!STP Thread from bridge@openrock.net (no more valid); Could you give me some hints about multi-bridge scenarios.
-; Does the STP "heartbeat" mechanism also work
-with bridges with more than two cards?
-; How fast does it get up, and what can I do about it?
-
-
-__ __Could you give me some hints about multi-bridge scenarios.
-
-
-
-
-__ __You can just set up two "mirrored" bridges.
-You have two network interfaces in your bridge?
-Set up the mirror bridge so that it has two network interfaces
-as well, and connect each of the interfaces to one subnet.
-This will work without the need of configuration.
-
-
-
-
-
-
-__Note: __Be sure that you have the spanning tree protocol
-enabled.
-If you didn't use __brctl__, this should
-be fine, because in Linux, it is on by default.
-To check, you could check whether the bridge sends a
-packet to 0180c2000000
-every 2 seconds.
-If it does, the STP is on.
-The STP is needed so that only one bridge will be active
-at any given time.
-
-
-
-
-
-__Note: __To be able to see nicely formatted stp packages in your
-network take a look at at the bridge homepage for the patches
-to tcpdump.
-
-
-
-
-
-
-
- The "master" bridge will send out STP packets every
-2 seconds by default.
-The "slave" bridge will receive these packets,
-and will notice that the master is still up.
-If the slave hasn't received a packet in 20 seconds (max.
-message age parameter), it will start the takeover procedure.
-From the moment the takeover procedure starts, it will take
-about 30 seconds (twice the forward delay parameter) for the
-bridge to become fully operational.
-
-
-
-
-__ __Does the STP "heartbeat" mechanism also work
-with bridges with more than two cards?
-
-
-
-
-__ __Yes, it works with any number of interfaces.
-You can invent bizarre topologies to your heart's desire.
-You can use multiple (redundant) bridge-bridge connects,
-you can insert loops, whatever.
-The STP code will always find the minimal spanning tree.
-The bridge code will even deal with the loss of any number
-of interfaces.
-If there are two redundant bridges with identical connections,
-the loss of an interface on one of the bridges will cause the
-other bridge to take over forwarding to that specific
-interface.
-''Now isn't that great? :)''
-
-
-
-
-__ __How fast does it get up, and what can I do about it?
-
-
-
-
-__ __If you think 50 seconds is too much -- and I guess you
-should; alas, the IEEE specs gives us these default values
--- you can tweak these parameters.
-If you set the hello time (the STP packet interval) from 2 to 1
-second, you can safely set the message age parameter to 4
-seconds.
-Then you can set the forward delay to 4 seconds, and this will
-in total give you a takeover time of ~12 seconds.
-
-
-
-
-The great thing which is made possible by STP is
-a redundant parallel bridging scenario, with automated take over
-features.
-Within a network basing on stp the bridges always try to send a
-datagram the (by path cost) shortest path.
-Only on that path the bridges are forwarding, all other paths between
-this shortest way are blocked.
-If there is a broken path, the bridges agree about the next shortest.
-So doubled paths don't break the net, but are bringing more security...
-For a example setup of a fail secured connection see
-Section 8.
-
-
-----
-!!7.2. Bridge And The IP-Chains
-
-The normal idea about a bridge would not allow anything like
-firewalling, but since several people have asked Lennert for ipchains
-firewalling on bridge forwarding he implemented it.
-
-
-
-
-__Important: __If you want to do this, you will need to apply the
-special ip-chain-bridge-patch (also available at
-the bridge homepage).
-
-
-
-
-As soon you have everything up correctly, the bridging code will
-check each to-be-forwarded packet against the ipchains chain which has
-the same name as the bridge.
-
-
-
-
-So.. if a packet on eth0 is to be forwarded to eth1, and those
-interfaces are both part of the bridge group br0, the
-bridging code will check the packet against the chain called 'br0'.
-
-
-
-
-
-
-
-__Warning__
-
-If the chain does not exist, the packet will be forwarded.
-So if you want to do firewalling, you'll have to create the chain
-yourself.
-
-
-
-
-__Example 10. A Simple Bridge Firewall Setup__
-
-
-Example:
-# brctl addbr __br0__
-# brctl addif br0 eth0
-# brctl addif br0 eth1
-# ifconfig br0 10...254
-# ipchains -N __br0__
-# ipchains -A br0 -s 10...1/8 -i eth0 -j DENY
-; : Creating a bridge interface named __br0__
-; : Placing eth0 and eth1 into the bridge.
-; : Assigning a regular IP address to the bridge.
-The IP is taken from private network 10.X.X.X (Class A).
-; : Creating a ip-chain named __br0__
-; :
-
-
-
-
-__Caution__
-
-It's vital to have the same name here
-(__br0__ or whatever you have selected,
-as long as you have the same in all places).
-
-
-
-; : Denying all trafic with source 10.X.X.X on eth0.
-----
-!!!8. A Practical Setup Example
-
-
-
-
-
-This is a real-world example which is currently working
-in our network.
-Even if it's for sure not a very common situation it might be
-useful.
-
-
-
-
-
-
-
-
-I had to solve a small hardware incompatibility.
-HP-VG (Voice Grade) 100Mbit network is not fast Ethernet
-compatible.
-Having neither the money nor the will to replace the
-stuff and having the need to expand the system I had to find a
-solution which was a) stable and b) cheap.
-
-
-
-
-For sure buying a HP modular switch was not meeting condition
-b).
-So I remembered I heard about Linux-bridging which automatically
-fulfilled condition a) and b).
-
-
-
-
-So quite some time ago I successfully set up a bridge
-between the two incompatible networks.
-Its first hardware-layout is shown in
-Figure 1.
-
-
-
-
-__Figure 1. Hardware setup Of The Old Bridge Scenario__
-
-
-
-
-
-The old setup of my previous linux bridge
-
-
-
-
-
-
-It was configured as a transparent network component,
-meaning it didn't take a part in the network, but only bridged
-it.
-Originally it was set up on kernel 2..35 from a SuSE 5.3 distribution.
-
-
-
-
-The next problem showed up at once. A single bridge
-connecting the big segments might be c) a bottleneck and
-d) a reason to kill the netadmin, if it blows up.
-So I tried to find some solution for that problem.
-
-
-
-
-What happened next was that I discovered some hints that a
-new maintainer took over the bridging code.
-A few mails on the bridge-mailing list later as shown in
-Section 7.1 I was more clever.
-The new modular bridging code fulfilled exactly what I was looking
-for.
-
-
-
-
-__The new maintainer: Lennert Buytenhek
-. __His project page can be found at
-http://www.math.leidenuniv.nl/~buytenh/bridge/
-IMHO he's doing a great job. Thanks a lot.
-
-
-----
-!!8.1. Hardware-setup
-
-The ideas and hints I got from the mailing list discussion shown in
-Section 7.1 lead to a new hardware-setup shown in
-Figure 2.
-The setup is intended to provide a default machine
-(guess which one).
-The bridge has 3 HP cards of which each is connected to a HP VG15 hub.
-The 3com card is connected to a 3com Superstack Fast Ethernet switch.
-
-
-
-
-__Figure 2. Hardware Setup Of The Multi bridge Scenario__
-
-
-
-
-
-The practically working setup of my local linux Ethernet multi bridge
-
-
-
-
-
-
-This setup is not only fail proof to any one of the bridge's
-interfaces being down, but also to complete blackout of one of the
-bridges.
-Additional advantage to the old-setup
-Figure 1 that the single HUBS are
-switched.
-This means that a datagram being sent from one port on the VG15 HUB
-blocks 30 ports by maximum and 15 ports by minimum, instead of
-blocking all 45 ports.
-Also, the breakdown of the HUB, to the old bridge was connected, would
-have caused the whole HP-segment to break down.
-With the new code only the machines connected to the broken HUB will
-get no more data.
-
-
-----
-!!8.2. Software-setup
-
-For both bridges the setup is exactly the same (with the
-exception of bridge priority which will be discussed later on).
-The machine was setup by the SuSE 6.4 distribution with the original
-unpatched kernel sources installed.
-At this point only the minimal configuration and no additional
-hardware or network setup.
-
-
-
-
-The basic setup is according the descriptions in the beginning of
-this document.
-The thing I did in addition was bringing up the unpatched 2.2.14
-sources of the SuSE 6.4 distribution to version 2.2.15 as in
-Example 11.
-
-
-
-
-__Example 11. Upgrading The Kernel From 2.2.14 To 2.2.15__
-
-
-root@mbb-1:~ # cd /usr/src/linux-2.2.14
-root@mbb-1:/usr/src/linux-2.2.14 # patch -p1 \
-__/usr/local/download/kernel/patch-2.2.15__
-patching file ........................
-patching file ...................
-...
-..
-root@mbb-1:/usr/src/linux-2.2.14 # cd ..
-root@mbb-1:/usr/src # mv linux-2.2.14 linux-2.2.15
-root@mbb-1:/usr/src # rm linux
-root@mbb-1:/usr/src # ln -s linux-2.2.15 linux
-
-
-Next step was to apply the bridge-patch as shown in
-Example 12.
-
-
-
-
-__Example 12. Applying The Kernel Patch__
-
-
-root@mbb-1:/usr/src # cd /usr/src/linux-2.2.15
-root@mbb-1:/usr/src/linux-2.2.15 # patch -p1 ` \
-__bridge-..5-against-2.2.15.diff__
-patching file ........................
-patching file ...................
-...
-..
-
-
-After that I selected the bridging code to be compiled as a
-module as shown in
-Example 13.
-
-
-
-
-__Example 13. Configuring The Kernel__
-
-
-root@mbb-1:/usr/src/linux-2.2.15 # make config
-..
-*
-* Code maturity level options
-*
-Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
-
[[N/y/?
] Y
-..
-802.1d Ethernet Bridging (CONFIG_BRIDGE) [[N/y/m/?] (NEW) m
-..
-
-
-By the way I also selected the drivers of my NIC's to be compiled
-as modules which resulted to 3c95x.o and
-hp100.o.
-
-
-
-
-
-
-
-root@mbb-1:/usr/src/linux-2.2.15 # make dep clean zImage \
-modules modules_install zlilo
-..
-root@mbb-1:/usr/src/linux-2.2.15 # init 6
-
-
-
-
-
-
-After the reboot happening I started at runlevel 1 leaving all the
-networking out of the running system.
-That gave me the chance to check the setup step by step.
-
-
-
-
-The command __modprobe -v bridge__ worked
-without any warnings, so that one was OK.
-Next I edited my /etc/modules.conf by aliasing
-my network card drivers as shown in
-Example 14 and
-Example 15.
-I didn't need to make use of the options, all cards where realized
-proper as I checked by __cat /proc/modules__,
-__cat /proc/interrupts__ and
-__cat /proc/ioports__.
-
-
-
-
-__Example 14. /etc/modules.conf of ''mbb-1''__
-
-
-# Aliases - specify your hardware
-alias eth0 3c59x
-alias eth1 hp100
-alias eth2 hp100
-alias eth3 hp100
-
-
-__Example 15. /etc/modules.conf of ''mbb-2''__
-
-
-# Aliases - specify your hardware
-alias eth0 3c509
-alias eth1 hp100
-alias eth2 hp100
-alias eth3 hp100
-
-
-So next thing would have been a step by step setup of the bridge
-and it's interfaces.
-Because I'm lazy I just show the init script I prepared for the
-setup.
-
-
-__Important: __Of course you'll have do adapt the script to your system,
-if you want to use it.
-Please remember I'm writing this for the setup of a SuSE
-distribution.
-
-
-
-
-
-
-
-__Example 16. Bridge Init Script__
-
-
-
-
-#! /bin/bash
-# Copyright (c) 2000 Uwe Böhme. All rights reserved.
-#
-# Author: Uwe Böhme `uwe@bnhof.deb, 2000
-#
-#
-# /sbin/init.d/bridge
-#
-. /etc/rc.config
-return=$rc_done
-case "$1" in
-start)
-echo "Starting service bridge mueb"
-brctl addbr mueb || return=$rc_failed
-brctl setbridgeprio mueb 0 || return=$rc_failed
-brctl addif mueb eth0 || return=$rc_failed
-brctl addif mueb eth1 || return=$rc_failed
-brctl addif mueb eth2 || return=$rc_failed
-brctl addif mueb eth3 || return=$rc_failed
-ifconfig eth0 ...0 || return=$rc_failed
-ifconfig eth1 ...0 || return=$rc_failed
-ifconfig eth2 ...0 || return=$rc_failed
-ifconfig eth3 ...0 || return=$rc_failed
-brctl sethello mueb 1 || return=$rc_failed __(11)__
-brctl setmaxage mueb 4 || return=$rc_failed __(12)__
-brctl setfd mueb 4 || return=$rc_failed __(13)__
-echo -e "$return"
-;;
-stop)
-echo "Shutting down service bridge mueb"
-brctl delif mueb eth3 || return=$rc_failed __(14)__
-brctl delif mueb eth2 || return=$rc_failed __(15)__
-brctl delif mueb eth1 || return=$rc_failed __(16)__
-brctl delif mueb eth0 || return=$rc_failed __(17)__
-brctl delbr mueb || return=$rc_failed __(18)__
-rmmod bridge || return=$rc_failed __(19)__
-echo -e "$return"
-;;
-status)
-ifconfig mueb
-brctl showbr mueb
-;;
-restart)
-$0 stop 88 $0 start || return=$rc_failed
-;;
-*)
-echo "Usage: $0 {start|stop|status|restart}"
-exit 1
-esac
-test "$return" = "$rc_done" || exit 1
-exit
-
-
-
-; : This command creates a new virtual interface (bridge instance)
-with the name __mueb__ and also brings up the
-bridge module.
-
-
-__Note: __At least my system it does.
-Maybe you have to enable the kernel module loader.
-
-
-
-; : Here the script sets the bridge's priority (relative to
-other bridges in the net) to .
-This is indicating that this bridge will become the root bridge
-as long as there is no other bridge with a lower priority level
-available.
-
-
-__Important: __In the init script of the backup bridge this line in missing,
-leaving it with the default priority of 100.
-
-
-; : Enslaves the Ethernet interface to become a port in the
-bridge.
-; : Takes away any possibly disturbing IP-address and brings the
-interface up.
-; __(11)__: Setting the hello time of the bridge to one second makes it
-possible to reduce the maxage value of the bridges inside the
-network.
-; __(12)__: Setting the time the a bridge is waiting before starting the
-takeover process to a shorter period.
-; __(13)__: Forcing the bridge to forward earlier than the default time.
-; __(14)____(15)____(16)____(17)__: Take the Ethernet out of the bridging instance.
-; __(18)__: Destroy the bridge instance.
-; __(19)__: Remove the bridge module.
-
-
-To polish your setup and to be able to reach the bridge from
-remote you now can configure your bridge instance as if it would be
-a physical existing network interface.
-You can give it a nice IP with a suitable net-mask.
-It doesn't matter from which segment in you net, you will reach the
-bridge with this IP-address.
-
-
-----
-!!8.3. See It Work
-
-Here I want to show and explain about how the running bridge shows
-up.
-The output Example 17 of
-''bridge@mbb-1'' is the output of the
-primary bridge, while you see in
-Example 18 the output of the backup
-bridge waiting to take over.
-
-
-
-
-__Example 17. Status Output Of mbb-1 Fully Up__
-
-
-mueb
-bridge id 0000.0800062815f6
-designated root 0000.0800062815f6
-root port 0 path cost
-max age 4.00 bridge max age 4.00
-hello time 1.00 bridge hello time 1.00
-forward delay 4.00 bridge forward delay 4.00
-ageing time 300.00 gc interval 4.00
-hello timer .80 tcn timer .00
-topology change timer .00 gc timer 3.80
-flags
-eth0 (1)
-port id 8001 state forwarding
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .00
-designated port 8001 forward delay timer .00
-designated cost 0 hold timer .80
-flags
-eth1 (2)
-port id 8002 state forwarding
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .00
-designated port 8002 forward delay timer .00
-designated cost 0 hold timer .80
-flags
-eth2 (3)
-port id 8003 state forwarding
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .00
-designated port 8003 forward delay timer .00
-designated cost 0 hold timer .80
-flags
-eth3 (4)
-port id 8004 state forwarding
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .00
-designated port 8004 forward delay timer .00
-designated cost 0 hold timer .80
-flags
-
-
-__Example 18. Status Output Of mbb-2 Fully Up__
-
-
-mueb
-bridge id 0064.00a024d04cd6
-designated root 0000.0800062815f6
-root port 1 path cost 100
-max age 4.00 bridge max age 4.00
-hello time 1.00 bridge hello time 1.00
-forward delay 4.00 bridge forward delay 4.00
-ageing time 300.00 gc interval 4.00
-hello timer .00 tcn timer .00
-topology change timer .00 gc timer 2.39
-flags
-eth0 (1)
-port id 8001 state forwarding
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .42
-designated port 8001 forward delay timer .00
-designated cost 0 hold timer .00
-flags
-eth1 (2)
-port id 8002 state blocking
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .42
-designated port 8002 forward delay timer .00
-designated cost 0 hold timer .00
-flags
-eth2 (3)
-port id 8003 state blocking
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .42
-designated port 8003 forward delay timer .00
-designated cost 0 hold timer .00
-flags
-eth3 (4)
-port id 8004 state blocking
-designated root 0000.0800062815f6 path cost 100
-designated bridge 0000.0800062815f6 message age timer .42
-designated port 8004 forward delay timer .00
-designated cost 0 hold timer .00
-flags
-
-
-If you take a glance into
-/var/log/messages as shown in
-Example 19 and in
-Example 20 you can see
-how the bridges are coming up and deciding how to do their
-duty.
-mbb-1 has a lower value for bridge-priority
-(see ),
-telling it to try to become the root bridge.
-As you can see mbb-1 forwards all ports,
-while mbb-2 blocks all ports with the exception
-of eth0.
-
-
-
-
-__Example 19. mbb-1 Messages From
-__init 2____
-
-
-May 25 16:46:04 mbb-1 init: Switching to runlevel: 2
-May 25 16:46:04 mbb-1 kernel: NET4: Ethernet Bridge 008 for NET4.
-May 25 16:46:04 mbb-1 kernel: device eth0 entered promiscuous mode
-May 25 16:46:04 mbb-1 kernel: device eth1 entered promiscuous mode
-May 25 16:46:04 mbb-1 kernel: device eth2 entered promiscuous mode
-May 25 16:46:04 mbb-1 kernel: device eth3 entered promiscuous mode
-May 25 16:46:04 mbb-1 kernel: mueb: port 4(eth3) entering listening state
-May 25 16:46:04 mbb-1 kernel: mueb: port 3(eth2) entering listening state
-May 25 16:46:04 mbb-1 kernel: mueb: port 2(eth1) entering listening state
-May 25 16:46:04 mbb-1 kernel: mueb: port 1(eth0) entering listening state
-May 25 16:46:08 mbb-1 kernel: mueb: port 4(eth3) entering learning state
-May 25 16:46:08 mbb-1 kernel: mueb: port 3(eth2) entering learning state
-May 25 16:46:08 mbb-1 kernel: mueb: port 2(eth1) entering learning state
-May 25 16:46:08 mbb-1 kernel: mueb: port 1(eth0) entering learning state
-May 25 16:46:12 mbb-1 kernel: mueb: port 4(eth3) entering forwarding state
-May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
-May 25 16:46:12 mbb-1 kernel: mueb: port 3(eth2) entering forwarding state
-May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
-May 25 16:46:12 mbb-1 kernel: mueb: port 2(eth1) entering forwarding state
-May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
-May 25 16:46:12 mbb-1 kernel: mueb: port 1(eth0) entering forwarding state
-May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
-
-
-__Example 20. mbb-2 Messages From
-__init 2____
-
-
-Jun 8 06:06:16 mbb-2 init: Switching to runlevel: 2
-Jun 8 06:06:17 mbb-2 kernel: NET4: Ethernet Bridge 008 for NET4.
-Jun 8 06:06:17 mbb-2 kernel: device eth0 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: device eth1 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: device eth2 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: device eth3 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 1(eth0) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering blocking state
-Jun 8 06:06:21 mbb-2 kernel: mueb: port 1(eth0) entering learning state
-Jun 8 06:06:25 mbb-2 kernel: mueb: port 1(eth0) entering forwarding state
-----
-!!8.4. Bridge Tests
-
-To check if really all the promised features are working, I did
-some crude test.
-The message logs are shown
here in.
-
-
-----
-!8.4.1. Tear The Patch Wire Test
-
- I think just taking a patch wire out of a bridge port is a really good
-real survival test.
-So I pulled the plugs one by one out of the sockets and looked what
-happened.
-To give you not too much tension let me summarize first:
-''It's really working''.
-All the takeovers happened within less then 12 seconds.
-
-
-
-
-The really interesting messages you can find at
-mbb-2.
-To see how everything comes up, I stopped network services first.
-In Example 21 you will see
-the messages caused by a __init 2__ followed
-by a "take out the plug, wait what happens, then place it
-back" in the order eth3, eth2, eth1, eth0 .
-
-
-
-
-__Note: __The thing I did, was making the tests, and publishing the dump.
-The one writing the nice explanations was Lennert again.
-
-
-
-
-__Example 21. mbb-2 Message Output Of Bridge Test__
-
-
-Jun 8 06:06:16 mbb-2 init: Switching to runlevel: 2
-Jun 8 06:06:17 mbb-2 kernel: NET4: Ethernet Bridge 008 for NET4.
-Jun 8 06:06:17 mbb-2 kernel: device eth0 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: device eth1 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: device eth2 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: device eth3 entered promiscuous mode
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 1(eth0) entering listening state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
-Jun 8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering blocking state
-Jun 8 06:06:21 mbb-2 kernel: mueb: port 1(eth0) entering learning state
-Jun 8 06:06:25 mbb-2 kernel: mueb: port 1(eth0) entering forwarding state
-Jun 8 06:07:15 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 4(eth3)
-Jun 8 06:07:15 mbb-2 kernel: mueb: port 4(eth3) entering listening state
-Jun 8 06:07:19 mbb-2 kernel: mueb: port 4(eth3) entering learning state
-Jun 8 06:07:23 mbb-2 kernel: mueb: port 4(eth3) entering forwarding state
-Jun 8 06:07:23 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:08:51 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:08:51 mbb-2 kernel: mueb: port 4(eth3) entering blocking state
-Jun 8 06:09:22 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 3(eth2)
-Jun 8 06:09:22 mbb-2 kernel: mueb: port 3(eth2) entering listening state
-Jun 8 06:09:26 mbb-2 kernel: mueb: port 3(eth2) entering learning state
-Jun 8 06:09:30 mbb-2 kernel: mueb: port 3(eth2) entering forwarding state
-Jun 8 06:09:30 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:10:09 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:10:09 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
-Jun 8 06:10:10 mbb-2 kernel: mueb: retransmitting tcn bpdu __(11)__
-Jun 8 06:10:41 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 2(eth1) __(12)__
-Jun 8 06:10:41 mbb-2 kernel: mueb: port 2(eth1) entering listening state
-Jun 8 06:10:45 mbb-2 kernel: mueb: port 2(eth1) entering learning state
-Jun 8 06:10:49 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
-Jun 8 06:10:49 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:11:06 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:11:06 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
-Jun 8 06:11:33 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 1(eth0) __(13)__
-Jun 8 06:11:33 mbb-2 kernel: mueb: port 2(eth1) entering listening state
-Jun 8 06:11:37 mbb-2 kernel: mueb: port 2(eth1) entering learning state
-Jun 8 06:11:41 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
-Jun 8 06:11:41 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:14:18 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 8 06:14:18 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
-Jun 8 06:14:19 mbb-2 kernel: mueb: retransmitting tcn bpdu
-; : The kernel sees that there are already bridges (actually,
-only one of them, but Hello packets are coming in on all 4 of
-the ports) on eth[[0123].
-; : To maintain connectivity with the rest of the network, the
-bridge decides to keep port 1 (eth0) active (i.e. in the
-"forwarding" state), and to temporarily disable
-ports 2-4.
-; : The plug on eth3 was pulled.
-Here you can see that the message age timer expired
-(__(13)__).
-The last Hello packet was seen more than X seconds ago.
-The bridge concludes that the connection to the bridge that
-was there has died.
-Therefore, it is going to try to enable this port, to provide
-network connectivity to the now-cutoff segment.
-; : It enters the listening state.
-It waits to see whether the old bridge might come back, or
-whether another bridge is going to claim takeover.
-; : Okay, no other bridge was seen.
-We're going to try to provide network connectivity to this
-segment ourselves.
-Which means: we're going to try and become
-"designated bridge" for this segment.
-We now enter the learning state.
-In this state, we only learn MAC addresses and we do not
-forward yet.
-This is because if we see an unknown destination address, we
-send the datagram to all ports, and this "flooding"
-will happen unnecessarily often if we have a empty MAC table.
-Therefore, we're going to fill up our MAC table with useful
-entries first, and this is what happens during the learning
-state.
-; : Okay, here we go.
-Pray for us.
-; : Because we took over for this segment, all communication
-towards this segment now goes through this bridge.
-This means that the topology has changed.
-If the topology changes, we must let all bridges now, so that
-they can time out stale MAC address location data quickly.
-This is why we send Topology Change Notification Bridge
-Protocol Data Units (tcn bpdus).
-:
-
-Apparently the root bridge immediately acknowledges this
-tcn bpdu in the next Hello message it sends (the protocol
-requires for the root bridge to acknowledge it), because this
-is the only such message we see.
-
-
-__Note: __In situations where you see loads of these messages,
-it means that the root bridge cannot acknowledge them,
-which probably means your root bridge has a twisted STP
-implementation.
-
-
-
-
-
-; : Hey, something happened again!
-; : Yup... eth3 came back online.
-The root bridge will provide connectivity for this segment
-again, so that we can disable this port.
-; __(12)____(13)__: Same story for eth2, eth1 and eth0.
-; __(11)__: This means the tcn bpdu wasn't acknowledged quick enough.
-That is why it is retransmitted.
-
-
-The root bridge mbb-1 was not so chatty.
-It only reported some topology changes and propagated them as you can
-see in Example 22.
-If somebody can offer a explanation why the root bridge is so quiet in
-messaging please tell me.
-
-
-
-
-__Example 22. mbb-2 Message Output Of Bridge Test__
-
-
-Jun 8 06:06:52 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 8 06:06:52 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 8 06:07:31 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 8 06:07:31 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 8 06:07:32 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 8 06:07:32 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 8 06:08:11 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 8 06:08:11 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 8 06:08:29 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 8 06:08:29 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 8 06:09:03 mbb-1 kernel: mueb: received tcn bpdu on port 2(eth1)
-Jun 8 06:09:03 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 8 06:11:40 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 8 06:11:40 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 8 06:11:41 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 8 06:11:41 mbb-1 kernel: mueb: topology change detected, propagating
-
-
-One of the other bridges tells us that the topology of the LAN
-has changed (see Example 21).
-Well, okay.
-We will set lower timeouts on our MACC table for a short period of
-time, and we will propagate this topology change throughout the
-network.
-
-
-----
-!8.4.2. Kill The Root Bridge Test
-
-The ultimate test is of course a total blocking, breakdown or
-something similar to the root bridge.
-I did this by shooting down the root bridge by
-__init 1__.
-Next I brought it up again with __init 2__.
-Last I pulled all plugs out of the root bridge and waited for some
-time before I placed them again.
-In Example 23 you will see
-the messages from the master-bridge mbb-1, and in
-Example 24 you see what
-happened the same time at the backup-bridge mbb-2.
-
-
-
-
-__Example 23. Test Messages Of Master Bridge mbb-1__
-
-
-Jun 12 13:35:15 mbb-1 init: Switching to runlevel: 1
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 4(eth3) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 3(eth2) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 2(eth1) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 1(eth0) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 2(eth1) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: device eth1 left promiscuous mode
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 1(eth0) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: device eth0 left promiscuous mode
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 4(eth3) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: device eth3 left promiscuous mode
-Jun 12 13:35:20 mbb-1 kernel: mueb: port 3(eth2) entering disabled state
-Jun 12 13:35:20 mbb-1 kernel: device eth2 left promiscuous mode
-Jun 12 13:35:50 mbb-1 init: Switching to runlevel: 2
-Jun 12 13:35:50 mbb-1 kernel: NET4: Ethernet Bridge 008 for NET4.
-Jun 12 13:35:51 mbb-1 kernel: device eth0 entered promiscuous mode
-Jun 12 13:35:51 mbb-1 kernel: device eth1 entered promiscuous mode
-Jun 12 13:35:51 mbb-1 kernel: device eth2 entered promiscuous mode
-Jun 12 13:35:51 mbb-1 kernel: device eth3 entered promiscuous mode
-Jun 12 13:35:51 mbb-1 kernel: mueb: port 4(eth3) entering listening state
-Jun 12 13:35:51 mbb-1 kernel: mueb: port 3(eth2) entering listening state
-Jun 12 13:35:51 mbb-1 kernel: mueb: port 2(eth1) entering listening state
-Jun 12 13:35:51 mbb-1 kernel: mueb: port 1(eth0) entering listening state
-Jun 12 13:35:51 mbb-1 kernel: mueb: received tcn bpdu on port 2(eth1)
-Jun 12 13:35:51 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:52 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 12 13:35:52 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:55 mbb-1 kernel: mueb: port 4(eth3) entering learning state
-Jun 12 13:35:55 mbb-1 kernel: mueb: port 3(eth2) entering learning state
-Jun 12 13:35:55 mbb-1 kernel: mueb: port 2(eth1) entering learning state
-Jun 12 13:35:55 mbb-1 kernel: mueb: port 1(eth0) entering learning state
-Jun 12 13:35:59 mbb-1 kernel: mueb: port 4(eth3) entering forwarding state
-Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:59 mbb-1 kernel: mueb: port 3(eth2) entering forwarding state
-Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:59 mbb-1 kernel: mueb: port 2(eth1) entering forwarding state
-Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:59 mbb-1 kernel: mueb: port 1(eth0) entering forwarding state
-Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 12 13:39:03 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 12 13:39:03 mbb-1 kernel: mueb: topology change detected, propagating
-Jun 12 13:39:05 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
-Jun 12 13:39:05 mbb-1 kernel: mueb: topology change detected, propagating
-
-
-
-
-
-
-__Example 24. Test Messages Of Backup Bridge mbb-2__
-
-
-Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 4(eth3)
-Jun 12 13:35:21 mbb-2 kernel: mueb: port 4(eth3) entering listening state
-Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 3(eth2)
-Jun 12 13:35:21 mbb-2 kernel: mueb: port 3(eth2) entering listening state
-Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 2(eth1)
-Jun 12 13:35:21 mbb-2 kernel: mueb: port 2(eth1) entering listening state
-Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 1(eth0)
-Jun 12 13:35:21 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:25 mbb-2 kernel: mueb: port 4(eth3) entering learning state
-Jun 12 13:35:25 mbb-2 kernel: mueb: port 3(eth2) entering learning state
-Jun 12 13:35:25 mbb-2 kernel: mueb: port 2(eth1) entering learning state
-Jun 12 13:35:29 mbb-2 kernel: mueb: port 4(eth3) entering forwarding state
-Jun 12 13:35:29 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:29 mbb-2 kernel: mueb: port 3(eth2) entering forwarding state
-Jun 12 13:35:29 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:29 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
-Jun 12 13:35:29 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 12 13:35:49 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
-Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, \
-`6bmueb: port 4(eth3) entering blocking state
-Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, \
-`6bmueb: port 2(eth1) entering blocking state
-Jun 12 13:35:50 mbb-2 kernel: mueb: retransmitting tcn bpdu
-Jun 12 13:38:26 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 2(eth1)
-Jun 12 13:38:26 mbb-2 kernel: mueb: port 2(eth1) entering listening state
-Jun 12 13:38:27 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 3(eth2)
-Jun 12 13:38:27 mbb-2 kernel: mueb: port 3(eth2) entering listening state
-Jun 12 13:38:28 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 4(eth3)
-Jun 12 13:38:28 mbb-2 kernel: mueb: port 4(eth3) entering listening state
-Jun 12 13:38:30 mbb-2 kernel: mueb: port 2(eth1) entering learning state
-Jun 12 13:38:30 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 1(eth0)
-Jun 12 13:38:30 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:38:31 mbb-2 kernel: mueb: port 3(eth2) entering learning state
-Jun 12 13:38:32 mbb-2 kernel: mueb: port 4(eth3) entering learning state
-Jun 12 13:38:34 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
-Jun 12 13:38:34 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:38:35 mbb-2 kernel: mueb: port 3(eth2) entering forwarding state
-Jun 12 13:38:35 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:38:36 mbb-2 kernel: mueb: port 4(eth3) entering forwarding state
-Jun 12 13:38:36 mbb-2 kernel: mueb: topology change detected, propagating
-Jun 12 13:39:01 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 12 13:39:01 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
-Jun 12 13:39:01 mbb-2 kernel: mueb: topology change detected, \
-`6bmueb: port 4(eth3) entering blocking state
-Jun 12 13:39:02 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
-Jun 12 13:39:02 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
-
-
-
-
-----
-!!!A. Network Interface Cards
-
-In this section you will find a (for now)
-very incomplete list of NIC's which are known to work
-or known to cause problem.
-For I neither have the money to buy a lot of different
-NIC's, nor I have any connections to hardware vendors,
-I depend on your feedback to keep the list accurate.
-So feel free to mail about success or failure to
-Uwe Böhme.
-
-
-
-
-
-
-
-
-__Valuing Of NIC Information__
-
-; - - -:
-
-Cards I tried and are also reported not to work by other
-people
-
-
-; - -:
-
-Cards I tried or are reported not to work by other people
-
-
-; -:
-
-Cards reported not to work by other people
-
-
-; +:
-
-Cards reported to work by other people
-
-
-; + +:
-
-Cards I tried or are reported to work by other people
-
-
-; + + +:
-
-Cards I tried and are also reported to work by other people
-
-
-
-
-
-
-
-
-__NIC Information__
-
-; 3c509b Etherlink III:
-
-+ +
-
-
-; 3c905b/3c905c:
-
-+ + + Never heard about any problem
-
-
-; HP J2585A:
-
-- - System hang-up after __ifconfig__, unable to run promisc mode
-
-
-; HP J2585B:
-
-+ +
-
-
-; AMD PCnet32 10/100:
-
-+ +
-
-
-; RTL (Realtek) 8029:
-
-+ +
-
-
-----
-!!!B. Recommended Reading
-
-Here you will some recommendations which documents you should read
-before you start to setup a bridge.
-
-
-
-
-
-
-; The bridge home-page:
-
-Will give you recent information about the bridging code and
-the bridge utilities.
-
-
-; http://www.linuxdoc.org/HOWTO/NET3-4-HOWTO:
-
-Describes how to install and configure the Linux networking
-software and associated tools.
-
-
-; http://www.linuxdoc.org//HOWTO/Ethernet-HOWTO:
-
-Information about which Ethernet devices can be used for
-Linux, and how to set them up (focused on the hardware and low
-level driver aspect of the Ethernet cards).
-
-
-----
-!!!C. FAQ
-
-Here you will find some of the frequently asked questions connected
-to bridging.
-
-
-
-!!FAQ; 1. Hardware: ; What hardware do I need to run a bridge with
-2-__n__ NICs.
-; Can you please recommend some tools to measure a 2-port
-linux bridge throughput.
-; 2. Software: ; I'm running with kernel x.x.x.
-Is a patch out there, to give me chance to use this stuff?
-
-!1. Hardware
-
-__ __What hardware do I need to run a bridge with
-2-__n__ NICs.
-
-
-
-
-__ __I think a fat 486 or a modest Pentium should be able to keep
-up with 2x100Mbit pretty well, but I have never tested this.
-I don't think RAM will matter much (8 or 16MB and all should
-be fine).
-CPU will not matter a whole lot either (486/Pentium and all
-should be fine).
-I think the primary contributor is the type of bus (ISA, PCI)
-and the type of network cards (some network cards require less
-"work" than others).
-Big switches usually have immensely fat internal buses (3 or 4
-gigabits is not uncommon).
-Standard PCI, for example, can't keep up with a gigabit ethernet
-cards.
-
-
-
-
-__ __Can you please recommend some tools to measure a 2-port
-linux bridge throughput.
-
-
-
-
-__ __Well, first question is: does it have 100mbit interfaces?
-If it hasn't (10mbit only), it shouldn't have problems with
-keeping up, almost regardless of the processor speed.
-If it does have 100mbit interfaces and you're not sure it will
-keep up, you can run a flood ping with big packets across it
-(__ping -f -s 1450 __ipaddress____)
-and see whether it keeps up.
-
-
-
-!2. Software
-
-__ __I'm running with kernel x.x.x.
-Is a patch out there, to give me chance to use this stuff?
-
-
-
-
-__ __There are patches for and 2.2.14, 2.2.15.
-Since 2.3.47 it's in the mainstream kernel, so you don't need to
-patch.
-If you're talking about others, you will have to upgrade, if you
-need to bridge.
-
-
-__Note: __I've heared unconfirmed roumors about the 2.2.15 patches
-working without any change also with the 2.2.16 kernel
.
-Anyone mind telling me about it?
+Describe
[HowToBRIDGESTPHOWTO
] here.