1*12ee8220SIdo Schimmel#!/bin/bash 2*12ee8220SIdo Schimmel# SPDX-License-Identifier: GPL-2.0 3*12ee8220SIdo Schimmel# 4*12ee8220SIdo Schimmel# Test unicast FIB offload indication. 5*12ee8220SIdo Schimmel 6*12ee8220SIdo Schimmellib_dir=$(dirname $0)/../../../net/forwarding 7*12ee8220SIdo Schimmel 8*12ee8220SIdo SchimmelALL_TESTS=" 9*12ee8220SIdo Schimmel ipv6_route_add 10*12ee8220SIdo Schimmel ipv6_route_replace 11*12ee8220SIdo Schimmel ipv6_route_nexthop_group_share 12*12ee8220SIdo Schimmel ipv6_route_rate 13*12ee8220SIdo Schimmel" 14*12ee8220SIdo SchimmelNUM_NETIFS=4 15*12ee8220SIdo Schimmelsource $lib_dir/lib.sh 16*12ee8220SIdo Schimmelsource $lib_dir/devlink_lib.sh 17*12ee8220SIdo Schimmel 18*12ee8220SIdo Schimmeltor1_create() 19*12ee8220SIdo Schimmel{ 20*12ee8220SIdo Schimmel simple_if_init $tor1_p1 2001:db8:1::2/128 2001:db8:1::3/128 21*12ee8220SIdo Schimmel} 22*12ee8220SIdo Schimmel 23*12ee8220SIdo Schimmeltor1_destroy() 24*12ee8220SIdo Schimmel{ 25*12ee8220SIdo Schimmel simple_if_fini $tor1_p1 2001:db8:1::2/128 2001:db8:1::3/128 26*12ee8220SIdo Schimmel} 27*12ee8220SIdo Schimmel 28*12ee8220SIdo Schimmeltor2_create() 29*12ee8220SIdo Schimmel{ 30*12ee8220SIdo Schimmel simple_if_init $tor2_p1 2001:db8:2::2/128 2001:db8:2::3/128 31*12ee8220SIdo Schimmel} 32*12ee8220SIdo Schimmel 33*12ee8220SIdo Schimmeltor2_destroy() 34*12ee8220SIdo Schimmel{ 35*12ee8220SIdo Schimmel simple_if_fini $tor2_p1 2001:db8:2::2/128 2001:db8:2::3/128 36*12ee8220SIdo Schimmel} 37*12ee8220SIdo Schimmel 38*12ee8220SIdo Schimmelspine_create() 39*12ee8220SIdo Schimmel{ 40*12ee8220SIdo Schimmel ip link set dev $spine_p1 up 41*12ee8220SIdo Schimmel ip link set dev $spine_p2 up 42*12ee8220SIdo Schimmel 43*12ee8220SIdo Schimmel __addr_add_del $spine_p1 add 2001:db8:1::1/64 44*12ee8220SIdo Schimmel __addr_add_del $spine_p2 add 2001:db8:2::1/64 45*12ee8220SIdo Schimmel} 46*12ee8220SIdo Schimmel 47*12ee8220SIdo Schimmelspine_destroy() 48*12ee8220SIdo Schimmel{ 49*12ee8220SIdo Schimmel __addr_add_del $spine_p2 del 2001:db8:2::1/64 50*12ee8220SIdo Schimmel __addr_add_del $spine_p1 del 2001:db8:1::1/64 51*12ee8220SIdo Schimmel 52*12ee8220SIdo Schimmel ip link set dev $spine_p2 down 53*12ee8220SIdo Schimmel ip link set dev $spine_p1 down 54*12ee8220SIdo Schimmel} 55*12ee8220SIdo Schimmel 56*12ee8220SIdo Schimmelipv6_offload_check() 57*12ee8220SIdo Schimmel{ 58*12ee8220SIdo Schimmel local pfx="$1"; shift 59*12ee8220SIdo Schimmel local expected_num=$1; shift 60*12ee8220SIdo Schimmel local num 61*12ee8220SIdo Schimmel 62*12ee8220SIdo Schimmel # Try to avoid races with route offload 63*12ee8220SIdo Schimmel sleep .1 64*12ee8220SIdo Schimmel 65*12ee8220SIdo Schimmel num=$(ip -6 route show match ${pfx} | grep "offload" | wc -l) 66*12ee8220SIdo Schimmel 67*12ee8220SIdo Schimmel if [ $num -eq $expected_num ]; then 68*12ee8220SIdo Schimmel return 0 69*12ee8220SIdo Schimmel fi 70*12ee8220SIdo Schimmel 71*12ee8220SIdo Schimmel return 1 72*12ee8220SIdo Schimmel} 73*12ee8220SIdo Schimmel 74*12ee8220SIdo Schimmelipv6_route_add_prefix() 75*12ee8220SIdo Schimmel{ 76*12ee8220SIdo Schimmel RET=0 77*12ee8220SIdo Schimmel 78*12ee8220SIdo Schimmel # Add a prefix route and check that it is offloaded. 79*12ee8220SIdo Schimmel ip -6 route add 2001:db8:3::/64 dev $spine_p1 metric 100 80*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 dev $spine_p1 metric 100" 1 81*12ee8220SIdo Schimmel check_err $? "prefix route not offloaded" 82*12ee8220SIdo Schimmel 83*12ee8220SIdo Schimmel # Append an identical prefix route with an higher metric and check that 84*12ee8220SIdo Schimmel # offload indication did not change. 85*12ee8220SIdo Schimmel ip -6 route append 2001:db8:3::/64 dev $spine_p1 metric 200 86*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 dev $spine_p1 metric 100" 1 87*12ee8220SIdo Schimmel check_err $? "lowest metric not offloaded after append" 88*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 dev $spine_p1 metric 200" 0 89*12ee8220SIdo Schimmel check_err $? "highest metric offloaded when should not" 90*12ee8220SIdo Schimmel 91*12ee8220SIdo Schimmel # Prepend an identical prefix route with lower metric and check that 92*12ee8220SIdo Schimmel # it is offloaded and the others are not. 93*12ee8220SIdo Schimmel ip -6 route append 2001:db8:3::/64 dev $spine_p1 metric 10 94*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 dev $spine_p1 metric 10" 1 95*12ee8220SIdo Schimmel check_err $? "lowest metric not offloaded after prepend" 96*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 dev $spine_p1 metric 100" 0 97*12ee8220SIdo Schimmel check_err $? "mid metric offloaded when should not" 98*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 dev $spine_p1 metric 200" 0 99*12ee8220SIdo Schimmel check_err $? "highest metric offloaded when should not" 100*12ee8220SIdo Schimmel 101*12ee8220SIdo Schimmel # Delete the routes and add the same route with a different nexthop 102*12ee8220SIdo Schimmel # device. Check that it is offloaded. 103*12ee8220SIdo Schimmel ip -6 route flush 2001:db8:3::/64 dev $spine_p1 104*12ee8220SIdo Schimmel ip -6 route add 2001:db8:3::/64 dev $spine_p2 105*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 dev $spine_p2" 1 106*12ee8220SIdo Schimmel 107*12ee8220SIdo Schimmel log_test "IPv6 prefix route add" 108*12ee8220SIdo Schimmel 109*12ee8220SIdo Schimmel ip -6 route flush 2001:db8:3::/64 110*12ee8220SIdo Schimmel} 111*12ee8220SIdo Schimmel 112*12ee8220SIdo Schimmelipv6_route_add_mpath() 113*12ee8220SIdo Schimmel{ 114*12ee8220SIdo Schimmel RET=0 115*12ee8220SIdo Schimmel 116*12ee8220SIdo Schimmel # Add a multipath route and check that it is offloaded. 117*12ee8220SIdo Schimmel ip -6 route add 2001:db8:3::/64 metric 100 \ 118*12ee8220SIdo Schimmel nexthop via 2001:db8:1::2 dev $spine_p1 \ 119*12ee8220SIdo Schimmel nexthop via 2001:db8:2::2 dev $spine_p2 120*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 2 121*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded when should" 122*12ee8220SIdo Schimmel 123*12ee8220SIdo Schimmel # Append another nexthop and check that it is offloaded as well. 124*12ee8220SIdo Schimmel ip -6 route append 2001:db8:3::/64 metric 100 \ 125*12ee8220SIdo Schimmel nexthop via 2001:db8:1::3 dev $spine_p1 126*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 3 127*12ee8220SIdo Schimmel check_err $? "appended nexthop not offloaded when should" 128*12ee8220SIdo Schimmel 129*12ee8220SIdo Schimmel # Mimic route replace by removing the route and adding it back with 130*12ee8220SIdo Schimmel # only two nexthops. 131*12ee8220SIdo Schimmel ip -6 route del 2001:db8:3::/64 132*12ee8220SIdo Schimmel ip -6 route add 2001:db8:3::/64 metric 100 \ 133*12ee8220SIdo Schimmel nexthop via 2001:db8:1::2 dev $spine_p1 \ 134*12ee8220SIdo Schimmel nexthop via 2001:db8:2::2 dev $spine_p2 135*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 2 136*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded after delete & add" 137*12ee8220SIdo Schimmel 138*12ee8220SIdo Schimmel # Append a nexthop with an higher metric and check that the offload 139*12ee8220SIdo Schimmel # indication did not change. 140*12ee8220SIdo Schimmel ip -6 route append 2001:db8:3::/64 metric 200 \ 141*12ee8220SIdo Schimmel nexthop via 2001:db8:1::3 dev $spine_p1 142*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 2 143*12ee8220SIdo Schimmel check_err $? "lowest metric not offloaded after append" 144*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 200" 0 145*12ee8220SIdo Schimmel check_err $? "highest metric offloaded when should not" 146*12ee8220SIdo Schimmel 147*12ee8220SIdo Schimmel # Prepend a nexthop with a lower metric and check that it is offloaded 148*12ee8220SIdo Schimmel # and the others are not. 149*12ee8220SIdo Schimmel ip -6 route append 2001:db8:3::/64 metric 10 \ 150*12ee8220SIdo Schimmel nexthop via 2001:db8:1::3 dev $spine_p1 151*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 10" 1 152*12ee8220SIdo Schimmel check_err $? "lowest metric not offloaded after prepend" 153*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 0 154*12ee8220SIdo Schimmel check_err $? "mid metric offloaded when should not" 155*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 200" 0 156*12ee8220SIdo Schimmel check_err $? "highest metric offloaded when should not" 157*12ee8220SIdo Schimmel 158*12ee8220SIdo Schimmel log_test "IPv6 multipath route add" 159*12ee8220SIdo Schimmel 160*12ee8220SIdo Schimmel ip -6 route flush 2001:db8:3::/64 161*12ee8220SIdo Schimmel} 162*12ee8220SIdo Schimmel 163*12ee8220SIdo Schimmelipv6_route_add() 164*12ee8220SIdo Schimmel{ 165*12ee8220SIdo Schimmel ipv6_route_add_prefix 166*12ee8220SIdo Schimmel ipv6_route_add_mpath 167*12ee8220SIdo Schimmel} 168*12ee8220SIdo Schimmel 169*12ee8220SIdo Schimmelipv6_route_replace() 170*12ee8220SIdo Schimmel{ 171*12ee8220SIdo Schimmel RET=0 172*12ee8220SIdo Schimmel 173*12ee8220SIdo Schimmel # Replace prefix route with prefix route. 174*12ee8220SIdo Schimmel ip -6 route add 2001:db8:3::/64 metric 100 dev $spine_p1 175*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 1 176*12ee8220SIdo Schimmel check_err $? "prefix route not offloaded when should" 177*12ee8220SIdo Schimmel ip -6 route replace 2001:db8:3::/64 metric 100 dev $spine_p2 178*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 1 179*12ee8220SIdo Schimmel check_err $? "prefix route not offloaded after replace" 180*12ee8220SIdo Schimmel 181*12ee8220SIdo Schimmel # Replace prefix route with multipath route. 182*12ee8220SIdo Schimmel ip -6 route replace 2001:db8:3::/64 metric 100 \ 183*12ee8220SIdo Schimmel nexthop via 2001:db8:1::2 dev $spine_p1 \ 184*12ee8220SIdo Schimmel nexthop via 2001:db8:2::2 dev $spine_p2 185*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 2 186*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded after replace" 187*12ee8220SIdo Schimmel 188*12ee8220SIdo Schimmel # Replace multipath route with prefix route. A prefix route cannot 189*12ee8220SIdo Schimmel # replace a multipath route, so it is appended. 190*12ee8220SIdo Schimmel ip -6 route replace 2001:db8:3::/64 metric 100 dev $spine_p1 191*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100 dev $spine_p1" 0 192*12ee8220SIdo Schimmel check_err $? "prefix route offloaded after 'replacing' multipath route" 193*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 2 194*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded after being 'replaced' by prefix route" 195*12ee8220SIdo Schimmel 196*12ee8220SIdo Schimmel # Replace multipath route with multipath route. 197*12ee8220SIdo Schimmel ip -6 route replace 2001:db8:3::/64 metric 100 \ 198*12ee8220SIdo Schimmel nexthop via 2001:db8:1::3 dev $spine_p1 \ 199*12ee8220SIdo Schimmel nexthop via 2001:db8:2::3 dev $spine_p2 200*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 2 201*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded after replacing multipath route" 202*12ee8220SIdo Schimmel 203*12ee8220SIdo Schimmel # Replace a non-existing multipath route with a multipath route and 204*12ee8220SIdo Schimmel # check that it is appended and not offloaded. 205*12ee8220SIdo Schimmel ip -6 route replace 2001:db8:3::/64 metric 200 \ 206*12ee8220SIdo Schimmel nexthop via 2001:db8:1::3 dev $spine_p1 \ 207*12ee8220SIdo Schimmel nexthop via 2001:db8:2::3 dev $spine_p2 208*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 100" 2 209*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded after non-existing route was 'replaced'" 210*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64 metric 200" 0 211*12ee8220SIdo Schimmel check_err $? "multipath route offloaded after 'replacing' non-existing route" 212*12ee8220SIdo Schimmel 213*12ee8220SIdo Schimmel log_test "IPv6 route replace" 214*12ee8220SIdo Schimmel 215*12ee8220SIdo Schimmel ip -6 route flush 2001:db8:3::/64 216*12ee8220SIdo Schimmel} 217*12ee8220SIdo Schimmel 218*12ee8220SIdo Schimmelipv6_route_nexthop_group_share() 219*12ee8220SIdo Schimmel{ 220*12ee8220SIdo Schimmel RET=0 221*12ee8220SIdo Schimmel 222*12ee8220SIdo Schimmel # The driver consolidates identical nexthop groups in order to reduce 223*12ee8220SIdo Schimmel # the resource usage in its adjacency table. Check that the deletion 224*12ee8220SIdo Schimmel # of one multipath route using the group does not affect the other. 225*12ee8220SIdo Schimmel ip -6 route add 2001:db8:3::/64 \ 226*12ee8220SIdo Schimmel nexthop via 2001:db8:1::2 dev $spine_p1 \ 227*12ee8220SIdo Schimmel nexthop via 2001:db8:2::2 dev $spine_p2 228*12ee8220SIdo Schimmel ip -6 route add 2001:db8:4::/64 \ 229*12ee8220SIdo Schimmel nexthop via 2001:db8:1::2 dev $spine_p1 \ 230*12ee8220SIdo Schimmel nexthop via 2001:db8:2::2 dev $spine_p2 231*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64" 2 232*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded when should" 233*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:4::/64" 2 234*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded when should" 235*12ee8220SIdo Schimmel ip -6 route del 2001:db8:3::/64 236*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:4::/64" 2 237*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded after deletion of route sharing the nexthop group" 238*12ee8220SIdo Schimmel 239*12ee8220SIdo Schimmel # Check that after unsharing a nexthop group the routes are still 240*12ee8220SIdo Schimmel # marked as offloaded. 241*12ee8220SIdo Schimmel ip -6 route add 2001:db8:3::/64 \ 242*12ee8220SIdo Schimmel nexthop via 2001:db8:1::2 dev $spine_p1 \ 243*12ee8220SIdo Schimmel nexthop via 2001:db8:2::2 dev $spine_p2 244*12ee8220SIdo Schimmel ip -6 route del 2001:db8:4::/64 \ 245*12ee8220SIdo Schimmel nexthop via 2001:db8:1::2 dev $spine_p1 246*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:4::/64" 1 247*12ee8220SIdo Schimmel check_err $? "singlepath route not offloaded after unsharing the nexthop group" 248*12ee8220SIdo Schimmel ipv6_offload_check "2001:db8:3::/64" 2 249*12ee8220SIdo Schimmel check_err $? "multipath route not offloaded after unsharing the nexthop group" 250*12ee8220SIdo Schimmel 251*12ee8220SIdo Schimmel log_test "IPv6 nexthop group sharing" 252*12ee8220SIdo Schimmel 253*12ee8220SIdo Schimmel ip -6 route flush 2001:db8:3::/64 254*12ee8220SIdo Schimmel ip -6 route flush 2001:db8:4::/64 255*12ee8220SIdo Schimmel} 256*12ee8220SIdo Schimmel 257*12ee8220SIdo Schimmelipv6_route_rate() 258*12ee8220SIdo Schimmel{ 259*12ee8220SIdo Schimmel local batch_dir=$(mktemp -d) 260*12ee8220SIdo Schimmel local num_rts=$((40 * 1024)) 261*12ee8220SIdo Schimmel local num_nhs=16 262*12ee8220SIdo Schimmel local total 263*12ee8220SIdo Schimmel local start 264*12ee8220SIdo Schimmel local diff 265*12ee8220SIdo Schimmel local end 266*12ee8220SIdo Schimmel local nhs 267*12ee8220SIdo Schimmel local i 268*12ee8220SIdo Schimmel 269*12ee8220SIdo Schimmel RET=0 270*12ee8220SIdo Schimmel 271*12ee8220SIdo Schimmel # Prepare 40K /64 multipath routes with 16 nexthops each and check how 272*12ee8220SIdo Schimmel # long it takes to add them. A limit of 60 seconds is set. It is much 273*12ee8220SIdo Schimmel # higher than insertion should take and meant to flag a serious 274*12ee8220SIdo Schimmel # regression. 275*12ee8220SIdo Schimmel total=$((nums_nhs * num_rts)) 276*12ee8220SIdo Schimmel 277*12ee8220SIdo Schimmel for i in $(seq 1 $num_nhs); do 278*12ee8220SIdo Schimmel ip -6 address add 2001:db8:1::10:$i/128 dev $tor1_p1 279*12ee8220SIdo Schimmel nexthops+=" nexthop via 2001:db8:1::10:$i dev $spine_p1" 280*12ee8220SIdo Schimmel done 281*12ee8220SIdo Schimmel 282*12ee8220SIdo Schimmel for i in $(seq 1 $num_rts); do 283*12ee8220SIdo Schimmel echo "route add 2001:db8:8:$(printf "%x" $i)::/64$nexthops" \ 284*12ee8220SIdo Schimmel >> $batch_dir/add.batch 285*12ee8220SIdo Schimmel echo "route del 2001:db8:8:$(printf "%x" $i)::/64$nexthops" \ 286*12ee8220SIdo Schimmel >> $batch_dir/del.batch 287*12ee8220SIdo Schimmel done 288*12ee8220SIdo Schimmel 289*12ee8220SIdo Schimmel start=$(date +%s.%N) 290*12ee8220SIdo Schimmel 291*12ee8220SIdo Schimmel ip -batch $batch_dir/add.batch 292*12ee8220SIdo Schimmel count=$(ip -6 route show | grep offload | wc -l) 293*12ee8220SIdo Schimmel while [ $count -lt $total ]; do 294*12ee8220SIdo Schimmel sleep .01 295*12ee8220SIdo Schimmel count=$(ip -6 route show | grep offload | wc -l) 296*12ee8220SIdo Schimmel done 297*12ee8220SIdo Schimmel 298*12ee8220SIdo Schimmel end=$(date +%s.%N) 299*12ee8220SIdo Schimmel 300*12ee8220SIdo Schimmel diff=$(echo "$end - $start" | bc -l) 301*12ee8220SIdo Schimmel test "$(echo "$diff > 60" | bc -l)" -eq 0 302*12ee8220SIdo Schimmel check_err $? "route insertion took too long" 303*12ee8220SIdo Schimmel log_info "inserted $num_rts routes in $diff seconds" 304*12ee8220SIdo Schimmel 305*12ee8220SIdo Schimmel log_test "IPv6 routes insertion rate" 306*12ee8220SIdo Schimmel 307*12ee8220SIdo Schimmel ip -batch $batch_dir/del.batch 308*12ee8220SIdo Schimmel for i in $(seq 1 $num_nhs); do 309*12ee8220SIdo Schimmel ip -6 address del 2001:db8:1::10:$i/128 dev $tor1_p1 310*12ee8220SIdo Schimmel done 311*12ee8220SIdo Schimmel rm -rf $batch_dir 312*12ee8220SIdo Schimmel} 313*12ee8220SIdo Schimmel 314*12ee8220SIdo Schimmelsetup_prepare() 315*12ee8220SIdo Schimmel{ 316*12ee8220SIdo Schimmel spine_p1=${NETIFS[p1]} 317*12ee8220SIdo Schimmel tor1_p1=${NETIFS[p2]} 318*12ee8220SIdo Schimmel 319*12ee8220SIdo Schimmel spine_p2=${NETIFS[p3]} 320*12ee8220SIdo Schimmel tor2_p1=${NETIFS[p4]} 321*12ee8220SIdo Schimmel 322*12ee8220SIdo Schimmel vrf_prepare 323*12ee8220SIdo Schimmel forwarding_enable 324*12ee8220SIdo Schimmel 325*12ee8220SIdo Schimmel tor1_create 326*12ee8220SIdo Schimmel tor2_create 327*12ee8220SIdo Schimmel spine_create 328*12ee8220SIdo Schimmel} 329*12ee8220SIdo Schimmel 330*12ee8220SIdo Schimmelcleanup() 331*12ee8220SIdo Schimmel{ 332*12ee8220SIdo Schimmel pre_cleanup 333*12ee8220SIdo Schimmel 334*12ee8220SIdo Schimmel spine_destroy 335*12ee8220SIdo Schimmel tor2_destroy 336*12ee8220SIdo Schimmel tor1_destroy 337*12ee8220SIdo Schimmel 338*12ee8220SIdo Schimmel forwarding_restore 339*12ee8220SIdo Schimmel vrf_cleanup 340*12ee8220SIdo Schimmel} 341*12ee8220SIdo Schimmel 342*12ee8220SIdo Schimmeltrap cleanup EXIT 343*12ee8220SIdo Schimmel 344*12ee8220SIdo Schimmelsetup_prepare 345*12ee8220SIdo Schimmelsetup_wait 346*12ee8220SIdo Schimmel 347*12ee8220SIdo Schimmeltests_run 348*12ee8220SIdo Schimmel 349*12ee8220SIdo Schimmelexit $EXIT_STATUS 350