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