1*80ba37c3Schristos# $NetBSD: t_rfc4182.sh,v 1.6 2020/04/01 01:49:26 christos Exp $ 2c25ca9e8Skefren# 3c25ca9e8Skefren# Copyright (c) 2013 The NetBSD Foundation, Inc. 4c25ca9e8Skefren# All rights reserved. 5c25ca9e8Skefren# 6c25ca9e8Skefren# Redistribution and use in source and binary forms, with or without 7c25ca9e8Skefren# modification, are permitted provided that the following conditions 8c25ca9e8Skefren# are met: 9c25ca9e8Skefren# 1. Redistributions of source code must retain the above copyright 10c25ca9e8Skefren# notice, this list of conditions and the following disclaimer. 11c25ca9e8Skefren# 2. Redistributions in binary form must reproduce the above copyright 12c25ca9e8Skefren# notice, this list of conditions and the following disclaimer in the 13c25ca9e8Skefren# documentation and/or other materials provided with the distribution. 14c25ca9e8Skefren# 15c25ca9e8Skefren# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16c25ca9e8Skefren# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17c25ca9e8Skefren# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18c25ca9e8Skefren# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19c25ca9e8Skefren# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20c25ca9e8Skefren# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21c25ca9e8Skefren# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22c25ca9e8Skefren# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23c25ca9e8Skefren# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24c25ca9e8Skefren# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25c25ca9e8Skefren# POSSIBILITY OF SUCH DAMAGE. 26c25ca9e8Skefren# 27c25ca9e8Skefren 28c25ca9e8Skefren# TEST RFC 4182 29c25ca9e8Skefren# Setup four routers connected like this: R1---R2---R3---R4-- 30c25ca9e8Skefren# Goal is to be able to ping from R1 the outermost interface of R4 31c25ca9e8Skefren# Disable net.inet.ip.forwarding, enable net.mpls.forwarding 32c25ca9e8Skefren# Add route on R1 in order to encapsulate into MPLS the IP packets with 33c25ca9e8Skefren# destination equal to R4 right hand side interface. Use two labels here: 34c25ca9e8Skefren# 25 and IPv6 Explicit NULL 35c25ca9e8Skefren# Add a double tagged MPLS route on R2 in order to forward frames belonging to 36c25ca9e8Skefren# that FEC to R3, with IPv4 NULL being the most outermost one 37c25ca9e8Skefren# Add MPLS "POP" route on R3 for that FEC, pointing to R4 38c25ca9e8Skefren# Do the same for the reverse direction (R4 to R1) 39c25ca9e8Skefren# ping from R1 to R4 right hand side interface 40c25ca9e8Skefren 41c25ca9e8Skefren 42c25ca9e8Skefrenatf_test_case rfc4182 cleanup 43c25ca9e8Skefrenrfc4182_head() 44c25ca9e8Skefren{ 45c25ca9e8Skefren 46c25ca9e8Skefren atf_set "descr" "RFC 4182 conformance test" 47c25ca9e8Skefren atf_set "require.progs" "rump_server" 48c25ca9e8Skefren} 49c25ca9e8Skefren 50c25ca9e8Skefrenconfigservers() 51c25ca9e8Skefren{ 52c25ca9e8Skefren 53c25ca9e8Skefren # Setup the first server 54c25ca9e8Skefren export RUMP_SERVER=${RUMP_SERVER1} 55c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 create 567a10820dSkefren atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1 57c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 10.0.1.1/24 58c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig mpls0 create up 59c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1 60c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0 61c25ca9e8Skefren atf_check -s exit:0 rump.route -q add 10.0.4.0/24 -ifa 10.0.1.1 \ 62c25ca9e8Skefren -ifp mpls0 -tag 25,2 -inet 10.0.1.2 63c25ca9e8Skefren 64c25ca9e8Skefren # Setup the second server 65c25ca9e8Skefren export RUMP_SERVER=${RUMP_SERVER2} 66c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 create 677a10820dSkefren atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1 68c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 10.0.1.2/24 69c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif1 create 707a10820dSkefren atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom2 71c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif1 10.0.2.1/24 72c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig mpls0 create up 73c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1 74c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1 75c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0 76c25ca9e8Skefren atf_check -s exit:0 rump.route -q add -mpls 25 -tag 30,0 -inet 10.0.2.2 77c25ca9e8Skefren atf_check -s exit:0 rump.route -q add -mpls 27 -tag 3 -inet 10.0.1.1 78c25ca9e8Skefren 79c25ca9e8Skefren # Setup the third server 80c25ca9e8Skefren export RUMP_SERVER=${RUMP_SERVER3} 81c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 create 827a10820dSkefren atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom2 83c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 10.0.2.2/24 84c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif1 create 857a10820dSkefren atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom3 86c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif1 10.0.3.1/24 87c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig mpls0 create up 88c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1 89c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1 90c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0 91c25ca9e8Skefren atf_check -s exit:0 rump.route -q add -mpls 30 -tag 3 -inet 10.0.3.2 92c25ca9e8Skefren atf_check -s exit:0 rump.route -q add -mpls 26 -tag 27,0 -inet 10.0.2.1 93c25ca9e8Skefren 94c25ca9e8Skefren # Setup the fourth server 95c25ca9e8Skefren export RUMP_SERVER=${RUMP_SERVER4} 96c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 create 977a10820dSkefren atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom3 98c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif0 10.0.3.2/24 99c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif1 create 1007a10820dSkefren atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom4 101c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig shmif1 10.0.4.1/24 102c25ca9e8Skefren atf_check -s exit:0 rump.ifconfig mpls0 create up 103c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1 104c25ca9e8Skefren atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0 105c25ca9e8Skefren atf_check -s exit:0 rump.route -q add 10.0.1.0/24 -ifa 10.0.3.2 \ 106c25ca9e8Skefren -ifp mpls0 -tag 26 -inet 10.0.3.1 107c25ca9e8Skefren 108c25ca9e8Skefren unset RUMP_SERVER 109c25ca9e8Skefren} 110c25ca9e8Skefren 111c25ca9e8Skefrendoping() 112c25ca9e8Skefren{ 113c25ca9e8Skefren 114c25ca9e8Skefren export RUMP_SERVER=${RUMP_SERVER1} 115c25ca9e8Skefren atf_check -s exit:0 -o match:"64 bytes from 10.0.4.1: icmp_seq=" \ 116c25ca9e8Skefren rump.ping -n -o -w 5 10.0.4.1 117c25ca9e8Skefren unset RUMP_SERVER 118c25ca9e8Skefren} 119c25ca9e8Skefren 120c25ca9e8Skefrenrfc4182_body() 121c25ca9e8Skefren{ 122c25ca9e8Skefren 123*80ba37c3Schristos dostart 124c25ca9e8Skefren configservers 125c25ca9e8Skefren doping 126c25ca9e8Skefren} 127c25ca9e8Skefren 128c25ca9e8Skefrenrfc4182_cleanup() 129c25ca9e8Skefren{ 130c25ca9e8Skefren 131c25ca9e8Skefren docleanup 132c25ca9e8Skefren} 133c25ca9e8Skefren 134c25ca9e8Skefrenatf_init_test_cases() 135c25ca9e8Skefren{ 136c25ca9e8Skefren 137c25ca9e8Skefren atf_add_test_case rfc4182 138c25ca9e8Skefren} 139