~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/forwarding/router_mpath_nh.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0
  3 
  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 # +-------------------------+
 38 
 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
 48 "
 49 NUM_NETIFS=8
 50 source lib.sh
 51 source router_mpath_nh_lib.sh
 52 
 53 h1_create()
 54 {
 55         vrf_create "vrf-h1"
 56         ip link set dev $h1 master vrf-h1
 57 
 58         ip link set dev vrf-h1 up
 59         ip link set dev $h1 up
 60 
 61         ip address add 192.0.2.2/24 dev $h1
 62         ip address add 2001:db8:1::2/64 dev $h1
 63 
 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
 66 }
 67 
 68 h1_destroy()
 69 {
 70         ip route del 2001:db8:2::/64 vrf vrf-h1
 71         ip route del 198.51.100.0/24 vrf vrf-h1
 72 
 73         ip address del 2001:db8:1::2/64 dev $h1
 74         ip address del 192.0.2.2/24 dev $h1
 75 
 76         ip link set dev $h1 down
 77         vrf_destroy "vrf-h1"
 78 }
 79 
 80 h2_create()
 81 {
 82         vrf_create "vrf-h2"
 83         ip link set dev $h2 master vrf-h2
 84 
 85         ip link set dev vrf-h2 up
 86         ip link set dev $h2 up
 87 
 88         ip address add 198.51.100.2/24 dev $h2
 89         ip address add 2001:db8:2::2/64 dev $h2
 90 
 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
 93 }
 94 
 95 h2_destroy()
 96 {
 97         ip route del 2001:db8:1::/64 vrf vrf-h2
 98         ip route del 192.0.2.0/24 vrf vrf-h2
 99 
100         ip address del 2001:db8:2::2/64 dev $h2
101         ip address del 198.51.100.2/24 dev $h2
102 
103         ip link set dev $h2 down
104         vrf_destroy "vrf-h2"
105 }
106 
107 router1_create()
108 {
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
113 
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
118 
119         ip address add 192.0.2.1/24 dev $rp11
120         ip address add 2001:db8:1::1/64 dev $rp11
121 
122         ip address add 169.254.2.12/24 dev $rp12
123         ip address add fe80:2::12/64 dev $rp12
124 
125         ip address add 169.254.3.13/24 dev $rp13
126         ip address add fe80:3::13/64 dev $rp13
127 }
128 
129 router1_destroy()
130 {
131         ip route del 2001:db8:2::/64 vrf vrf-r1
132         ip route del 198.51.100.0/24 vrf vrf-r1
133 
134         ip address del fe80:3::13/64 dev $rp13
135         ip address del 169.254.3.13/24 dev $rp13
136 
137         ip address del fe80:2::12/64 dev $rp12
138         ip address del 169.254.2.12/24 dev $rp12
139 
140         ip address del 2001:db8:1::1/64 dev $rp11
141         ip address del 192.0.2.1/24 dev $rp11
142 
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
149 
150         ip link set dev $rp13 down
151         ip link set dev $rp12 down
152         ip link set dev $rp11 down
153 
154         vrf_destroy "vrf-r1"
155 }
156 
157 router2_create()
158 {
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
163 
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
168 
169         ip address add 198.51.100.1/24 dev $rp21
170         ip address add 2001:db8:2::1/64 dev $rp21
171 
172         ip address add 169.254.2.22/24 dev $rp22
173         ip address add fe80:2::22/64 dev $rp22
174 
175         ip address add 169.254.3.23/24 dev $rp23
176         ip address add fe80:3::23/64 dev $rp23
177 }
178 
179 router2_destroy()
180 {
181         ip route del 2001:db8:1::/64 vrf vrf-r2
182         ip route del 192.0.2.0/24 vrf vrf-r2
183 
184         ip address del fe80:3::23/64 dev $rp23
185         ip address del 169.254.3.23/24 dev $rp23
186 
187         ip address del fe80:2::22/64 dev $rp22
188         ip address del 169.254.2.22/24 dev $rp22
189 
190         ip address del 2001:db8:2::1/64 dev $rp21
191         ip address del 198.51.100.1/24 dev $rp21
192 
193         ip nexthop del id 201
194         ip nexthop del id 202
195         ip nexthop del id 204
196         ip nexthop del id 205
197 
198         ip link set dev $rp23 down
199         ip link set dev $rp22 down
200         ip link set dev $rp21 down
201 
202         vrf_destroy "vrf-r2"
203 }
204 
205 routing_nh_obj()
206 {
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
211 
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
216 
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
221 
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
226 }
227 
228 multipath4_test()
229 {
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
234 
235         local t0_rp12 t0_rp13 t1_rp12 t1_rp13
236         local packets_rp12 packets_rp13
237 
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
243 
244         t0_rp12=$(link_stats_tx_packets_get $rp12)
245         t0_rp13=$(link_stats_tx_packets_get $rp13)
246 
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
250 
251         t1_rp12=$(link_stats_tx_packets_get $rp12)
252         t1_rp13=$(link_stats_tx_packets_get $rp13)
253 
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
257 
258         # Restore settings.
259         ip nexthop replace id 103 group 101/102
260         sysctl_restore net.ipv4.fib_multipath_hash_policy
261 }
262 
263 multipath6_test()
264 {
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
269 
270         local t0_rp12 t0_rp13 t1_rp12 t1_rp13
271         local packets_rp12 packets_rp13
272 
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
277 
278         ip nexthop replace id 106 group 104,$weight_rp12/105,$weight_rp13
279 
280         t0_rp12=$(link_stats_tx_packets_get $rp12)
281         t0_rp13=$(link_stats_tx_packets_get $rp13)
282 
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
286 
287         t1_rp12=$(link_stats_tx_packets_get $rp12)
288         t1_rp13=$(link_stats_tx_packets_get $rp13)
289 
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
293 
294         ip nexthop replace id 106 group 104/105
295 
296         sysctl_restore net.ipv6.fib_multipath_hash_policy
297 }
298 
299 multipath_test()
300 {
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
305 
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
309 
310         multipath4_test "ECMP" 1 1
311         multipath4_test "Weighted MP 2:1" 2 1
312         multipath4_test "Weighted MP 11:45" 11 45
313 
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
316 
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
321 }
322 
323 multipath16_test()
324 {
325         check_nhgw16 104 || return
326 
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
332 
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
338 }
339 
340 ping_ipv4_blackhole()
341 {
342         RET=0
343 
344         ip nexthop add id 1001 blackhole
345         ip nexthop add id 1002 group 1001
346 
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"
350 
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"
354 
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"
358 
359         log_test "IPv4 blackhole ping"
360 
361         ip nexthop del id 1002
362         ip nexthop del id 1001
363 }
364 
365 ping_ipv6_blackhole()
366 {
367         RET=0
368 
369         ip -6 nexthop add id 1001 blackhole
370         ip nexthop add id 1002 group 1001
371 
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"
375 
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"
379 
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"
383 
384         log_test "IPv6 blackhole ping"
385 
386         ip nexthop del id 1002
387         ip -6 nexthop del id 1001
388 }
389 
390 nh_stats_test_v4()
391 {
392         __nh_stats_test_v4 mpath
393 }
394 
395 nh_stats_test_v6()
396 {
397         __nh_stats_test_v6 mpath
398 }
399 
400 setup_prepare()
401 {
402         h1=${NETIFS[p1]}
403         rp11=${NETIFS[p2]}
404 
405         rp12=${NETIFS[p3]}
406         rp22=${NETIFS[p4]}
407 
408         rp13=${NETIFS[p5]}
409         rp23=${NETIFS[p6]}
410 
411         rp21=${NETIFS[p7]}
412         h2=${NETIFS[p8]}
413 
414         vrf_prepare
415 
416         h1_create
417         h2_create
418 
419         router1_create
420         router2_create
421 
422         forwarding_enable
423 }
424 
425 cleanup()
426 {
427         pre_cleanup
428 
429         forwarding_restore
430 
431         router2_destroy
432         router1_destroy
433 
434         h2_destroy
435         h1_destroy
436 
437         vrf_cleanup
438 }
439 
440 ping_ipv4()
441 {
442         ping_test $h1 198.51.100.2
443 }
444 
445 ping_ipv6()
446 {
447         ping6_test $h1 2001:db8:2::2
448 }
449 
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
454 fi
455 
456 trap cleanup EXIT
457 
458 setup_prepare
459 setup_wait
460 routing_nh_obj
461 
462 tests_run
463 
464 exit $EXIT_STATUS

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php