t_mpls_fw.sh revision 272458
190075Sobrien# $NetBSD: t_mpls_fw.sh,v 1.4 2014/03/18 18:20:44 riastradh Exp $
290075Sobrien#
3169689Skan# Copyright (c) 2013 The NetBSD Foundation, Inc.
4169689Skan# All rights reserved.
590075Sobrien#
690075Sobrien# Redistribution and use in source and binary forms, with or without
7132718Skan# modification, are permitted provided that the following conditions
890075Sobrien# are met:
9132718Skan# 1. Redistributions of source code must retain the above copyright
10132718Skan#    notice, this list of conditions and the following disclaimer.
11132718Skan# 2. Redistributions in binary form must reproduce the above copyright
12132718Skan#    notice, this list of conditions and the following disclaimer in the
1390075Sobrien#    documentation and/or other materials provided with the distribution.
14132718Skan#
15132718Skan# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16132718Skan# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17132718Skan# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1890075Sobrien# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19132718Skan# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20132718Skan# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21169689Skan# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22169689Skan# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2390075Sobrien# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2490075Sobrien# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2590075Sobrien# POSSIBILITY OF SUCH DAMAGE.
2690075Sobrien#
2790075Sobrien
2890075Sobrien# TEST MPLS encap/decap and forwarding using INET as encapsulated protocol
2990075Sobrien# Setup four routers connected like this: R1---R2---R3---R4--
3090075Sobrien# Goal is to be able to ping from R1 the outermost interface of R4
31132718Skan# Disable net.inet.ip.forwarding, enable net.mpls.forwarding
3290075Sobrien# Add route on R1 in order to encapsulate into MPLS the IP packets with
3390075Sobrien#     destination equal to R4 right hand side interface
3490075Sobrien# Add MPLS routes on R2 in order to forward frames belonging to that FEC to R3
3590075Sobrien# Add MPLS "POP" route on R3 for that FEC, pointing to R4
3690075Sobrien# Do the same for the reverse direction (R4 to R1)
3790075Sobrien# ping from R1 to R4 right hand side interface
38169689Skan
3990075Sobrien
4090075SobrienRUMP_SERVER1=unix://./r1
4190075SobrienRUMP_SERVER2=unix://./r2
4290075SobrienRUMP_SERVER3=unix://./r3
4390075SobrienRUMP_SERVER4=unix://./r4
4490075Sobrien
4590075SobrienRUMP_FLAGS=\
4690075Sobrien"-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_shmif"
47132718Skan
48132718Skanatf_test_case mplsfw4 cleanup
49132718Skanmplsfw4_head()
50132718Skan{
5190075Sobrien
52132718Skan	atf_set "descr" "IP/MPLS forwarding test using PHP"
53132718Skan	atf_set "require.progs" "rump_server"
54132718Skan}
5590075Sobrien
56132718Skanstartservers()
57132718Skan{
58132718Skan
59132718Skan	ulimit -r 300
60132718Skan	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
61132718Skan	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER2}
62132718Skan	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER3}
63132718Skan	atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER4}
64132718Skan}
6590075Sobrien
66132718Skanconfigservers()
67132718Skan{
68132718Skan
69132718Skan	# Setup the first server
7090075Sobrien	export RUMP_SERVER=${RUMP_SERVER1}
71132718Skan	atf_check -s exit:0 rump.ifconfig shmif0 create
72132718Skan	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
73132718Skan	atf_check -s exit:0 rump.ifconfig shmif0 10.0.1.1/24
7490075Sobrien	atf_check -s exit:0 rump.ifconfig mpls0 create up
75132718Skan	atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
76132718Skan	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
77132718Skan	atf_check -s exit:0 rump.route -q add 10.0.4.0/24 -ifa 10.0.1.1 \
78132718Skan	    -ifp mpls0 -tag 25 -inet 10.0.1.2
79132718Skan
80132718Skan	# Setup the second server
81132718Skan	export RUMP_SERVER=${RUMP_SERVER2}
82132718Skan	atf_check -s exit:0 rump.ifconfig shmif0 create
83132718Skan	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
84132718Skan	atf_check -s exit:0 rump.ifconfig shmif0 10.0.1.2/24
8596263Sobrien	atf_check -s exit:0 rump.ifconfig shmif1 create
8696263Sobrien	atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom2
8796263Sobrien	atf_check -s exit:0 rump.ifconfig shmif1 10.0.2.1/24
8896263Sobrien	atf_check -s exit:0 rump.ifconfig mpls0 create up
8990075Sobrien	atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
9090075Sobrien	atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
91169689Skan	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
92169689Skan	atf_check -s exit:0 rump.route -q add -mpls 25 -tag 30 -inet 10.0.2.2
9390075Sobrien	atf_check -s exit:0 rump.route -q add -mpls 27 -tag ${1} -inet 10.0.1.1
9490075Sobrien
9590075Sobrien	# Setup the third server
96132718Skan	export RUMP_SERVER=${RUMP_SERVER3}
9790075Sobrien	atf_check -s exit:0 rump.ifconfig shmif0 create
9890075Sobrien	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom2
9990075Sobrien	atf_check -s exit:0 rump.ifconfig shmif0 10.0.2.2/24
10090075Sobrien	atf_check -s exit:0 rump.ifconfig shmif1 create
101132718Skan	atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom3
102132718Skan	atf_check -s exit:0 rump.ifconfig shmif1 10.0.3.1/24
10390075Sobrien	atf_check -s exit:0 rump.ifconfig mpls0 create up
104132718Skan	atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
10590075Sobrien	atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
10690075Sobrien	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
10790075Sobrien	atf_check -s exit:0 rump.route -q add -mpls 30 -tag ${1} -inet 10.0.3.2
10890075Sobrien	atf_check -s exit:0 rump.route -q add -mpls 26 -tag 27 -inet 10.0.2.1
10990075Sobrien
11090075Sobrien	# Setup the fourth server
11190075Sobrien	export RUMP_SERVER=${RUMP_SERVER4}
112132718Skan	atf_check -s exit:0 rump.ifconfig shmif0 create
11390075Sobrien	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom3
11490075Sobrien	atf_check -s exit:0 rump.ifconfig shmif0 10.0.3.2/24
11590075Sobrien	atf_check -s exit:0 rump.ifconfig shmif1 create
11690075Sobrien	atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom4
11790075Sobrien	atf_check -s exit:0 rump.ifconfig shmif1 10.0.4.1/24
11890075Sobrien	atf_check -s exit:0 rump.ifconfig mpls0 create up
119132718Skan	atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
12090075Sobrien	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
121132718Skan	atf_check -s exit:0 rump.route -q add 10.0.1.0/24 -ifa 10.0.3.2 \
122169689Skan	    -ifp mpls0 -tag 26 -inet 10.0.3.1
12390075Sobrien
12490075Sobrien	unset RUMP_SERVER
12590075Sobrien}
126132718Skan
12790075Sobriendoping()
128132718Skan{
12990075Sobrien
13090075Sobrien	export RUMP_SERVER=${RUMP_SERVER1}
13190075Sobrien	atf_check -s exit:0 -o match:"64 bytes from 10.0.4.1: icmp_seq=" \
13290075Sobrien	    rump.ping -n -o -w 5 10.0.4.1
133132718Skan	unset RUMP_SERVER
13490075Sobrien}
13590075Sobrien
13690075Sobriendocleanup()
13790075Sobrien{
138117395Skan
139117395Skan	RUMP_SERVER=${RUMP_SERVER1} rump.halt
14090075Sobrien	RUMP_SERVER=${RUMP_SERVER2} rump.halt
14190075Sobrien	RUMP_SERVER=${RUMP_SERVER3} rump.halt
14290075Sobrien	RUMP_SERVER=${RUMP_SERVER4} rump.halt
14390075Sobrien}
14490075Sobrien
14590075Sobrienmplsfw4_body()
14690075Sobrien{
14790075Sobrien
14890075Sobrien	startservers
14990075Sobrien	configservers 3
15090075Sobrien	doping
15190075Sobrien}
15290075Sobrien
15390075Sobrienmplsfw4_cleanup()
15490075Sobrien{
15590075Sobrien
15690075Sobrien	docleanup
15790075Sobrien}
15890075Sobrien
15990075Sobrien
16090075Sobrienatf_test_case mplsfw4_expl cleanup
16190075Sobrienmplsfw4_expl_head()
16290075Sobrien{
16390075Sobrien
16490075Sobrien	atf_set "descr" "IP/MPLS forwarding test using explicit NULL labels"
16590075Sobrien	atf_set "require.progs" "rump_server"
16690075Sobrien}
16790075Sobrien
16890075Sobrienmplsfw4_expl_body()
16990075Sobrien{
17090075Sobrien
17190075Sobrien	startservers
17290075Sobrien	configservers 0
17390075Sobrien	doping
17490075Sobrien}
17590075Sobrien
17690075Sobrienmplsfw4_expl_cleanup()
17790075Sobrien{
17890075Sobrien
17990075Sobrien	docleanup
18090075Sobrien}
18190075Sobrien
18290075Sobrien
18390075Sobrienatf_init_test_cases()
18490075Sobrien{ 
185132718Skan
18690075Sobrien	atf_add_test_case mplsfw4
18790075Sobrien	atf_add_test_case mplsfw4_expl
18890075Sobrien} 
18990075Sobrien