14d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause 2b800be97SKajetan Staszkiewicz# 3b800be97SKajetan Staszkiewicz# Copyright (c) 2020 Kristof Provost <kp@FreeBSD.org> 4b800be97SKajetan Staszkiewicz# Copyright (c) 2023 Kajetan Staszkiewicz <vegeta@tuxpowered.net> 5b800be97SKajetan Staszkiewicz# 6b800be97SKajetan Staszkiewicz# Redistribution and use in source and binary forms, with or without 7b800be97SKajetan Staszkiewicz# modification, are permitted provided that the following conditions 8b800be97SKajetan Staszkiewicz# are met: 9b800be97SKajetan Staszkiewicz# 1. Redistributions of source code must retain the above copyright 10b800be97SKajetan Staszkiewicz# notice, this list of conditions and the following disclaimer. 11b800be97SKajetan Staszkiewicz# 2. Redistributions in binary form must reproduce the above copyright 12b800be97SKajetan Staszkiewicz# notice, this list of conditions and the following disclaimer in the 13b800be97SKajetan Staszkiewicz# documentation and/or other materials provided with the distribution. 14b800be97SKajetan Staszkiewicz# 15b800be97SKajetan Staszkiewicz# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16b800be97SKajetan Staszkiewicz# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17b800be97SKajetan Staszkiewicz# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18b800be97SKajetan Staszkiewicz# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19b800be97SKajetan Staszkiewicz# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20b800be97SKajetan Staszkiewicz# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21b800be97SKajetan Staszkiewicz# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22b800be97SKajetan Staszkiewicz# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23b800be97SKajetan Staszkiewicz# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24b800be97SKajetan Staszkiewicz# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25b800be97SKajetan Staszkiewicz# SUCH DAMAGE. 26b800be97SKajetan Staszkiewicz 27b800be97SKajetan Staszkiewicz. $(atf_get_srcdir)/utils.subr 28b800be97SKajetan Staszkiewicz 29b800be97SKajetan Staszkiewiczcommon_dir=$(atf_get_srcdir)/../common 30b800be97SKajetan Staszkiewicz 31b800be97SKajetan Staszkiewiczatf_test_case "max_mss_v4" "cleanup" 32b800be97SKajetan Staszkiewiczmax_mss_v4_head() 33b800be97SKajetan Staszkiewicz{ 34b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv4 scrub "mss" rule' 35b800be97SKajetan Staszkiewicz atf_set require.user root 36*c46af893SJose Luis Duran atf_set require.progs python3 scapy 37b800be97SKajetan Staszkiewicz} 38b800be97SKajetan Staszkiewicz 39b800be97SKajetan Staszkiewiczmax_mss_v4_body() 40b800be97SKajetan Staszkiewicz{ 41b800be97SKajetan Staszkiewicz setup_router_dummy_ipv4 42b800be97SKajetan Staszkiewicz pft_set_rules router "scrub on ${epair_tester}b max-mss 1300" 43b800be97SKajetan Staszkiewicz # Check aligned 44b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --ping-type=tcpsyn --send-mss=1400 --expect-mss=1300 45b800be97SKajetan Staszkiewicz # And unaligned 46b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --ping-type=tcpsyn --send-mss=1400 --expect-mss=1300 \ 47b800be97SKajetan Staszkiewicz --send-tcpopt-unaligned 48b800be97SKajetan Staszkiewicz} 49b800be97SKajetan Staszkiewicz 50b800be97SKajetan Staszkiewiczmax_mss_v4_cleanup() 51b800be97SKajetan Staszkiewicz{ 52b800be97SKajetan Staszkiewicz pft_cleanup 53b800be97SKajetan Staszkiewicz} 54b800be97SKajetan Staszkiewicz 55b800be97SKajetan Staszkiewicz 56b800be97SKajetan Staszkiewiczatf_test_case "max_mss_v6" "cleanup" 57b800be97SKajetan Staszkiewiczmax_mss_v6_head() 58b800be97SKajetan Staszkiewicz{ 59b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv6 scrub "mss" rule' 60b800be97SKajetan Staszkiewicz atf_set require.user root 61*c46af893SJose Luis Duran atf_set require.progs python3 scapy 62b800be97SKajetan Staszkiewicz} 63b800be97SKajetan Staszkiewicz 64b800be97SKajetan Staszkiewiczmax_mss_v6_body() 65b800be97SKajetan Staszkiewicz{ 66b800be97SKajetan Staszkiewicz setup_router_dummy_ipv6 67b800be97SKajetan Staszkiewicz pft_set_rules router "scrub on ${epair_tester}b max-mss 1300" 68b800be97SKajetan Staszkiewicz # Check aligned 69b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --ping-type=tcpsyn --send-mss=1400 --expect-mss=1300 70b800be97SKajetan Staszkiewicz # And unaligned 71b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --ping-type=tcpsyn --send-mss=1400 --expect-mss=1300 \ 72b800be97SKajetan Staszkiewicz --send-tcpopt-unaligned 73b800be97SKajetan Staszkiewicz} 74b800be97SKajetan Staszkiewicz 75b800be97SKajetan Staszkiewiczmax_mss_v6_cleanup() 76b800be97SKajetan Staszkiewicz{ 77b800be97SKajetan Staszkiewicz pft_cleanup 78b800be97SKajetan Staszkiewicz} 79b800be97SKajetan Staszkiewicz 80b800be97SKajetan Staszkiewicz 81b800be97SKajetan Staszkiewiczatf_test_case "set_tos_v4" "cleanup" 82b800be97SKajetan Staszkiewiczset_tos_v4_head() 83b800be97SKajetan Staszkiewicz{ 84b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv4 scub "set-tos" rule' 85b800be97SKajetan Staszkiewicz atf_set require.user root 86*c46af893SJose Luis Duran atf_set require.progs python3 scapy 87b800be97SKajetan Staszkiewicz} 88b800be97SKajetan Staszkiewicz 89b800be97SKajetan Staszkiewiczset_tos_v4_body() 90b800be97SKajetan Staszkiewicz{ 91b800be97SKajetan Staszkiewicz setup_router_dummy_ipv4 92b800be97SKajetan Staszkiewicz pft_set_rules router "scrub on ${epair_tester}b set-tos 0x42" 93b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --send-tc=0 --expect-tc=66 94b800be97SKajetan Staszkiewicz} 95b800be97SKajetan Staszkiewicz 96b800be97SKajetan Staszkiewiczset_tos_v4_cleanup() 97b800be97SKajetan Staszkiewicz{ 98b800be97SKajetan Staszkiewicz pft_cleanup 99b800be97SKajetan Staszkiewicz} 100b800be97SKajetan Staszkiewicz 101b800be97SKajetan Staszkiewicz 102b800be97SKajetan Staszkiewiczatf_test_case "set_tos_v6" "cleanup" 103b800be97SKajetan Staszkiewiczset_tos_v6_head() 104b800be97SKajetan Staszkiewicz{ 105b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv6 scub "set-tos" rule' 106b800be97SKajetan Staszkiewicz atf_set require.user root 107*c46af893SJose Luis Duran atf_set require.progs python3 scapy 108b800be97SKajetan Staszkiewicz} 109b800be97SKajetan Staszkiewicz 110b800be97SKajetan Staszkiewiczset_tos_v6_body() 111b800be97SKajetan Staszkiewicz{ 112b800be97SKajetan Staszkiewicz setup_router_dummy_ipv6 113b800be97SKajetan Staszkiewicz pft_set_rules router "scrub on ${epair_tester}b set-tos 0x42" 114b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --ping-type=tcpsyn --send-tc=0 --expect-tc=66 115b800be97SKajetan Staszkiewicz} 116b800be97SKajetan Staszkiewicz 117b800be97SKajetan Staszkiewiczset_tos_v6_cleanup() 118b800be97SKajetan Staszkiewicz{ 119b800be97SKajetan Staszkiewicz pft_cleanup 120b800be97SKajetan Staszkiewicz} 121b800be97SKajetan Staszkiewicz 122b800be97SKajetan Staszkiewicz 123b800be97SKajetan Staszkiewiczatf_test_case "min_ttl_v4" "cleanup" 124b800be97SKajetan Staszkiewiczmin_ttl_v4_head() 125b800be97SKajetan Staszkiewicz{ 126b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv4 scub "min-ttl" rule' 127b800be97SKajetan Staszkiewicz atf_set require.user root 128*c46af893SJose Luis Duran atf_set require.progs python3 scapy 129b800be97SKajetan Staszkiewicz} 130b800be97SKajetan Staszkiewicz 131b800be97SKajetan Staszkiewiczmin_ttl_v4_body() 132b800be97SKajetan Staszkiewicz{ 133b800be97SKajetan Staszkiewicz setup_router_dummy_ipv4 134b800be97SKajetan Staszkiewicz pft_set_rules router "scrub on ${epair_tester}b min-ttl 50" 135b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --ping-type=tcpsyn --send-hlim=40 --expect-hlim=49 136b800be97SKajetan Staszkiewicz} 137b800be97SKajetan Staszkiewicz 138b800be97SKajetan Staszkiewiczmin_ttl_v4_cleanup() 139b800be97SKajetan Staszkiewicz{ 140b800be97SKajetan Staszkiewicz pft_cleanup 141b800be97SKajetan Staszkiewicz} 142b800be97SKajetan Staszkiewicz 143b800be97SKajetan Staszkiewicz 144b800be97SKajetan Staszkiewiczatf_test_case "min_ttl_v6" "cleanup" 145b800be97SKajetan Staszkiewiczmin_ttl_v6_head() 146b800be97SKajetan Staszkiewicz{ 147b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv6 scub "min-ttl" rule' 148b800be97SKajetan Staszkiewicz atf_set require.user root 149*c46af893SJose Luis Duran atf_set require.progs python3 scapy 150b800be97SKajetan Staszkiewicz} 151b800be97SKajetan Staszkiewicz 152b800be97SKajetan Staszkiewiczmin_ttl_v6_body() 153b800be97SKajetan Staszkiewicz{ 154b800be97SKajetan Staszkiewicz setup_router_dummy_ipv6 155b800be97SKajetan Staszkiewicz pft_set_rules router "scrub on ${epair_tester}b min-ttl 50" 156b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --ping-type=tcpsyn --send-hlim=40 --expect-hlim=49 157b800be97SKajetan Staszkiewicz} 158b800be97SKajetan Staszkiewicz 159b800be97SKajetan Staszkiewiczmin_ttl_v6_cleanup() 160b800be97SKajetan Staszkiewicz{ 161b800be97SKajetan Staszkiewicz pft_cleanup 162b800be97SKajetan Staszkiewicz} 163b800be97SKajetan Staszkiewicz 164b800be97SKajetan Staszkiewicz 165b800be97SKajetan Staszkiewiczatf_test_case "no_scrub_v4" "cleanup" 166b800be97SKajetan Staszkiewiczno_scrub_v4_head() 167b800be97SKajetan Staszkiewicz{ 168b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv4 "no scrub" rule' 169b800be97SKajetan Staszkiewicz atf_set require.user root 170*c46af893SJose Luis Duran atf_set require.progs python3 scapy 171b800be97SKajetan Staszkiewicz} 172b800be97SKajetan Staszkiewicz 173b800be97SKajetan Staszkiewiczno_scrub_v4_body() 174b800be97SKajetan Staszkiewicz{ 175b800be97SKajetan Staszkiewicz setup_router_dummy_ipv4 176b800be97SKajetan Staszkiewicz pft_set_rules router\ 177b800be97SKajetan Staszkiewicz "no scrub on ${epair_tester}b to ${net_server_host_server}" 178b800be97SKajetan Staszkiewicz "scrub on ${epair_tester}b set-tos 0x42" 179b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --send-tc=0 --expect-tc=0 180b800be97SKajetan Staszkiewicz} 181b800be97SKajetan Staszkiewicz 182b800be97SKajetan Staszkiewiczno_scrub_v4_cleanup() 183b800be97SKajetan Staszkiewicz{ 184b800be97SKajetan Staszkiewicz pft_cleanup 185b800be97SKajetan Staszkiewicz} 186b800be97SKajetan Staszkiewicz 187b800be97SKajetan Staszkiewicz 188b800be97SKajetan Staszkiewiczatf_test_case "no_scrub_v6" "cleanup" 189b800be97SKajetan Staszkiewiczno_scrub_v6_head() 190b800be97SKajetan Staszkiewicz{ 191b800be97SKajetan Staszkiewicz atf_set descr 'Test IPv6 "no scrub" rule' 192b800be97SKajetan Staszkiewicz atf_set require.user root 193*c46af893SJose Luis Duran atf_set require.progs python3 scapy 194b800be97SKajetan Staszkiewicz} 195b800be97SKajetan Staszkiewicz 196b800be97SKajetan Staszkiewiczno_scrub_v6_body() 197b800be97SKajetan Staszkiewicz{ 198b800be97SKajetan Staszkiewicz setup_router_dummy_ipv6 199b800be97SKajetan Staszkiewicz pft_set_rules router \ 200b800be97SKajetan Staszkiewicz "no scrub on ${epair_tester}b to ${net_server_host_server}" 201b800be97SKajetan Staszkiewicz "scrub on ${epair_tester}b set-tos 0x42" 202b800be97SKajetan Staszkiewicz ping_dummy_check_request exit:0 --send-tc=0 --expect-tc=0 203b800be97SKajetan Staszkiewicz} 204b800be97SKajetan Staszkiewicz 205b800be97SKajetan Staszkiewiczno_scrub_v6_cleanup() 206b800be97SKajetan Staszkiewicz{ 207b800be97SKajetan Staszkiewicz pft_cleanup 208b800be97SKajetan Staszkiewicz} 209b800be97SKajetan Staszkiewicz 210b800be97SKajetan Staszkiewicz 211b800be97SKajetan Staszkiewiczatf_init_test_cases() 212b800be97SKajetan Staszkiewicz{ 213b800be97SKajetan Staszkiewicz atf_add_test_case "max_mss_v4" 214b800be97SKajetan Staszkiewicz atf_add_test_case "max_mss_v6" 215b800be97SKajetan Staszkiewicz atf_add_test_case "set_tos_v4" 216b800be97SKajetan Staszkiewicz atf_add_test_case "set_tos_v6" 217b800be97SKajetan Staszkiewicz atf_add_test_case "min_ttl_v4" 218b800be97SKajetan Staszkiewicz atf_add_test_case "min_ttl_v6" 219b800be97SKajetan Staszkiewicz atf_add_test_case "no_scrub_v4" 220b800be97SKajetan Staszkiewicz atf_add_test_case "no_scrub_v6" 221b800be97SKajetan Staszkiewicz} 222