1#! /bin/bash 2BR=${1:-"br549"} 3ETH=${2:-"eth0"} 4maxports=${3:-1000} 5 6echo "Ethernet Bridge functional test" 7 8echo -n "Testing kernel: " ; uname -a 9echo -n "Utilities: " ; brctl -V 10 11# fetch ip of working $ETH 12IP=`/sbin/ifconfig $ETH | sed -n -e 's/^.*inet addr:\([0-9][0-9\.]*\).*$/\1/p'` 13echo "Using IP address $IP" 14 15# All commands in this part must succeed 16set -e 17 18echo "0. Creating $maxports dummy devices" 19modprobe dummy numdummies=$maxports 20 21echo "1. Creating bridge $BR" 22brctl addbr $BR 23brctl stp $BR on 24 25echo "2. Add $ETH" 26ifconfig $ETH 0.0.0.0 27brctl addif $BR $ETH 28 29echo "3. Bring up bridge" 30ifconfig $BR $IP 31 32echo "4 Bring up another bridge" 33brctl addbr "brx%d" 34ifconfig brx0 1.1.1.1 35 36echo "5 Bring down bridge" 37ifconfig brx0 down 38brctl delbr brx0 39 40echo -n "6. Add " $maxports " ports:" 41for (( i=1; i < $maxports; i++)) 42do 43 brctl addif $BR dummy$i 44 if [[ $(( $i % 10 )) -eq 10 ]] 45 then echo -n '.' 46 fi 47done 48echo 49 50echo -n "7. Delete those ports:" 51for (( i=1; i < $maxports; i++)) 52do 53 brctl delif $BR dummy$i 54 if [[ $(( $i % 10 )) -eq 10 ]] 55 then echo -n '.' 56 fi 57done 58echo 59 60echo "8. Notififer cases" 61brctl addif $BR dummy0 62 63echo "8a Device down" 64ifconfig dummy0 down 65 66echo "8b Change device address" 67ifconfig dummy0 hw ether 00:0d:02:03:04:05 68 69echo "8c. Device up" 70ifconfig dummy0 up 71 72echo "8d Unregister device (slow)" 73rmmod dummy 74echo "** Done" 75 76modprobe dummy numdummies=2 77 78set +e 79 80echo "10 Error cases" 81echo -n " duplicate bridge - " 82brctl addbr $BR 83 84echo -n " bridge to bridge - " 85brctl addbr brTmp 86brctl addif $BR brTmp 87 88echo -n " already in other bridge - " 89brctl addif brTmp $ETH 90 91echo -n " already in this bridge - " 92brctl addif $BR $ETH 93 94echo -n " remove from wrong bridge - " 95brctl delif brTmp $ETH 96brctl delbr brTmp 97 98echo -n " remove bridge $ETH - " 99brctl delbr $ETH 100 101echo -n " remove bridge bogus - " 102brctl delbr bogus 103 104echo -n " remove still active bridge - " 105brctl delbr $BR 106 107echo -n " zero hw address - " 108ifconfig dummy0 hw ether 00:00:00:00:00:00 109brctl addif $BR dummy0 110 111echo -n " duplicate hw address - " 112ifconfig dummy0 hw ether 00:0d:01:00:00:00 113ifconfig dummy1 hw ether 00:0d:01:00:00:00 114brctl addif $BR dummy0 115brctl addif $BR dummy1 116# leave dummy0 for next test. 117 118echo "10 Tuning" 119set -e 120brctl stp $BR off 121brctl stp $BR on 122brctl setageing $BR 4000 123brctl setbridgeprio $BR 1 124brctl setfd $BR 120 125brctl sethello $BR 20 126brctl setmaxage $BR 1000 127brctl setpathcost $BR dummy0 50 128brctl setportprio $BR dummy0 2 129 130echo "Status check" 131brctl show 132read -p "Ok?" 133brctl showstp $BR 134read -p "Ok?" 135brctl showmacs $BR 136read -p "Ok?" 137 138 139echo "30 Shutdown" 140ifconfig $BR down 141brctl delbr $BR 142ifconfig $ETH $IP 143 144echo "31 Remove bridge module" 145rmmod bridge 146rmmod dummy 147rmmod bridge 148 149echo "32 Check for dead bridge cleanup" 150brctl addbr $BR 151rmmod bridge 152modprobe bridge 153sleep 1 154 155echo "33 Remove module with race" 156brctl addbr $BR 157ifconfig $BR 9.9.9.9 158 159rmmod --wait bridge & 160sleep 2 161brctl addbr brXX 162if ifconfig brXX 1.1.1.1 ; then 163 echo "?? ifconfig succeeded" 164 ifconfig brXX down 165fi 166 167ifconfig $BR down 168wait 169 170echo "*** Done ***" 171