Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / testing / selftests / net / forwarding / router_mpath_nh.sh
bloba7d8399c8d4fc2bd57e7a9392fd69f52b9eac025
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
4 # +-------------------------+
5 # | H1 |
6 # | $h1 + |
7 # | 192.0.2.2/24 | |
8 # | 2001:db8:1::2/64 | |
9 # +-------------------|-----+
10 # |
11 # +-------------------|----------------------+
12 # | | R1 |
13 # | $rp11 + |
14 # | 192.0.2.1/24 |
15 # | 2001:db8:1::1/64 |
16 # | |
17 # | + $rp12 + $rp13 |
18 # | | 169.254.2.12/24 | 169.254.3.13/24 |
19 # | | fe80:2::12/64 | fe80:3::13/64 |
20 # +--|--------------------|------------------+
21 # | |
22 # +--|--------------------|------------------+
23 # | + $rp22 + $rp23 |
24 # | 169.254.2.22/24 169.254.3.23/24 |
25 # | fe80:2::22/64 fe80:3::23/64 |
26 # | |
27 # | $rp21 + |
28 # | 198.51.100.1/24 | |
29 # | 2001:db8:2::1/64 | R2 |
30 # +-------------------|----------------------+
31 # |
32 # +-------------------|-----+
33 # | | |
34 # | $h2 + |
35 # | 198.51.100.2/24 |
36 # | 2001:db8:2::2/64 H2 |
37 # +-------------------------+
39 ALL_TESTS="
40 ping_ipv4
41 ping_ipv6
42 multipath_test
43 multipath16_test
44 ping_ipv4_blackhole
45 ping_ipv6_blackhole
46 nh_stats_test_v4
47 nh_stats_test_v6
49 NUM_NETIFS=8
50 source lib.sh
51 source router_mpath_nh_lib.sh
53 h1_create()
55 vrf_create "vrf-h1"
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
68 h1_destroy()
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
77 vrf_destroy "vrf-h1"
80 h2_create()
82 vrf_create "vrf-h2"
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
95 h2_destroy()
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
104 vrf_destroy "vrf-h2"
107 router1_create()
109 vrf_create "vrf-r1"
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
129 router1_destroy()
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
154 vrf_destroy "vrf-r1"
157 router2_create()
159 vrf_create "vrf-r2"
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
179 router2_destroy()
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
202 vrf_destroy "vrf-r2"
205 routing_nh_obj()
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
228 multipath4_test()
230 local desc=$1; shift
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"
249 sleep 1
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
258 # Restore settings.
259 ip nexthop replace id 103 group 101/102
260 sysctl_restore net.ipv4.fib_multipath_hash_policy
263 multipath6_test()
265 local desc=$1; shift
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"
285 sleep 1
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
299 multipath_test()
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
323 multipath16_test()
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
330 omit_on_slow \
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
336 omit_on_slow \
337 multipath6_test "255:65535" 255 65535 sp=1024-1026,dp=0-65535
340 ping_ipv4_blackhole()
342 RET=0
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()
367 RET=0
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
390 nh_stats_test_v4()
392 __nh_stats_test_v4 mpath
395 nh_stats_test_v6()
397 __nh_stats_test_v6 mpath
400 setup_prepare()
402 h1=${NETIFS[p1]}
403 rp11=${NETIFS[p2]}
405 rp12=${NETIFS[p3]}
406 rp22=${NETIFS[p4]}
408 rp13=${NETIFS[p5]}
409 rp23=${NETIFS[p6]}
411 rp21=${NETIFS[p7]}
412 h2=${NETIFS[p8]}
414 vrf_prepare
416 h1_create
417 h2_create
419 router1_create
420 router2_create
422 forwarding_enable
425 cleanup()
427 pre_cleanup
429 forwarding_restore
431 router2_destroy
432 router1_destroy
434 h2_destroy
435 h1_destroy
437 vrf_cleanup
440 ping_ipv4()
442 ping_test $h1 198.51.100.2
445 ping_ipv6()
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"
453 exit $ksft_skip
456 trap cleanup EXIT
458 setup_prepare
459 setup_wait
460 routing_nh_obj
462 tests_run
464 exit $EXIT_STATUS