Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/tests/sys/netpfil/pf/fragmentation_no_reassembly.sh
39507 views
1
#
2
# SPDX-License-Identifier: BSD-2-Clause
3
#
4
# Copyright (c) 2017 Kristof Provost <[email protected]>
5
# Copyright (c) 2023 Kajetan Staszkiewicz <[email protected]>
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
. $(atf_get_srcdir)/utils.subr
29
30
atf_test_case "match_full_v4" "cleanup"
31
match_full_v4_head()
32
{
33
atf_set descr 'Matching non-fragmented IPv4 packets'
34
atf_set require.user root
35
atf_set require.progs python3 scapy
36
}
37
38
match_full_v4_body()
39
{
40
setup_router_dummy_ipv4
41
42
# Sanity check.
43
ping_dummy_check_request exit:0 --ping-type=icmp
44
45
# Only non-fragmented packets are passed
46
jexec router pfctl -e
47
pft_set_rules router \
48
"pass out" \
49
"block in" \
50
"pass in inet proto icmp all icmp-type echoreq"
51
ping_dummy_check_request exit:0 --ping-type=icmp
52
ping_dummy_check_request exit:1 --ping-type=icmp --send-length=2000 --send-frag-length 1000
53
}
54
55
match_full_v4_cleanup()
56
{
57
pft_cleanup
58
}
59
60
61
atf_test_case "match_fragment_v4" "cleanup"
62
match_fragment_v4_head()
63
{
64
atf_set descr 'Matching fragmented IPv4 packets'
65
atf_set require.user root
66
atf_set require.progs python3 scapy
67
}
68
69
match_fragment_v4_body()
70
{
71
setup_router_dummy_ipv4
72
73
# Sanity check.
74
ping_dummy_check_request exit:0 --ping-type=icmp
75
76
# Only fragmented packets are passed
77
pft_set_rules router \
78
"pass out" \
79
"block in" \
80
"pass in inet proto icmp fragment"
81
ping_dummy_check_request exit:1 --ping-type=icmp
82
ping_dummy_check_request exit:0 --ping-type=icmp --send-length=2000 --send-frag-length 1000
83
}
84
85
match_fragment_v4_cleanup()
86
{
87
pft_cleanup
88
}
89
90
91
atf_test_case "compat_override_v4" "cleanup"
92
compat_override_v4_head()
93
{
94
atf_set descr 'Scrub rules override "set reassemble" for IPv4'
95
atf_set require.user root
96
atf_set require.progs python3 scapy
97
}
98
99
compat_override_v4_body()
100
{
101
setup_router_dummy_ipv4
102
103
# Sanity check.
104
ping_dummy_check_request exit:0 --ping-type=icmp
105
106
# The same as match_fragment_v4 but with "set reassemble yes" which
107
# is ignored because of presence of scrub rules.
108
# Only fragmented packets are passed.
109
pft_set_rules router \
110
"set reassemble yes" \
111
"no scrub" \
112
"pass out" \
113
"block in" \
114
"pass in inet proto icmp fragment"
115
ping_dummy_check_request exit:1 --ping-type=icmp
116
ping_dummy_check_request exit:0 --ping-type=icmp --send-length=2000 --send-frag-length 1000
117
}
118
119
compat_override_v4_cleanup()
120
{
121
pft_cleanup
122
}
123
124
125
atf_init_test_cases()
126
{
127
atf_add_test_case "match_full_v4"
128
atf_add_test_case "match_fragment_v4"
129
atf_add_test_case "compat_override_v4"
130
}
131
132