12207447bSAlexander V. Chernikov#!/usr/bin/env atf-sh 22207447bSAlexander V. Chernikov#- 32207447bSAlexander V. Chernikov# SPDX-License-Identifier: BSD-2-Clause 42207447bSAlexander V. Chernikov# 52207447bSAlexander V. Chernikov# Copyright (c) 2020 Alexander V. Chernikov 62207447bSAlexander V. Chernikov# 72207447bSAlexander V. Chernikov# Redistribution and use in source and binary forms, with or without 82207447bSAlexander V. Chernikov# modification, are permitted provided that the following conditions 92207447bSAlexander V. Chernikov# are met: 102207447bSAlexander V. Chernikov# 1. Redistributions of source code must retain the above copyright 112207447bSAlexander V. Chernikov# notice, this list of conditions and the following disclaimer. 122207447bSAlexander V. Chernikov# 2. Redistributions in binary form must reproduce the above copyright 132207447bSAlexander V. Chernikov# notice, this list of conditions and the following disclaimer in the 142207447bSAlexander V. Chernikov# documentation and/or other materials provided with the distribution. 152207447bSAlexander V. Chernikov# 162207447bSAlexander V. Chernikov# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 172207447bSAlexander V. Chernikov# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 182207447bSAlexander V. Chernikov# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 192207447bSAlexander V. Chernikov# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 202207447bSAlexander V. Chernikov# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 212207447bSAlexander V. Chernikov# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 222207447bSAlexander V. Chernikov# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 232207447bSAlexander V. Chernikov# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 242207447bSAlexander V. Chernikov# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 252207447bSAlexander V. Chernikov# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 262207447bSAlexander V. Chernikov# SUCH DAMAGE. 272207447bSAlexander V. Chernikov# 282207447bSAlexander V. Chernikov# 292207447bSAlexander V. Chernikov 302207447bSAlexander V. Chernikov. $(atf_get_srcdir)/../common/vnet.subr 312207447bSAlexander V. Chernikov 322207447bSAlexander V. Chernikovload_divert_module() { 33a7a64b72SShteryana Shopova kldstat -q -m ipdivert 342207447bSAlexander V. Chernikov if [ $? -ne 0 ]; then 352207447bSAlexander V. Chernikov atf_skip "ipdivert module is not loaded" 362207447bSAlexander V. Chernikov fi 372207447bSAlexander V. Chernikov} 382207447bSAlexander V. Chernikov 392207447bSAlexander V. Chernikovatf_test_case "ipdivert_ip6_output_remote_success" "cleanup" 402207447bSAlexander V. Chernikovipdivert_ip6_output_remote_success_head() { 412207447bSAlexander V. Chernikov 422207447bSAlexander V. Chernikov atf_set descr 'Test valid IPv6 redirect' 432207447bSAlexander V. Chernikov atf_set require.user root 44*c46af893SJose Luis Duran atf_set require.progs python3 scapy 452207447bSAlexander V. Chernikov} 462207447bSAlexander V. Chernikov 472207447bSAlexander V. Chernikovipdivert_ip6_output_remote_success_body() { 482207447bSAlexander V. Chernikov ids=65530 492207447bSAlexander V. Chernikov id=`printf "%x" ${ids}` 502207447bSAlexander V. Chernikov if [ $$ -gt 65535 ]; then 512207447bSAlexander V. Chernikov xl=`printf "%x" $(($$ - 65535))` 522207447bSAlexander V. Chernikov yl="1" 532207447bSAlexander V. Chernikov else 542207447bSAlexander V. Chernikov xl=`printf "%x" $$` 552207447bSAlexander V. Chernikov yl="" 562207447bSAlexander V. Chernikov fi 572207447bSAlexander V. Chernikov 582207447bSAlexander V. Chernikov vnet_init 592207447bSAlexander V. Chernikov load_divert_module 602207447bSAlexander V. Chernikov 612207447bSAlexander V. Chernikov ip6a="2001:db8:6666:0000:${yl}:${id}:1:${xl}" 622207447bSAlexander V. Chernikov ip6b="2001:db8:6666:0000:${yl}:${id}:2:${xl}" 632207447bSAlexander V. Chernikov 642207447bSAlexander V. Chernikov script_name="../common/divert.py" 652207447bSAlexander V. Chernikov 662207447bSAlexander V. Chernikov epair=$(vnet_mkepair) 672207447bSAlexander V. Chernikov ifconfig ${epair}a up 682207447bSAlexander V. Chernikov ifconfig ${epair}a inet6 ${ip6a}/64 692207447bSAlexander V. Chernikov 702207447bSAlexander V. Chernikov jname="v6t-${id}-${yl}-${xl}" 712207447bSAlexander V. Chernikov vnet_mkjail ${jname} ${epair}b 722207447bSAlexander V. Chernikov jexec ${jname} ifconfig ${epair}b up 732207447bSAlexander V. Chernikov jexec ${jname} ifconfig ${epair}b inet6 ${ip6b}/64 742207447bSAlexander V. Chernikov 752207447bSAlexander V. Chernikov # wait for DAD to complete 762207447bSAlexander V. Chernikov sleep 2 772207447bSAlexander V. Chernikov 782207447bSAlexander V. Chernikov # echo "LOCAL: ${local_ll_ip} ${local_ll_mac}" 792207447bSAlexander V. Chernikov # echo "REMOTE: ${remote_rtr_ll_ip} ${remote_rtr_mac}" 802207447bSAlexander V. Chernikov 812207447bSAlexander V. Chernikov atf_check -s exit:0 $(atf_get_srcdir)/${script_name} \ 822207447bSAlexander V. Chernikov --dip ${ip6b} --test_name ipdivert_ip6_output_remote_success 832207447bSAlexander V. Chernikov 842207447bSAlexander V. Chernikov count=`jexec ${jname} netstat -s -p icmp6 | grep 'Input histogram:' -A1 | grep -c 'echo:'` 852207447bSAlexander V. Chernikov # Verify redirect got installed 862207447bSAlexander V. Chernikov atf_check_equal "1" "${count}" 872207447bSAlexander V. Chernikov} 882207447bSAlexander V. Chernikov 892207447bSAlexander V. Chernikovipdivert_ip6_output_remote_success_cleanup() { 902207447bSAlexander V. Chernikov 912207447bSAlexander V. Chernikov vnet_cleanup 922207447bSAlexander V. Chernikov} 932207447bSAlexander V. Chernikov 942207447bSAlexander V. Chernikovatf_init_test_cases() 952207447bSAlexander V. Chernikov{ 962207447bSAlexander V. Chernikov 972207447bSAlexander V. Chernikov atf_add_test_case "ipdivert_ip6_output_remote_success" 982207447bSAlexander V. Chernikov} 992207447bSAlexander V. Chernikov 1002207447bSAlexander V. Chernikov# end 1012207447bSAlexander V. Chernikov 102