#!/usr/bin/env atf-sh
. $(atf_get_srcdir)/../common/vnet.subr
atf_test_case "fwd_ip_icmp_iface_fast_success" "cleanup"
fwd_ip_icmp_iface_fast_success_head() {
atf_set descr 'Test valid IPv4 on-stick fastforwarding to iface'
atf_set require.user root
atf_set require.progs python3 scapy
}
fwd_ip_icmp_iface_fast_success_body() {
vnet_init
ip4a="192.0.2.1"
ip4b="192.0.2.2"
plen=29
src_ip="192.0.2.3"
script_name="../common/sender.py"
epair=$(vnet_mkepair)
ifconfig ${epair}a up
ifconfig ${epair}a inet ${ip4a}/${plen}
jname="v4t-fwd_ip_icmp_iface_fast_success"
vnet_mkjail ${jname} ${epair}b
jexec ${jname} ifconfig ${epair}b up
jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
jail_ip=${ip4b}
jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
jexec ${jname} sysctl net.inet.ip.forwarding=1
jexec ${jname} sysctl net.inet.ip.redirect=0
atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
--test_name fwd_ip_icmp_fast \
--smac ${our_mac} --dmac ${jail_mac} \
--sip ${src_ip} --dip ${ip4a} \
--iface ${epair}a
atf_check -o match:'1 packet forwarded \(1 packet fast forwarded\)' jexec ${jname} netstat -sp ip
}
fwd_ip_icmp_iface_fast_success_cleanup() {
vnet_cleanup
}
atf_test_case "fwd_ip_icmp_gw_fast_success" "cleanup"
fwd_ip_icmp_gw_fast_success_head() {
atf_set descr 'Test valid IPv4 on-stick fastforwarding to gw'
atf_set require.user root
atf_set require.progs python3 scapy
}
fwd_ip_icmp_gw_fast_success_body() {
vnet_init
ip4a="192.0.2.1"
ip4b="192.0.2.2"
plen=29
src_ip="192.0.2.3"
dst_ip="192.0.2.4"
script_name="../common/sender.py"
epair=$(vnet_mkepair)
ifconfig ${epair}a up
ifconfig ${epair}a inet ${ip4a}/${plen}
jname="v4t-fwd_ip_icmp_gw_fast_success"
vnet_mkjail ${jname} ${epair}b
jexec ${jname} ifconfig ${epair}b up
jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
jail_ip=${ip4b}
jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
jexec ${jname} sysctl net.inet.ip.forwarding=1
jexec ${jname} sysctl net.inet.ip.redirect=0
jexec ${jname} route -4 add -host ${dst_ip} ${ip4a}
atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
--test_name fwd_ip_icmp_fast \
--smac ${our_mac} --dmac ${jail_mac} \
--sip ${src_ip} --dip ${dst_ip} \
--iface ${epair}a
atf_check -o match:'1 packet forwarded \(1 packet fast forwarded\)' jexec ${jname} netstat -sp ip
}
fwd_ip_icmp_gw_fast_success_cleanup() {
vnet_cleanup
}
atf_test_case "fwd_ip_icmp_iface_slow_success" "cleanup"
fwd_ip_icmp_iface_slow_success_head() {
atf_set descr 'Test valid IPv4 on-stick "slow" forwarding to iface'
atf_set require.user root
atf_set require.progs python3 scapy
}
fwd_ip_icmp_iface_slow_success_body() {
vnet_init
ip4a="192.0.2.1"
ip4b="192.0.2.2"
plen=29
src_ip="192.0.2.3"
script_name="../common/sender.py"
epair=$(vnet_mkepair)
ifconfig ${epair}a up
ifconfig ${epair}a inet ${ip4a}/${plen}
jname="v4t-fwd_ip_icmp_iface_slow_success"
vnet_mkjail ${jname} ${epair}b
jexec ${jname} ifconfig ${epair}b up
jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
jail_ip=${ip4b}
jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
jexec ${jname} sysctl net.inet.ip.forwarding=1
jexec ${jname} sysctl net.inet.ip.redirect=0
atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
--test_name fwd_ip_icmp_slow \
--smac ${our_mac} --dmac ${jail_mac} \
--sip ${src_ip} --dip ${ip4a} \
--iface ${epair}a
atf_check -o match:'1 packet forwarded \(0 packets fast forwarded\)' jexec ${jname} netstat -sp ip
}
fwd_ip_icmp_iface_slow_success_cleanup() {
vnet_cleanup
}
atf_test_case "fwd_ip_icmp_gw_slow_success" "cleanup"
fwd_ip_icmp_gw_slow_success_head() {
atf_set descr 'Test valid IPv4 on-stick "slow" forwarding to gw'
atf_set require.user root
atf_set require.progs python3 scapy
}
fwd_ip_icmp_gw_slow_success_body() {
vnet_init
ip4a="192.0.2.1"
ip4b="192.0.2.2"
plen=29
src_ip="192.0.2.3"
dst_ip="192.0.2.4"
script_name="../common/sender.py"
epair=$(vnet_mkepair)
ifconfig ${epair}a up
ifconfig ${epair}a inet ${ip4a}/${plen}
jname="v4t-fwd_ip_icmp_gw_slow_success"
vnet_mkjail ${jname} ${epair}b
jexec ${jname} ifconfig ${epair}b up
jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
jail_ip=${ip4b}
jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
jexec ${jname} sysctl net.inet.ip.forwarding=1
jexec ${jname} sysctl net.inet.ip.redirect=0
jexec ${jname} route -4 add -host ${dst_ip} ${ip4a}
atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
--test_name fwd_ip_icmp_fast \
--smac ${our_mac} --dmac ${jail_mac} \
--sip ${src_ip} --dip ${dst_ip} \
--iface ${epair}a
atf_check -o match:'1 packet forwarded \(1 packet fast forwarded\)' jexec ${jname} netstat -sp ip
}
fwd_ip_icmp_gw_slow_success_cleanup() {
vnet_cleanup
}
atf_test_case "fwd_ip_blackhole" "cleanup"
fwd_ip_blackhole_head() {
atf_set descr 'Test blackhole routes'
atf_set require.user root
}
fwd_ip_blackhole_body() {
jname="v4t-fwd_ip_blackhole"
vnet_init
epair=$(vnet_mkepair)
epair_out=$(vnet_mkepair)
ifconfig ${epair}a 192.0.2.2/24 up
vnet_mkjail ${jname} ${epair}b ${epair_out}b
jexec ${jname} ifconfig lo0 127.0.0.1/8 up
jexec ${jname} ifconfig ${epair}b 192.0.2.1/24 up
jexec ${jname} ifconfig ${epair_out}b 198.51.100.1/24 up
jexec ${jname} sysctl net.inet.ip.forwarding=1
route add default 192.0.2.1
atf_check -s exit:2 -o ignore \
ping -c 1 -t 1 198.51.100.2
atf_check -s exit:0 -o match:"0 packets not forwardable" \
jexec ${jname} netstat -s -p ip
jexec ${jname} /sbin/route add 198.51.100.2 -blackhole -fib 0
jexec ${jname} netstat -rn
atf_check -s exit:2 -o ignore \
ping -c 1 -t 1 -R 198.51.100.2
atf_check -s exit:0 -o match:"1 packet not forwardable" \
jexec ${jname} netstat -s -p ip
atf_check -s exit:2 -o ignore \
ping -c 1 -t 1 198.51.100.2
atf_check -s exit:0 -o match:"2 packets not forwardable" \
jexec ${jname} netstat -s -p ip
}
fwd_ip_blackhole_cleanup() {
vnet_cleanup
}
atf_init_test_cases()
{
atf_add_test_case "fwd_ip_icmp_iface_fast_success"
atf_add_test_case "fwd_ip_icmp_gw_fast_success"
atf_add_test_case "fwd_ip_icmp_iface_slow_success"
atf_add_test_case "fwd_ip_icmp_gw_slow_success"
atf_add_test_case "fwd_ip_blackhole"
}