1386e3792SIdo Schimmel#!/bin/bash
2386e3792SIdo Schimmel# SPDX-License-Identifier: GPL-2.0
3386e3792SIdo Schimmel
4*b51a94b2SPetr Machata# +-------------------------+
5*b51a94b2SPetr Machata# |  H1                     |
6*b51a94b2SPetr Machata# |               $h1 +     |
7*b51a94b2SPetr Machata# |      192.0.2.2/24 |     |
8*b51a94b2SPetr Machata# |  2001:db8:1::2/64 |     |
9*b51a94b2SPetr Machata# +-------------------|-----+
10*b51a94b2SPetr Machata#                     |
11*b51a94b2SPetr Machata# +-------------------|----------------------+
12*b51a94b2SPetr Machata# |                   |                   R1 |
13*b51a94b2SPetr Machata# |             $rp11 +                      |
14*b51a94b2SPetr Machata# |      192.0.2.1/24                        |
15*b51a94b2SPetr Machata# |  2001:db8:1::1/64                        |
16*b51a94b2SPetr Machata# |                                          |
17*b51a94b2SPetr Machata# |  + $rp12              + $rp13            |
18*b51a94b2SPetr Machata# |  | 169.254.2.12/24    | 169.254.3.13/24  |
19*b51a94b2SPetr Machata# |  | fe80:2::12/64      | fe80:3::13/64    |
20*b51a94b2SPetr Machata# +--|--------------------|------------------+
21*b51a94b2SPetr Machata#    |                    |
22*b51a94b2SPetr Machata# +--|--------------------|------------------+
23*b51a94b2SPetr Machata# |  + $rp22              + $rp23            |
24*b51a94b2SPetr Machata# |    169.254.2.22/24      169.254.3.23/24  |
25*b51a94b2SPetr Machata# |    fe80:2::22/64        fe80:3::23/64    |
26*b51a94b2SPetr Machata# |                                          |
27*b51a94b2SPetr Machata# |             $rp21 +                      |
28*b51a94b2SPetr Machata# |   198.51.100.1/24 |                      |
29*b51a94b2SPetr Machata# |  2001:db8:2::1/64 |                   R2 |
30*b51a94b2SPetr Machata# +-------------------|----------------------+
31*b51a94b2SPetr Machata#                     |
32*b51a94b2SPetr Machata# +-------------------|-----+
33*b51a94b2SPetr Machata# |                   |     |
34*b51a94b2SPetr Machata# |               $h2 +     |
35*b51a94b2SPetr Machata# |   198.51.100.2/24       |
36*b51a94b2SPetr Machata# |  2001:db8:2::2/64    H2 |
37*b51a94b2SPetr Machata# +-------------------------+
38*b51a94b2SPetr Machata
39386e3792SIdo SchimmelALL_TESTS="
40386e3792SIdo Schimmel	ping_ipv4
41386e3792SIdo Schimmel	ping_ipv6
42386e3792SIdo Schimmel	multipath_test
43a22b0426SPetr Machata	nh_stats_test_v4
44a22b0426SPetr Machata	nh_stats_test_v6
45386e3792SIdo Schimmel"
46386e3792SIdo SchimmelNUM_NETIFS=8
47386e3792SIdo Schimmelsource lib.sh
48a22b0426SPetr Machatasource router_mpath_nh_lib.sh
49386e3792SIdo Schimmel
50386e3792SIdo Schimmelh1_create()
51386e3792SIdo Schimmel{
52386e3792SIdo Schimmel	vrf_create "vrf-h1"
53386e3792SIdo Schimmel	ip link set dev $h1 master vrf-h1
54386e3792SIdo Schimmel
55386e3792SIdo Schimmel	ip link set dev vrf-h1 up
56386e3792SIdo Schimmel	ip link set dev $h1 up
57386e3792SIdo Schimmel
58386e3792SIdo Schimmel	ip address add 192.0.2.2/24 dev $h1
59386e3792SIdo Schimmel	ip address add 2001:db8:1::2/64 dev $h1
60386e3792SIdo Schimmel
61386e3792SIdo Schimmel	ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1
62386e3792SIdo Schimmel	ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::1
63386e3792SIdo Schimmel}
64386e3792SIdo Schimmel
65386e3792SIdo Schimmelh1_destroy()
66386e3792SIdo Schimmel{
67386e3792SIdo Schimmel	ip route del 2001:db8:2::/64 vrf vrf-h1
68386e3792SIdo Schimmel	ip route del 198.51.100.0/24 vrf vrf-h1
69386e3792SIdo Schimmel
70386e3792SIdo Schimmel	ip address del 2001:db8:1::2/64 dev $h1
71386e3792SIdo Schimmel	ip address del 192.0.2.2/24 dev $h1
72386e3792SIdo Schimmel
73386e3792SIdo Schimmel	ip link set dev $h1 down
74386e3792SIdo Schimmel	vrf_destroy "vrf-h1"
75386e3792SIdo Schimmel}
76386e3792SIdo Schimmel
77386e3792SIdo Schimmelh2_create()
78386e3792SIdo Schimmel{
79386e3792SIdo Schimmel	vrf_create "vrf-h2"
80386e3792SIdo Schimmel	ip link set dev $h2 master vrf-h2
81386e3792SIdo Schimmel
82386e3792SIdo Schimmel	ip link set dev vrf-h2 up
83386e3792SIdo Schimmel	ip link set dev $h2 up
84386e3792SIdo Schimmel
85386e3792SIdo Schimmel	ip address add 198.51.100.2/24 dev $h2
86386e3792SIdo Schimmel	ip address add 2001:db8:2::2/64 dev $h2
87386e3792SIdo Schimmel
88386e3792SIdo Schimmel	ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1
89386e3792SIdo Schimmel	ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::1
90386e3792SIdo Schimmel}
91386e3792SIdo Schimmel
92386e3792SIdo Schimmelh2_destroy()
93386e3792SIdo Schimmel{
94386e3792SIdo Schimmel	ip route del 2001:db8:1::/64 vrf vrf-h2
95386e3792SIdo Schimmel	ip route del 192.0.2.0/24 vrf vrf-h2
96386e3792SIdo Schimmel
97386e3792SIdo Schimmel	ip address del 2001:db8:2::2/64 dev $h2
98386e3792SIdo Schimmel	ip address del 198.51.100.2/24 dev $h2
99386e3792SIdo Schimmel
100386e3792SIdo Schimmel	ip link set dev $h2 down
101386e3792SIdo Schimmel	vrf_destroy "vrf-h2"
102386e3792SIdo Schimmel}
103386e3792SIdo Schimmel
104386e3792SIdo Schimmelrouter1_create()
105386e3792SIdo Schimmel{
106386e3792SIdo Schimmel	vrf_create "vrf-r1"
107386e3792SIdo Schimmel	ip link set dev $rp11 master vrf-r1
108386e3792SIdo Schimmel	ip link set dev $rp12 master vrf-r1
109386e3792SIdo Schimmel	ip link set dev $rp13 master vrf-r1
110386e3792SIdo Schimmel
111386e3792SIdo Schimmel	ip link set dev vrf-r1 up
112386e3792SIdo Schimmel	ip link set dev $rp11 up
113386e3792SIdo Schimmel	ip link set dev $rp12 up
114386e3792SIdo Schimmel	ip link set dev $rp13 up
115386e3792SIdo Schimmel
116386e3792SIdo Schimmel	ip address add 192.0.2.1/24 dev $rp11
117386e3792SIdo Schimmel	ip address add 2001:db8:1::1/64 dev $rp11
118386e3792SIdo Schimmel
119386e3792SIdo Schimmel	ip address add 169.254.2.12/24 dev $rp12
120386e3792SIdo Schimmel	ip address add fe80:2::12/64 dev $rp12
121386e3792SIdo Schimmel
122386e3792SIdo Schimmel	ip address add 169.254.3.13/24 dev $rp13
123386e3792SIdo Schimmel	ip address add fe80:3::13/64 dev $rp13
124386e3792SIdo Schimmel}
125386e3792SIdo Schimmel
126386e3792SIdo Schimmelrouter1_destroy()
127386e3792SIdo Schimmel{
128386e3792SIdo Schimmel	ip route del 2001:db8:2::/64 vrf vrf-r1
129386e3792SIdo Schimmel	ip route del 198.51.100.0/24 vrf vrf-r1
130386e3792SIdo Schimmel
131386e3792SIdo Schimmel	ip address del fe80:3::13/64 dev $rp13
132386e3792SIdo Schimmel	ip address del 169.254.3.13/24 dev $rp13
133386e3792SIdo Schimmel
134386e3792SIdo Schimmel	ip address del fe80:2::12/64 dev $rp12
135386e3792SIdo Schimmel	ip address del 169.254.2.12/24 dev $rp12
136386e3792SIdo Schimmel
137386e3792SIdo Schimmel	ip address del 2001:db8:1::1/64 dev $rp11
138386e3792SIdo Schimmel	ip address del 192.0.2.1/24 dev $rp11
139386e3792SIdo Schimmel
140386e3792SIdo Schimmel	ip nexthop del id 103
141386e3792SIdo Schimmel	ip nexthop del id 101
142386e3792SIdo Schimmel	ip nexthop del id 102
143386e3792SIdo Schimmel	ip nexthop del id 106
144386e3792SIdo Schimmel	ip nexthop del id 104
145386e3792SIdo Schimmel	ip nexthop del id 105
146386e3792SIdo Schimmel
147386e3792SIdo Schimmel	ip link set dev $rp13 down
148386e3792SIdo Schimmel	ip link set dev $rp12 down
149386e3792SIdo Schimmel	ip link set dev $rp11 down
150386e3792SIdo Schimmel
151386e3792SIdo Schimmel	vrf_destroy "vrf-r1"
152386e3792SIdo Schimmel}
153386e3792SIdo Schimmel
154386e3792SIdo Schimmelrouter2_create()
155386e3792SIdo Schimmel{
156386e3792SIdo Schimmel	vrf_create "vrf-r2"
157386e3792SIdo Schimmel	ip link set dev $rp21 master vrf-r2
158386e3792SIdo Schimmel	ip link set dev $rp22 master vrf-r2
159386e3792SIdo Schimmel	ip link set dev $rp23 master vrf-r2
160386e3792SIdo Schimmel
161386e3792SIdo Schimmel	ip link set dev vrf-r2 up
162386e3792SIdo Schimmel	ip link set dev $rp21 up
163386e3792SIdo Schimmel	ip link set dev $rp22 up
164386e3792SIdo Schimmel	ip link set dev $rp23 up
165386e3792SIdo Schimmel
166386e3792SIdo Schimmel	ip address add 198.51.100.1/24 dev $rp21
167386e3792SIdo Schimmel	ip address add 2001:db8:2::1/64 dev $rp21
168386e3792SIdo Schimmel
169386e3792SIdo Schimmel	ip address add 169.254.2.22/24 dev $rp22
170386e3792SIdo Schimmel	ip address add fe80:2::22/64 dev $rp22
171386e3792SIdo Schimmel
172386e3792SIdo Schimmel	ip address add 169.254.3.23/24 dev $rp23
173386e3792SIdo Schimmel	ip address add fe80:3::23/64 dev $rp23
174386e3792SIdo Schimmel}
175386e3792SIdo Schimmel
176386e3792SIdo Schimmelrouter2_destroy()
177386e3792SIdo Schimmel{
178386e3792SIdo Schimmel	ip route del 2001:db8:1::/64 vrf vrf-r2
179386e3792SIdo Schimmel	ip route del 192.0.2.0/24 vrf vrf-r2
180386e3792SIdo Schimmel
181386e3792SIdo Schimmel	ip address del fe80:3::23/64 dev $rp23
182386e3792SIdo Schimmel	ip address del 169.254.3.23/24 dev $rp23
183386e3792SIdo Schimmel
184386e3792SIdo Schimmel	ip address del fe80:2::22/64 dev $rp22
185386e3792SIdo Schimmel	ip address del 169.254.2.22/24 dev $rp22
186386e3792SIdo Schimmel
187386e3792SIdo Schimmel	ip address del 2001:db8:2::1/64 dev $rp21
188386e3792SIdo Schimmel	ip address del 198.51.100.1/24 dev $rp21
189386e3792SIdo Schimmel
190386e3792SIdo Schimmel	ip nexthop del id 201
191386e3792SIdo Schimmel	ip nexthop del id 202
192386e3792SIdo Schimmel	ip nexthop del id 204
193386e3792SIdo Schimmel	ip nexthop del id 205
194386e3792SIdo Schimmel
195386e3792SIdo Schimmel	ip link set dev $rp23 down
196386e3792SIdo Schimmel	ip link set dev $rp22 down
197386e3792SIdo Schimmel	ip link set dev $rp21 down
198386e3792SIdo Schimmel
199386e3792SIdo Schimmel	vrf_destroy "vrf-r2"
200386e3792SIdo Schimmel}
201386e3792SIdo Schimmel
202386e3792SIdo Schimmelrouting_nh_obj()
203386e3792SIdo Schimmel{
204386e3792SIdo Schimmel	ip nexthop add id 101 via 169.254.2.22 dev $rp12
205386e3792SIdo Schimmel	ip nexthop add id 102 via 169.254.3.23 dev $rp13
206386e3792SIdo Schimmel	ip nexthop add id 103 group 101/102 type resilient buckets 512 \
207386e3792SIdo Schimmel		idle_timer 0
208386e3792SIdo Schimmel	ip route add 198.51.100.0/24 vrf vrf-r1 nhid 103
209386e3792SIdo Schimmel
210386e3792SIdo Schimmel	ip nexthop add id 104 via fe80:2::22 dev $rp12
211386e3792SIdo Schimmel	ip nexthop add id 105 via fe80:3::23 dev $rp13
212386e3792SIdo Schimmel	ip nexthop add id 106 group 104/105 type resilient buckets 512 \
213386e3792SIdo Schimmel		idle_timer 0
214386e3792SIdo Schimmel	ip route add 2001:db8:2::/64 vrf vrf-r1 nhid 106
215386e3792SIdo Schimmel
216386e3792SIdo Schimmel	ip nexthop add id 201 via 169.254.2.12 dev $rp22
217386e3792SIdo Schimmel	ip nexthop add id 202 via 169.254.3.13 dev $rp23
218386e3792SIdo Schimmel	ip nexthop add id 203 group 201/202 type resilient buckets 512 \
219386e3792SIdo Schimmel		idle_timer 0
220386e3792SIdo Schimmel	ip route add 192.0.2.0/24 vrf vrf-r2 nhid 203
221386e3792SIdo Schimmel
222386e3792SIdo Schimmel	ip nexthop add id 204 via fe80:2::12 dev $rp22
223386e3792SIdo Schimmel	ip nexthop add id 205 via fe80:3::13 dev $rp23
224386e3792SIdo Schimmel	ip nexthop add id 206 group 204/205 type resilient buckets 512 \
225386e3792SIdo Schimmel		idle_timer 0
226386e3792SIdo Schimmel	ip route add 2001:db8:1::/64 vrf vrf-r2 nhid 206
227386e3792SIdo Schimmel}
228386e3792SIdo Schimmel
229386e3792SIdo Schimmelmultipath4_test()
230386e3792SIdo Schimmel{
231386e3792SIdo Schimmel	local desc="$1"
232386e3792SIdo Schimmel	local weight_rp12=$2
233386e3792SIdo Schimmel	local weight_rp13=$3
234386e3792SIdo Schimmel	local t0_rp12 t0_rp13 t1_rp12 t1_rp13
235386e3792SIdo Schimmel	local packets_rp12 packets_rp13
236386e3792SIdo Schimmel
237386e3792SIdo Schimmel	# Transmit multiple flows from h1 to h2 and make sure they are
238386e3792SIdo Schimmel	# distributed between both multipath links (rp12 and rp13)
239386e3792SIdo Schimmel	# according to the provided weights.
240386e3792SIdo Schimmel	sysctl_set net.ipv4.fib_multipath_hash_policy 1
241386e3792SIdo Schimmel
242386e3792SIdo Schimmel	t0_rp12=$(link_stats_tx_packets_get $rp12)
243386e3792SIdo Schimmel	t0_rp13=$(link_stats_tx_packets_get $rp13)
244386e3792SIdo Schimmel
245386e3792SIdo Schimmel	ip vrf exec vrf-h1 $MZ $h1 -q -p 64 -A 192.0.2.2 -B 198.51.100.2 \
246748d2744SIdo Schimmel		-d $MZ_DELAY -t udp "sp=1024,dp=0-32768"
247386e3792SIdo Schimmel
248386e3792SIdo Schimmel	t1_rp12=$(link_stats_tx_packets_get $rp12)
249386e3792SIdo Schimmel	t1_rp13=$(link_stats_tx_packets_get $rp13)
250386e3792SIdo Schimmel
251386e3792SIdo Schimmel	let "packets_rp12 = $t1_rp12 - $t0_rp12"
252386e3792SIdo Schimmel	let "packets_rp13 = $t1_rp13 - $t0_rp13"
253386e3792SIdo Schimmel	multipath_eval "$desc" $weight_rp12 $weight_rp13 $packets_rp12 $packets_rp13
254386e3792SIdo Schimmel
255386e3792SIdo Schimmel	# Restore settings.
256386e3792SIdo Schimmel	sysctl_restore net.ipv4.fib_multipath_hash_policy
257386e3792SIdo Schimmel}
258386e3792SIdo Schimmel
259386e3792SIdo Schimmelmultipath6_l4_test()
260386e3792SIdo Schimmel{
261386e3792SIdo Schimmel	local desc="$1"
262386e3792SIdo Schimmel	local weight_rp12=$2
263386e3792SIdo Schimmel	local weight_rp13=$3
264386e3792SIdo Schimmel	local t0_rp12 t0_rp13 t1_rp12 t1_rp13
265386e3792SIdo Schimmel	local packets_rp12 packets_rp13
266386e3792SIdo Schimmel
267386e3792SIdo Schimmel	# Transmit multiple flows from h1 to h2 and make sure they are
268386e3792SIdo Schimmel	# distributed between both multipath links (rp12 and rp13)
269386e3792SIdo Schimmel	# according to the provided weights.
270386e3792SIdo Schimmel	sysctl_set net.ipv6.fib_multipath_hash_policy 1
271386e3792SIdo Schimmel
272386e3792SIdo Schimmel	t0_rp12=$(link_stats_tx_packets_get $rp12)
273386e3792SIdo Schimmel	t0_rp13=$(link_stats_tx_packets_get $rp13)
274386e3792SIdo Schimmel
275386e3792SIdo Schimmel	$MZ $h1 -6 -q -p 64 -A 2001:db8:1::2 -B 2001:db8:2::2 \
276748d2744SIdo Schimmel		-d $MZ_DELAY -t udp "sp=1024,dp=0-32768"
277386e3792SIdo Schimmel
278386e3792SIdo Schimmel	t1_rp12=$(link_stats_tx_packets_get $rp12)
279386e3792SIdo Schimmel	t1_rp13=$(link_stats_tx_packets_get $rp13)
280386e3792SIdo Schimmel
281386e3792SIdo Schimmel	let "packets_rp12 = $t1_rp12 - $t0_rp12"
282386e3792SIdo Schimmel	let "packets_rp13 = $t1_rp13 - $t0_rp13"
283386e3792SIdo Schimmel	multipath_eval "$desc" $weight_rp12 $weight_rp13 $packets_rp12 $packets_rp13
284386e3792SIdo Schimmel
285386e3792SIdo Schimmel	sysctl_restore net.ipv6.fib_multipath_hash_policy
286386e3792SIdo Schimmel}
287386e3792SIdo Schimmel
288386e3792SIdo Schimmelmultipath_test()
289386e3792SIdo Schimmel{
290386e3792SIdo Schimmel	# Without an idle timer, weight replacement should happen immediately.
291386e3792SIdo Schimmel	log_info "Running multipath tests without an idle timer"
292386e3792SIdo Schimmel	ip nexthop replace id 103 group 101/102 type resilient idle_timer 0
293386e3792SIdo Schimmel	ip nexthop replace id 106 group 104/105 type resilient idle_timer 0
294386e3792SIdo Schimmel
295386e3792SIdo Schimmel	log_info "Running IPv4 multipath tests"
296386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,1/102,1 type resilient
297386e3792SIdo Schimmel	multipath4_test "ECMP" 1 1
298386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,2/102,1 type resilient
299386e3792SIdo Schimmel	multipath4_test "Weighted MP 2:1" 2 1
300386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,11/102,45 type resilient
301386e3792SIdo Schimmel	multipath4_test "Weighted MP 11:45" 11 45
302386e3792SIdo Schimmel
303386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,1/102,1 type resilient
304386e3792SIdo Schimmel
305386e3792SIdo Schimmel	log_info "Running IPv6 L4 hash multipath tests"
306386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,1/105,1 type resilient
307386e3792SIdo Schimmel	multipath6_l4_test "ECMP" 1 1
308386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,2/105,1 type resilient
309386e3792SIdo Schimmel	multipath6_l4_test "Weighted MP 2:1" 2 1
310386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,11/105,45 type resilient
311386e3792SIdo Schimmel	multipath6_l4_test "Weighted MP 11:45" 11 45
312386e3792SIdo Schimmel
313386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,1/105,1 type resilient
314386e3792SIdo Schimmel
315386e3792SIdo Schimmel	# With an idle timer, weight replacement should not happen, so the
316386e3792SIdo Schimmel	# expected ratio should always be the initial one (1:1).
317386e3792SIdo Schimmel	log_info "Running multipath tests with an idle timer of 120 seconds"
318386e3792SIdo Schimmel	ip nexthop replace id 103 group 101/102 type resilient idle_timer 120
319386e3792SIdo Schimmel	ip nexthop replace id 106 group 104/105 type resilient idle_timer 120
320386e3792SIdo Schimmel
321386e3792SIdo Schimmel	log_info "Running IPv4 multipath tests"
322386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,1/102,1 type resilient
323386e3792SIdo Schimmel	multipath4_test "ECMP" 1 1
324386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,2/102,1 type resilient
325386e3792SIdo Schimmel	multipath4_test "Weighted MP 2:1" 1 1
326386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,11/102,45 type resilient
327386e3792SIdo Schimmel	multipath4_test "Weighted MP 11:45" 1 1
328386e3792SIdo Schimmel
329386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,1/102,1 type resilient
330386e3792SIdo Schimmel
331386e3792SIdo Schimmel	log_info "Running IPv6 L4 hash multipath tests"
332386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,1/105,1 type resilient
333386e3792SIdo Schimmel	multipath6_l4_test "ECMP" 1 1
334386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,2/105,1 type resilient
335386e3792SIdo Schimmel	multipath6_l4_test "Weighted MP 2:1" 1 1
336386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,11/105,45 type resilient
337386e3792SIdo Schimmel	multipath6_l4_test "Weighted MP 11:45" 1 1
338386e3792SIdo Schimmel
339386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,1/105,1 type resilient
340386e3792SIdo Schimmel
341386e3792SIdo Schimmel	# With a short idle timer and enough idle time, weight replacement
342386e3792SIdo Schimmel	# should happen.
343386e3792SIdo Schimmel	log_info "Running multipath tests with an idle timer of 5 seconds"
344386e3792SIdo Schimmel	ip nexthop replace id 103 group 101/102 type resilient idle_timer 5
345386e3792SIdo Schimmel	ip nexthop replace id 106 group 104/105 type resilient idle_timer 5
346386e3792SIdo Schimmel
347386e3792SIdo Schimmel	log_info "Running IPv4 multipath tests"
348386e3792SIdo Schimmel	sleep 10
349386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,1/102,1 type resilient
350386e3792SIdo Schimmel	multipath4_test "ECMP" 1 1
351386e3792SIdo Schimmel	sleep 10
352386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,2/102,1 type resilient
353386e3792SIdo Schimmel	multipath4_test "Weighted MP 2:1" 2 1
354386e3792SIdo Schimmel	sleep 10
355386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,11/102,45 type resilient
356386e3792SIdo Schimmel	multipath4_test "Weighted MP 11:45" 11 45
357386e3792SIdo Schimmel
358386e3792SIdo Schimmel	ip nexthop replace id 103 group 101,1/102,1 type resilient
359386e3792SIdo Schimmel
360386e3792SIdo Schimmel	log_info "Running IPv6 L4 hash multipath tests"
361386e3792SIdo Schimmel	sleep 10
362386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,1/105,1 type resilient
363386e3792SIdo Schimmel	multipath6_l4_test "ECMP" 1 1
364386e3792SIdo Schimmel	sleep 10
365386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,2/105,1 type resilient
366386e3792SIdo Schimmel	multipath6_l4_test "Weighted MP 2:1" 2 1
367386e3792SIdo Schimmel	sleep 10
368386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,11/105,45 type resilient
369386e3792SIdo Schimmel	multipath6_l4_test "Weighted MP 11:45" 11 45
370386e3792SIdo Schimmel
371386e3792SIdo Schimmel	ip nexthop replace id 106 group 104,1/105,1 type resilient
372386e3792SIdo Schimmel}
373386e3792SIdo Schimmel
374a22b0426SPetr Machatanh_stats_test_v4()
375a22b0426SPetr Machata{
376a22b0426SPetr Machata	__nh_stats_test_v4 resilient
377a22b0426SPetr Machata}
378a22b0426SPetr Machata
379a22b0426SPetr Machatanh_stats_test_v6()
380a22b0426SPetr Machata{
381a22b0426SPetr Machata	__nh_stats_test_v6 resilient
382a22b0426SPetr Machata}
383a22b0426SPetr Machata
384386e3792SIdo Schimmelsetup_prepare()
385386e3792SIdo Schimmel{
386386e3792SIdo Schimmel	h1=${NETIFS[p1]}
387386e3792SIdo Schimmel	rp11=${NETIFS[p2]}
388386e3792SIdo Schimmel
389386e3792SIdo Schimmel	rp12=${NETIFS[p3]}
390386e3792SIdo Schimmel	rp22=${NETIFS[p4]}
391386e3792SIdo Schimmel
392386e3792SIdo Schimmel	rp13=${NETIFS[p5]}
393386e3792SIdo Schimmel	rp23=${NETIFS[p6]}
394386e3792SIdo Schimmel
395386e3792SIdo Schimmel	rp21=${NETIFS[p7]}
396386e3792SIdo Schimmel	h2=${NETIFS[p8]}
397386e3792SIdo Schimmel
398386e3792SIdo Schimmel	vrf_prepare
399386e3792SIdo Schimmel
400386e3792SIdo Schimmel	h1_create
401386e3792SIdo Schimmel	h2_create
402386e3792SIdo Schimmel
403386e3792SIdo Schimmel	router1_create
404386e3792SIdo Schimmel	router2_create
405386e3792SIdo Schimmel
406386e3792SIdo Schimmel	forwarding_enable
407386e3792SIdo Schimmel}
408386e3792SIdo Schimmel
409386e3792SIdo Schimmelcleanup()
410386e3792SIdo Schimmel{
411386e3792SIdo Schimmel	pre_cleanup
412386e3792SIdo Schimmel
413386e3792SIdo Schimmel	forwarding_restore
414386e3792SIdo Schimmel
415386e3792SIdo Schimmel	router2_destroy
416386e3792SIdo Schimmel	router1_destroy
417386e3792SIdo Schimmel
418386e3792SIdo Schimmel	h2_destroy
419386e3792SIdo Schimmel	h1_destroy
420386e3792SIdo Schimmel
421386e3792SIdo Schimmel	vrf_cleanup
422386e3792SIdo Schimmel}
423386e3792SIdo Schimmel
424386e3792SIdo Schimmelping_ipv4()
425386e3792SIdo Schimmel{
426386e3792SIdo Schimmel	ping_test $h1 198.51.100.2
427386e3792SIdo Schimmel}
428386e3792SIdo Schimmel
429386e3792SIdo Schimmelping_ipv6()
430386e3792SIdo Schimmel{
431386e3792SIdo Schimmel	ping6_test $h1 2001:db8:2::2
432386e3792SIdo Schimmel}
433386e3792SIdo Schimmel
434386e3792SIdo Schimmelip nexthop ls >/dev/null 2>&1
435386e3792SIdo Schimmelif [ $? -ne 0 ]; then
436386e3792SIdo Schimmel	echo "Nexthop objects not supported; skipping tests"
4377844ec21SPo-Hsu Lin	exit $ksft_skip
438386e3792SIdo Schimmelfi
439386e3792SIdo Schimmel
440386e3792SIdo Schimmeltrap cleanup EXIT
441386e3792SIdo Schimmel
442386e3792SIdo Schimmelsetup_prepare
443386e3792SIdo Schimmelsetup_wait
444386e3792SIdo Schimmelrouting_nh_obj
445386e3792SIdo Schimmel
446386e3792SIdo Schimmeltests_run
447386e3792SIdo Schimmel
448386e3792SIdo Schimmelexit $EXIT_STATUS
449