xref: /freebsd/tests/sys/netinet/divert.sh (revision df21a004be237a1dccd03c7b47254625eea62fa9)
1#!/usr/bin/env atf-sh
2#-
3# SPDX-License-Identifier: BSD-2-Clause
4#
5# Copyright (c) 2020 Alexander V. Chernikov
6#
7# Redistribution and use in source and binary forms, with or without
8# modification, are permitted provided that the following conditions
9# are met:
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer.
12# 2. Redistributions in binary form must reproduce the above copyright
13#    notice, this list of conditions and the following disclaimer in the
14#    documentation and/or other materials provided with the distribution.
15#
16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26# SUCH DAMAGE.
27#
28#
29
30. $(atf_get_srcdir)/../common/vnet.subr
31
32atf_test_case "ipdivert_ip_output_remote_success" "cleanup"
33ipdivert_ip_output_remote_success_head() {
34
35	atf_set descr 'Test diverting IPv4 packet to remote destination'
36	atf_set require.user root
37	atf_set require.progs python3 scapy
38	atf_set require.kmods ipdivert
39}
40
41ipdivert_ip_output_remote_success_body() {
42
43	if [ "$(atf_config_get ci false)" = "true" ] && \
44		[ "$(uname -p)" = "i386" ]; then
45		atf_skip "https://bugs.freebsd.org/245764"
46	fi
47
48	ids=65530
49	id=`printf "%x" ${ids}`
50	if [ $$ -gt 65535 ]; then
51		xl=`printf "%x" $(($$ - 65535))`
52		yl="1"
53	else
54		xl=`printf "%x" $$`
55		yl=""
56	fi
57
58	vnet_init
59
60	ip4a="192.0.2.5"
61	ip4b="192.0.2.6"
62
63	script_name="../common/divert.py"
64
65	epair=$(vnet_mkepair)
66	ifconfig ${epair}a up
67	ifconfig ${epair}a inet ${ip4a}/30
68
69	jname="v4t-${id}-${yl}-${xl}"
70	vnet_mkjail ${jname} ${epair}b
71	jexec ${jname} ifconfig ${epair}b up
72	jexec ${jname} ifconfig ${epair}b inet ${ip4b}/30
73
74	atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \
75		--dip ${ip4b} --test_name ipdivert_ip_output_remote_success
76
77	count=`jexec ${jname} netstat -s -p icmp  | grep 'Input histogram:' -A8 | grep -c 'echo: '`
78	# Verify redirect got installed
79	atf_check_equal "1" "${count}"
80}
81
82ipdivert_ip_output_remote_success_cleanup() {
83
84	vnet_cleanup
85}
86
87atf_test_case "ipdivert_ip_input_local_success" "cleanup"
88ipdivert_ip_input_local_success_head() {
89
90	atf_set descr 'Test diverting IPv4 packet to remote destination'
91	atf_set require.user root
92	atf_set require.progs python3 scapy
93	atf_set require.kmods ipdivert
94}
95
96ipdivert_ip_input_local_success_body() {
97
98	if [ "$(atf_config_get ci false)" = "true" ] && \
99		[ "$(uname -p)" = "i386" ]; then
100		atf_skip "https://bugs.freebsd.org/245764"
101	fi
102
103	ids=65529
104	id=`printf "%x" ${ids}`
105	if [ $$ -gt 65535 ]; then
106		xl=`printf "%x" $(($$ - 65535))`
107		yl="1"
108	else
109		xl=`printf "%x" $$`
110		yl=""
111	fi
112
113	vnet_init
114
115	ip4a="192.0.2.5"
116	ip4b="192.0.2.6"
117
118	script_name="../common/divert.py"
119
120	epair=$(vnet_mkepair)
121	ifconfig ${epair}a up
122	ifconfig ${epair}a inet ${ip4a}/30
123
124	jname="v4t-${id}-${yl}-${xl}"
125	vnet_mkjail ${jname} ${epair}b
126	jexec ${jname} ifconfig ${epair}b up
127	jexec ${jname} ifconfig ${epair}b inet ${ip4b}/30
128
129	atf_check -s exit:0 jexec ${jname} $(atf_get_srcdir)/${script_name} \
130	    --sip ${ip4a} --dip ${ip4b} \
131	    --test_name ipdivert_ip_input_local_success
132
133	count=`jexec ${jname} netstat -s -p icmp  | grep 'Input histogram:' -A8 | grep -c 'echo: '`
134	# Verify redirect got installed
135	atf_check_equal "1" "${count}"
136}
137
138ipdivert_ip_input_local_success_cleanup() {
139
140	vnet_cleanup
141}
142
143atf_init_test_cases()
144{
145
146	atf_add_test_case "ipdivert_ip_output_remote_success"
147	atf_add_test_case "ipdivert_ip_input_local_success"
148}
149
150# end
151
152