xref: /linux/tools/testing/selftests/drivers/net/mlxsw/fib_offload.sh (revision 0898782247ae533d1f4e47a06bc5d4870931b284)
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