]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/sys/netpfil/pf/forward.sh
netpfil tests: Move pft_ping.py and sniffer.py to the common test directory
[FreeBSD/FreeBSD.git] / tests / sys / netpfil / pf / forward.sh
1 # $FreeBSD$
2
3 . $(atf_get_srcdir)/utils.subr
4
5 common_dir=$(atf_get_srcdir)/../common
6
7 atf_test_case "v4" "cleanup"
8 v4_head()
9 {
10         atf_set descr 'Basic forwarding test'
11         atf_set require.user root
12
13         # We need scapy to be installed for out test scripts to work
14         atf_set require.progs scapy
15 }
16
17 v4_body()
18 {
19         pft_init
20
21         epair_send=$(vnet_mkepair)
22         ifconfig ${epair_send}a 192.0.2.1/24 up
23
24         epair_recv=$(vnet_mkepair)
25         ifconfig ${epair_recv}a up
26
27         vnet_mkjail alcatraz ${epair_send}b ${epair_recv}b
28         jexec alcatraz ifconfig ${epair_send}b 192.0.2.2/24 up
29         jexec alcatraz ifconfig ${epair_recv}b 198.51.100.2/24 up
30         jexec alcatraz sysctl net.inet.ip.forwarding=1
31         jexec alcatraz arp -s 198.51.100.3 00:01:02:03:04:05
32         route add -net 198.51.100.0/24 192.0.2.2
33
34         # Sanity check, can we forward ICMP echo requests without pf?
35         atf_check -s exit:0 $(atf_get_srcdir)/pft_ping.py \
36                 --sendif ${epair_send}a \
37                 --to 198.51.100.3 \
38                 --recvif ${epair_recv}a
39
40         jexec alcatraz pfctl -e
41
42         # Forward with pf enabled
43         pft_set_rules alcatraz "block in"
44         atf_check -s exit:1 ${common_dir}/pft_ping.py \
45                 --sendif ${epair_send}a \
46                 --to 198.51.100.3 \
47                 --recvif ${epair_recv}a
48
49         pft_set_rules alcatraz "block out"
50         atf_check -s exit:1 ${common_dir}/pft_ping.py \
51                 --sendif ${epair_send}a \
52                 --to 198.51.100.3 \
53                 --recv ${epair_recv}a
54
55         # Allow ICMP
56         pft_set_rules alcatraz "block in" "pass in proto icmp"
57         atf_check -s exit:0 ${common_dir}/pft_ping.py \
58                 --sendif ${epair_send}a \
59                 --to 198.51.100.3 \
60                 --recvif ${epair_recv}a
61 }
62
63 v4_cleanup()
64 {
65         pft_cleanup
66 }
67
68 atf_test_case "v6" "cleanup"
69 v6_head()
70 {
71         atf_set descr 'Basic IPv6 forwarding test'
72         atf_set require.user root
73         atf_set require.progs scapy
74 }
75
76 v6_body()
77 {
78         pft_init
79
80         epair_send=$(vnet_mkepair)
81         epair_recv=$(vnet_mkepair)
82
83         ifconfig ${epair_send}a inet6 2001:db8:42::1/64 up no_dad -ifdisabled
84         ifconfig ${epair_recv}a up
85
86         vnet_mkjail alcatraz ${epair_send}b ${epair_recv}b
87
88         jexec alcatraz ifconfig ${epair_send}b inet6 2001:db8:42::2/64 up no_dad
89         jexec alcatraz ifconfig ${epair_recv}b inet6 2001:db8:43::2/64 up no_dad
90         jexec alcatraz sysctl net.inet6.ip6.forwarding=1
91         jexec alcatraz ndp -s 2001:db8:43::3 00:01:02:03:04:05
92         route add -6 2001:db8:43::/64 2001:db8:42::2
93
94         # Sanity check, can we forward ICMP echo requests without pf?
95         atf_check -s exit:0 ${common_dir}/pft_ping.py \
96                 --ip6 \
97                 --sendif ${epair_send}a \
98                 --to 2001:db8:43::3 \
99                 --recvif ${epair_recv}a
100
101         jexec alcatraz pfctl -e
102
103         # Block incoming echo request packets
104         pft_set_rules alcatraz \
105                 "block in inet6 proto icmp6 icmp6-type echoreq"
106         atf_check -s exit:1 ${common_dir}/pft_ping.py \
107                 --ip6 \
108                 --sendif ${epair_send}a \
109                 --to 2001:db8:43::3 \
110                 --recvif ${epair_recv}a
111
112         # Block outgoing echo request packets
113         pft_set_rules alcatraz \
114                 "block out inet6 proto icmp6 icmp6-type echoreq"
115         atf_check -s exit:1 -e ignore ${common_dir}/pft_ping.py \
116                 --ip6 \
117                 --sendif ${epair_send}a \
118                 --to 2001:db8:43::3 \
119                 --recvif ${epair_recv}a
120
121         # Allow ICMPv6 but nothing else
122         pft_set_rules alcatraz \
123                 "block out" \
124                 "pass out inet6 proto icmp6"
125         atf_check -s exit:0 ${common_dir}/pft_ping.py \
126                 --ip6 \
127                 --sendif ${epair_send}a \
128                 --to 2001:db8:43::3 \
129                 --recvif ${epair_recv}a
130
131         # Allowing ICMPv4 does not allow ICMPv6
132         pft_set_rules alcatraz \
133                 "block out inet6 proto icmp6 icmp6-type echoreq" \
134                 "pass in proto icmp"
135         atf_check -s exit:1 ${common_dir}/pft_ping.py \
136                 --ip6 \
137                 --sendif ${epair_send}a \
138                 --to 2001:db8:43::3 \
139                 --recvif ${epair_recv}a
140 }
141
142 v6_cleanup()
143 {
144         pft_cleanup
145 }
146
147 atf_init_test_cases()
148 {
149         atf_add_test_case "v4"
150         atf_add_test_case "v6"
151 }