1*22ce4affSfengbojiang#- 2*22ce4affSfengbojiang# SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*22ce4affSfengbojiang# 4*22ce4affSfengbojiang# Copyright (c) 2020 Ahsan Barkati 5*22ce4affSfengbojiang# 6*22ce4affSfengbojiang# Redistribution and use in source and binary forms, with or without 7*22ce4affSfengbojiang# modification, are permitted provided that the following conditions 8*22ce4affSfengbojiang# are met: 9*22ce4affSfengbojiang# 1. Redistributions of source code must retain the above copyright 10*22ce4affSfengbojiang# notice, this list of conditions and the following disclaimer. 11*22ce4affSfengbojiang# 2. Redistributions in binary form must reproduce the above copyright 12*22ce4affSfengbojiang# notice, this list of conditions and the following disclaimer in the 13*22ce4affSfengbojiang# documentation and/or other materials provided with the distribution. 14*22ce4affSfengbojiang# 15*22ce4affSfengbojiang# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*22ce4affSfengbojiang# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*22ce4affSfengbojiang# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*22ce4affSfengbojiang# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*22ce4affSfengbojiang# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*22ce4affSfengbojiang# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*22ce4affSfengbojiang# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*22ce4affSfengbojiang# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*22ce4affSfengbojiang# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*22ce4affSfengbojiang# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*22ce4affSfengbojiang# SUCH DAMAGE. 26*22ce4affSfengbojiang# 27*22ce4affSfengbojiang# $FreeBSD$ 28*22ce4affSfengbojiang# 29*22ce4affSfengbojiang 30*22ce4affSfengbojiang. $(atf_get_srcdir)/utils.subr 31*22ce4affSfengbojiang 32*22ce4affSfengbojiangatf_test_case "basic_v4" "cleanup" 33*22ce4affSfengbojiangbasic_v4_head() 34*22ce4affSfengbojiang{ 35*22ce4affSfengbojiang atf_set descr 'add/change/delete route test for v4' 36*22ce4affSfengbojiang atf_set require.user root 37*22ce4affSfengbojiang atf_set require.progs jail jq 38*22ce4affSfengbojiang} 39*22ce4affSfengbojiang 40*22ce4affSfengbojiangbasic_v4_body() 41*22ce4affSfengbojiang{ 42*22ce4affSfengbojiang epair=$(vnet_mkepair) 43*22ce4affSfengbojiang ifconfig ${epair}a 192.0.2.2/24 up 44*22ce4affSfengbojiang vnet_mkjail alcatraz ${epair}b 45*22ce4affSfengbojiang jexec alcatraz ifconfig ${epair}b 192.0.2.1/24 up 46*22ce4affSfengbojiang 47*22ce4affSfengbojiang # add a new route in the jail 48*22ce4affSfengbojiang jexec alcatraz route add 192.0.2.3 192.0.2.2 49*22ce4affSfengbojiang gateway=$(check_route "alcatraz" "192.0.2.3") 50*22ce4affSfengbojiang 51*22ce4affSfengbojiang if [ "${gateway}" != "192.0.2.2" ]; then 52*22ce4affSfengbojiang atf_fail "Failed to add new route." 53*22ce4affSfengbojiang fi 54*22ce4affSfengbojiang 55*22ce4affSfengbojiang # change the added route 56*22ce4affSfengbojiang jexec alcatraz route change 192.0.2.3 192.0.2.4 57*22ce4affSfengbojiang gateway=$(check_route "alcatraz" "192.0.2.3") 58*22ce4affSfengbojiang 59*22ce4affSfengbojiang if [ "${gateway}" != "192.0.2.4" ]; then 60*22ce4affSfengbojiang atf_fail "Failed to change route." 61*22ce4affSfengbojiang fi 62*22ce4affSfengbojiang 63*22ce4affSfengbojiang # delete the route 64*22ce4affSfengbojiang jexec alcatraz route delete 192.0.2.3 65*22ce4affSfengbojiang gateway=$(check_route "alcatraz" "192.0.2.3") 66*22ce4affSfengbojiang 67*22ce4affSfengbojiang if [ "${gateway}" != "" ]; then 68*22ce4affSfengbojiang atf_fail "Failed to delete route." 69*22ce4affSfengbojiang fi 70*22ce4affSfengbojiang} 71*22ce4affSfengbojiang 72*22ce4affSfengbojiangbasic_v4_cleanup() 73*22ce4affSfengbojiang{ 74*22ce4affSfengbojiang vnet_cleanup 75*22ce4affSfengbojiang} 76*22ce4affSfengbojiang 77*22ce4affSfengbojiangatf_test_case "basic_v6" "cleanup" 78*22ce4affSfengbojiangbasic_v6_head() 79*22ce4affSfengbojiang{ 80*22ce4affSfengbojiang atf_set descr 'add/change/delete route test for v6' 81*22ce4affSfengbojiang atf_set require.user root 82*22ce4affSfengbojiang atf_set require.progs jail jq 83*22ce4affSfengbojiang} 84*22ce4affSfengbojiang 85*22ce4affSfengbojiangbasic_v6_body() 86*22ce4affSfengbojiang{ 87*22ce4affSfengbojiang epair=$(vnet_mkepair) 88*22ce4affSfengbojiang ifconfig ${epair}a inet6 2001:db8:cc4b::1/64 up no_dad 89*22ce4affSfengbojiang vnet_mkjail alcatraz ${epair}b 90*22ce4affSfengbojiang jexec alcatraz ifconfig ${epair}b inet6 2001:db8:cc4b::2/64 up no_dad 91*22ce4affSfengbojiang 92*22ce4affSfengbojiang # add a new route in the jail 93*22ce4affSfengbojiang jexec alcatraz route add -6 2001:db8:cc4b::3 2001:db8:cc4b::1 94*22ce4affSfengbojiang gateway=$(check_route "alcatraz" "2001:db8:cc4b::3") 95*22ce4affSfengbojiang 96*22ce4affSfengbojiang if [ "${gateway}" != "2001:db8:cc4b::1" ]; then 97*22ce4affSfengbojiang atf_fail "Failed to add new route." 98*22ce4affSfengbojiang fi 99*22ce4affSfengbojiang 100*22ce4affSfengbojiang # change the added route 101*22ce4affSfengbojiang jexec alcatraz route change -6 2001:db8:cc4b::3 2001:db8:cc4b::4 102*22ce4affSfengbojiang gateway=$(check_route "alcatraz" "2001:db8:cc4b::3") 103*22ce4affSfengbojiang if [ "${gateway}" != "2001:db8:cc4b::4" ]; then 104*22ce4affSfengbojiang atf_fail "Failed to change route." 105*22ce4affSfengbojiang fi 106*22ce4affSfengbojiang 107*22ce4affSfengbojiang # delete the route 108*22ce4affSfengbojiang jexec alcatraz route -6 delete 2001:db8:cc4b::3 109*22ce4affSfengbojiang gateway=$(check_route "alcatraz" "2001:db8:cc4b::3") 110*22ce4affSfengbojiang 111*22ce4affSfengbojiang if [ "${gateway}" != "" ]; then 112*22ce4affSfengbojiang atf_fail "Failed to delete route." 113*22ce4affSfengbojiang fi 114*22ce4affSfengbojiang} 115*22ce4affSfengbojiang 116*22ce4affSfengbojiangbasic_v6_cleanup() 117*22ce4affSfengbojiang{ 118*22ce4affSfengbojiang vnet_cleanup 119*22ce4affSfengbojiang} 120*22ce4affSfengbojiang 121*22ce4affSfengbojiangatf_init_test_cases() 122*22ce4affSfengbojiang{ 123*22ce4affSfengbojiang atf_add_test_case "basic_v4" 124*22ce4affSfengbojiang atf_add_test_case "basic_v6" 125*22ce4affSfengbojiang} 126