. $(atf_get_srcdir)/utils.subr
common_dir=$(atf_get_srcdir)/../common
atf_test_case "dummynet" "cleanup"
dummynet_head()
{
atf_set descr 'Test dummynet with match keyword'
atf_set require.user root
}
dummynet_body()
{
dummynet_init
epair=$(vnet_mkepair)
vnet_mkjail alcatraz ${epair}b
ifconfig ${epair}a 192.0.2.1/24 up
jexec alcatraz ifconfig ${epair}b 192.0.2.2/24 up
atf_check -s exit:0 -o ignore ping -i .1 -c 3 -s 1200 192.0.2.2
jexec alcatraz dnctl pipe 1 config bw 30Byte/s
jexec alcatraz pfctl -e
pft_set_rules alcatraz \
"match in dnpipe 1" \
"pass"
atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2
ping -i .1 -c 5 -s 1200 192.0.2.2
atf_check -s exit:2 -o ignore ping -c 1 -s 1200 192.0.2.2
}
dummynet_cleanup()
{
pft_cleanup
}
atf_test_case "quick" "cleanup"
quick_head()
{
atf_set descr 'Test quick on match rules'
atf_set require.user root
}
quick_body()
{
pft_init
epair=$(vnet_mkepair)
vnet_mkjail alcatraz ${epair}b
ifconfig ${epair}a 192.0.2.1/24 up
jexec alcatraz ifconfig ${epair}b 192.0.2.2/24 up
atf_check -s exit:0 -o ignore \
ping -c 1 192.0.2.2
jexec alcatraz pfctl -e
pft_set_rules alcatraz \
"pass" \
"match in quick proto icmp" \
"block"
atf_check -s exit:0 -o ignore \
ping -c 1 192.0.2.2
pft_set_rules alcatraz \
"block" \
"match in quick proto icmp" \
"pass"
atf_check -s exit:2 -o ignore \
ping -c 1 192.0.2.2
}
quick_cleanup()
{
pft_cleanup
}
atf_test_case "allow_opts" "cleanup"
allow_opts_head()
{
atf_set descr 'Test allowing IP options via match'
atf_set require.user root
atf_set require.progs python3 scapy
}
allow_opts_body()
{
pft_init
epair=$(vnet_mkepair)
ifconfig ${epair}b 192.0.2.2/24 up
vnet_mkjail alcatraz ${epair}a
jexec alcatraz ifconfig ${epair}a 192.0.2.1/24 up
jexec alcatraz pfctl -e
jexec alcatraz pfctl -x loud
pft_set_rules alcatraz \
"match proto icmp allow-opts" \
"pass"
atf_check -s exit:0 -o ignore \
ping -c 1 192.0.2.1
atf_check -s exit:0 -o ignore \
${common_dir}/pft_ping.py \
--sendif ${epair}b \
--to 192.0.2.1 \
--send-nop \
--replyif ${epair}b
pft_set_rules alcatraz \
"match proto icmp" \
"pass"
atf_check -s exit:1 -o ignore \
${common_dir}/pft_ping.py \
--sendif ${epair}b \
--to 192.0.2.1 \
--send-nop \
--replyif ${epair}b
pft_set_rules alcatraz \
"pass allow-opts"
atf_check -s exit:0 -o ignore \
${common_dir}/pft_ping.py \
--sendif ${epair}b \
--to 192.0.2.1 \
--send-nop \
--replyif ${epair}b
}
allow_opts_cleanup()
{
pft_cleanup
}
atf_init_test_cases()
{
atf_add_test_case "dummynet"
atf_add_test_case "quick"
atf_add_test_case "allow_opts"
}