2 # SPDX-License-Identifier: GPL-2.0
4 # +-------------------------+
8 # | 2001:db8:1::2/64 | |
9 # +-------------------|-----+
11 # +-------------------|----------------------+
15 # | 2001:db8:1::1/64 |
18 # | | 169.254.2.12/24 | 169.254.3.13/24 |
19 # | | fe80:2::12/64 | fe80:3::13/64 |
20 # +--|--------------------|------------------+
22 # +--|--------------------|------------------+
24 # | 169.254.2.22/24 169.254.3.23/24 |
25 # | fe80:2::22/64 fe80:3::23/64 |
28 # | 198.51.100.1/24 | |
29 # | 2001:db8:2::1/64 | R2 |
30 # +-------------------|----------------------+
32 # +-------------------|-----+
36 # | 2001:db8:2::2/64 H2 |
37 # +-------------------------+
51 source router_mpath_nh_lib.sh
56 ip link
set dev
$h1 master vrf-h1
58 ip link
set dev vrf-h1 up
59 ip link
set dev
$h1 up
61 ip address add
192.0.2.2/24 dev
$h1
62 ip address add
2001:db8
:1::2/64 dev
$h1
64 ip route add
198.51.100.0/24 vrf vrf-h1 nexthop via
192.0.2.1
65 ip route add
2001:db8
:2::/64 vrf vrf-h1 nexthop via
2001:db8
:1::1
70 ip route del
2001:db8
:2::/64 vrf vrf-h1
71 ip route del
198.51.100.0/24 vrf vrf-h1
73 ip address del
2001:db8
:1::2/64 dev
$h1
74 ip address del
192.0.2.2/24 dev
$h1
76 ip link
set dev
$h1 down
83 ip link
set dev
$h2 master vrf-h2
85 ip link
set dev vrf-h2 up
86 ip link
set dev
$h2 up
88 ip address add
198.51.100.2/24 dev
$h2
89 ip address add
2001:db8
:2::2/64 dev
$h2
91 ip route add
192.0.2.0/24 vrf vrf-h2 nexthop via
198.51.100.1
92 ip route add
2001:db8
:1::/64 vrf vrf-h2 nexthop via
2001:db8
:2::1
97 ip route del
2001:db8
:1::/64 vrf vrf-h2
98 ip route del
192.0.2.0/24 vrf vrf-h2
100 ip address del
2001:db8
:2::2/64 dev
$h2
101 ip address del
198.51.100.2/24 dev
$h2
103 ip link
set dev
$h2 down
110 ip link
set dev
$rp11 master vrf-r1
111 ip link
set dev
$rp12 master vrf-r1
112 ip link
set dev
$rp13 master vrf-r1
114 ip link
set dev vrf-r1 up
115 ip link
set dev
$rp11 up
116 ip link
set dev
$rp12 up
117 ip link
set dev
$rp13 up
119 ip address add
192.0.2.1/24 dev
$rp11
120 ip address add
2001:db8
:1::1/64 dev
$rp11
122 ip address add
169.254.2.12/24 dev
$rp12
123 ip address add fe80
:2::12/64 dev
$rp12
125 ip address add
169.254.3.13/24 dev
$rp13
126 ip address add fe80
:3::13/64 dev
$rp13
131 ip route del
2001:db8
:2::/64 vrf vrf-r1
132 ip route del
198.51.100.0/24 vrf vrf-r1
134 ip address del fe80
:3::13/64 dev
$rp13
135 ip address del
169.254.3.13/24 dev
$rp13
137 ip address del fe80
:2::12/64 dev
$rp12
138 ip address del
169.254.2.12/24 dev
$rp12
140 ip address del
2001:db8
:1::1/64 dev
$rp11
141 ip address del
192.0.2.1/24 dev
$rp11
143 ip nexthop del id
103
144 ip nexthop del id
101
145 ip nexthop del id
102
146 ip nexthop del id
106
147 ip nexthop del id
104
148 ip nexthop del id
105
150 ip link
set dev
$rp13 down
151 ip link
set dev
$rp12 down
152 ip link
set dev
$rp11 down
160 ip link
set dev
$rp21 master vrf-r2
161 ip link
set dev
$rp22 master vrf-r2
162 ip link
set dev
$rp23 master vrf-r2
164 ip link
set dev vrf-r2 up
165 ip link
set dev
$rp21 up
166 ip link
set dev
$rp22 up
167 ip link
set dev
$rp23 up
169 ip address add
198.51.100.1/24 dev
$rp21
170 ip address add
2001:db8
:2::1/64 dev
$rp21
172 ip address add
169.254.2.22/24 dev
$rp22
173 ip address add fe80
:2::22/64 dev
$rp22
175 ip address add
169.254.3.23/24 dev
$rp23
176 ip address add fe80
:3::23/64 dev
$rp23
181 ip route del
2001:db8
:1::/64 vrf vrf-r2
182 ip route del
192.0.2.0/24 vrf vrf-r2
184 ip address del fe80
:3::23/64 dev
$rp23
185 ip address del
169.254.3.23/24 dev
$rp23
187 ip address del fe80
:2::22/64 dev
$rp22
188 ip address del
169.254.2.22/24 dev
$rp22
190 ip address del
2001:db8
:2::1/64 dev
$rp21
191 ip address del
198.51.100.1/24 dev
$rp21
193 ip nexthop del id
201
194 ip nexthop del id
202
195 ip nexthop del id
204
196 ip nexthop del id
205
198 ip link
set dev
$rp23 down
199 ip link
set dev
$rp22 down
200 ip link
set dev
$rp21 down
207 ip nexthop add id
101 via
169.254.2.22 dev
$rp12
208 ip nexthop add id
102 via
169.254.3.23 dev
$rp13
209 ip nexthop add id
103 group
101/102
210 ip route add
198.51.100.0/24 vrf vrf-r1 nhid
103
212 ip nexthop add id
104 via fe80
:2::22 dev
$rp12
213 ip nexthop add id
105 via fe80
:3::23 dev
$rp13
214 ip nexthop add id
106 group
104/105
215 ip route add
2001:db8
:2::/64 vrf vrf-r1 nhid
106
217 ip nexthop add id
201 via
169.254.2.12 dev
$rp22
218 ip nexthop add id
202 via
169.254.3.13 dev
$rp23
219 ip nexthop add id
203 group
201/202
220 ip route add
192.0.2.0/24 vrf vrf-r2 nhid
203
222 ip nexthop add id
204 via fe80
:2::12 dev
$rp22
223 ip nexthop add id
205 via fe80
:3::13 dev
$rp23
224 ip nexthop add id
206 group
204/205
225 ip route add
2001:db8
:1::/64 vrf vrf-r2 nhid
206
231 local weight_rp12
=$1; shift
232 local weight_rp13
=$1; shift
233 local ports
=${1-sp=1024,dp=0-32768}; shift
235 local t0_rp12 t0_rp13 t1_rp12 t1_rp13
236 local packets_rp12 packets_rp13
238 # Transmit multiple flows from h1 to h2 and make sure they are
239 # distributed between both multipath links (rp12 and rp13)
240 # according to the configured weights.
241 sysctl_set net.ipv4.fib_multipath_hash_policy
1
242 ip nexthop replace id
103 group
101,$weight_rp12/102,$weight_rp13
244 t0_rp12
=$
(link_stats_tx_packets_get
$rp12)
245 t0_rp13
=$
(link_stats_tx_packets_get
$rp13)
247 ip vrf
exec vrf-h1
$MZ $h1 -q -p 64 -A 192.0.2.2 -B 198.51.100.2 \
248 -d $MZ_DELAY -t udp
"$ports"
251 t1_rp12
=$
(link_stats_tx_packets_get
$rp12)
252 t1_rp13
=$
(link_stats_tx_packets_get
$rp13)
254 let "packets_rp12 = $t1_rp12 - $t0_rp12"
255 let "packets_rp13 = $t1_rp13 - $t0_rp13"
256 multipath_eval
"$desc" $weight_rp12 $weight_rp13 $packets_rp12 $packets_rp13
259 ip nexthop replace id
103 group
101/102
260 sysctl_restore net.ipv4.fib_multipath_hash_policy
266 local weight_rp12
=$1; shift
267 local weight_rp13
=$1; shift
268 local ports
=${1-sp=1024,dp=0-32768}; shift
270 local t0_rp12 t0_rp13 t1_rp12 t1_rp13
271 local packets_rp12 packets_rp13
273 # Transmit multiple flows from h1 to h2 and make sure they are
274 # distributed between both multipath links (rp12 and rp13)
275 # according to the configured weights.
276 sysctl_set net.ipv6.fib_multipath_hash_policy
1
278 ip nexthop replace id
106 group
104,$weight_rp12/105,$weight_rp13
280 t0_rp12
=$
(link_stats_tx_packets_get
$rp12)
281 t0_rp13
=$
(link_stats_tx_packets_get
$rp13)
283 $MZ $h1 -6 -q -p 64 -A 2001:db8
:1::2 -B 2001:db8
:2::2 \
284 -d $MZ_DELAY -t udp
"$ports"
287 t1_rp12
=$
(link_stats_tx_packets_get
$rp12)
288 t1_rp13
=$
(link_stats_tx_packets_get
$rp13)
290 let "packets_rp12 = $t1_rp12 - $t0_rp12"
291 let "packets_rp13 = $t1_rp13 - $t0_rp13"
292 multipath_eval
"$desc" $weight_rp12 $weight_rp13 $packets_rp12 $packets_rp13
294 ip nexthop replace id
106 group
104/105
296 sysctl_restore net.ipv6.fib_multipath_hash_policy
301 log_info
"Running IPv4 multipath tests"
302 multipath4_test
"ECMP" 1 1
303 multipath4_test
"Weighted MP 2:1" 2 1
304 multipath4_test
"Weighted MP 11:45" 11 45
306 log_info
"Running IPv4 multipath tests with IPv6 link-local nexthops"
307 ip nexthop replace id
101 via fe80
:2::22 dev
$rp12
308 ip nexthop replace id
102 via fe80
:3::23 dev
$rp13
310 multipath4_test
"ECMP" 1 1
311 multipath4_test
"Weighted MP 2:1" 2 1
312 multipath4_test
"Weighted MP 11:45" 11 45
314 ip nexthop replace id
102 via
169.254.3.23 dev
$rp13
315 ip nexthop replace id
101 via
169.254.2.22 dev
$rp12
317 log_info
"Running IPv6 multipath tests"
318 multipath6_test
"ECMP" 1 1
319 multipath6_test
"Weighted MP 2:1" 2 1
320 multipath6_test
"Weighted MP 11:45" 11 45
325 check_nhgw16
104 ||
return
327 log_info
"Running 16-bit IPv4 multipath tests"
328 multipath4_test
"65535:65535" 65535 65535
329 multipath4_test
"128:512" 128 512
331 multipath4_test
"255:65535" 255 65535 sp
=1024-1026,dp
=0-65535
333 log_info
"Running 16-bit IPv6 multipath tests"
334 multipath6_test
"65535:65535" 65535 65535
335 multipath6_test
"128:512" 128 512
337 multipath6_test
"255:65535" 255 65535 sp
=1024-1026,dp
=0-65535
340 ping_ipv4_blackhole
()
344 ip nexthop add id
1001 blackhole
345 ip nexthop add id
1002 group
1001
347 ip route replace
198.51.100.0/24 vrf vrf-r1 nhid
1001
348 ping_do
$h1 198.51.100.2
349 check_fail $?
"ping did not fail when using a blackhole nexthop"
351 ip route replace
198.51.100.0/24 vrf vrf-r1 nhid
1002
352 ping_do
$h1 198.51.100.2
353 check_fail $?
"ping did not fail when using a blackhole nexthop group"
355 ip route replace
198.51.100.0/24 vrf vrf-r1 nhid
103
356 ping_do
$h1 198.51.100.2
357 check_err $?
"ping failed with a valid nexthop"
359 log_test
"IPv4 blackhole ping"
361 ip nexthop del id
1002
362 ip nexthop del id
1001
365 ping_ipv6_blackhole
()
369 ip
-6 nexthop add id
1001 blackhole
370 ip nexthop add id
1002 group
1001
372 ip route replace
2001:db8
:2::/64 vrf vrf-r1 nhid
1001
373 ping6_do
$h1 2001:db8
:2::2
374 check_fail $?
"ping did not fail when using a blackhole nexthop"
376 ip route replace
2001:db8
:2::/64 vrf vrf-r1 nhid
1002
377 ping6_do
$h1 2001:db8
:2::2
378 check_fail $?
"ping did not fail when using a blackhole nexthop group"
380 ip route replace
2001:db8
:2::/64 vrf vrf-r1 nhid
106
381 ping6_do
$h1 2001:db8
:2::2
382 check_err $?
"ping failed with a valid nexthop"
384 log_test
"IPv6 blackhole ping"
386 ip nexthop del id
1002
387 ip
-6 nexthop del id
1001
392 __nh_stats_test_v4 mpath
397 __nh_stats_test_v6 mpath
442 ping_test
$h1 198.51.100.2
447 ping6_test
$h1 2001:db8
:2::2
450 ip nexthop
ls >/dev
/null
2>&1
451 if [ $?
-ne 0 ]; then
452 echo "Nexthop objects not supported; skipping tests"