Remove tests/sys/netinet/fibs_tests's dependency on net/socat
Instead of bridging two tap interfaces with socat, just use an epair pair. MFC after: 3 weeks Sponsored by: Spectra Logic Corp
This commit is contained in:
parent
84a6eddc43
commit
56a1ced0d5
@ -39,8 +39,7 @@
|
||||
# arpresolve only checked the default route.
|
||||
#
|
||||
# Outline:
|
||||
# Create two tap(4) interfaces
|
||||
# Simulate a crossover cable between them by using net/socat
|
||||
# Create two connected epair(4) interfaces
|
||||
# Use nping (from security/nmap) to send an ICMP echo request from one
|
||||
# interface to the other, spoofing the source IP. The source IP must be
|
||||
# spoofed, or else it will already have an entry in the arp table.
|
||||
@ -51,7 +50,7 @@ arpresolve_checks_interface_fib_head()
|
||||
atf_set "descr" "arpresolve should check the interface fib, not the default fib, for routes"
|
||||
atf_set "require.user" "root"
|
||||
atf_set "require.config" "fibs"
|
||||
atf_set "require.progs" "socat nping"
|
||||
atf_set "require.progs" "nping"
|
||||
}
|
||||
arpresolve_checks_interface_fib_body()
|
||||
{
|
||||
@ -74,19 +73,13 @@ arpresolve_checks_interface_fib_body()
|
||||
fi
|
||||
get_fibs 2
|
||||
|
||||
# Configure TAP interfaces
|
||||
setup_tap "$FIB0" inet ${ADDR0} ${MASK0}
|
||||
TAP0=$TAP
|
||||
setup_tap "$FIB1" inet ${ADDR1} ${MASK1}
|
||||
TAP1=$TAP
|
||||
|
||||
# Simulate a crossover cable
|
||||
socat /dev/${TAP0} /dev/${TAP1} &
|
||||
SOCAT_PID=$!
|
||||
echo ${SOCAT_PID} >> "processes_to_kill"
|
||||
# Configure epair interfaces
|
||||
get_epair
|
||||
setup_iface "$EPAIRA" "$FIB0" inet ${ADDR0} ${MASK0}
|
||||
setup_iface "$EPAIRB" "$FIB1" inet ${ADDR1} ${MASK1}
|
||||
|
||||
# Send an ICMP echo request with a spoofed source IP
|
||||
setfib 2 nping -c 1 -e ${TAP0} -S ${SPOOF_ADDR} \
|
||||
setfib "$FIB0" nping -c 1 -e ${EPAIRA} -S ${SPOOF_ADDR} \
|
||||
--source-mac ${SPOOF_MAC} --icmp --icmp-type "echo-request" \
|
||||
--icmp-code 0 --icmp-id 0xdead --icmp-seq 1 --data 0xbeef \
|
||||
${ADDR1}
|
||||
@ -94,17 +87,11 @@ arpresolve_checks_interface_fib_body()
|
||||
# characteristic error message
|
||||
dmesg | grep "llinfo.*${SPOOF_ADDR}"
|
||||
# Check that the ARP entry exists
|
||||
atf_check -o match:"${SPOOF_ADDR}.*expires" setfib 3 arp ${SPOOF_ADDR}
|
||||
atf_check -o match:"${SPOOF_ADDR}.*expires" setfib "$FIB1" arp ${SPOOF_ADDR}
|
||||
}
|
||||
arpresolve_checks_interface_fib_cleanup()
|
||||
{
|
||||
if [ -f processes_to_kill ]; then
|
||||
for pid in $(cat processes_to_kill); do
|
||||
kill "${pid}"
|
||||
done
|
||||
rm -f processes_to_kill
|
||||
fi
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
|
||||
@ -163,7 +150,7 @@ loopback_and_network_routes_on_nondefault_fib_body()
|
||||
|
||||
loopback_and_network_routes_on_nondefault_fib_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
atf_test_case loopback_and_network_routes_on_nondefault_fib_inet6 cleanup
|
||||
@ -221,7 +208,7 @@ loopback_and_network_routes_on_nondefault_fib_inet6_body()
|
||||
|
||||
loopback_and_network_routes_on_nondefault_fib_inet6_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
|
||||
@ -270,7 +257,7 @@ default_route_with_multiple_fibs_on_same_subnet_body()
|
||||
|
||||
default_route_with_multiple_fibs_on_same_subnet_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
atf_test_case default_route_with_multiple_fibs_on_same_subnet_inet6 cleanup
|
||||
@ -317,7 +304,7 @@ default_route_with_multiple_fibs_on_same_subnet_inet6_body()
|
||||
|
||||
default_route_with_multiple_fibs_on_same_subnet_inet6_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
|
||||
@ -357,7 +344,7 @@ same_ip_multiple_ifaces_fib0_body()
|
||||
}
|
||||
same_ip_multiple_ifaces_fib0_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
# Regression test for PR kern/189088
|
||||
@ -408,7 +395,7 @@ same_ip_multiple_ifaces_cleanup()
|
||||
{
|
||||
# Due to PR kern/189088, we must destroy the interfaces in LIFO order
|
||||
# in order for the routes to be correctly cleaned up.
|
||||
for TAPD in `tail -r "tap_devices_to_cleanup"`; do
|
||||
for TAPD in `tail -r "ifaces_to_cleanup"`; do
|
||||
echo ifconfig ${TAPD} destroy
|
||||
ifconfig ${TAPD} destroy
|
||||
done
|
||||
@ -453,7 +440,7 @@ same_ip_multiple_ifaces_inet6_body()
|
||||
}
|
||||
same_ip_multiple_ifaces_inet6_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
# Regression test for kern/187550
|
||||
@ -491,7 +478,7 @@ subnet_route_with_multiple_fibs_on_same_subnet_body()
|
||||
|
||||
subnet_route_with_multiple_fibs_on_same_subnet_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
atf_test_case subnet_route_with_multiple_fibs_on_same_subnet_inet6 cleanup
|
||||
@ -528,7 +515,7 @@ subnet_route_with_multiple_fibs_on_same_subnet_inet6_body()
|
||||
|
||||
subnet_route_with_multiple_fibs_on_same_subnet_inet6_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
# Test that source address selection works correctly for UDP packets with
|
||||
@ -579,7 +566,7 @@ udp_dontroute_body()
|
||||
# return ENETUNREACH, or send the packet to the wrong tap
|
||||
atf_check -o ignore setfib ${FIB0} \
|
||||
${SRCDIR}/udp_dontroute ${TARGET} /dev/${TARGET_TAP}
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
|
||||
# Repeat, but this time target the other tap
|
||||
setup_tap ${FIB0} inet ${ADDR0} ${MASK}
|
||||
@ -592,7 +579,7 @@ udp_dontroute_body()
|
||||
|
||||
udp_dontroute_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
atf_test_case udp_dontroute6 cleanup
|
||||
@ -634,7 +621,7 @@ udp_dontroute6_body()
|
||||
# return ENETUNREACH, or send the packet to the wrong tap
|
||||
atf_check -o ignore setfib ${FIB0} \
|
||||
${SRCDIR}/udp_dontroute -6 ${TARGET} /dev/${TARGET_TAP}
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
|
||||
# Repeat, but this time target the other tap
|
||||
setup_tap ${FIB0} inet6 ${ADDR0} ${MASK} no_dad
|
||||
@ -647,7 +634,7 @@ udp_dontroute6_body()
|
||||
|
||||
udp_dontroute6_cleanup()
|
||||
{
|
||||
cleanup_tap
|
||||
cleanup_ifaces
|
||||
}
|
||||
|
||||
|
||||
@ -688,22 +675,58 @@ get_fibs()
|
||||
done
|
||||
}
|
||||
|
||||
# Creates a new pair of connected epair(4) interface, registers them for
|
||||
# cleanup, and returns their namen via the environment variables EPAIRA and
|
||||
# EPAIRB
|
||||
get_epair()
|
||||
{
|
||||
local EPAIRD
|
||||
|
||||
if EPAIRD=`ifconfig epair create`; then
|
||||
# Record the TAP device so we can clean it up later
|
||||
echo ${EPAIRD} >> "ifaces_to_cleanup"
|
||||
EPAIRA=${EPAIRD}
|
||||
EPAIRB=${EPAIRD%a}b
|
||||
else
|
||||
atf_skip "Could not create epair(4) interfaces"
|
||||
fi
|
||||
}
|
||||
|
||||
# Creates a new tap(4) interface, registers it for cleanup, and returns the
|
||||
# name via the environment variable TAP
|
||||
get_tap()
|
||||
{
|
||||
local TAPN=0
|
||||
while ! ifconfig tap${TAPN} create > /dev/null 2>&1; do
|
||||
if [ "$TAPN" -ge 8 ]; then
|
||||
atf_skip "Could not create a tap(4) interface"
|
||||
else
|
||||
TAPN=$(($TAPN + 1))
|
||||
fi
|
||||
done
|
||||
local TAPD=tap${TAPN}
|
||||
# Record the TAP device so we can clean it up later
|
||||
echo ${TAPD} >> "tap_devices_to_cleanup"
|
||||
TAP=${TAPD}
|
||||
local TAPD
|
||||
|
||||
if TAPD=`ifconfig tap create`; then
|
||||
# Record the TAP device so we can clean it up later
|
||||
echo ${TAPD} >> "ifaces_to_cleanup"
|
||||
TAP=${TAPD}
|
||||
else
|
||||
atf_skip "Could not create a tap(4) interface"
|
||||
fi
|
||||
}
|
||||
|
||||
# Configure an ethernet interface
|
||||
# parameters:
|
||||
# Interface name
|
||||
# fib
|
||||
# Protocol (inet or inet6)
|
||||
# IP address
|
||||
# Netmask in number of bits (eg 24 or 8)
|
||||
# Extra flags
|
||||
# Return: None
|
||||
setup_iface()
|
||||
{
|
||||
local IFACE=$1
|
||||
local FIB=$2
|
||||
local PROTO=$3
|
||||
local ADDR=$4
|
||||
local MASK=$5
|
||||
local FLAGS=$6
|
||||
echo setfib ${FIB} \
|
||||
ifconfig $IFACE ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS
|
||||
setfib ${FIB} ifconfig $IFACE ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS
|
||||
}
|
||||
|
||||
# Create a tap(4) interface, configure it, and register it for cleanup.
|
||||
@ -716,23 +739,17 @@ get_tap()
|
||||
# Return: the tap interface name as the env variable TAP
|
||||
setup_tap()
|
||||
{
|
||||
local FIB=$1
|
||||
local PROTO=$2
|
||||
local ADDR=$3
|
||||
local MASK=$4
|
||||
local FLAGS=$5
|
||||
get_tap
|
||||
echo setfib ${FIB} ifconfig $TAP ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS
|
||||
setfib ${FIB} ifconfig $TAP ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS
|
||||
setup_iface "$TAP" "$@"
|
||||
}
|
||||
|
||||
cleanup_tap()
|
||||
cleanup_ifaces()
|
||||
{
|
||||
if [ -f tap_devices_to_cleanup ]; then
|
||||
for tap_device in $(cat tap_devices_to_cleanup); do
|
||||
echo ifconfig "${tap_device}" destroy
|
||||
ifconfig "${tap_device}" destroy 2>/dev/null || true
|
||||
if [ -f ifaces_to_cleanup ]; then
|
||||
for iface in $(cat ifaces_to_cleanup); do
|
||||
echo ifconfig "${iface}" destroy
|
||||
ifconfig "${iface}" destroy 2>/dev/null || true
|
||||
done
|
||||
rm -f tap_devices_to_cleanup
|
||||
rm -f ifaces_to_cleanup
|
||||
fi
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user