165d553b0SKristof Provost# 24d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause 365d553b0SKristof Provost# 465d553b0SKristof Provost# Copyright (c) 2018 Kristof Provost <kp@FreeBSD.org> 565d553b0SKristof Provost# 665d553b0SKristof Provost# Redistribution and use in source and binary forms, with or without 765d553b0SKristof Provost# modification, are permitted provided that the following conditions 865d553b0SKristof Provost# are met: 965d553b0SKristof Provost# 1. Redistributions of source code must retain the above copyright 1065d553b0SKristof Provost# notice, this list of conditions and the following disclaimer. 1165d553b0SKristof Provost# 2. Redistributions in binary form must reproduce the above copyright 1265d553b0SKristof Provost# notice, this list of conditions and the following disclaimer in the 1365d553b0SKristof Provost# documentation and/or other materials provided with the distribution. 1465d553b0SKristof Provost# 1565d553b0SKristof Provost# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1665d553b0SKristof Provost# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1765d553b0SKristof Provost# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1865d553b0SKristof Provost# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1965d553b0SKristof Provost# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2065d553b0SKristof Provost# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2165d553b0SKristof Provost# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2265d553b0SKristof Provost# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2365d553b0SKristof Provost# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2465d553b0SKristof Provost# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2565d553b0SKristof Provost# SUCH DAMAGE. 269317ba22SKristof Provost 279317ba22SKristof Provost. $(atf_get_srcdir)/utils.subr 289317ba22SKristof Provost 29*6a88e227SKristof Provostatf_test_case "unset" "cleanup" 30*6a88e227SKristof Provostunset_head() 31*6a88e227SKristof Provost{ 32*6a88e227SKristof Provost atf_set descr 'Unset set skip test' 33*6a88e227SKristof Provost atf_set require.user root 34*6a88e227SKristof Provost} 35*6a88e227SKristof Provost 36*6a88e227SKristof Provostunset_body() 37*6a88e227SKristof Provost{ 38*6a88e227SKristof Provost pft_init 39*6a88e227SKristof Provost 40*6a88e227SKristof Provost vnet_mkjail alcatraz 41*6a88e227SKristof Provost jexec alcatraz ifconfig lo0 127.0.0.1/8 up 42*6a88e227SKristof Provost jexec alcatraz pfctl -e 43*6a88e227SKristof Provost pft_set_rules alcatraz "set skip on lo0" \ 44*6a88e227SKristof Provost "block in proto icmp" 45*6a88e227SKristof Provost 46*6a88e227SKristof Provost echo "set skip" 47*6a88e227SKristof Provost jexec alcatraz pfctl -v -sI 48*6a88e227SKristof Provost 49*6a88e227SKristof Provost jexec alcatraz ifconfig 50*6a88e227SKristof Provost atf_check -s exit:0 -o ignore jexec alcatraz ping -c 1 127.0.0.1 51*6a88e227SKristof Provost 52*6a88e227SKristof Provost # Unset the skip on the group 53*6a88e227SKristof Provost pft_set_rules noflush alcatraz \ 54*6a88e227SKristof Provost "block in proto icmp" 55*6a88e227SKristof Provost 56*6a88e227SKristof Provost echo "No setskip" 57*6a88e227SKristof Provost jexec alcatraz pfctl -v -sI 58*6a88e227SKristof Provost 59*6a88e227SKristof Provost # Do flush states 60*6a88e227SKristof Provost jexec alcatraz pfctl -Fs 61*6a88e227SKristof Provost 62*6a88e227SKristof Provost # And now our ping is blocked 63*6a88e227SKristof Provost atf_check -s exit:2 -o ignore jexec alcatraz ping -c 1 127.0.0.1 64*6a88e227SKristof Provost 65*6a88e227SKristof Provost jexec alcatraz pfctl -v -sI 66*6a88e227SKristof Provost} 67*6a88e227SKristof Provost 68*6a88e227SKristof Provostunset_cleanup() 69*6a88e227SKristof Provost{ 70*6a88e227SKristof Provost pft_cleanup 71*6a88e227SKristof Provost} 72*6a88e227SKristof Provost 739317ba22SKristof Provostatf_test_case "set_skip_group" "cleanup" 749317ba22SKristof Provostset_skip_group_head() 759317ba22SKristof Provost{ 769317ba22SKristof Provost atf_set descr 'Basic set skip test' 779317ba22SKristof Provost atf_set require.user root 789317ba22SKristof Provost} 799317ba22SKristof Provost 809317ba22SKristof Provostset_skip_group_body() 819317ba22SKristof Provost{ 829317ba22SKristof Provost # See PR 229241 839317ba22SKristof Provost pft_init 849317ba22SKristof Provost 8506aac31aSKristof Provost vnet_mkjail alcatraz 869317ba22SKristof Provost jexec alcatraz ifconfig lo0 127.0.0.1/8 up 879317ba22SKristof Provost jexec alcatraz ifconfig lo0 group foo 889317ba22SKristof Provost jexec alcatraz pfctl -e 899317ba22SKristof Provost pft_set_rules alcatraz "set skip on foo" \ 909317ba22SKristof Provost "block in proto icmp" 919317ba22SKristof Provost 92*6a88e227SKristof Provost echo "set skip" 93*6a88e227SKristof Provost jexec alcatraz pfctl -v -sI 94*6a88e227SKristof Provost 959317ba22SKristof Provost jexec alcatraz ifconfig 969317ba22SKristof Provost atf_check -s exit:0 -o ignore jexec alcatraz ping -c 1 127.0.0.1 97*6a88e227SKristof Provost 98*6a88e227SKristof Provost # Unset the skip on the group 99*6a88e227SKristof Provost pft_set_rules noflush alcatraz \ 100*6a88e227SKristof Provost "block in proto icmp" 101*6a88e227SKristof Provost 102*6a88e227SKristof Provost # Do flush states 103*6a88e227SKristof Provost jexec alcatraz pfctl -Fs 104*6a88e227SKristof Provost 105*6a88e227SKristof Provost # And now our ping is blocked 106*6a88e227SKristof Provost atf_check -s exit:2 -o ignore jexec alcatraz ping -c 1 127.0.0.1 107*6a88e227SKristof Provost 108*6a88e227SKristof Provost echo "No setskip" 109*6a88e227SKristof Provost jexec alcatraz pfctl -v -sI 1109317ba22SKristof Provost} 1119317ba22SKristof Provost 1129317ba22SKristof Provostset_skip_group_cleanup() 1139317ba22SKristof Provost{ 1149317ba22SKristof Provost pft_cleanup 1159317ba22SKristof Provost} 1169317ba22SKristof Provost 117b9dee1ffSKristof Provostatf_test_case "set_skip_group_lo" "cleanup" 118b9dee1ffSKristof Provostset_skip_group_lo_head() 119b9dee1ffSKristof Provost{ 120b9dee1ffSKristof Provost atf_set descr 'Basic set skip test, lo' 121b9dee1ffSKristof Provost atf_set require.user root 122b9dee1ffSKristof Provost} 123b9dee1ffSKristof Provost 124b9dee1ffSKristof Provostset_skip_group_lo_body() 125b9dee1ffSKristof Provost{ 126b9dee1ffSKristof Provost # See PR 229241 127b9dee1ffSKristof Provost pft_init 128b9dee1ffSKristof Provost 12906aac31aSKristof Provost vnet_mkjail alcatraz 130b9dee1ffSKristof Provost jexec alcatraz ifconfig lo0 127.0.0.1/8 up 131b9dee1ffSKristof Provost jexec alcatraz pfctl -e 132b9dee1ffSKristof Provost pft_set_rules alcatraz "set skip on lo" \ 133b9dee1ffSKristof Provost "block on lo0" 134b9dee1ffSKristof Provost 135b9dee1ffSKristof Provost atf_check -s exit:0 -o ignore jexec alcatraz ping -c 1 127.0.0.1 136b9dee1ffSKristof Provost pft_set_rules noflush alcatraz "set skip on lo" \ 137b9dee1ffSKristof Provost "block on lo0" 138b9dee1ffSKristof Provost atf_check -s exit:0 -o ignore jexec alcatraz ping -c 1 127.0.0.1 139b9dee1ffSKristof Provost jexec alcatraz pfctl -s rules 140b9dee1ffSKristof Provost} 141b9dee1ffSKristof Provost 142b9dee1ffSKristof Provostset_skip_group_lo_cleanup() 143b9dee1ffSKristof Provost{ 144b9dee1ffSKristof Provost pft_cleanup 145b9dee1ffSKristof Provost} 146b9dee1ffSKristof Provost 147e6f9af16SKristof Provostatf_test_case "set_skip_dynamic" "cleanup" 148e6f9af16SKristof Provostset_skip_dynamic_head() 149e6f9af16SKristof Provost{ 150e6f9af16SKristof Provost atf_set descr "Cope with group changes" 151e6f9af16SKristof Provost atf_set require.user root 152e6f9af16SKristof Provost} 153e6f9af16SKristof Provost 154e6f9af16SKristof Provostset_skip_dynamic_body() 155e6f9af16SKristof Provost{ 156e6f9af16SKristof Provost pft_init 157e6f9af16SKristof Provost 158e6f9af16SKristof Provost set -x 159e6f9af16SKristof Provost 160e6f9af16SKristof Provost vnet_mkjail alcatraz 161e6f9af16SKristof Provost jexec alcatraz pfctl -e 162e6f9af16SKristof Provost pft_set_rules alcatraz "set skip on epair" \ 1633a1f834bSDoug Rabson "block on ! lo" 164e6f9af16SKristof Provost 165e6f9af16SKristof Provost epair=$(vnet_mkepair) 166e6f9af16SKristof Provost ifconfig ${epair}a 192.0.2.2/24 up 16780fc2502SGleb Smirnoff vnet_ifmove ${epair}b alcatraz 168e6f9af16SKristof Provost 169e6f9af16SKristof Provost jexec alcatraz ifconfig ${epair}b 192.0.2.1/24 up 170e6f9af16SKristof Provost 171e6f9af16SKristof Provost atf_check -s exit:0 -o ignore jexec alcatraz ping -c 1 192.0.2.2 172e6f9af16SKristof Provost} 173e6f9af16SKristof Provost 174e6f9af16SKristof Provostset_skip_dynamic_cleanup() 175e6f9af16SKristof Provost{ 176e6f9af16SKristof Provost pft_cleanup 177e6f9af16SKristof Provost} 178e6f9af16SKristof Provost 17945db3855SKristof Provostatf_test_case "pr255852" "cleanup" 18045db3855SKristof Provostpr255852_head() 18145db3855SKristof Provost{ 18245db3855SKristof Provost atf_set descr "PR 255852" 18345db3855SKristof Provost atf_set require.user root 18445db3855SKristof Provost} 18545db3855SKristof Provost 18645db3855SKristof Provostpr255852_body() 18745db3855SKristof Provost{ 18845db3855SKristof Provost pft_init 18945db3855SKristof Provost 19045db3855SKristof Provost epair=$(vnet_mkepair) 19145db3855SKristof Provost 19245db3855SKristof Provost ifconfig ${epair}a 192.0.2.1/24 up 19345db3855SKristof Provost 19445db3855SKristof Provost vnet_mkjail alcatraz ${epair}b 19545db3855SKristof Provost jexec alcatraz ifconfig lo0 127.0.0.1/8 up 19645db3855SKristof Provost jexec alcatraz ifconfig ${epair}b 192.0.2.2/24 up 19745db3855SKristof Provost 19845db3855SKristof Provost # Sanity check 19945db3855SKristof Provost atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2 20045db3855SKristof Provost 20145db3855SKristof Provost jexec alcatraz pfctl -e 20245db3855SKristof Provost pft_set_rules alcatraz "set skip on { lo0, epair }" \ 20345db3855SKristof Provost "block" 20445db3855SKristof Provost jexec alcatraz pfctl -vsI 20545db3855SKristof Provost 20645db3855SKristof Provost # We're skipping on epair, so this should work 20745db3855SKristof Provost atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2 20845db3855SKristof Provost 20945db3855SKristof Provost # Note: flushing avoid the issue 21045db3855SKristof Provost pft_set_rules noflush alcatraz "set skip on { lo0 }" \ 21145db3855SKristof Provost "block" 21245db3855SKristof Provost 21345db3855SKristof Provost jexec alcatraz pfctl -vsI 21445db3855SKristof Provost 21545db3855SKristof Provost # No longer skipping, so this should fail 21645db3855SKristof Provost atf_check -s exit:2 -o ignore ping -c 1 -t 1 192.0.2.2 21745db3855SKristof Provost} 21845db3855SKristof Provost 21945db3855SKristof Provostpr255852_cleanup() 22045db3855SKristof Provost{ 22145db3855SKristof Provost pft_cleanup 22245db3855SKristof Provost} 22345db3855SKristof Provost 2249317ba22SKristof Provostatf_init_test_cases() 2259317ba22SKristof Provost{ 226*6a88e227SKristof Provost atf_add_test_case "unset" 2279317ba22SKristof Provost atf_add_test_case "set_skip_group" 228b9dee1ffSKristof Provost atf_add_test_case "set_skip_group_lo" 229e6f9af16SKristof Provost atf_add_test_case "set_skip_dynamic" 23045db3855SKristof Provost atf_add_test_case "pr255852" 2319317ba22SKristof Provost} 232