t_ldp_regen.sh revision 272458
139211Sgibbs# $NetBSD: t_ldp_regen.sh,v 1.4 2014/09/01 06:38:35 gson Exp $
239211Sgibbs#
339211Sgibbs# Copyright (c) 2013 The NetBSD Foundation, Inc.
439211Sgibbs# All rights reserved.
539211Sgibbs#
639211Sgibbs# Redistribution and use in source and binary forms, with or without
739211Sgibbs# modification, are permitted provided that the following conditions
839211Sgibbs# are met:
939211Sgibbs# 1. Redistributions of source code must retain the above copyright
1039211Sgibbs#    notice, this list of conditions and the following disclaimer.
1139211Sgibbs# 2. Redistributions in binary form must reproduce the above copyright
1239211Sgibbs#    notice, this list of conditions and the following disclaimer in the
1339211Sgibbs#    documentation and/or other materials provided with the distribution.
1439211Sgibbs#
1539211Sgibbs# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1639211Sgibbs# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
1739211Sgibbs# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1839211Sgibbs# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
1939211Sgibbs# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2039211Sgibbs# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2139211Sgibbs# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2239211Sgibbs# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2339211Sgibbs# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2439211Sgibbs# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2539211Sgibbs# POSSIBILITY OF SUCH DAMAGE.
2639211Sgibbs#
2739211Sgibbs
2839211Sgibbs# IP/MPLS & LDP label reallocation test
2983551Sdillon# Create 4 routers connected like this: R1--R2--R3--R4--
3083551Sdillon# The goal is to push packets from R1 to the R4 shmif1 (the right one) interface
3183551Sdillon# Enable MPLS forwarding on R2
3239211Sgibbs# Disable IP forwarding and enable MPLS forwarding on R3
3339211Sgibbs# Start ldpd and wait for adjancencies to come up
3439211Sgibbs# Add an alias on shmif1 on R4 for which we already have a route on R3
35110998Sphk# Now: * R4 should install label IMPLNULL for that prefix
3681133Stmm#      * R3 should realloc the target label from IMPLNULL to something else
3739211Sgibbs
3839451Sken
3939211SgibbsRUMP_SERVER1=unix://./r1
4081133StmmRUMP_SERVER2=unix://./r2
4181133StmmRUMP_SERVER3=unix://./r3
4239211SgibbsRUMP_SERVER4=unix://./r4
4339211Sgibbs
4439211SgibbsRUMP_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif"
4581133StmmLDP_FLAGS=""
4681133Stmm
47121064Sbdeatf_test_case ldp_regen cleanup
4839211Sgibbsldp_regen_head() {
4939211Sgibbs
5039211Sgibbs	atf_set "descr" "IP/MPLS and LDP label regeneration test"
51113710Sphk	atf_set "require.progs" "rump_server"
52113710Sphk	atf_set "use.fs" "true"
53113710Sphk}
54113710Sphk
55113710Sphknewaddr_and_ping() {
56113710Sphk
57113710Sphk	# Add new address on R4
58113710Sphk	RUMP_SERVER=${RUMP_SERVER4} atf_check -s exit:0 \
5981133Stmm		rump.ifconfig shmif1 10.0.5.1/24 alias
6081133Stmm
6181133Stmm	# Now ldpd on R5 should take notice of the new route and announce it
6281883Sken	# to R4's ldpd. ldpd on R4 should verify that the next hop
6381883Sken	# corresponds to its routing table and change its tag entry
6481133Stmm	RUMP_SERVER=${RUMP_SERVER1} atf_check -s exit:0 -o ignore -e ignore \
6581133Stmm		rump.ping -n -o -w 5 10.0.5.1
6639211Sgibbs}
6739211Sgibbs
6839211Sgibbscreate_servers() {
6939211Sgibbs
7039211Sgibbs	# allows us to run as normal user
7139211Sgibbs	ulimit -r 400
7239211Sgibbs
7339211Sgibbs	atf_check -s exit:0 rump_server ${RUMP_LIBS} ${RUMP_SERVER1}
7439211Sgibbs	atf_check -s exit:0 rump_server ${RUMP_LIBS} ${RUMP_SERVER2}
7539211Sgibbs	atf_check -s exit:0 rump_server ${RUMP_LIBS} ${RUMP_SERVER3}
7639211Sgibbs	atf_check -s exit:0 rump_server ${RUMP_LIBS} ${RUMP_SERVER4}
7739211Sgibbs
7839211Sgibbs	# LDP HIJACK
7939211Sgibbs	export RUMPHIJACK=path=/rump,socket=all,sysctl=yes
8039211Sgibbs	export LD_PRELOAD=/usr/lib/librumphijack.so
8139211Sgibbs
8239211Sgibbs	# Setup first server
8339211Sgibbs	export RUMP_SERVER=${RUMP_SERVER1}
8439211Sgibbs	atf_check -s exit:0 rump.ifconfig shmif0 create
8539211Sgibbs	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
8639211Sgibbs	atf_check -s exit:0 rump.ifconfig shmif0 10.0.1.1/24
8739211Sgibbs	atf_check -s exit:0 rump.ifconfig mpls0 create up
8839211Sgibbs	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
8939211Sgibbs	atf_check -s exit:0 rump.route -q add 10.0.4.0/24 10.0.1.2
9039211Sgibbs	atf_check -s exit:0 rump.route -q add 10.0.5.0/24 10.0.1.2
9139211Sgibbs	atf_check -s exit:0 /usr/sbin/ldpd ${LDP_FLAGS}
9239211Sgibbs
9381133Stmm	# Setup second server
9481133Stmm	export RUMP_SERVER=${RUMP_SERVER2}
9581133Stmm	atf_check -s exit:0 rump.ifconfig shmif0 create
9681133Stmm	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
9781133Stmm	atf_check -s exit:0 rump.ifconfig shmif0 10.0.1.2/24
9881133Stmm	atf_check -s exit:0 rump.ifconfig shmif1 create
9981133Stmm	atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom2
10081133Stmm	atf_check -s exit:0 rump.ifconfig shmif1 10.0.2.1/24
10181133Stmm	atf_check -s exit:0 rump.ifconfig mpls0 create up
10281133Stmm	atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
10381133Stmm	atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
104112405Sphk	# This one should still do ip forwarding because it announces IMPLNULL
10581133Stmm	# for the 10.0.1.0/24 subnet
10681133Stmm	atf_check -s exit:0 rump.route -q add 10.0.4.0/24 10.0.2.2
10781133Stmm	atf_check -s exit:0 rump.route -q add 10.0.5.0/24 10.0.2.2
10881133Stmm	atf_check -s exit:0 /usr/sbin/ldpd ${LDP_FLAGS}
10981133Stmm
11081133Stmm	# Setup third server
11181133Stmm	export RUMP_SERVER=${RUMP_SERVER3}
11281133Stmm	atf_check -s exit:0 rump.ifconfig shmif0 create
11381133Stmm	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom2
11481133Stmm	atf_check -s exit:0 rump.ifconfig shmif0 10.0.2.2/24
11581133Stmm	atf_check -s exit:0 rump.ifconfig shmif1 create
11681133Stmm	atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom3
11781133Stmm	atf_check -s exit:0 rump.ifconfig shmif1 10.0.3.1/24
11881133Stmm	atf_check -s exit:0 rump.ifconfig mpls0 create up
11981133Stmm	atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
12081133Stmm	atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
12181133Stmm	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
12281133Stmm	atf_check -s exit:0 rump.route -q add 10.0.1.0/24 10.0.2.1
12381883Sken	atf_check -s exit:0 rump.route -q add 10.0.4.0/24 10.0.3.2
124112406Sphk	atf_check -s exit:0 rump.route -q add 10.0.5.0/24 10.0.3.2
125112405Sphk	atf_check -s exit:0 /usr/sbin/ldpd ${LDP_FLAGS}
126112405Sphk
127112405Sphk	# Setup fourth server
128112405Sphk	export RUMP_SERVER=${RUMP_SERVER4}
129112405Sphk	atf_check -s exit:0 rump.ifconfig shmif0 create
130112405Sphk	atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom3
131112405Sphk	atf_check -s exit:0 rump.ifconfig shmif0 10.0.3.2/24
132112405Sphk	atf_check -s exit:0 rump.ifconfig shmif1 create
133112373Sphk	atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom4
134112373Sphk	atf_check -s exit:0 rump.ifconfig shmif1 10.0.4.1/24
135112373Sphk	atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
136244270Strociny	atf_check -s exit:0 rump.ifconfig mpls0 create up
137244270Strociny	atf_check -s exit:0 rump.route -q add 10.0.1.0/24 10.0.3.1
138244270Strociny	atf_check -s exit:0 /usr/sbin/ldpd ${LDP_FLAGS}
139244270Strociny
140244270Strociny	unset RUMP_SERVER
141244270Strociny	unset LD_PRELOAD
14281133Stmm	unset RUMPHIJACK
14381133Stmm}
14483868Sken
14581133Stmmwait_ldp_ok() {
14681133Stmm
14781133Stmm	RUMP_SERVER=${RUMP_SERVER1} atf_check -s exit:0 -o ignore -e ignore \
14881133Stmm		rump.ping -o -w 60 10.0.4.1
14981133Stmm}
15081133Stmm
15181133Stmmdocleanup() {
15281133Stmm
15381133Stmm	RUMP_SERVER=${RUMP_SERVER1} rump.halt
15481133Stmm	RUMP_SERVER=${RUMP_SERVER2} rump.halt
15581133Stmm	RUMP_SERVER=${RUMP_SERVER3} rump.halt
15639211Sgibbs	RUMP_SERVER=${RUMP_SERVER4} rump.halt
15739211Sgibbs}
15839211Sgibbs
15939211Sgibbsldp_regen_body() {
16081133Stmm
16183868Sken        if sysctl machdep.cpu_brand | grep QEMU >/dev/null 2>&1
16281133Stmm	then
16339211Sgibbs	    atf_skip "unreliable under qemu, skip until PR kern/43997 fixed"
16481133Stmm	fi
16581133Stmm	create_servers
16681133Stmm	wait_ldp_ok
16739211Sgibbs	newaddr_and_ping
16881133Stmm}
16939211Sgibbs
17039211Sgibbsldp_regen_cleanup() {
17139211Sgibbs
17239211Sgibbs	docleanup
17339211Sgibbs}
17439211Sgibbs
17539211Sgibbsatf_init_test_cases() {
17639211Sgibbs
17739211Sgibbs	atf_add_test_case ldp_regen
17881133Stmm}
17981133Stmm