old-www/HOWTO/BRIDGE-STP-HOWTO/practical-example.html

2080 lines
48 KiB
HTML
Raw Permalink Blame History

<HTML
><HEAD
><TITLE
>A Practical Setup Example</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.63
"><LINK
REL="HOME"
TITLE="Linux BRIDGE-STP-HOWTO"
HREF="index.html"><LINK
REL="PREVIOUS"
TITLE="Advanced Bridge Features"
HREF="advanced-bridge.html"><LINK
REL="NEXT"
TITLE="Network Interface Cards"
HREF="nic-info.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Linux BRIDGE-STP-HOWTO: About The Linux Modular Bridge And STP</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="advanced-bridge.html"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="nic-info.html"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="PRACTICAL-EXAMPLE"
>8. A Practical Setup Example</A
></H1
><BLOCKQUOTE
CLASS="ABSTRACT"
><DIV
CLASS="ABSTRACT"
><A
NAME="AEN564"
></A
><P
></P
><P
>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.
</P
><P
></P
></DIV
></BLOCKQUOTE
><P
>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.
</P
><P
>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).
</P
><P
>So quite some time ago I successfully set up a bridge
between the two incompatible networks.
Its first hardware-layout is shown in
<A
HREF="practical-example.html#OLD-BRIDGE-HARDWARE-SETUP"
>Figure 1</A
>.
</P
><DIV
CLASS="FIGURE"
><A
NAME="OLD-BRIDGE-HARDWARE-SETUP"
></A
><P
><B
>Figure 1. Hardware setup Of The Old Bridge Scenario</B
></P
><DIV
CLASS="MEDIAOBJECT"
><P
><IMG
SRC="old-hardware-setup.png"
></IMG
><DIV
CLASS="CAPTION"
><P
>The old setup of my previous linux bridge
</P
></DIV
></P
></DIV
></DIV
><P
>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.0.35 from a SuSE 5.3 distribution.
</P
><P
>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.
</P
><P
>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
<A
HREF="advanced-bridge.html#STP"
>Section 7.1</A
> I was more clever.
The new modular bridging code fulfilled exactly what I was looking
for.
</P
><DIV
CLASS="FORMALPARA"
><P
><B
>The new maintainer: Lennert Buytenhek
. </B
>His project page can be found at
<A
HREF="http://www.math.leidenuniv.nl/~buytenh/bridge/"
TARGET="_top"
>http://www.math.leidenuniv.nl/~buytenh/bridge/</A
>
IMHO he's doing a great job. Thanks a lot.
</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN590"
>8.1. Hardware-setup</A
></H2
><P
>The ideas and hints I got from the mailing list discussion shown in
<A
HREF="advanced-bridge.html#STP"
>Section 7.1</A
> lead to a new hardware-setup shown in
<A
HREF="practical-example.html#MULTI-BRIDGE-HARDWARE-SETUP"
>Figure 2</A
>.
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.
</P
><DIV
CLASS="FIGURE"
><A
NAME="MULTI-BRIDGE-HARDWARE-SETUP"
></A
><P
><B
>Figure 2. Hardware Setup Of The Multi bridge Scenario</B
></P
><DIV
CLASS="MEDIAOBJECT"
><P
><IMG
SRC="hardware-setup.png"
></IMG
><DIV
CLASS="CAPTION"
><P
>The practically working setup of my local linux Ethernet multi bridge
</P
></DIV
></P
></DIV
></DIV
><P
>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
<A
HREF="practical-example.html#OLD-BRIDGE-HARDWARE-SETUP"
>Figure 1</A
> 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.
</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN609"
>8.2. Software-setup</A
></H2
><P
>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.
</P
><P
>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
<A
HREF="practical-example.html#APPLY-KERNEL-PATCH"
>Example 11</A
>.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="APPLY-KERNEL-PATCH"
></A
><P
><B
>Example 11. Upgrading The Kernel From 2.2.14 To 2.2.15</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>root@mbb-1:~ # cd /usr/src/linux-2.2.14
root@mbb-1:/usr/src/linux-2.2.14 # patch -p1 \
<TT
CLASS="USERINPUT"
><B
>/usr/local/download/kernel/patch-2.2.15</B
></TT
>
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
</PRE
></TD
></TR
></TABLE
></DIV
><P
>Next step was to apply the bridge-patch as shown in
<A
HREF="practical-example.html#APPLY-BRIDGE-PATCH"
>Example 12</A
>.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="APPLY-BRIDGE-PATCH"
></A
><P
><B
>Example 12. Applying The Kernel Patch</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>root@mbb-1:/usr/src # cd /usr/src/linux-2.2.15
root@mbb-1:/usr/src/linux-2.2.15 # patch -p1 &#60; \
<TT
CLASS="USERINPUT"
><B
>bridge-0.0.5-against-2.2.15.diff</B
></TT
>
patching file ........................
patching file ...................
...
..
</PRE
></TD
></TR
></TABLE
></DIV
><P
>After that I selected the bridging code to be compiled as a
module as shown in
<A
HREF="practical-example.html#MENUCONFIG-BRIDGE-MODULE-SELECTION"
>Example 13</A
>.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="MENUCONFIG-BRIDGE-MODULE-SELECTION"
></A
><P
><B
>Example 13. Configuring The Kernel</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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
..
</PRE
></TD
></TR
></TABLE
></DIV
><P
>By the way I also selected the drivers of my NIC's to be compiled
as modules which resulted to <TT
CLASS="FILENAME"
>3c95x.o</TT
> and
<TT
CLASS="FILENAME"
>hp100.o</TT
>.
</P
><DIV
CLASS="INFORMALEXAMPLE"
><A
NAME="AEN632"
></A
><P
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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
</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
><P
>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.
</P
><P
>The command <B
CLASS="COMMAND"
>modprobe -v bridge</B
> worked
without any warnings, so that one was OK.
Next I edited my <TT
CLASS="FILENAME"
>/etc/modules.conf</TT
> by aliasing
my network card drivers as shown in
<A
HREF="practical-example.html#MODULES-CONF-NIC-SAMPLE-MBB1"
>Example 14</A
> and
<A
HREF="practical-example.html#MODULES-CONF-NIC-SAMPLE-MBB2"
>Example 15</A
>.
I didn't need to make use of the options, all cards where realized
proper as I checked by <B
CLASS="COMMAND"
>cat /proc/modules</B
>,
<B
CLASS="COMMAND"
>cat /proc/interrupts</B
> and
<B
CLASS="COMMAND"
>cat /proc/ioports</B
>.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="MODULES-CONF-NIC-SAMPLE-MBB1"
></A
><P
><B
>Example 14. <TT
CLASS="FILENAME"
>/etc/modules.conf</TT
> of <EM
>mbb-1</EM
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
># Aliases - specify your hardware
alias eth0 3c59x
alias eth1 hp100
alias eth2 hp100
alias eth3 hp100
</PRE
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="EXAMPLE"
><A
NAME="MODULES-CONF-NIC-SAMPLE-MBB2"
></A
><P
><B
>Example 15. <TT
CLASS="FILENAME"
>/etc/modules.conf</TT
> of <EM
>mbb-2</EM
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
># Aliases - specify your hardware
alias eth0 3c509
alias eth1 hp100
alias eth2 hp100
alias eth3 hp100
</PRE
></TD
></TR
></TABLE
></DIV
><P
>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.
<DIV
CLASS="IMPORTANT"
><BLOCKQUOTE
CLASS="IMPORTANT"
><P
><B
>Important: </B
>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.
</P
></BLOCKQUOTE
></DIV
>
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="BRIDGE-INIT-SCRIPT"
></A
><P
><B
>Example 16. Bridge Init Script</B
></P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>#! /bin/bash
# Copyright (c) 2000 Uwe B<>hme. All rights reserved.
#
# Author: Uwe B<>hme &#60;uwe@bnhof.de&#62;, 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 <A
NAME="CREATE-BRIDGE"
><IMG
SRC="../images/callouts/1.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(1)"></A
>
brctl setbridgeprio mueb 0 || return=$rc_failed <A
NAME="SET-ROOT-BRIDGE"
><IMG
SRC="../images/callouts/2.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(2)"></A
>
brctl addif mueb eth0 || return=$rc_failed <A
NAME="ADDIF-ETH0"
><IMG
SRC="../images/callouts/3.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(3)"></A
>
brctl addif mueb eth1 || return=$rc_failed <A
NAME="ADDIF-ETH1"
><IMG
SRC="../images/callouts/4.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(4)"></A
>
brctl addif mueb eth2 || return=$rc_failed <A
NAME="ADDIF-ETH2"
><IMG
SRC="../images/callouts/5.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(5)"></A
>
brctl addif mueb eth3 || return=$rc_failed <A
NAME="ADDIF-ETH3"
><IMG
SRC="../images/callouts/6.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(6)"></A
>
ifconfig eth0 0.0.0.0 || return=$rc_failed <A
NAME="UP-ETH0"
><IMG
SRC="../images/callouts/7.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(7)"></A
>
ifconfig eth1 0.0.0.0 || return=$rc_failed <A
NAME="UP-ETH1"
><IMG
SRC="../images/callouts/8.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(8)"></A
>
ifconfig eth2 0.0.0.0 || return=$rc_failed <A
NAME="UP-ETH2"
><IMG
SRC="../images/callouts/9.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(9)"></A
>
ifconfig eth3 0.0.0.0 || return=$rc_failed <A
NAME="UP-ETH3"
><IMG
SRC="../images/callouts/10.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(10)"></A
>
brctl sethello mueb 1 || return=$rc_failed <A
NAME="HELLO-1"
><B
>(11)</B
></A
>
brctl setmaxage mueb 4 || return=$rc_failed <A
NAME="MAXAGE-4"
><B
>(12)</B
></A
>
brctl setfd mueb 4 || return=$rc_failed <A
NAME="FORWARDDELAY-4"
><B
>(13)</B
></A
>
echo -e "$return"
;;
stop)
echo "Shutting down service bridge mueb"
brctl delif mueb eth3 || return=$rc_failed <A
NAME="DELIF-ETH3"
><B
>(14)</B
></A
>
brctl delif mueb eth2 || return=$rc_failed <A
NAME="DELIF-ETH2"
><B
>(15)</B
></A
>
brctl delif mueb eth1 || return=$rc_failed <A
NAME="DELIF-ETH1"
><B
>(16)</B
></A
>
brctl delif mueb eth0 || return=$rc_failed <A
NAME="DELIF-ETH0"
><B
>(17)</B
></A
>
brctl delbr mueb || return=$rc_failed <A
NAME="DESTROY-BRIDGE"
><B
>(18)</B
></A
>
rmmod bridge || return=$rc_failed <A
NAME="REMOVE-MODULE"
><B
>(19)</B
></A
>
echo -e "$return"
;;
status)
ifconfig mueb
brctl showbr mueb
;;
restart)
$0 stop &#38;&#38; $0 start || return=$rc_failed
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
esac
test "$return" = "$rc_done" || exit 1
exit 0
</PRE
></TD
></TR
></TABLE
>
</P
></DIV
><DIV
CLASS="CALLOUTLIST"
><DL
COMPACT="COMPACT"
><DT
><A
HREF="practical-example.html#CREATE-BRIDGE"
><IMG
SRC="../images/callouts/1.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(1)"></A
></DT
><DD
>This command creates a new virtual interface (bridge instance)
with the name <TT
CLASS="USERINPUT"
><B
>mueb</B
></TT
> and also brings up the
bridge module.
<DIV
CLASS="NOTE"
><BLOCKQUOTE
CLASS="NOTE"
><P
><B
>Note: </B
>At least my system it does.
Maybe you have to enable the kernel module loader.
</P
></BLOCKQUOTE
></DIV
>
</DD
><DT
><A
HREF="practical-example.html#SET-ROOT-BRIDGE"
><IMG
SRC="../images/callouts/2.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(2)"></A
></DT
><DD
>Here the script sets the bridge's priority (relative to
other bridges in the net) to 0.
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.
</DD
><DIV
CLASS="IMPORTANT"
><BLOCKQUOTE
CLASS="IMPORTANT"
><P
><B
>Important: </B
>In the init script of the backup bridge this line in missing,
leaving it with the default priority of 100.
</P
></BLOCKQUOTE
></DIV
><DT
><A
HREF="practical-example.html#ADDIF-ETH0"
><IMG
SRC="../images/callouts/3.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(3)"></A
><A
HREF="practical-example.html#ADDIF-ETH1"
><IMG
SRC="../images/callouts/4.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(4)"></A
><A
HREF="practical-example.html#ADDIF-ETH2"
><IMG
SRC="../images/callouts/5.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(5)"></A
><A
HREF="practical-example.html#ADDIF-ETH3"
><IMG
SRC="../images/callouts/6.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(6)"></A
></DT
><DD
>Enslaves the Ethernet interface to become a port in the
bridge.
</DD
><DT
><A
HREF="practical-example.html#UP-ETH0"
><IMG
SRC="../images/callouts/7.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(7)"></A
><A
HREF="practical-example.html#UP-ETH1"
><IMG
SRC="../images/callouts/8.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(8)"></A
><A
HREF="practical-example.html#UP-ETH2"
><IMG
SRC="../images/callouts/9.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(9)"></A
><A
HREF="practical-example.html#UP-ETH3"
><IMG
SRC="../images/callouts/10.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(10)"></A
></DT
><DD
>Takes away any possibly disturbing IP-address and brings the
interface up.
</DD
><DT
><A
HREF="practical-example.html#HELLO-1"
><B
>(11)</B
></A
></DT
><DD
>Setting the hello time of the bridge to one second makes it
possible to reduce the maxage value of the bridges inside the
network.
</DD
><DT
><A
HREF="practical-example.html#MAXAGE-4"
><B
>(12)</B
></A
></DT
><DD
>Setting the time the a bridge is waiting before starting the
takeover process to a shorter period.
</DD
><DT
><A
HREF="practical-example.html#FORWARDDELAY-4"
><B
>(13)</B
></A
></DT
><DD
>Forcing the bridge to forward earlier than the default time.
</DD
><DT
><A
HREF="practical-example.html#DELIF-ETH3"
><B
>(14)</B
></A
><A
HREF="practical-example.html#DELIF-ETH2"
><B
>(15)</B
></A
><A
HREF="practical-example.html#DELIF-ETH1"
><B
>(16)</B
></A
><A
HREF="practical-example.html#DELIF-ETH0"
><B
>(17)</B
></A
></DT
><DD
>Take the Ethernet out of the bridging instance.
</DD
><DT
><A
HREF="practical-example.html#DESTROY-BRIDGE"
><B
>(18)</B
></A
></DT
><DD
>Destroy the bridge instance.
</DD
><DT
><A
HREF="practical-example.html#REMOVE-MODULE"
><B
>(19)</B
></A
></DT
><DD
>Remove the bridge module.
</DD
></DL
></DIV
><P
>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.
</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="SEE-IT-WORK"
>8.3. See It Work</A
></H2
><P
>Here I want to show and explain about how the running bridge shows
up.
The output <A
HREF="practical-example.html#SAMPLE-BRIDGE-STATUS-MBB1"
>Example 17</A
> of
<EM
>bridge@mbb-1</EM
> is the output of the
primary bridge, while you see in
<A
HREF="practical-example.html#SAMPLE-BRIDGE-STATUS-MBB2"
>Example 18</A
> the output of the backup
bridge waiting to take over.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="SAMPLE-BRIDGE-STATUS-MBB1"
></A
><P
><B
>Example 17. Status Output Of mbb-1 Fully Up</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>mueb
bridge id 0000.0800062815f6
designated root 0000.0800062815f6
root port 0 path cost 0
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 0.80 tcn timer 0.00
topology change timer 0.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 0.00
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.80
flags
eth1 (2)
port id 8002 state forwarding
designated root 0000.0800062815f6 path cost 100
designated bridge 0000.0800062815f6 message age timer 0.00
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.80
flags
eth2 (3)
port id 8003 state forwarding
designated root 0000.0800062815f6 path cost 100
designated bridge 0000.0800062815f6 message age timer 0.00
designated port 8003 forward delay timer 0.00
designated cost 0 hold timer 0.80
flags
eth3 (4)
port id 8004 state forwarding
designated root 0000.0800062815f6 path cost 100
designated bridge 0000.0800062815f6 message age timer 0.00
designated port 8004 forward delay timer 0.00
designated cost 0 hold timer 0.80
flags
</PRE
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="EXAMPLE"
><A
NAME="SAMPLE-BRIDGE-STATUS-MBB2"
></A
><P
><B
>Example 18. Status Output Of mbb-2 Fully Up</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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 0.00 tcn timer 0.00
topology change timer 0.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 0.42
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
eth1 (2)
port id 8002 state blocking
designated root 0000.0800062815f6 path cost 100
designated bridge 0000.0800062815f6 message age timer 0.42
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
eth2 (3)
port id 8003 state blocking
designated root 0000.0800062815f6 path cost 100
designated bridge 0000.0800062815f6 message age timer 0.42
designated port 8003 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
eth3 (4)
port id 8004 state blocking
designated root 0000.0800062815f6 path cost 100
designated bridge 0000.0800062815f6 message age timer 0.42
designated port 8004 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
</PRE
></TD
></TR
></TABLE
></DIV
><P
>If you take a glance into
<TT
CLASS="FILENAME"
>/var/log/messages</TT
> as shown in
<A
HREF="practical-example.html#MESSAGES-FROM-INIT-2-AT-MBB-1"
>Example 19</A
> and in
<A
HREF="practical-example.html#MESSAGES-FROM-INIT-2-AT-MBB-2"
>Example 20</A
> you can see
how the bridges are coming up and deciding how to do their
duty.
<SPAN
CLASS="ACRONYM"
>mbb-1</SPAN
> has a lower value for bridge-priority
(see <A
HREF="set-up-the-bridge.html#BRCTL-SETBRIDGEPRIO"
><A
HREF="set-up-the-bridge.html#BRCTL-SETBRIDGEPRIO"
><IMG
SRC="../images/callouts/9.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(9)"></A
></A
>),
telling it to try to become the root bridge.
As you can see <SPAN
CLASS="ACRONYM"
>mbb-1</SPAN
> forwards all ports,
while <SPAN
CLASS="ACRONYM"
>mbb-2</SPAN
> blocks all ports with the exception
of eth0.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="MESSAGES-FROM-INIT-2-AT-MBB-1"
></A
><P
><B
>Example 19. <SPAN
CLASS="ACRONYM"
>mbb-1</SPAN
> Messages From
<B
CLASS="COMMAND"
>init 2</B
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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.0
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
</PRE
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="EXAMPLE"
><A
NAME="MESSAGES-FROM-INIT-2-AT-MBB-2"
></A
><P
><B
>Example 20. <SPAN
CLASS="ACRONYM"
>mbb-2</SPAN
> Messages From
<B
CLASS="COMMAND"
>init 2</B
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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.0
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
</PRE
></TD
></TR
></TABLE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="BRIDGE-TESTS"
>8.4. Bridge Tests</A
></H2
><P
>To check if really all the promised features are working, I did
some crude test.
The message logs are shown here in.
</P
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="TEAR-THE-PATCH-WIRE-TEST"
>8.4.1. Tear The Patch Wire Test</A
></H3
><P
> 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:
<EM
>It's really working</EM
>.
All the takeovers happened within less then 12 seconds.
</P
><P
>The really interesting messages you can find at
<SPAN
CLASS="ACRONYM"
>mbb-2</SPAN
>.
To see how everything comes up, I stopped network services first.
In <A
HREF="practical-example.html#MBB-2-MESSAGES-OF-BRIDGE-TEST"
>Example 21</A
> you will see
the messages caused by a <B
CLASS="COMMAND"
>init 2</B
> followed
by a <SPAN
CLASS="QUOTE"
>"take out the plug, wait what happens, then place it
back"</SPAN
> in the order eth3, eth2, eth1, eth0 .
</P
><DIV
CLASS="NOTE"
><BLOCKQUOTE
CLASS="NOTE"
><P
><B
>Note: </B
>The thing I did, was making the tests, and publishing the dump.
The one writing the nice explanations was Lennert again.
</P
></BLOCKQUOTE
></DIV
><DIV
CLASS="EXAMPLE"
><A
NAME="MBB-2-MESSAGES-OF-BRIDGE-TEST"
></A
><P
><B
>Example 21. <SPAN
CLASS="ACRONYM"
>mbb-2</SPAN
> Message Output Of Bridge Test</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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.0
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 <A
NAME="SEE-OTHER-BRIDGE"
><IMG
SRC="../images/callouts/1.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(1)"></A
>
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 <A
NAME="KEEP-ONE-INTERFACE"
><IMG
SRC="../images/callouts/2.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(2)"></A
>
Jun 8 06:07:15 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 4(eth3) <A
NAME="PULL-PLUG-ETH3"
><IMG
SRC="../images/callouts/3.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(3)"></A
>
Jun 8 06:07:15 mbb-2 kernel: mueb: port 4(eth3) entering listening state <A
NAME="ENTER-LISTEN-STATE"
><IMG
SRC="../images/callouts/4.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(4)"></A
>
Jun 8 06:07:19 mbb-2 kernel: mueb: port 4(eth3) entering learning state <A
NAME="ENTER-LEARN-STATE"
><IMG
SRC="../images/callouts/5.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(5)"></A
>
Jun 8 06:07:23 mbb-2 kernel: mueb: port 4(eth3) entering forwarding state <A
NAME="ENTER-FORWARD-STATE"
><IMG
SRC="../images/callouts/6.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(6)"></A
>
Jun 8 06:07:23 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu <A
NAME="TOPOLOGY-CHANGE-DETECT"
><IMG
SRC="../images/callouts/7.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(7)"></A
>
Jun 8 06:08:51 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu <A
NAME="TOPOLOGY-CHANGED-AGAIN"
><IMG
SRC="../images/callouts/8.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(8)"></A
>
Jun 8 06:08:51 mbb-2 kernel: mueb: port 4(eth3) entering blocking state <A
NAME="ROOT-IS-BACK"
><IMG
SRC="../images/callouts/9.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(9)"></A
>
Jun 8 06:09:22 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 3(eth2) <A
NAME="FROM-PULL-TO-BACK-ETH2"
><IMG
SRC="../images/callouts/10.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(10)"></A
>
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 <A
NAME="RETRANSMIT-TCN-BPDU"
><B
>(11)</B
></A
>
Jun 8 06:10:41 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 2(eth1) <A
NAME="FROM-PULL-TO-BACK-ETH1"
><B
>(12)</B
></A
>
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) <A
NAME="FROM-PULL-TO-BACK-ETH0"
><B
>(13)</B
></A
>
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
</PRE
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="CALLOUTLIST"
><DL
COMPACT="COMPACT"
><DT
><A
HREF="practical-example.html#SEE-OTHER-BRIDGE"
><IMG
SRC="../images/callouts/1.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(1)"></A
></DT
><DD
>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].
</DD
><DT
><A
HREF="practical-example.html#KEEP-ONE-INTERFACE"
><IMG
SRC="../images/callouts/2.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(2)"></A
></DT
><DD
>To maintain connectivity with the rest of the network, the
bridge decides to keep port 1 (eth0) active (i.e. in the
<SPAN
CLASS="QUOTE"
>"forwarding"</SPAN
> state), and to temporarily disable
ports 2-4.
</DD
><DT
><A
HREF="practical-example.html#PULL-PLUG-ETH3"
><IMG
SRC="../images/callouts/3.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(3)"></A
></DT
><DD
>The plug on eth3 was pulled.
Here you can see that the message age timer expired
(<A
HREF="set-up-the-bridge.html#BRCTL-SETMAXAGE"
><A
HREF="set-up-the-bridge.html#BRCTL-SETMAXAGE"
><B
>(13)</B
></A
></A
>).
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.
</DD
><DT
><A
HREF="practical-example.html#ENTER-LISTEN-STATE"
><IMG
SRC="../images/callouts/4.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(4)"></A
></DT
><DD
>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.
</DD
><DT
><A
HREF="practical-example.html#ENTER-LEARN-STATE"
><IMG
SRC="../images/callouts/5.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(5)"></A
></DT
><DD
>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
<SPAN
CLASS="QUOTE"
>"designated bridge"</SPAN
> for this segment.
We now enter the learning state.
In this state, we only learn <SPAN
CLASS="ACRONYM"
>MAC</SPAN
> 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 <SPAN
CLASS="QUOTE"
>"flooding"</SPAN
>
will happen unnecessarily often if we have a empty <SPAN
CLASS="ACRONYM"
>MAC</SPAN
> table.
Therefore, we're going to fill up our <SPAN
CLASS="ACRONYM"
>MAC</SPAN
> table with useful
entries first, and this is what happens during the learning
state.
</DD
><DT
><A
HREF="practical-example.html#ENTER-FORWARD-STATE"
><IMG
SRC="../images/callouts/6.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(6)"></A
></DT
><DD
>Okay, here we go.
Pray for us.
</DD
><DT
><A
HREF="practical-example.html#TOPOLOGY-CHANGE-DETECT"
><IMG
SRC="../images/callouts/7.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(7)"></A
></DT
><DD
>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 <SPAN
CLASS="ACRONYM"
>MAC</SPAN
> address location data quickly.
This is why we send Topology Change Notification Bridge
Protocol Data Units (tcn bpdus).
</DD
><DD
><P
>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.
<DIV
CLASS="NOTE"
><BLOCKQUOTE
CLASS="NOTE"
><P
><B
>Note: </B
>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.
</P
></BLOCKQUOTE
></DIV
>
</P
></DD
><DT
><A
HREF="practical-example.html#TOPOLOGY-CHANGED-AGAIN"
><IMG
SRC="../images/callouts/8.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(8)"></A
></DT
><DD
>Hey, something happened again!
</DD
><DT
><A
HREF="practical-example.html#ROOT-IS-BACK"
><IMG
SRC="../images/callouts/9.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(9)"></A
></DT
><DD
>Yup... eth3 came back online.
The root bridge will provide connectivity for this segment
again, so that we can disable this port.
</DD
><DT
><A
HREF="practical-example.html#FROM-PULL-TO-BACK-ETH2"
><IMG
SRC="../images/callouts/10.gif"
HSPACE="0"
VSPACE="0"
BORDER="0"
ALT="(10)"></A
><A
HREF="practical-example.html#FROM-PULL-TO-BACK-ETH1"
><B
>(12)</B
></A
><A
HREF="practical-example.html#FROM-PULL-TO-BACK-ETH0"
><B
>(13)</B
></A
></DT
><DD
>Same story for eth2, eth1 and eth0.
</DD
><DT
><A
HREF="practical-example.html#RETRANSMIT-TCN-BPDU"
><B
>(11)</B
></A
></DT
><DD
>This means the tcn bpdu wasn't acknowledged quick enough.
That is why it is retransmitted.
</DD
></DL
></DIV
><P
>The root bridge <SPAN
CLASS="ACRONYM"
>mbb-1</SPAN
> was not so chatty.
It only reported some topology changes and propagated them as you can
see in <A
HREF="practical-example.html#MBB-1-MESSAGES-OF-BRIDGE-TEST"
>Example 22</A
>.
If somebody can offer a explanation why the root bridge is so quiet in
messaging please <A
HREF="mailto:uwe@bnhof"
TARGET="_top"
>tell me</A
>.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="MBB-1-MESSAGES-OF-BRIDGE-TEST"
></A
><P
><B
>Example 22. <SPAN
CLASS="ACRONYM"
>mbb-2</SPAN
> Message Output Of Bridge Test</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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
</PRE
></TD
></TR
></TABLE
><P
>One of the other bridges tells us that the topology of the LAN
has changed (see <A
HREF="practical-example.html#MBB-2-MESSAGES-OF-BRIDGE-TEST"
>Example 21</A
>).
Well, okay.
We will set lower timeouts on our <SPAN
CLASS="ACRONYM"
>MAC</SPAN
>C table for a short period of
time, and we will propagate this topology change throughout the
network.
</P
></DIV
></DIV
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="KILL-THE-ROOT-BRIDGE-TEST"
>8.4.2. Kill The Root Bridge Test</A
></H3
><P
>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
<B
CLASS="COMMAND"
>init 1</B
>.
Next I brought it up again with <B
CLASS="COMMAND"
>init 2</B
>.
Last I pulled all plugs out of the root bridge and waited for some
time before I placed them again.
In <A
HREF="practical-example.html#TEST-MESSAGES-OF-MASTER-BRIDGE"
>Example 23</A
> you will see
the messages from the master-bridge mbb-1, and in
<A
HREF="practical-example.html#TEST-MESSAGES-OF-BACKUP-BRIDGE"
>Example 24</A
> you see what
happened the same time at the backup-bridge mbb-2.
</P
><DIV
CLASS="EXAMPLE"
><A
NAME="TEST-MESSAGES-OF-MASTER-BRIDGE"
></A
><P
><B
>Example 23. Test Messages Of Master Bridge <SPAN
CLASS="ACRONYM"
>mbb-1</SPAN
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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.0
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
</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
><DIV
CLASS="EXAMPLE"
><A
NAME="TEST-MESSAGES-OF-BACKUP-BRIDGE"
></A
><P
><B
>Example 24. Test Messages Of Backup Bridge <SPAN
CLASS="ACRONYM"
>mbb-2</SPAN
></B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="SCREEN"
>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, \
&#60;6&#62;mueb: port 4(eth3) entering blocking state
Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, \
&#60;6&#62;mueb: 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, \
&#60;6&#62;mueb: 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
</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="advanced-bridge.html"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="nic-info.html"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Advanced Bridge Features</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Network Interface Cards</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>