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