xref: /netbsd/tests/net/mpls/t_rfc4182.sh (revision 80ba37c3)
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