171 lines
3 KiB
Bash
Executable file
171 lines
3 KiB
Bash
Executable file
#! /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 ***"
|
|
|