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