| #! /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 ***" |
| |