2080 lines
48 KiB
HTML
2080 lines
48 KiB
HTML
|
<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 < \
|
|||
|
<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 <uwe@bnhof.de>, 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 && $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, \
|
|||
|
<6>mueb: port 4(eth3) entering blocking state
|
|||
|
Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, \
|
|||
|
<6>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, \
|
|||
|
<6>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"
|
|||
|
> </TD
|
|||
|
><TD
|
|||
|
WIDTH="33%"
|
|||
|
ALIGN="right"
|
|||
|
VALIGN="top"
|
|||
|
>Network Interface Cards</TD
|
|||
|
></TR
|
|||
|
></TABLE
|
|||
|
></DIV
|
|||
|
></BODY
|
|||
|
></HTML
|
|||
|
>
|