Lines 166-171
loopback_and_network_routes_on_nondefault_fib_cleanup()
Link Here
|
166 |
cleanup_tap |
166 |
cleanup_tap |
167 |
} |
167 |
} |
168 |
|
168 |
|
|
|
169 |
atf_test_case loopback_and_network_routes_on_nondefault_fib_inet6 cleanup |
170 |
loopback_and_network_routes_on_nondefault_fib_inet6_head() |
171 |
{ |
172 |
atf_set "descr" "When creating and deleting loopback routes, use the interface's fib" |
173 |
atf_set "require.user" "root" |
174 |
atf_set "require.config" "fibs" |
175 |
} |
176 |
|
177 |
loopback_and_network_routes_on_nondefault_fib_inet6_body() |
178 |
{ |
179 |
# Configure the TAP interface to use an RFC5737 nonrouteable address |
180 |
# and a non-default fib |
181 |
ADDR="2001:db8::2" |
182 |
SUBNET="2001:db8::" |
183 |
MASK="64" |
184 |
|
185 |
# Check system configuration |
186 |
if [ 0 != `sysctl -n net.add_addr_allfibs` ]; then |
187 |
atf_skip "This test requires net.add_addr_allfibs=0" |
188 |
fi |
189 |
get_fibs 1 |
190 |
|
191 |
# Configure a TAP interface |
192 |
setup_tap6 ${FIB0} ${ADDR} ${MASK} |
193 |
|
194 |
# Check whether the host route exists in only the correct FIB |
195 |
setfib ${FIB0} netstat -rn -f inet6 | grep -q "^${ADDR}.*UHS.*lo0" |
196 |
if [ 0 -ne $? ]; then |
197 |
setfib ${FIB0} netstat -rn -f inet6 |
198 |
atf_fail "Host route did not appear in the correct FIB" |
199 |
fi |
200 |
setfib 0 netstat -rn -f inet6 | grep -q "^${ADDR}.*UHS.*lo0" |
201 |
if [ 0 -eq $? ]; then |
202 |
setfib 0 netstat -rn -f inet6 |
203 |
atf_fail "Host route appeared in the wrong FIB" |
204 |
fi |
205 |
|
206 |
# Check whether the network route exists in only the correct FIB |
207 |
setfib ${FIB0} netstat -rn -f inet6 | \ |
208 |
grep -q "^${SUBNET}/${MASK}.*${TAPD}" |
209 |
if [ 0 -ne $? ]; then |
210 |
setfib ${FIB0} netstat -rn -f inet6 |
211 |
atf_fail "Network route did not appear in the correct FIB" |
212 |
fi |
213 |
setfib 0 netstat -rn -f inet6 | \ |
214 |
grep -q "^${SUBNET}/${MASK}.*${TAPD}" |
215 |
if [ 0 -eq $? ]; then |
216 |
setfib ${FIB0} netstat -rn -f inet6 |
217 |
atf_fail "Network route appeared in the wrong FIB" |
218 |
fi |
219 |
} |
220 |
|
221 |
loopback_and_network_routes_on_nondefault_fib_inet6_cleanup() |
222 |
{ |
223 |
cleanup_tap |
224 |
} |
225 |
|
169 |
|
226 |
|
170 |
# Regression test for kern/187552 |
227 |
# Regression test for kern/187552 |
171 |
atf_test_case default_route_with_multiple_fibs_on_same_subnet cleanup |
228 |
atf_test_case default_route_with_multiple_fibs_on_same_subnet cleanup |
Lines 215-220
default_route_with_multiple_fibs_on_same_subnet_cleanup()
Link Here
|
215 |
cleanup_tap |
272 |
cleanup_tap |
216 |
} |
273 |
} |
217 |
|
274 |
|
|
|
275 |
atf_test_case default_route_with_multiple_fibs_on_same_subnet_inet6 cleanup |
276 |
default_route_with_multiple_fibs_on_same_subnet_inet6_head() |
277 |
{ |
278 |
atf_set "descr" "Multiple interfaces on the same subnet but with different fibs can both have default routes" |
279 |
atf_set "require.user" "root" |
280 |
atf_set "require.config" "fibs" |
281 |
} |
282 |
|
283 |
default_route_with_multiple_fibs_on_same_subnet_inet6_body() |
284 |
{ |
285 |
# Configure the TAP interfaces to use a RFC5737 nonrouteable addresses |
286 |
# and a non-default fib |
287 |
ADDR0="2001:db8::2" |
288 |
ADDR1="2001:db8::3" |
289 |
GATEWAY="2001:db8::1" |
290 |
SUBNET="2001:db8::" |
291 |
MASK="64" |
292 |
|
293 |
# Check system configuration |
294 |
if [ 0 != `sysctl -n net.add_addr_allfibs` ]; then |
295 |
atf_skip "This test requires net.add_addr_allfibs=0" |
296 |
fi |
297 |
get_fibs 2 |
298 |
|
299 |
# Configure TAP interfaces |
300 |
setup_tap6 "$FIB0" ${ADDR0} ${MASK} |
301 |
TAP0=$TAP |
302 |
setup_tap6 "$FIB1" ${ADDR1} ${MASK} |
303 |
TAP1=$TAP |
304 |
|
305 |
# Attempt to add default routes |
306 |
setfib ${FIB0} route -6 add default ${GATEWAY} |
307 |
setfib ${FIB1} route -6 add default ${GATEWAY} |
308 |
|
309 |
# Verify that the default route exists for both fibs, with their |
310 |
# respective interfaces. |
311 |
atf_check -o match:"^default.*${TAP0}$" \ |
312 |
setfib ${FIB0} netstat -rn -f inet6 |
313 |
atf_check -o match:"^default.*${TAP1}$" \ |
314 |
setfib ${FIB1} netstat -rn -f inet6 |
315 |
} |
316 |
|
317 |
default_route_with_multiple_fibs_on_same_subnet_inet6_cleanup() |
318 |
{ |
319 |
cleanup_tap |
320 |
} |
321 |
|
218 |
|
322 |
|
219 |
# Regression test for PR kern/189089 |
323 |
# Regression test for PR kern/189089 |
220 |
# Create two tap interfaces and assign them both the same IP address but with |
324 |
# Create two tap interfaces and assign them both the same IP address but with |
Lines 308-313
same_ip_multiple_ifaces_cleanup()
Link Here
|
308 |
done |
412 |
done |
309 |
} |
413 |
} |
310 |
|
414 |
|
|
|
415 |
atf_test_case same_ip_multiple_ifaces_inet6 cleanup |
416 |
same_ip_multiple_ifaces_inet6_head() |
417 |
{ |
418 |
atf_set "descr" "Can remove an IP alias from an interface when the same IP is also assigned to another interface, on non-default FIBs." |
419 |
atf_set "require.user" "root" |
420 |
atf_set "require.config" "fibs" |
421 |
} |
422 |
same_ip_multiple_ifaces_inet6_body() |
423 |
{ |
424 |
atf_expect_fail "kern/189088 Assigning the same IP to multiple interfaces in different FIBs creates a host route for only one" |
425 |
ADDR="2001:db8::2" |
426 |
MASK0="64" |
427 |
MASK1="128" |
428 |
|
429 |
# Unlike most of the tests in this file, this is applicable regardless |
430 |
# of net.add_addr_allfibs |
431 |
get_fibs 2 |
432 |
|
433 |
# Setup the interfaces, then remove one alias. It should not panic. |
434 |
setup_tap6 ${FIB0} ${ADDR} ${MASK0} |
435 |
TAP0=${TAP} |
436 |
setup_tap6 ${FIB1} ${ADDR} ${MASK1} |
437 |
TAP1=${TAP} |
438 |
ifconfig ${TAP1} inet6 -alias ${ADDR} |
439 |
atf_check -o not-match:"^${ADDR}[[:space:]]" \ |
440 |
setfib ${FIB1} netstat -rn -f inet6 |
441 |
|
442 |
# Do it again, in the opposite order. It should not panic. |
443 |
setup_tap6 ${FIB0} ${ADDR} ${MASK0} |
444 |
TAP0=${TAP} |
445 |
setup_tap6 ${FIB1} ${ADDR} ${MASK1} |
446 |
TAP1=${TAP} |
447 |
ifconfig ${TAP0} inet6 -alias ${ADDR} |
448 |
atf_check -o not-match:"^${ADDR}[[:space:]]" \ |
449 |
setfib ${FIB0} netstat -rn -f inet6 |
450 |
} |
451 |
same_ip_multiple_ifaces_inet6_cleanup() |
452 |
{ |
453 |
# Due to PR kern/189088, we must destroy the interfaces in LIFO order |
454 |
# in order for the routes to be correctly cleaned up. |
455 |
for TAPD in `tail -r "tap_devices_to_cleanup"`; do |
456 |
ifconfig ${TAPD} destroy |
457 |
done |
458 |
} |
459 |
|
311 |
# Regression test for kern/187550 |
460 |
# Regression test for kern/187550 |
312 |
atf_test_case subnet_route_with_multiple_fibs_on_same_subnet cleanup |
461 |
atf_test_case subnet_route_with_multiple_fibs_on_same_subnet cleanup |
313 |
subnet_route_with_multiple_fibs_on_same_subnet_head() |
462 |
subnet_route_with_multiple_fibs_on_same_subnet_head() |
Lines 346-351
subnet_route_with_multiple_fibs_on_same_subnet_cleanup()
Link Here
|
346 |
cleanup_tap |
495 |
cleanup_tap |
347 |
} |
496 |
} |
348 |
|
497 |
|
|
|
498 |
atf_test_case subnet_route_with_multiple_fibs_on_same_subnet_inet6 cleanup |
499 |
subnet_route_with_multiple_fibs_on_same_subnet_inet6_head() |
500 |
{ |
501 |
atf_set "descr" "Multiple FIBs can have subnet routes for the same subnet" |
502 |
atf_set "require.user" "root" |
503 |
atf_set "require.config" "fibs" |
504 |
} |
505 |
|
506 |
subnet_route_with_multiple_fibs_on_same_subnet_inet6_body() |
507 |
{ |
508 |
# Configure the TAP interfaces to use a RFC5737 nonrouteable addresses |
509 |
# and a non-default fib |
510 |
ADDR0="2001:db8::2" |
511 |
ADDR1="2001:db8::3" |
512 |
SUBNET="2001:db8::" |
513 |
MASK="64" |
514 |
|
515 |
# Check system configuration |
516 |
if [ 0 != `sysctl -n net.add_addr_allfibs` ]; then |
517 |
atf_skip "This test requires net.add_addr_allfibs=0" |
518 |
fi |
519 |
get_fibs 2 |
520 |
|
521 |
# Configure TAP interfaces |
522 |
setup_tap6 "$FIB0" ${ADDR0} ${MASK} |
523 |
setup_tap6 "$FIB1" ${ADDR1} ${MASK} |
524 |
|
525 |
# Check that a subnet route exists on both fibs |
526 |
atf_check -o ignore setfib "$FIB0" route -6 get $ADDR1 |
527 |
atf_check -o ignore setfib "$FIB1" route -6 get $ADDR0 |
528 |
} |
529 |
|
530 |
subnet_route_with_multiple_fibs_on_same_subnet_inet6_cleanup() |
531 |
{ |
532 |
cleanup_tap |
533 |
} |
534 |
|
349 |
# Test that source address selection works correctly for UDP packets with |
535 |
# Test that source address selection works correctly for UDP packets with |
350 |
# SO_DONTROUTE set that are sent on non-default FIBs. |
536 |
# SO_DONTROUTE set that are sent on non-default FIBs. |
351 |
# This bug was discovered with "setfib 1 netperf -t UDP_STREAM -H some_host" |
537 |
# This bug was discovered with "setfib 1 netperf -t UDP_STREAM -H some_host" |
Lines 415-424
atf_init_test_cases()
Link Here
|
415 |
{ |
601 |
{ |
416 |
atf_add_test_case arpresolve_checks_interface_fib |
602 |
atf_add_test_case arpresolve_checks_interface_fib |
417 |
atf_add_test_case loopback_and_network_routes_on_nondefault_fib |
603 |
atf_add_test_case loopback_and_network_routes_on_nondefault_fib |
|
|
604 |
atf_add_test_case loopback_and_network_routes_on_nondefault_fib_inet6 |
418 |
atf_add_test_case default_route_with_multiple_fibs_on_same_subnet |
605 |
atf_add_test_case default_route_with_multiple_fibs_on_same_subnet |
|
|
606 |
atf_add_test_case default_route_with_multiple_fibs_on_same_subnet_inet6 |
419 |
atf_add_test_case same_ip_multiple_ifaces_fib0 |
607 |
atf_add_test_case same_ip_multiple_ifaces_fib0 |
420 |
atf_add_test_case same_ip_multiple_ifaces |
608 |
atf_add_test_case same_ip_multiple_ifaces |
|
|
609 |
atf_add_test_case same_ip_multiple_ifaces_inet6 |
421 |
atf_add_test_case subnet_route_with_multiple_fibs_on_same_subnet |
610 |
atf_add_test_case subnet_route_with_multiple_fibs_on_same_subnet |
|
|
611 |
atf_add_test_case subnet_route_with_multiple_fibs_on_same_subnet_inet6 |
422 |
atf_add_test_case udp_dontroute |
612 |
atf_add_test_case udp_dontroute |
423 |
} |
613 |
} |
424 |
|
614 |
|
Lines 477-486
setup_tap()
Link Here
|
477 |
setfib ${FIB} ifconfig $TAP ${ADDR}/${MASK} fib $FIB |
667 |
setfib ${FIB} ifconfig $TAP ${ADDR}/${MASK} fib $FIB |
478 |
} |
668 |
} |
479 |
|
669 |
|
|
|
670 |
setup_tap6() |
671 |
{ |
672 |
local FIB=$1 |
673 |
local ADDR=$2 |
674 |
local MASK=$3 |
675 |
get_tap |
676 |
echo setfib ${FIB} ifconfig $TAP inet6 ${ADDR}/${MASK} fib $FIB |
677 |
setfib ${FIB} ifconfig $TAP inet6 ${ADDR}/${MASK} fib $FIB |
678 |
} |
679 |
|
480 |
cleanup_tap() |
680 |
cleanup_tap() |
481 |
{ |
681 |
{ |
482 |
if [ -f tap_devices_to_cleanup ]; then |
682 |
if [ -f tap_devices_to_cleanup ]; then |
483 |
for tap_device in $(cat tap_devices_to_cleanup); do |
683 |
for tap_device in $(cat tap_devices_to_cleanup); do |
|
|
684 |
echo ifconfig "${tap_device}" destroy |
484 |
ifconfig "${tap_device}" destroy |
685 |
ifconfig "${tap_device}" destroy |
485 |
done |
686 |
done |
486 |
rm -f tap_devices_to_cleanup |
687 |
rm -f tap_devices_to_cleanup |