xref: /freebsd/tests/sys/netpfil/pf/set_skip.sh (revision 6a88e22728d285c4df17216515ce2b8d1e5a6835)
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