blob: a321c59d997164452cbceaac05ac44a9cb98b874 [file] [log] [blame]
#! /bin/bash
BR=${1:-"br549"}
ETH=${2:-"eth0"}
maxports=${3:-1000}
echo "Ethernet Bridge functional test"
echo -n "Testing kernel: " ; uname -a
echo -n "Utilities: " ; brctl -V
# fetch ip of working $ETH
IP=`/sbin/ifconfig $ETH | sed -n -e 's/^.*inet addr:\([0-9][0-9\.]*\).*$/\1/p'`
echo "Using IP address $IP"
# All commands in this part must succeed
set -e
echo "0. Creating $maxports dummy devices"
modprobe dummy numdummies=$maxports
echo "1. Creating bridge $BR"
brctl addbr $BR
brctl stp $BR on
echo "2. Add $ETH"
ifconfig $ETH 0.0.0.0
brctl addif $BR $ETH
echo "3. Bring up bridge"
ifconfig $BR $IP
echo "4 Bring up another bridge"
brctl addbr "brx%d"
ifconfig brx0 1.1.1.1
echo "5 Bring down bridge"
ifconfig brx0 down
brctl delbr brx0
echo -n "6. Add " $maxports " ports:"
for (( i=1; i < $maxports; i++))
do
brctl addif $BR dummy$i
if [[ $(( $i % 10 )) -eq 10 ]]
then echo -n '.'
fi
done
echo
echo -n "7. Delete those ports:"
for (( i=1; i < $maxports; i++))
do
brctl delif $BR dummy$i
if [[ $(( $i % 10 )) -eq 10 ]]
then echo -n '.'
fi
done
echo
echo "8. Notififer cases"
brctl addif $BR dummy0
echo "8a Device down"
ifconfig dummy0 down
echo "8b Change device address"
ifconfig dummy0 hw ether 00:0d:02:03:04:05
echo "8c. Device up"
ifconfig dummy0 up
echo "8d Unregister device (slow)"
rmmod dummy
echo "** Done"
modprobe dummy numdummies=2
set +e
echo "10 Error cases"
echo -n " duplicate bridge - "
brctl addbr $BR
echo -n " bridge to bridge - "
brctl addbr brTmp
brctl addif $BR brTmp
echo -n " already in other bridge - "
brctl addif brTmp $ETH
echo -n " already in this bridge - "
brctl addif $BR $ETH
echo -n " remove from wrong bridge - "
brctl delif brTmp $ETH
brctl delbr brTmp
echo -n " remove bridge $ETH - "
brctl delbr $ETH
echo -n " remove bridge bogus - "
brctl delbr bogus
echo -n " remove still active bridge - "
brctl delbr $BR
echo -n " zero hw address - "
ifconfig dummy0 hw ether 00:00:00:00:00:00
brctl addif $BR dummy0
echo -n " duplicate hw address - "
ifconfig dummy0 hw ether 00:0d:01:00:00:00
ifconfig dummy1 hw ether 00:0d:01:00:00:00
brctl addif $BR dummy0
brctl addif $BR dummy1
# leave dummy0 for next test.
echo "10 Tuning"
set -e
brctl stp $BR off
brctl stp $BR on
brctl setageing $BR 4000
brctl setbridgeprio $BR 1
brctl setfd $BR 120
brctl sethello $BR 20
brctl setmaxage $BR 1000
brctl setpathcost $BR dummy0 50
brctl setportprio $BR dummy0 2
echo "Status check"
brctl show
read -p "Ok?"
brctl showstp $BR
read -p "Ok?"
brctl showmacs $BR
read -p "Ok?"
echo "30 Shutdown"
ifconfig $BR down
brctl delbr $BR
ifconfig $ETH $IP
echo "31 Remove bridge module"
rmmod bridge
rmmod dummy
rmmod bridge
echo "32 Check for dead bridge cleanup"
brctl addbr $BR
rmmod bridge
modprobe bridge
sleep 1
echo "33 Remove module with race"
brctl addbr $BR
ifconfig $BR 9.9.9.9
rmmod --wait bridge &
sleep 2
brctl addbr brXX
if ifconfig brXX 1.1.1.1 ; then
echo "?? ifconfig succeeded"
ifconfig brXX down
fi
ifconfig $BR down
wait
echo "*** Done ***"