xref: /freebsd/tests/sys/netinet/forward.sh (revision c46af893cd7aaff322b6f867539bc8fe5bcde6f9)
1d7cdd897SAlexander V. Chernikov#!/usr/bin/env atf-sh
2d7cdd897SAlexander V. Chernikov#-
3d7cdd897SAlexander V. Chernikov# SPDX-License-Identifier: BSD-2-Clause
4d7cdd897SAlexander V. Chernikov#
5d7cdd897SAlexander V. Chernikov# Copyright (c) 2020 Alexander V. Chernikov
6d7cdd897SAlexander V. Chernikov#
7d7cdd897SAlexander V. Chernikov# Redistribution and use in source and binary forms, with or without
8d7cdd897SAlexander V. Chernikov# modification, are permitted provided that the following conditions
9d7cdd897SAlexander V. Chernikov# are met:
10d7cdd897SAlexander V. Chernikov# 1. Redistributions of source code must retain the above copyright
11d7cdd897SAlexander V. Chernikov#    notice, this list of conditions and the following disclaimer.
12d7cdd897SAlexander V. Chernikov# 2. Redistributions in binary form must reproduce the above copyright
13d7cdd897SAlexander V. Chernikov#    notice, this list of conditions and the following disclaimer in the
14d7cdd897SAlexander V. Chernikov#    documentation and/or other materials provided with the distribution.
15d7cdd897SAlexander V. Chernikov#
16d7cdd897SAlexander V. Chernikov# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17d7cdd897SAlexander V. Chernikov# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18d7cdd897SAlexander V. Chernikov# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19d7cdd897SAlexander V. Chernikov# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20d7cdd897SAlexander V. Chernikov# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21d7cdd897SAlexander V. Chernikov# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22d7cdd897SAlexander V. Chernikov# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23d7cdd897SAlexander V. Chernikov# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24d7cdd897SAlexander V. Chernikov# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25d7cdd897SAlexander V. Chernikov# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26d7cdd897SAlexander V. Chernikov# SUCH DAMAGE.
27d7cdd897SAlexander V. Chernikov#
28d7cdd897SAlexander V. Chernikov#
29d7cdd897SAlexander V. Chernikov
30d7cdd897SAlexander V. Chernikov. $(atf_get_srcdir)/../common/vnet.subr
31d7cdd897SAlexander V. Chernikov
32d7cdd897SAlexander V. Chernikovatf_test_case "fwd_ip_icmp_iface_fast_success" "cleanup"
33d7cdd897SAlexander V. Chernikovfwd_ip_icmp_iface_fast_success_head() {
34d7cdd897SAlexander V. Chernikov
35d7cdd897SAlexander V. Chernikov	atf_set descr 'Test valid IPv4 on-stick fastforwarding to iface'
36d7cdd897SAlexander V. Chernikov	atf_set require.user root
37*c46af893SJose Luis Duran	atf_set require.progs python3 scapy
38d7cdd897SAlexander V. Chernikov}
39d7cdd897SAlexander V. Chernikov
40d7cdd897SAlexander V. Chernikovfwd_ip_icmp_iface_fast_success_body() {
41d7cdd897SAlexander V. Chernikov
42d7cdd897SAlexander V. Chernikov	vnet_init
43d7cdd897SAlexander V. Chernikov
44d7cdd897SAlexander V. Chernikov	ip4a="192.0.2.1"
45d7cdd897SAlexander V. Chernikov	ip4b="192.0.2.2"
46d7cdd897SAlexander V. Chernikov	plen=29
47d7cdd897SAlexander V. Chernikov	src_ip="192.0.2.3"
48d7cdd897SAlexander V. Chernikov
49d7cdd897SAlexander V. Chernikov	script_name="../common/sender.py"
50d7cdd897SAlexander V. Chernikov
51d7cdd897SAlexander V. Chernikov	epair=$(vnet_mkepair)
52d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a up
53d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a inet ${ip4a}/${plen}
54d7cdd897SAlexander V. Chernikov
55d7cdd897SAlexander V. Chernikov	jname="v4t-fwd_ip_icmp_iface_fast_success"
56d7cdd897SAlexander V. Chernikov	vnet_mkjail ${jname} ${epair}b
57d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b up
58d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
59d7cdd897SAlexander V. Chernikov
60d7cdd897SAlexander V. Chernikov	# Get router ip/mac
61d7cdd897SAlexander V. Chernikov	jail_ip=${ip4b}
62d7cdd897SAlexander V. Chernikov	jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
63d7cdd897SAlexander V. Chernikov
64d7cdd897SAlexander V. Chernikov	our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
65d7cdd897SAlexander V. Chernikov
66d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.forwarding=1
67d7cdd897SAlexander V. Chernikov	# As we're doing router-on-the-stick, turn sending IP redirects off:
68d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.redirect=0
69d7cdd897SAlexander V. Chernikov
70d7cdd897SAlexander V. Chernikov	# echo "LOCAL: ${local_ip} ${local_mac}"
71d7cdd897SAlexander V. Chernikov	# echo "REMOTE: ${remote_rtr_ip} ${remote_rtr_mac}"
72d7cdd897SAlexander V. Chernikov
73d7cdd897SAlexander V. Chernikov	atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
74d7cdd897SAlexander V. Chernikov		--test_name fwd_ip_icmp_fast \
75d7cdd897SAlexander V. Chernikov		--smac ${our_mac} --dmac ${jail_mac} \
76d7cdd897SAlexander V. Chernikov		--sip ${src_ip} --dip ${ip4a} \
77d7cdd897SAlexander V. Chernikov		--iface ${epair}a
78d7cdd897SAlexander V. Chernikov
79d7cdd897SAlexander V. Chernikov	# check counters are valid
80d7cdd897SAlexander V. Chernikov	atf_check -o match:'1 packet forwarded \(1 packet fast forwarded\)' jexec ${jname} netstat -sp ip
81d7cdd897SAlexander V. Chernikov}
82d7cdd897SAlexander V. Chernikov
83d7cdd897SAlexander V. Chernikovfwd_ip_icmp_iface_fast_success_cleanup() {
84d7cdd897SAlexander V. Chernikov
85d7cdd897SAlexander V. Chernikov	vnet_cleanup
86d7cdd897SAlexander V. Chernikov}
87d7cdd897SAlexander V. Chernikov
88d7cdd897SAlexander V. Chernikovatf_test_case "fwd_ip_icmp_gw_fast_success" "cleanup"
89d7cdd897SAlexander V. Chernikovfwd_ip_icmp_gw_fast_success_head() {
90d7cdd897SAlexander V. Chernikov
91d7cdd897SAlexander V. Chernikov	atf_set descr 'Test valid IPv4 on-stick fastforwarding to gw'
92d7cdd897SAlexander V. Chernikov	atf_set require.user root
93*c46af893SJose Luis Duran	atf_set require.progs python3 scapy
94d7cdd897SAlexander V. Chernikov}
95d7cdd897SAlexander V. Chernikov
96d7cdd897SAlexander V. Chernikovfwd_ip_icmp_gw_fast_success_body() {
97d7cdd897SAlexander V. Chernikov
98d7cdd897SAlexander V. Chernikov	vnet_init
99d7cdd897SAlexander V. Chernikov
100d7cdd897SAlexander V. Chernikov	ip4a="192.0.2.1"
101d7cdd897SAlexander V. Chernikov	ip4b="192.0.2.2"
102d7cdd897SAlexander V. Chernikov	plen=29
103d7cdd897SAlexander V. Chernikov	src_ip="192.0.2.3"
104d7cdd897SAlexander V. Chernikov	dst_ip="192.0.2.4"
105d7cdd897SAlexander V. Chernikov
106d7cdd897SAlexander V. Chernikov	script_name="../common/sender.py"
107d7cdd897SAlexander V. Chernikov
108d7cdd897SAlexander V. Chernikov	epair=$(vnet_mkepair)
109d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a up
110d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a inet ${ip4a}/${plen}
111d7cdd897SAlexander V. Chernikov
112d7cdd897SAlexander V. Chernikov	jname="v4t-fwd_ip_icmp_gw_fast_success"
113d7cdd897SAlexander V. Chernikov	vnet_mkjail ${jname} ${epair}b
114d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b up
115d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
116d7cdd897SAlexander V. Chernikov
117d7cdd897SAlexander V. Chernikov	# Get router ip/mac
118d7cdd897SAlexander V. Chernikov	jail_ip=${ip4b}
119d7cdd897SAlexander V. Chernikov	jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
120d7cdd897SAlexander V. Chernikov
121d7cdd897SAlexander V. Chernikov	our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
122d7cdd897SAlexander V. Chernikov
123d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.forwarding=1
124d7cdd897SAlexander V. Chernikov	# As we're doing router-on-the-stick, turn sending IP redirects off:
125d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.redirect=0
126d7cdd897SAlexander V. Chernikov
127d7cdd897SAlexander V. Chernikov	# Add host route
128d7cdd897SAlexander V. Chernikov	jexec ${jname} route -4 add -host ${dst_ip} ${ip4a}
129d7cdd897SAlexander V. Chernikov
130d7cdd897SAlexander V. Chernikov	# echo "LOCAL: ${local_ip} ${local_mac}"
131d7cdd897SAlexander V. Chernikov	# echo "REMOTE: ${remote_rtr_ip} ${remote_rtr_mac}"
132d7cdd897SAlexander V. Chernikov
133d7cdd897SAlexander V. Chernikov	atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
134d7cdd897SAlexander V. Chernikov		--test_name fwd_ip_icmp_fast \
135d7cdd897SAlexander V. Chernikov		--smac ${our_mac} --dmac ${jail_mac} \
136d7cdd897SAlexander V. Chernikov		--sip ${src_ip} --dip ${dst_ip} \
137d7cdd897SAlexander V. Chernikov		--iface ${epair}a
138d7cdd897SAlexander V. Chernikov
139d7cdd897SAlexander V. Chernikov	# check counters are valid
140d7cdd897SAlexander V. Chernikov	atf_check -o match:'1 packet forwarded \(1 packet fast forwarded\)' jexec ${jname} netstat -sp ip
141d7cdd897SAlexander V. Chernikov}
142d7cdd897SAlexander V. Chernikov
143d7cdd897SAlexander V. Chernikovfwd_ip_icmp_gw_fast_success_cleanup() {
144d7cdd897SAlexander V. Chernikov
145d7cdd897SAlexander V. Chernikov	vnet_cleanup
146d7cdd897SAlexander V. Chernikov}
147d7cdd897SAlexander V. Chernikov
148d7cdd897SAlexander V. Chernikovatf_test_case "fwd_ip_icmp_iface_slow_success" "cleanup"
149d7cdd897SAlexander V. Chernikovfwd_ip_icmp_iface_slow_success_head() {
150d7cdd897SAlexander V. Chernikov
151d7cdd897SAlexander V. Chernikov	atf_set descr 'Test valid IPv4 on-stick "slow" forwarding to iface'
152d7cdd897SAlexander V. Chernikov	atf_set require.user root
153*c46af893SJose Luis Duran	atf_set require.progs python3 scapy
154d7cdd897SAlexander V. Chernikov}
155d7cdd897SAlexander V. Chernikov
156d7cdd897SAlexander V. Chernikovfwd_ip_icmp_iface_slow_success_body() {
157d7cdd897SAlexander V. Chernikov
158d7cdd897SAlexander V. Chernikov	vnet_init
159d7cdd897SAlexander V. Chernikov
160d7cdd897SAlexander V. Chernikov	ip4a="192.0.2.1"
161d7cdd897SAlexander V. Chernikov	ip4b="192.0.2.2"
162d7cdd897SAlexander V. Chernikov	plen=29
163d7cdd897SAlexander V. Chernikov	src_ip="192.0.2.3"
164d7cdd897SAlexander V. Chernikov
165d7cdd897SAlexander V. Chernikov	script_name="../common/sender.py"
166d7cdd897SAlexander V. Chernikov
167d7cdd897SAlexander V. Chernikov	epair=$(vnet_mkepair)
168d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a up
169d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a inet ${ip4a}/${plen}
170d7cdd897SAlexander V. Chernikov
171d7cdd897SAlexander V. Chernikov	jname="v4t-fwd_ip_icmp_iface_slow_success"
172d7cdd897SAlexander V. Chernikov	vnet_mkjail ${jname} ${epair}b
173d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b up
174d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
175d7cdd897SAlexander V. Chernikov
176d7cdd897SAlexander V. Chernikov	# Get router ip/mac
177d7cdd897SAlexander V. Chernikov	jail_ip=${ip4b}
178d7cdd897SAlexander V. Chernikov	jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
179d7cdd897SAlexander V. Chernikov
180d7cdd897SAlexander V. Chernikov	our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
181d7cdd897SAlexander V. Chernikov
182d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.forwarding=1
183d7cdd897SAlexander V. Chernikov	# As we're doing router-on-the-stick, turn sending IP redirects off:
184d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.redirect=0
185d7cdd897SAlexander V. Chernikov
186d7cdd897SAlexander V. Chernikov	# Generate packet with options to force slow-path
187d7cdd897SAlexander V. Chernikov	atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
188d7cdd897SAlexander V. Chernikov		--test_name fwd_ip_icmp_slow \
189d7cdd897SAlexander V. Chernikov		--smac ${our_mac} --dmac ${jail_mac} \
190d7cdd897SAlexander V. Chernikov		--sip ${src_ip} --dip ${ip4a} \
191d7cdd897SAlexander V. Chernikov		--iface ${epair}a
192d7cdd897SAlexander V. Chernikov
193d7cdd897SAlexander V. Chernikov	# check counters are valid
194d7cdd897SAlexander V. Chernikov	atf_check -o match:'1 packet forwarded \(0 packets fast forwarded\)' jexec ${jname} netstat -sp ip
195d7cdd897SAlexander V. Chernikov}
196d7cdd897SAlexander V. Chernikov
197d7cdd897SAlexander V. Chernikovfwd_ip_icmp_iface_slow_success_cleanup() {
198d7cdd897SAlexander V. Chernikov
199d7cdd897SAlexander V. Chernikov	vnet_cleanup
200d7cdd897SAlexander V. Chernikov}
201d7cdd897SAlexander V. Chernikov
202d7cdd897SAlexander V. Chernikovatf_test_case "fwd_ip_icmp_gw_slow_success" "cleanup"
203d7cdd897SAlexander V. Chernikovfwd_ip_icmp_gw_slow_success_head() {
204d7cdd897SAlexander V. Chernikov
205d7cdd897SAlexander V. Chernikov	atf_set descr 'Test valid IPv4 on-stick "slow" forwarding to gw'
206d7cdd897SAlexander V. Chernikov	atf_set require.user root
207*c46af893SJose Luis Duran	atf_set require.progs python3 scapy
208d7cdd897SAlexander V. Chernikov}
209d7cdd897SAlexander V. Chernikov
210d7cdd897SAlexander V. Chernikovfwd_ip_icmp_gw_slow_success_body() {
211d7cdd897SAlexander V. Chernikov
212d7cdd897SAlexander V. Chernikov	vnet_init
213d7cdd897SAlexander V. Chernikov
214d7cdd897SAlexander V. Chernikov	ip4a="192.0.2.1"
215d7cdd897SAlexander V. Chernikov	ip4b="192.0.2.2"
216d7cdd897SAlexander V. Chernikov	plen=29
217d7cdd897SAlexander V. Chernikov	src_ip="192.0.2.3"
218d7cdd897SAlexander V. Chernikov	dst_ip="192.0.2.4"
219d7cdd897SAlexander V. Chernikov
220d7cdd897SAlexander V. Chernikov	script_name="../common/sender.py"
221d7cdd897SAlexander V. Chernikov
222d7cdd897SAlexander V. Chernikov	epair=$(vnet_mkepair)
223d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a up
224d7cdd897SAlexander V. Chernikov	ifconfig ${epair}a inet ${ip4a}/${plen}
225d7cdd897SAlexander V. Chernikov
226d7cdd897SAlexander V. Chernikov	jname="v4t-fwd_ip_icmp_gw_slow_success"
227d7cdd897SAlexander V. Chernikov	vnet_mkjail ${jname} ${epair}b
228d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b up
229d7cdd897SAlexander V. Chernikov	jexec ${jname} ifconfig ${epair}b inet ${ip4b}/${plen}
230d7cdd897SAlexander V. Chernikov
231d7cdd897SAlexander V. Chernikov	# Get router ip/mac
232d7cdd897SAlexander V. Chernikov	jail_ip=${ip4b}
233d7cdd897SAlexander V. Chernikov	jail_mac=`jexec ${jname} ifconfig ${epair}b ether | awk '$1~/ether/{print$2}'`
234d7cdd897SAlexander V. Chernikov
235d7cdd897SAlexander V. Chernikov	our_mac=`ifconfig ${epair}a ether | awk '$1~/ether/{print$2}'`
236d7cdd897SAlexander V. Chernikov
237d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.forwarding=1
238d7cdd897SAlexander V. Chernikov	# As we're doing router-on-the-stick, turn sending IP redirects off:
239d7cdd897SAlexander V. Chernikov	jexec ${jname} sysctl net.inet.ip.redirect=0
240d7cdd897SAlexander V. Chernikov
241d7cdd897SAlexander V. Chernikov	# Add host route
242d7cdd897SAlexander V. Chernikov	jexec ${jname} route -4 add -host ${dst_ip} ${ip4a}
243d7cdd897SAlexander V. Chernikov
244d7cdd897SAlexander V. Chernikov	# echo "LOCAL: ${local_ip} ${local_mac}"
245d7cdd897SAlexander V. Chernikov	# echo "REMOTE: ${remote_rtr_ip} ${remote_rtr_mac}"
246d7cdd897SAlexander V. Chernikov
247d7cdd897SAlexander V. Chernikov	atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
248d7cdd897SAlexander V. Chernikov		--test_name fwd_ip_icmp_fast \
249d7cdd897SAlexander V. Chernikov		--smac ${our_mac} --dmac ${jail_mac} \
250d7cdd897SAlexander V. Chernikov		--sip ${src_ip} --dip ${dst_ip} \
251d7cdd897SAlexander V. Chernikov		--iface ${epair}a
252d7cdd897SAlexander V. Chernikov
253d7cdd897SAlexander V. Chernikov	# check counters are valid
254d7cdd897SAlexander V. Chernikov	atf_check -o match:'1 packet forwarded \(1 packet fast forwarded\)' jexec ${jname} netstat -sp ip
255d7cdd897SAlexander V. Chernikov}
256d7cdd897SAlexander V. Chernikov
257d7cdd897SAlexander V. Chernikovfwd_ip_icmp_gw_slow_success_cleanup() {
258d7cdd897SAlexander V. Chernikov
259d7cdd897SAlexander V. Chernikov	vnet_cleanup
260d7cdd897SAlexander V. Chernikov}
261d7cdd897SAlexander V. Chernikov
262e27970aeSKristof Provostatf_test_case "fwd_ip_blackhole" "cleanup"
263e27970aeSKristof Provostfwd_ip_blackhole_head() {
264e27970aeSKristof Provost
265e27970aeSKristof Provost	atf_set descr 'Test blackhole routes'
266e27970aeSKristof Provost	atf_set require.user root
267e27970aeSKristof Provost}
268e27970aeSKristof Provost
269e27970aeSKristof Provostfwd_ip_blackhole_body() {
270e27970aeSKristof Provost	jname="v4t-fwd_ip_blackhole"
271e27970aeSKristof Provost
272e27970aeSKristof Provost	vnet_init
273e27970aeSKristof Provost
274e27970aeSKristof Provost	epair=$(vnet_mkepair)
275e27970aeSKristof Provost	epair_out=$(vnet_mkepair)
276e27970aeSKristof Provost
277e27970aeSKristof Provost	ifconfig ${epair}a 192.0.2.2/24 up
278e27970aeSKristof Provost
279e27970aeSKristof Provost	vnet_mkjail ${jname} ${epair}b ${epair_out}b
280e27970aeSKristof Provost	jexec ${jname} ifconfig lo0 127.0.0.1/8 up
281e27970aeSKristof Provost	jexec ${jname} ifconfig ${epair}b 192.0.2.1/24 up
282e27970aeSKristof Provost	jexec ${jname} ifconfig ${epair_out}b 198.51.100.1/24 up
283e27970aeSKristof Provost	jexec ${jname} sysctl net.inet.ip.forwarding=1
284e27970aeSKristof Provost
285e27970aeSKristof Provost	route add default 192.0.2.1
286e27970aeSKristof Provost
287e27970aeSKristof Provost	atf_check -s exit:2 -o ignore \
288e27970aeSKristof Provost	    ping -c 1 -t 1 198.51.100.2
289e27970aeSKristof Provost	atf_check -s exit:0 -o match:"0 packets not forwardable" \
290e27970aeSKristof Provost	    jexec ${jname} netstat -s -p ip
291e27970aeSKristof Provost
292e27970aeSKristof Provost	# Create blackhole route
293e27970aeSKristof Provost	jexec ${jname} /sbin/route add 198.51.100.2 -blackhole -fib 0
294e27970aeSKristof Provost	jexec ${jname} netstat -rn
295e27970aeSKristof Provost
296e27970aeSKristof Provost	# Include an IP option to ensure slow path
297e27970aeSKristof Provost	atf_check -s exit:2 -o ignore \
298e27970aeSKristof Provost	    ping -c 1 -t 1 -R 198.51.100.2
299e27970aeSKristof Provost	atf_check -s exit:0 -o match:"1 packet not forwardable" \
300e27970aeSKristof Provost	    jexec ${jname} netstat -s -p ip
301e27970aeSKristof Provost
302e27970aeSKristof Provost	# Now try via the fast path
303e27970aeSKristof Provost	atf_check -s exit:2 -o ignore \
304e27970aeSKristof Provost	    ping -c 1 -t 1 198.51.100.2
305e27970aeSKristof Provost	atf_check -s exit:0 -o match:"2 packets not forwardable" \
306e27970aeSKristof Provost	    jexec ${jname} netstat -s -p ip
307e27970aeSKristof Provost}
308e27970aeSKristof Provost
309e27970aeSKristof Provostfwd_ip_blackhole_cleanup() {
310e27970aeSKristof Provost
311e27970aeSKristof Provost	vnet_cleanup
312e27970aeSKristof Provost}
313e27970aeSKristof Provost
314d7cdd897SAlexander V. Chernikovatf_init_test_cases()
315d7cdd897SAlexander V. Chernikov{
316d7cdd897SAlexander V. Chernikov
317d7cdd897SAlexander V. Chernikov	atf_add_test_case "fwd_ip_icmp_iface_fast_success"
318d7cdd897SAlexander V. Chernikov	atf_add_test_case "fwd_ip_icmp_gw_fast_success"
319d7cdd897SAlexander V. Chernikov	atf_add_test_case "fwd_ip_icmp_iface_slow_success"
320d7cdd897SAlexander V. Chernikov	atf_add_test_case "fwd_ip_icmp_gw_slow_success"
321e27970aeSKristof Provost	atf_add_test_case "fwd_ip_blackhole"
322d7cdd897SAlexander V. Chernikov}
323d7cdd897SAlexander V. Chernikov
324d7cdd897SAlexander V. Chernikov# end
325d7cdd897SAlexander V. Chernikov
326