1cab14d10SDavid Ahern#!/bin/bash
2cab14d10SDavid Ahern# SPDX-License-Identifier: GPL-2.0
3cab14d10SDavid Ahern
41beaff77SIdo SchimmelALL_TESTS="
51beaff77SIdo Schimmel	ping_ipv4
61beaff77SIdo Schimmel	ping_ipv6
71beaff77SIdo Schimmel	multipath_test
81beaff77SIdo Schimmel	ping_ipv4_blackhole
91beaff77SIdo Schimmel	ping_ipv6_blackhole
101beaff77SIdo Schimmel"
11cab14d10SDavid AhernNUM_NETIFS=8
12cab14d10SDavid Ahernsource lib.sh
13cab14d10SDavid Ahern
14cab14d10SDavid Ahernh1_create()
15cab14d10SDavid Ahern{
16cab14d10SDavid Ahern	vrf_create "vrf-h1"
17cab14d10SDavid Ahern	ip link set dev $h1 master vrf-h1
18cab14d10SDavid Ahern
19cab14d10SDavid Ahern	ip link set dev vrf-h1 up
20cab14d10SDavid Ahern	ip link set dev $h1 up
21cab14d10SDavid Ahern
22cab14d10SDavid Ahern	ip address add 192.0.2.2/24 dev $h1
23cab14d10SDavid Ahern	ip address add 2001:db8:1::2/64 dev $h1
24cab14d10SDavid Ahern
25cab14d10SDavid Ahern	ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1
26cab14d10SDavid Ahern	ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::1
27cab14d10SDavid Ahern}
28cab14d10SDavid Ahern
29cab14d10SDavid Ahernh1_destroy()
30cab14d10SDavid Ahern{
31cab14d10SDavid Ahern	ip route del 2001:db8:2::/64 vrf vrf-h1
32cab14d10SDavid Ahern	ip route del 198.51.100.0/24 vrf vrf-h1
33cab14d10SDavid Ahern
34cab14d10SDavid Ahern	ip address del 2001:db8:1::2/64 dev $h1
35cab14d10SDavid Ahern	ip address del 192.0.2.2/24 dev $h1
36cab14d10SDavid Ahern
37cab14d10SDavid Ahern	ip link set dev $h1 down
38cab14d10SDavid Ahern	vrf_destroy "vrf-h1"
39cab14d10SDavid Ahern}
40cab14d10SDavid Ahern
41cab14d10SDavid Ahernh2_create()
42cab14d10SDavid Ahern{
43cab14d10SDavid Ahern	vrf_create "vrf-h2"
44cab14d10SDavid Ahern	ip link set dev $h2 master vrf-h2
45cab14d10SDavid Ahern
46cab14d10SDavid Ahern	ip link set dev vrf-h2 up
47cab14d10SDavid Ahern	ip link set dev $h2 up
48cab14d10SDavid Ahern
49cab14d10SDavid Ahern	ip address add 198.51.100.2/24 dev $h2
50cab14d10SDavid Ahern	ip address add 2001:db8:2::2/64 dev $h2
51cab14d10SDavid Ahern
52cab14d10SDavid Ahern	ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1
53cab14d10SDavid Ahern	ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::1
54cab14d10SDavid Ahern}
55cab14d10SDavid Ahern
56cab14d10SDavid Ahernh2_destroy()
57cab14d10SDavid Ahern{
58cab14d10SDavid Ahern	ip route del 2001:db8:1::/64 vrf vrf-h2
59cab14d10SDavid Ahern	ip route del 192.0.2.0/24 vrf vrf-h2
60cab14d10SDavid Ahern
61cab14d10SDavid Ahern	ip address del 2001:db8:2::2/64 dev $h2
62cab14d10SDavid Ahern	ip address del 198.51.100.2/24 dev $h2
63cab14d10SDavid Ahern
64cab14d10SDavid Ahern	ip link set dev $h2 down
65cab14d10SDavid Ahern	vrf_destroy "vrf-h2"
66cab14d10SDavid Ahern}
67cab14d10SDavid Ahern
68cab14d10SDavid Ahernrouter1_create()
69cab14d10SDavid Ahern{
70cab14d10SDavid Ahern	vrf_create "vrf-r1"
71cab14d10SDavid Ahern	ip link set dev $rp11 master vrf-r1
72cab14d10SDavid Ahern	ip link set dev $rp12 master vrf-r1
73cab14d10SDavid Ahern	ip link set dev $rp13 master vrf-r1
74cab14d10SDavid Ahern
75cab14d10SDavid Ahern	ip link set dev vrf-r1 up
76cab14d10SDavid Ahern	ip link set dev $rp11 up
77cab14d10SDavid Ahern	ip link set dev $rp12 up
78cab14d10SDavid Ahern	ip link set dev $rp13 up
79cab14d10SDavid Ahern
80cab14d10SDavid Ahern	ip address add 192.0.2.1/24 dev $rp11
81cab14d10SDavid Ahern	ip address add 2001:db8:1::1/64 dev $rp11
82cab14d10SDavid Ahern
83cab14d10SDavid Ahern	ip address add 169.254.2.12/24 dev $rp12
84cab14d10SDavid Ahern	ip address add fe80:2::12/64 dev $rp12
85cab14d10SDavid Ahern
86cab14d10SDavid Ahern	ip address add 169.254.3.13/24 dev $rp13
87cab14d10SDavid Ahern	ip address add fe80:3::13/64 dev $rp13
88cab14d10SDavid Ahern}
89cab14d10SDavid Ahern
90cab14d10SDavid Ahernrouter1_destroy()
91cab14d10SDavid Ahern{
92cab14d10SDavid Ahern	ip route del 2001:db8:2::/64 vrf vrf-r1
93cab14d10SDavid Ahern	ip route del 198.51.100.0/24 vrf vrf-r1
94cab14d10SDavid Ahern
95cab14d10SDavid Ahern	ip address del fe80:3::13/64 dev $rp13
96cab14d10SDavid Ahern	ip address del 169.254.3.13/24 dev $rp13
97cab14d10SDavid Ahern
98cab14d10SDavid Ahern	ip address del fe80:2::12/64 dev $rp12
99cab14d10SDavid Ahern	ip address del 169.254.2.12/24 dev $rp12
100cab14d10SDavid Ahern
101cab14d10SDavid Ahern	ip address del 2001:db8:1::1/64 dev $rp11
102cab14d10SDavid Ahern	ip address del 192.0.2.1/24 dev $rp11
103cab14d10SDavid Ahern
104cab14d10SDavid Ahern	ip nexthop del id 103
105cab14d10SDavid Ahern	ip nexthop del id 101
106cab14d10SDavid Ahern	ip nexthop del id 102
107cab14d10SDavid Ahern	ip nexthop del id 106
108cab14d10SDavid Ahern	ip nexthop del id 104
109cab14d10SDavid Ahern	ip nexthop del id 105
110cab14d10SDavid Ahern
111cab14d10SDavid Ahern	ip link set dev $rp13 down
112cab14d10SDavid Ahern	ip link set dev $rp12 down
113cab14d10SDavid Ahern	ip link set dev $rp11 down
114cab14d10SDavid Ahern
115cab14d10SDavid Ahern	vrf_destroy "vrf-r1"
116cab14d10SDavid Ahern}
117cab14d10SDavid Ahern
118cab14d10SDavid Ahernrouter2_create()
119cab14d10SDavid Ahern{
120cab14d10SDavid Ahern	vrf_create "vrf-r2"
121cab14d10SDavid Ahern	ip link set dev $rp21 master vrf-r2
122cab14d10SDavid Ahern	ip link set dev $rp22 master vrf-r2
123cab14d10SDavid Ahern	ip link set dev $rp23 master vrf-r2
124cab14d10SDavid Ahern
125cab14d10SDavid Ahern	ip link set dev vrf-r2 up
126cab14d10SDavid Ahern	ip link set dev $rp21 up
127cab14d10SDavid Ahern	ip link set dev $rp22 up
128cab14d10SDavid Ahern	ip link set dev $rp23 up
129cab14d10SDavid Ahern
130cab14d10SDavid Ahern	ip address add 198.51.100.1/24 dev $rp21
131cab14d10SDavid Ahern	ip address add 2001:db8:2::1/64 dev $rp21
132cab14d10SDavid Ahern
133cab14d10SDavid Ahern	ip address add 169.254.2.22/24 dev $rp22
134cab14d10SDavid Ahern	ip address add fe80:2::22/64 dev $rp22
135cab14d10SDavid Ahern
136cab14d10SDavid Ahern	ip address add 169.254.3.23/24 dev $rp23
137cab14d10SDavid Ahern	ip address add fe80:3::23/64 dev $rp23
138cab14d10SDavid Ahern}
139cab14d10SDavid Ahern
140cab14d10SDavid Ahernrouter2_destroy()
141cab14d10SDavid Ahern{
142cab14d10SDavid Ahern	ip route del 2001:db8:1::/64 vrf vrf-r2
143cab14d10SDavid Ahern	ip route del 192.0.2.0/24 vrf vrf-r2
144cab14d10SDavid Ahern
145cab14d10SDavid Ahern	ip address del fe80:3::23/64 dev $rp23
146cab14d10SDavid Ahern	ip address del 169.254.3.23/24 dev $rp23
147cab14d10SDavid Ahern
148cab14d10SDavid Ahern	ip address del fe80:2::22/64 dev $rp22
149cab14d10SDavid Ahern	ip address del 169.254.2.22/24 dev $rp22
150cab14d10SDavid Ahern
151cab14d10SDavid Ahern	ip address del 2001:db8:2::1/64 dev $rp21
152cab14d10SDavid Ahern	ip address del 198.51.100.1/24 dev $rp21
153cab14d10SDavid Ahern
154cab14d10SDavid Ahern	ip nexthop del id 201
155cab14d10SDavid Ahern	ip nexthop del id 202
156cab14d10SDavid Ahern	ip nexthop del id 204
157cab14d10SDavid Ahern	ip nexthop del id 205
158cab14d10SDavid Ahern
159cab14d10SDavid Ahern	ip link set dev $rp23 down
160cab14d10SDavid Ahern	ip link set dev $rp22 down
161cab14d10SDavid Ahern	ip link set dev $rp21 down
162cab14d10SDavid Ahern
163cab14d10SDavid Ahern	vrf_destroy "vrf-r2"
164cab14d10SDavid Ahern}
165cab14d10SDavid Ahern
166cab14d10SDavid Ahernrouting_nh_obj()
167cab14d10SDavid Ahern{
168cab14d10SDavid Ahern	ip nexthop add id 101 via 169.254.2.22 dev $rp12
169cab14d10SDavid Ahern	ip nexthop add id 102 via 169.254.3.23 dev $rp13
170cab14d10SDavid Ahern	ip nexthop add id 103 group 101/102
171cab14d10SDavid Ahern	ip route add 198.51.100.0/24 vrf vrf-r1 nhid 103
172cab14d10SDavid Ahern
173cab14d10SDavid Ahern	ip nexthop add id 104 via fe80:2::22 dev $rp12
174cab14d10SDavid Ahern	ip nexthop add id 105 via fe80:3::23 dev $rp13
175cab14d10SDavid Ahern	ip nexthop add id 106 group 104/105
176cab14d10SDavid Ahern	ip route add 2001:db8:2::/64 vrf vrf-r1 nhid 106
177cab14d10SDavid Ahern
178cab14d10SDavid Ahern	ip nexthop add id 201 via 169.254.2.12 dev $rp22
179cab14d10SDavid Ahern	ip nexthop add id 202 via 169.254.3.13 dev $rp23
180cab14d10SDavid Ahern	ip nexthop add id 203 group 201/202
181cab14d10SDavid Ahern	ip route add 192.0.2.0/24 vrf vrf-r2 nhid 203
182cab14d10SDavid Ahern
183cab14d10SDavid Ahern	ip nexthop add id 204 via fe80:2::12 dev $rp22
184cab14d10SDavid Ahern	ip nexthop add id 205 via fe80:3::13 dev $rp23
185cab14d10SDavid Ahern	ip nexthop add id 206 group 204/205
186cab14d10SDavid Ahern	ip route add 2001:db8:1::/64 vrf vrf-r2 nhid 206
187cab14d10SDavid Ahern}
188cab14d10SDavid Ahern
189cab14d10SDavid Ahernmultipath4_test()
190cab14d10SDavid Ahern{
191cab14d10SDavid Ahern	local desc="$1"
192cab14d10SDavid Ahern	local weight_rp12=$2
193cab14d10SDavid Ahern	local weight_rp13=$3
194cab14d10SDavid Ahern	local t0_rp12 t0_rp13 t1_rp12 t1_rp13
195cab14d10SDavid Ahern	local packets_rp12 packets_rp13
196cab14d10SDavid Ahern
197cab14d10SDavid Ahern	# Transmit multiple flows from h1 to h2 and make sure they are
198cab14d10SDavid Ahern	# distributed between both multipath links (rp12 and rp13)
199cab14d10SDavid Ahern	# according to the configured weights.
200cab14d10SDavid Ahern	sysctl_set net.ipv4.fib_multipath_hash_policy 1
201cab14d10SDavid Ahern	ip nexthop replace id 103 group 101,$weight_rp12/102,$weight_rp13
202cab14d10SDavid Ahern
203cab14d10SDavid Ahern	t0_rp12=$(link_stats_tx_packets_get $rp12)
204cab14d10SDavid Ahern	t0_rp13=$(link_stats_tx_packets_get $rp13)
205cab14d10SDavid Ahern
206*11df27f7SDanielle Ratson	ip vrf exec vrf-h1 $MZ $h1 -q -p 64 -A 192.0.2.2 -B 198.51.100.2 \
207cab14d10SDavid Ahern		-d 1msec -t udp "sp=1024,dp=0-32768"
208cab14d10SDavid Ahern
209cab14d10SDavid Ahern	t1_rp12=$(link_stats_tx_packets_get $rp12)
210cab14d10SDavid Ahern	t1_rp13=$(link_stats_tx_packets_get $rp13)
211cab14d10SDavid Ahern
212cab14d10SDavid Ahern	let "packets_rp12 = $t1_rp12 - $t0_rp12"
213cab14d10SDavid Ahern	let "packets_rp13 = $t1_rp13 - $t0_rp13"
214cab14d10SDavid Ahern	multipath_eval "$desc" $weight_rp12 $weight_rp13 $packets_rp12 $packets_rp13
215cab14d10SDavid Ahern
216cab14d10SDavid Ahern	# Restore settings.
217cab14d10SDavid Ahern	ip nexthop replace id 103 group 101/102
218cab14d10SDavid Ahern	sysctl_restore net.ipv4.fib_multipath_hash_policy
219cab14d10SDavid Ahern}
220cab14d10SDavid Ahern
221cab14d10SDavid Ahernmultipath6_l4_test()
222cab14d10SDavid Ahern{
223cab14d10SDavid Ahern	local desc="$1"
224cab14d10SDavid Ahern	local weight_rp12=$2
225cab14d10SDavid Ahern	local weight_rp13=$3
226cab14d10SDavid Ahern	local t0_rp12 t0_rp13 t1_rp12 t1_rp13
227cab14d10SDavid Ahern	local packets_rp12 packets_rp13
228cab14d10SDavid Ahern
229cab14d10SDavid Ahern	# Transmit multiple flows from h1 to h2 and make sure they are
230cab14d10SDavid Ahern	# distributed between both multipath links (rp12 and rp13)
231cab14d10SDavid Ahern	# according to the configured weights.
232cab14d10SDavid Ahern	sysctl_set net.ipv6.fib_multipath_hash_policy 1
233cab14d10SDavid Ahern
234cab14d10SDavid Ahern	ip nexthop replace id 106 group 104,$weight_rp12/105,$weight_rp13
235cab14d10SDavid Ahern
236cab14d10SDavid Ahern	t0_rp12=$(link_stats_tx_packets_get $rp12)
237cab14d10SDavid Ahern	t0_rp13=$(link_stats_tx_packets_get $rp13)
238cab14d10SDavid Ahern
239cab14d10SDavid Ahern	$MZ $h1 -6 -q -p 64 -A 2001:db8:1::2 -B 2001:db8:2::2 \
240cab14d10SDavid Ahern		-d 1msec -t udp "sp=1024,dp=0-32768"
241cab14d10SDavid Ahern
242cab14d10SDavid Ahern	t1_rp12=$(link_stats_tx_packets_get $rp12)
243cab14d10SDavid Ahern	t1_rp13=$(link_stats_tx_packets_get $rp13)
244cab14d10SDavid Ahern
245cab14d10SDavid Ahern	let "packets_rp12 = $t1_rp12 - $t0_rp12"
246cab14d10SDavid Ahern	let "packets_rp13 = $t1_rp13 - $t0_rp13"
247cab14d10SDavid Ahern	multipath_eval "$desc" $weight_rp12 $weight_rp13 $packets_rp12 $packets_rp13
248cab14d10SDavid Ahern
249cab14d10SDavid Ahern	ip nexthop replace id 106 group 104/105
250cab14d10SDavid Ahern
251cab14d10SDavid Ahern	sysctl_restore net.ipv6.fib_multipath_hash_policy
252cab14d10SDavid Ahern}
253cab14d10SDavid Ahern
254cab14d10SDavid Ahernmultipath6_test()
255cab14d10SDavid Ahern{
256cab14d10SDavid Ahern	local desc="$1"
257cab14d10SDavid Ahern	local weight_rp12=$2
258cab14d10SDavid Ahern	local weight_rp13=$3
259cab14d10SDavid Ahern	local t0_rp12 t0_rp13 t1_rp12 t1_rp13
260cab14d10SDavid Ahern	local packets_rp12 packets_rp13
261cab14d10SDavid Ahern
262cab14d10SDavid Ahern	ip nexthop replace id 106 group 104,$weight_rp12/105,$weight_rp13
263cab14d10SDavid Ahern
264cab14d10SDavid Ahern	t0_rp12=$(link_stats_tx_packets_get $rp12)
265cab14d10SDavid Ahern	t0_rp13=$(link_stats_tx_packets_get $rp13)
266cab14d10SDavid Ahern
267cab14d10SDavid Ahern	# Generate 16384 echo requests, each with a random flow label.
268cab14d10SDavid Ahern	for _ in $(seq 1 16384); do
269cab14d10SDavid Ahern		ip vrf exec vrf-h1 $PING6 2001:db8:2::2 -F 0 -c 1 -q >/dev/null 2>&1
270cab14d10SDavid Ahern	done
271cab14d10SDavid Ahern
272cab14d10SDavid Ahern	t1_rp12=$(link_stats_tx_packets_get $rp12)
273cab14d10SDavid Ahern	t1_rp13=$(link_stats_tx_packets_get $rp13)
274cab14d10SDavid Ahern
275cab14d10SDavid Ahern	let "packets_rp12 = $t1_rp12 - $t0_rp12"
276cab14d10SDavid Ahern	let "packets_rp13 = $t1_rp13 - $t0_rp13"
277cab14d10SDavid Ahern	multipath_eval "$desc" $weight_rp12 $weight_rp13 $packets_rp12 $packets_rp13
278cab14d10SDavid Ahern
279cab14d10SDavid Ahern	ip nexthop replace id 106 group 104/105
280cab14d10SDavid Ahern}
281cab14d10SDavid Ahern
282cab14d10SDavid Ahernmultipath_test()
283cab14d10SDavid Ahern{
284cab14d10SDavid Ahern	log_info "Running IPv4 multipath tests"
285cab14d10SDavid Ahern	multipath4_test "ECMP" 1 1
286cab14d10SDavid Ahern	multipath4_test "Weighted MP 2:1" 2 1
287cab14d10SDavid Ahern	multipath4_test "Weighted MP 11:45" 11 45
288cab14d10SDavid Ahern
2893600f29aSIdo Schimmel	log_info "Running IPv4 multipath tests with IPv6 link-local nexthops"
2903600f29aSIdo Schimmel	ip nexthop replace id 101 via fe80:2::22 dev $rp12
2913600f29aSIdo Schimmel	ip nexthop replace id 102 via fe80:3::23 dev $rp13
2923600f29aSIdo Schimmel
2933600f29aSIdo Schimmel	multipath4_test "ECMP" 1 1
2943600f29aSIdo Schimmel	multipath4_test "Weighted MP 2:1" 2 1
2953600f29aSIdo Schimmel	multipath4_test "Weighted MP 11:45" 11 45
2963600f29aSIdo Schimmel
2973600f29aSIdo Schimmel	ip nexthop replace id 102 via 169.254.3.23 dev $rp13
2983600f29aSIdo Schimmel	ip nexthop replace id 101 via 169.254.2.22 dev $rp12
2993600f29aSIdo Schimmel
300cab14d10SDavid Ahern	log_info "Running IPv6 multipath tests"
301cab14d10SDavid Ahern	multipath6_test "ECMP" 1 1
302cab14d10SDavid Ahern	multipath6_test "Weighted MP 2:1" 2 1
303cab14d10SDavid Ahern	multipath6_test "Weighted MP 11:45" 11 45
304cab14d10SDavid Ahern
305cab14d10SDavid Ahern	log_info "Running IPv6 L4 hash multipath tests"
306cab14d10SDavid Ahern	multipath6_l4_test "ECMP" 1 1
307cab14d10SDavid Ahern	multipath6_l4_test "Weighted MP 2:1" 2 1
308cab14d10SDavid Ahern	multipath6_l4_test "Weighted MP 11:45" 11 45
309cab14d10SDavid Ahern}
310cab14d10SDavid Ahern
3111beaff77SIdo Schimmelping_ipv4_blackhole()
3121beaff77SIdo Schimmel{
3131beaff77SIdo Schimmel	RET=0
3141beaff77SIdo Schimmel
3151beaff77SIdo Schimmel	ip nexthop add id 1001 blackhole
3161beaff77SIdo Schimmel	ip nexthop add id 1002 group 1001
3171beaff77SIdo Schimmel
3181beaff77SIdo Schimmel	ip route replace 198.51.100.0/24 vrf vrf-r1 nhid 1001
3191beaff77SIdo Schimmel	ping_do $h1 198.51.100.2
3201beaff77SIdo Schimmel	check_fail $? "ping did not fail when using a blackhole nexthop"
3211beaff77SIdo Schimmel
3221beaff77SIdo Schimmel	ip route replace 198.51.100.0/24 vrf vrf-r1 nhid 1002
3231beaff77SIdo Schimmel	ping_do $h1 198.51.100.2
3241beaff77SIdo Schimmel	check_fail $? "ping did not fail when using a blackhole nexthop group"
3251beaff77SIdo Schimmel
3261beaff77SIdo Schimmel	ip route replace 198.51.100.0/24 vrf vrf-r1 nhid 103
3271beaff77SIdo Schimmel	ping_do $h1 198.51.100.2
3281beaff77SIdo Schimmel	check_err $? "ping failed with a valid nexthop"
3291beaff77SIdo Schimmel
3301beaff77SIdo Schimmel	log_test "IPv4 blackhole ping"
3311beaff77SIdo Schimmel
3321beaff77SIdo Schimmel	ip nexthop del id 1002
3331beaff77SIdo Schimmel	ip nexthop del id 1001
3341beaff77SIdo Schimmel}
3351beaff77SIdo Schimmel
3361beaff77SIdo Schimmelping_ipv6_blackhole()
3371beaff77SIdo Schimmel{
3381beaff77SIdo Schimmel	RET=0
3391beaff77SIdo Schimmel
3401beaff77SIdo Schimmel	ip -6 nexthop add id 1001 blackhole
3411beaff77SIdo Schimmel	ip nexthop add id 1002 group 1001
3421beaff77SIdo Schimmel
3431beaff77SIdo Schimmel	ip route replace 2001:db8:2::/64 vrf vrf-r1 nhid 1001
3441beaff77SIdo Schimmel	ping6_do $h1 2001:db8:2::2
3451beaff77SIdo Schimmel	check_fail $? "ping did not fail when using a blackhole nexthop"
3461beaff77SIdo Schimmel
3471beaff77SIdo Schimmel	ip route replace 2001:db8:2::/64 vrf vrf-r1 nhid 1002
3481beaff77SIdo Schimmel	ping6_do $h1 2001:db8:2::2
3491beaff77SIdo Schimmel	check_fail $? "ping did not fail when using a blackhole nexthop group"
3501beaff77SIdo Schimmel
3511beaff77SIdo Schimmel	ip route replace 2001:db8:2::/64 vrf vrf-r1 nhid 106
3521beaff77SIdo Schimmel	ping6_do $h1 2001:db8:2::2
3531beaff77SIdo Schimmel	check_err $? "ping failed with a valid nexthop"
3541beaff77SIdo Schimmel
3551beaff77SIdo Schimmel	log_test "IPv6 blackhole ping"
3561beaff77SIdo Schimmel
3571beaff77SIdo Schimmel	ip nexthop del id 1002
3581beaff77SIdo Schimmel	ip -6 nexthop del id 1001
3591beaff77SIdo Schimmel}
3601beaff77SIdo Schimmel
361cab14d10SDavid Ahernsetup_prepare()
362cab14d10SDavid Ahern{
363cab14d10SDavid Ahern	h1=${NETIFS[p1]}
364cab14d10SDavid Ahern	rp11=${NETIFS[p2]}
365cab14d10SDavid Ahern
366cab14d10SDavid Ahern	rp12=${NETIFS[p3]}
367cab14d10SDavid Ahern	rp22=${NETIFS[p4]}
368cab14d10SDavid Ahern
369cab14d10SDavid Ahern	rp13=${NETIFS[p5]}
370cab14d10SDavid Ahern	rp23=${NETIFS[p6]}
371cab14d10SDavid Ahern
372cab14d10SDavid Ahern	rp21=${NETIFS[p7]}
373cab14d10SDavid Ahern	h2=${NETIFS[p8]}
374cab14d10SDavid Ahern
375cab14d10SDavid Ahern	vrf_prepare
376cab14d10SDavid Ahern
377cab14d10SDavid Ahern	h1_create
378cab14d10SDavid Ahern	h2_create
379cab14d10SDavid Ahern
380cab14d10SDavid Ahern	router1_create
381cab14d10SDavid Ahern	router2_create
382cab14d10SDavid Ahern
383cab14d10SDavid Ahern	forwarding_enable
384cab14d10SDavid Ahern}
385cab14d10SDavid Ahern
386cab14d10SDavid Aherncleanup()
387cab14d10SDavid Ahern{
388cab14d10SDavid Ahern	pre_cleanup
389cab14d10SDavid Ahern
390cab14d10SDavid Ahern	forwarding_restore
391cab14d10SDavid Ahern
392cab14d10SDavid Ahern	router2_destroy
393cab14d10SDavid Ahern	router1_destroy
394cab14d10SDavid Ahern
395cab14d10SDavid Ahern	h2_destroy
396cab14d10SDavid Ahern	h1_destroy
397cab14d10SDavid Ahern
398cab14d10SDavid Ahern	vrf_cleanup
399cab14d10SDavid Ahern}
400cab14d10SDavid Ahern
401cab14d10SDavid Ahernping_ipv4()
402cab14d10SDavid Ahern{
403cab14d10SDavid Ahern	ping_test $h1 198.51.100.2
404cab14d10SDavid Ahern}
405cab14d10SDavid Ahern
406cab14d10SDavid Ahernping_ipv6()
407cab14d10SDavid Ahern{
408cab14d10SDavid Ahern	ping6_test $h1 2001:db8:2::2
409cab14d10SDavid Ahern}
410cab14d10SDavid Ahern
411cab14d10SDavid Ahernip nexthop ls >/dev/null 2>&1
412cab14d10SDavid Ahernif [ $? -ne 0 ]; then
413cab14d10SDavid Ahern	echo "Nexthop objects not supported; skipping tests"
414cab14d10SDavid Ahern	exit 0
415cab14d10SDavid Ahernfi
416cab14d10SDavid Ahern
417cab14d10SDavid Aherntrap cleanup EXIT
418cab14d10SDavid Ahern
419cab14d10SDavid Ahernsetup_prepare
420cab14d10SDavid Ahernsetup_wait
421cab14d10SDavid Ahernrouting_nh_obj
422cab14d10SDavid Ahern
423cab14d10SDavid Aherntests_run
424cab14d10SDavid Ahern
425cab14d10SDavid Ahernexit $EXIT_STATUS
426