t_rtable.sh revision 1.7 1 1.7 ozaki # $NetBSD: t_rtable.sh,v 1.7 2019/08/19 03:22:05 ozaki-r Exp $
2 1.1 ozaki #
3 1.1 ozaki # Copyright (c) 2017 Internet Initiative Japan Inc.
4 1.1 ozaki # All rights reserved.
5 1.1 ozaki #
6 1.1 ozaki # Redistribution and use in source and binary forms, with or without
7 1.1 ozaki # modification, are permitted provided that the following conditions
8 1.1 ozaki # are met:
9 1.1 ozaki # 1. Redistributions of source code must retain the above copyright
10 1.1 ozaki # notice, this list of conditions and the following disclaimer.
11 1.1 ozaki # 2. Redistributions in binary form must reproduce the above copyright
12 1.1 ozaki # notice, this list of conditions and the following disclaimer in the
13 1.1 ozaki # documentation and/or other materials provided with the distribution.
14 1.1 ozaki #
15 1.1 ozaki # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16 1.1 ozaki # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 1.1 ozaki # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 1.1 ozaki # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19 1.1 ozaki # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 1.1 ozaki # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 1.1 ozaki # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 1.1 ozaki # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 1.1 ozaki # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 1.1 ozaki # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 1.1 ozaki # POSSIBILITY OF SUCH DAMAGE.
26 1.1 ozaki #
27 1.1 ozaki
28 1.1 ozaki SOCK1=unix://commsock1
29 1.1 ozaki SOCK2=unix://commsock2
30 1.1 ozaki SOCK3=unix://commsock3
31 1.1 ozaki IP1=10.0.0.1
32 1.1 ozaki IP2=10.0.0.2
33 1.1 ozaki
34 1.1 ozaki DEBUG=${DEBUG:-false}
35 1.1 ozaki TIMEOUT=5
36 1.1 ozaki
37 1.1 ozaki setup_endpoint()
38 1.1 ozaki {
39 1.1 ozaki local sock=${1}
40 1.1 ozaki local addr=${2}
41 1.1 ozaki local bus=${3}
42 1.1 ozaki local mode=${4}
43 1.1 ozaki
44 1.1 ozaki rump_server_add_iface $sock shmif0 $bus
45 1.1 ozaki export RUMP_SERVER=${sock}
46 1.1 ozaki if [ $mode = "ipv6" ]; then
47 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
48 1.1 ozaki else
49 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
50 1.1 ozaki fi
51 1.1 ozaki
52 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 up
53 1.1 ozaki $DEBUG && rump.ifconfig shmif0
54 1.1 ozaki }
55 1.1 ozaki
56 1.1 ozaki setup_bridge_server()
57 1.1 ozaki {
58 1.1 ozaki
59 1.1 ozaki rump_server_add_iface $SOCK2 shmif0 bus1
60 1.1 ozaki rump_server_add_iface $SOCK2 shmif1 bus2
61 1.1 ozaki export RUMP_SERVER=$SOCK2
62 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 up
63 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif1 up
64 1.1 ozaki }
65 1.1 ozaki
66 1.1 ozaki setup()
67 1.1 ozaki {
68 1.1 ozaki
69 1.1 ozaki rump_server_start $SOCK1 bridge
70 1.1 ozaki rump_server_start $SOCK2 bridge
71 1.1 ozaki rump_server_start $SOCK3 bridge
72 1.1 ozaki
73 1.1 ozaki setup_endpoint $SOCK1 $IP1 bus1 ipv4
74 1.1 ozaki setup_endpoint $SOCK3 $IP2 bus2 ipv4
75 1.1 ozaki setup_bridge_server
76 1.1 ozaki }
77 1.1 ozaki
78 1.1 ozaki setup_bridge()
79 1.1 ozaki {
80 1.1 ozaki
81 1.1 ozaki export RUMP_SERVER=$SOCK2
82 1.7 ozaki rump_server_add_iface $SOCK2 bridge0
83 1.1 ozaki atf_check -s exit:0 rump.ifconfig bridge0 up
84 1.1 ozaki
85 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
86 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0
87 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1
88 1.1 ozaki /sbin/brconfig bridge0
89 1.1 ozaki unset LD_PRELOAD
90 1.1 ozaki rump.ifconfig shmif0
91 1.1 ozaki rump.ifconfig shmif1
92 1.1 ozaki }
93 1.1 ozaki
94 1.1 ozaki get_number_of_caches()
95 1.1 ozaki {
96 1.1 ozaki
97 1.1 ozaki export RUMP_SERVER=$SOCK2
98 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
99 1.4 ozaki echo $(/sbin/brconfig bridge0 addr |wc -l)
100 1.1 ozaki unset LD_PRELOAD
101 1.1 ozaki }
102 1.1 ozaki
103 1.1 ozaki
104 1.1 ozaki atf_test_case bridge_rtable_basic cleanup
105 1.1 ozaki bridge_rtable_basic_head()
106 1.1 ozaki {
107 1.1 ozaki
108 1.1 ozaki atf_set "descr" "Tests basic opearaions of bridge's learning table"
109 1.1 ozaki atf_set "require.progs" "rump_server"
110 1.1 ozaki }
111 1.1 ozaki
112 1.1 ozaki bridge_rtable_basic_body()
113 1.1 ozaki {
114 1.1 ozaki local addr1= addr3=
115 1.1 ozaki
116 1.1 ozaki setup
117 1.1 ozaki setup_bridge
118 1.1 ozaki
119 1.1 ozaki # Get MAC addresses of the endpoints.
120 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0)
121 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0)
122 1.1 ozaki
123 1.1 ozaki # Confirm there is no MAC address caches.
124 1.1 ozaki export RUMP_SERVER=$SOCK2
125 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
126 1.1 ozaki $DEBUG && /sbin/brconfig bridge0
127 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0
128 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0
129 1.1 ozaki unset LD_PRELOAD
130 1.1 ozaki
131 1.1 ozaki # Make the bridge learn the MAC addresses of the endpoints.
132 1.1 ozaki export RUMP_SERVER=$SOCK1
133 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
134 1.1 ozaki unset RUMP_SERVER
135 1.1 ozaki
136 1.1 ozaki # Tests the addresses are in the cache.
137 1.1 ozaki export RUMP_SERVER=$SOCK2
138 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
139 1.1 ozaki $DEBUG && /sbin/brconfig bridge0
140 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
141 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
142 1.1 ozaki
143 1.1 ozaki # Tests brconfig deladdr
144 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1"
145 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
146 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3"
147 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
148 1.1 ozaki unset LD_PRELOAD
149 1.1 ozaki
150 1.1 ozaki rump_server_destroy_ifaces
151 1.1 ozaki }
152 1.1 ozaki
153 1.1 ozaki bridge_rtable_basic_cleanup()
154 1.1 ozaki {
155 1.1 ozaki
156 1.1 ozaki $DEBUG && dump
157 1.1 ozaki cleanup
158 1.1 ozaki }
159 1.1 ozaki
160 1.1 ozaki
161 1.1 ozaki atf_test_case bridge_rtable_flush cleanup
162 1.1 ozaki bridge_rtable_flush_head()
163 1.1 ozaki {
164 1.1 ozaki
165 1.1 ozaki atf_set "descr" "Tests brconfig flush"
166 1.1 ozaki atf_set "require.progs" "rump_server"
167 1.1 ozaki }
168 1.1 ozaki
169 1.1 ozaki bridge_rtable_flush_body()
170 1.1 ozaki {
171 1.1 ozaki local addr1= addr3=
172 1.3 ozaki local n=
173 1.1 ozaki
174 1.1 ozaki setup
175 1.1 ozaki setup_bridge
176 1.1 ozaki
177 1.1 ozaki # Get MAC addresses of the endpoints.
178 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0)
179 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0)
180 1.1 ozaki
181 1.1 ozaki # Make the bridge learn the MAC addresses of the endpoints.
182 1.1 ozaki export RUMP_SERVER=$SOCK1
183 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
184 1.1 ozaki unset RUMP_SERVER
185 1.1 ozaki
186 1.1 ozaki # Tests the addresses are in the cache.
187 1.1 ozaki export RUMP_SERVER=$SOCK2
188 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
189 1.1 ozaki $DEBUG && /sbin/brconfig bridge0
190 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
191 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
192 1.1 ozaki
193 1.1 ozaki # Tests brconfig flush.
194 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush
195 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
196 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
197 1.1 ozaki unset LD_PRELOAD
198 1.1 ozaki
199 1.3 ozaki # Add extra interfaces and addresses
200 1.3 ozaki export RUMP_SERVER=$SOCK1
201 1.3 ozaki rump_server_add_iface $SOCK1 shmif1 bus1
202 1.3 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24
203 1.3 ozaki atf_check -s exit:0 rump.ifconfig -w 10
204 1.3 ozaki
205 1.3 ozaki export RUMP_SERVER=$SOCK3
206 1.3 ozaki rump_server_add_iface $SOCK3 shmif1 bus2
207 1.3 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.12/24
208 1.3 ozaki atf_check -s exit:0 rump.ifconfig -w 10
209 1.3 ozaki
210 1.3 ozaki # Let cache entries
211 1.3 ozaki export RUMP_SERVER=$SOCK1
212 1.3 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.12
213 1.3 ozaki export RUMP_SERVER=$SOCK3
214 1.3 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.11
215 1.3 ozaki
216 1.3 ozaki export RUMP_SERVER=$SOCK2
217 1.3 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
218 1.3 ozaki $DEBUG && /sbin/brconfig bridge0
219 1.3 ozaki n=$(get_number_of_caches)
220 1.3 ozaki atf_check_equal $n 4
221 1.3 ozaki
222 1.3 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush
223 1.3 ozaki n=$(get_number_of_caches)
224 1.3 ozaki atf_check_equal $n 0
225 1.3 ozaki unset LD_PRELOAD
226 1.3 ozaki
227 1.1 ozaki rump_server_destroy_ifaces
228 1.1 ozaki }
229 1.1 ozaki
230 1.1 ozaki bridge_rtable_flush_cleanup()
231 1.1 ozaki {
232 1.1 ozaki
233 1.1 ozaki $DEBUG && dump
234 1.1 ozaki cleanup
235 1.1 ozaki }
236 1.1 ozaki
237 1.1 ozaki
238 1.1 ozaki atf_test_case bridge_rtable_timeout cleanup
239 1.1 ozaki bridge_rtable_timeout_head()
240 1.1 ozaki {
241 1.1 ozaki
242 1.1 ozaki atf_set "descr" "Tests cache timeout of bridge's learning table"
243 1.1 ozaki atf_set "require.progs" "rump_server"
244 1.1 ozaki }
245 1.1 ozaki
246 1.1 ozaki bridge_rtable_timeout_body()
247 1.1 ozaki {
248 1.1 ozaki local addr1= addr3=
249 1.1 ozaki local timeout=5
250 1.1 ozaki
251 1.1 ozaki setup
252 1.1 ozaki setup_bridge
253 1.1 ozaki
254 1.1 ozaki # Get MAC addresses of the endpoints.
255 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0)
256 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0)
257 1.1 ozaki
258 1.1 ozaki # Tests brconfig timeout.
259 1.1 ozaki export RUMP_SERVER=$SOCK2
260 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
261 1.1 ozaki atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0
262 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout $timeout
263 1.1 ozaki atf_check -s exit:0 -o match:"timeout: $timeout" /sbin/brconfig bridge0
264 1.1 ozaki unset LD_PRELOAD
265 1.1 ozaki
266 1.1 ozaki # Make the bridge learn the MAC addresses of the endpoints.
267 1.1 ozaki export RUMP_SERVER=$SOCK1
268 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
269 1.1 ozaki unset RUMP_SERVER
270 1.1 ozaki
271 1.1 ozaki # Tests the addresses are in the cache.
272 1.1 ozaki export RUMP_SERVER=$SOCK2
273 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
274 1.1 ozaki $DEBUG && /sbin/brconfig bridge0
275 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
276 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
277 1.1 ozaki
278 1.1 ozaki # TODO: cache expiration
279 1.1 ozaki # The initial timeout value of a cache is changed to $timeout and
280 1.1 ozaki # after $timeout elapsed the cache is ready to be sweeped. However,
281 1.1 ozaki # the GC of rtable runs every 5 minutes and the cache remains until
282 1.1 ozaki # then. Should we have a sysctl to change the period?
283 1.1 ozaki
284 1.1 ozaki #sleep $(($timeout + 2))
285 1.1 ozaki #
286 1.1 ozaki ## Tests the addresses are not in the cache.
287 1.1 ozaki #export RUMP_SERVER=$SOCK2
288 1.1 ozaki #export LD_PRELOAD=/usr/lib/librumphijack.so
289 1.1 ozaki #$DEBUG && /sbin/brconfig bridge0
290 1.1 ozaki #atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
291 1.1 ozaki #atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
292 1.1 ozaki
293 1.1 ozaki rump_server_destroy_ifaces
294 1.1 ozaki }
295 1.1 ozaki
296 1.1 ozaki bridge_rtable_timeout_cleanup()
297 1.1 ozaki {
298 1.1 ozaki
299 1.1 ozaki $DEBUG && dump
300 1.1 ozaki cleanup
301 1.1 ozaki }
302 1.1 ozaki
303 1.1 ozaki
304 1.1 ozaki atf_test_case bridge_rtable_maxaddr cleanup
305 1.1 ozaki bridge_rtable_maxaddr_head()
306 1.1 ozaki {
307 1.1 ozaki
308 1.1 ozaki atf_set "descr" "Tests brconfig maxaddr"
309 1.1 ozaki atf_set "require.progs" "rump_server"
310 1.1 ozaki }
311 1.1 ozaki
312 1.1 ozaki bridge_rtable_maxaddr_body()
313 1.1 ozaki {
314 1.1 ozaki local addr1= addr3=
315 1.1 ozaki
316 1.1 ozaki setup
317 1.1 ozaki setup_bridge
318 1.1 ozaki
319 1.1 ozaki # Get MAC addresses of the endpoints.
320 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0)
321 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0)
322 1.1 ozaki
323 1.1 ozaki # Fill the MAC addresses of the endpoints.
324 1.1 ozaki export RUMP_SERVER=$SOCK1
325 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
326 1.1 ozaki export RUMP_SERVER=$SOCK2
327 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
328 1.1 ozaki /sbin/brconfig bridge0
329 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
330 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
331 1.1 ozaki
332 1.1 ozaki # Check the default # of caches is 100
333 1.1 ozaki atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0
334 1.1 ozaki
335 1.1 ozaki # Test two MAC addresses are cached
336 1.1 ozaki n=$(get_number_of_caches)
337 1.1 ozaki atf_check_equal $n 2
338 1.1 ozaki
339 1.1 ozaki # Limit # of caches to one
340 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1
341 1.1 ozaki atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0
342 1.1 ozaki /sbin/brconfig bridge0
343 1.1 ozaki
344 1.6 ozaki # Check a cache is flushed out
345 1.6 ozaki n=$(get_number_of_caches)
346 1.6 ozaki atf_check_equal $n 1
347 1.6 ozaki
348 1.6 ozaki # Test a new address cache is not created
349 1.6 ozaki export RUMP_SERVER=$SOCK1
350 1.6 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
351 1.6 ozaki export RUMP_SERVER=$SOCK2
352 1.1 ozaki n=$(get_number_of_caches)
353 1.1 ozaki atf_check_equal $n 1
354 1.1 ozaki
355 1.1 ozaki # Increase # of caches to two
356 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2
357 1.1 ozaki atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0
358 1.1 ozaki unset LD_PRELOAD
359 1.1 ozaki
360 1.1 ozaki # Test we can cache two addresses again
361 1.1 ozaki export RUMP_SERVER=$SOCK1
362 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
363 1.1 ozaki export RUMP_SERVER=$SOCK2
364 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
365 1.1 ozaki /sbin/brconfig bridge0
366 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
367 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
368 1.1 ozaki unset LD_PRELOAD
369 1.1 ozaki
370 1.1 ozaki rump_server_destroy_ifaces
371 1.1 ozaki }
372 1.1 ozaki
373 1.1 ozaki bridge_rtable_maxaddr_cleanup()
374 1.1 ozaki {
375 1.1 ozaki
376 1.1 ozaki $DEBUG && dump
377 1.1 ozaki cleanup
378 1.1 ozaki }
379 1.1 ozaki
380 1.1 ozaki
381 1.2 ozaki atf_test_case bridge_rtable_delete_member cleanup
382 1.2 ozaki bridge_rtable_delete_member_head()
383 1.2 ozaki {
384 1.2 ozaki
385 1.2 ozaki atf_set "descr" "Tests belonging rtable entries are removed on deleting an interface"
386 1.2 ozaki atf_set "require.progs" "rump_server"
387 1.2 ozaki }
388 1.2 ozaki
389 1.2 ozaki bridge_rtable_delete_member_body()
390 1.2 ozaki {
391 1.2 ozaki local addr10= addr30= addr11= addr31=
392 1.2 ozaki local n=
393 1.2 ozaki
394 1.2 ozaki setup
395 1.2 ozaki setup_bridge
396 1.2 ozaki
397 1.2 ozaki # Add extra interfaces and addresses
398 1.2 ozaki export RUMP_SERVER=$SOCK1
399 1.2 ozaki rump_server_add_iface $SOCK1 shmif1 bus1
400 1.2 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24
401 1.2 ozaki atf_check -s exit:0 rump.ifconfig -w 10
402 1.2 ozaki
403 1.2 ozaki export RUMP_SERVER=$SOCK3
404 1.2 ozaki rump_server_add_iface $SOCK3 shmif1 bus2
405 1.2 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.12/24
406 1.2 ozaki atf_check -s exit:0 rump.ifconfig -w 10
407 1.2 ozaki
408 1.2 ozaki # Get MAC addresses of the endpoints.
409 1.2 ozaki addr10=$(get_macaddr $SOCK1 shmif0)
410 1.2 ozaki addr30=$(get_macaddr $SOCK3 shmif0)
411 1.2 ozaki addr11=$(get_macaddr $SOCK1 shmif1)
412 1.2 ozaki addr31=$(get_macaddr $SOCK3 shmif1)
413 1.2 ozaki
414 1.2 ozaki # Make the bridge learn the MAC addresses of the endpoints.
415 1.2 ozaki export RUMP_SERVER=$SOCK1
416 1.2 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.12
417 1.2 ozaki export RUMP_SERVER=$SOCK3
418 1.2 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.11
419 1.2 ozaki
420 1.2 ozaki export RUMP_SERVER=$SOCK2
421 1.2 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
422 1.2 ozaki $DEBUG && /sbin/brconfig bridge0
423 1.2 ozaki atf_check -s exit:0 -o match:"$addr10 shmif0" /sbin/brconfig bridge0
424 1.2 ozaki atf_check -s exit:0 -o match:"$addr11 shmif0" /sbin/brconfig bridge0
425 1.2 ozaki atf_check -s exit:0 -o match:"$addr30 shmif1" /sbin/brconfig bridge0
426 1.2 ozaki atf_check -s exit:0 -o match:"$addr31 shmif1" /sbin/brconfig bridge0
427 1.2 ozaki
428 1.2 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 delete shmif0
429 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr10 shmif0" /sbin/brconfig bridge0
430 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr11 shmif0" /sbin/brconfig bridge0
431 1.2 ozaki atf_check -s exit:0 -o match:"$addr30 shmif1" /sbin/brconfig bridge0
432 1.2 ozaki atf_check -s exit:0 -o match:"$addr31 shmif1" /sbin/brconfig bridge0
433 1.2 ozaki
434 1.2 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 delete shmif1
435 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr10 shmif0" /sbin/brconfig bridge0
436 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr11 shmif0" /sbin/brconfig bridge0
437 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr30 shmif1" /sbin/brconfig bridge0
438 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr31 shmif1" /sbin/brconfig bridge0
439 1.2 ozaki
440 1.2 ozaki rump_server_destroy_ifaces
441 1.2 ozaki }
442 1.2 ozaki
443 1.2 ozaki bridge_rtable_delete_member_cleanup()
444 1.2 ozaki {
445 1.2 ozaki
446 1.2 ozaki $DEBUG && dump
447 1.2 ozaki cleanup
448 1.2 ozaki }
449 1.2 ozaki
450 1.2 ozaki
451 1.4 ozaki atf_test_case bridge_rtable_manyaddrs cleanup
452 1.4 ozaki bridge_rtable_manyaddrs_head()
453 1.4 ozaki {
454 1.4 ozaki
455 1.4 ozaki atf_set "descr" "Tests brconfig addr under many MAC addresses"
456 1.4 ozaki atf_set "require.progs" "rump_server"
457 1.5 gson atf_set "timeout" "1200"
458 1.4 ozaki }
459 1.4 ozaki
460 1.4 ozaki bridge_rtable_manyaddrs_body()
461 1.4 ozaki {
462 1.4 ozaki local addr=
463 1.4 ozaki
464 1.4 ozaki setup
465 1.4 ozaki setup_bridge
466 1.4 ozaki
467 1.4 ozaki export RUMP_SERVER=$SOCK2
468 1.4 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so
469 1.4 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1024
470 1.4 ozaki
471 1.4 ozaki # Fill the MAC addresses
472 1.4 ozaki for i in 1 2 3 4; do
473 1.4 ozaki for j in $(seq 0 255); do
474 1.4 ozaki addr="00:11:22:33:4$i:$(printf "%02x" $j)"
475 1.4 ozaki atf_check -s exit:0 -o empty \
476 1.4 ozaki /sbin/brconfig bridge0 static shmif0 $addr
477 1.4 ozaki done
478 1.4 ozaki
479 1.4 ozaki n=$(get_number_of_caches)
480 1.4 ozaki atf_check_equal $n $((i * 256))
481 1.4 ozaki done
482 1.4 ozaki
483 1.4 ozaki
484 1.4 ozaki rump_server_destroy_ifaces
485 1.4 ozaki }
486 1.4 ozaki
487 1.4 ozaki bridge_rtable_manyaddrs_cleanup()
488 1.4 ozaki {
489 1.4 ozaki
490 1.4 ozaki $DEBUG && dump
491 1.4 ozaki cleanup
492 1.4 ozaki }
493 1.4 ozaki
494 1.4 ozaki
495 1.1 ozaki atf_init_test_cases()
496 1.1 ozaki {
497 1.1 ozaki
498 1.1 ozaki atf_add_test_case bridge_rtable_basic
499 1.1 ozaki atf_add_test_case bridge_rtable_flush
500 1.1 ozaki atf_add_test_case bridge_rtable_timeout
501 1.1 ozaki atf_add_test_case bridge_rtable_maxaddr
502 1.2 ozaki atf_add_test_case bridge_rtable_delete_member
503 1.4 ozaki atf_add_test_case bridge_rtable_manyaddrs
504 1.1 ozaki # TODO: brconfig static/flushall/discover/learn
505 1.1 ozaki }
506