brintos

brintos / linux-shallow public Read only

0
0
Text · 10.7 KiB · a7d8399 Raw
465 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 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 39ALL_TESTS="40	ping_ipv441	ping_ipv642	multipath_test43	multipath16_test44	ping_ipv4_blackhole45	ping_ipv6_blackhole46	nh_stats_test_v447	nh_stats_test_v648"49NUM_NETIFS=850source lib.sh51source router_mpath_nh_lib.sh52 53h1_create()54{55	vrf_create "vrf-h1"56	ip link set dev $h1 master vrf-h157 58	ip link set dev vrf-h1 up59	ip link set dev $h1 up60 61	ip address add 192.0.2.2/24 dev $h162	ip address add 2001:db8:1::2/64 dev $h163 64	ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.165	ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::166}67 68h1_destroy()69{70	ip route del 2001:db8:2::/64 vrf vrf-h171	ip route del 198.51.100.0/24 vrf vrf-h172 73	ip address del 2001:db8:1::2/64 dev $h174	ip address del 192.0.2.2/24 dev $h175 76	ip link set dev $h1 down77	vrf_destroy "vrf-h1"78}79 80h2_create()81{82	vrf_create "vrf-h2"83	ip link set dev $h2 master vrf-h284 85	ip link set dev vrf-h2 up86	ip link set dev $h2 up87 88	ip address add 198.51.100.2/24 dev $h289	ip address add 2001:db8:2::2/64 dev $h290 91	ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.192	ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::193}94 95h2_destroy()96{97	ip route del 2001:db8:1::/64 vrf vrf-h298	ip route del 192.0.2.0/24 vrf vrf-h299 100	ip address del 2001:db8:2::2/64 dev $h2101	ip address del 198.51.100.2/24 dev $h2102 103	ip link set dev $h2 down104	vrf_destroy "vrf-h2"105}106 107router1_create()108{109	vrf_create "vrf-r1"110	ip link set dev $rp11 master vrf-r1111	ip link set dev $rp12 master vrf-r1112	ip link set dev $rp13 master vrf-r1113 114	ip link set dev vrf-r1 up115	ip link set dev $rp11 up116	ip link set dev $rp12 up117	ip link set dev $rp13 up118 119	ip address add 192.0.2.1/24 dev $rp11120	ip address add 2001:db8:1::1/64 dev $rp11121 122	ip address add 169.254.2.12/24 dev $rp12123	ip address add fe80:2::12/64 dev $rp12124 125	ip address add 169.254.3.13/24 dev $rp13126	ip address add fe80:3::13/64 dev $rp13127}128 129router1_destroy()130{131	ip route del 2001:db8:2::/64 vrf vrf-r1132	ip route del 198.51.100.0/24 vrf vrf-r1133 134	ip address del fe80:3::13/64 dev $rp13135	ip address del 169.254.3.13/24 dev $rp13136 137	ip address del fe80:2::12/64 dev $rp12138	ip address del 169.254.2.12/24 dev $rp12139 140	ip address del 2001:db8:1::1/64 dev $rp11141	ip address del 192.0.2.1/24 dev $rp11142 143	ip nexthop del id 103144	ip nexthop del id 101145	ip nexthop del id 102146	ip nexthop del id 106147	ip nexthop del id 104148	ip nexthop del id 105149 150	ip link set dev $rp13 down151	ip link set dev $rp12 down152	ip link set dev $rp11 down153 154	vrf_destroy "vrf-r1"155}156 157router2_create()158{159	vrf_create "vrf-r2"160	ip link set dev $rp21 master vrf-r2161	ip link set dev $rp22 master vrf-r2162	ip link set dev $rp23 master vrf-r2163 164	ip link set dev vrf-r2 up165	ip link set dev $rp21 up166	ip link set dev $rp22 up167	ip link set dev $rp23 up168 169	ip address add 198.51.100.1/24 dev $rp21170	ip address add 2001:db8:2::1/64 dev $rp21171 172	ip address add 169.254.2.22/24 dev $rp22173	ip address add fe80:2::22/64 dev $rp22174 175	ip address add 169.254.3.23/24 dev $rp23176	ip address add fe80:3::23/64 dev $rp23177}178 179router2_destroy()180{181	ip route del 2001:db8:1::/64 vrf vrf-r2182	ip route del 192.0.2.0/24 vrf vrf-r2183 184	ip address del fe80:3::23/64 dev $rp23185	ip address del 169.254.3.23/24 dev $rp23186 187	ip address del fe80:2::22/64 dev $rp22188	ip address del 169.254.2.22/24 dev $rp22189 190	ip address del 2001:db8:2::1/64 dev $rp21191	ip address del 198.51.100.1/24 dev $rp21192 193	ip nexthop del id 201194	ip nexthop del id 202195	ip nexthop del id 204196	ip nexthop del id 205197 198	ip link set dev $rp23 down199	ip link set dev $rp22 down200	ip link set dev $rp21 down201 202	vrf_destroy "vrf-r2"203}204 205routing_nh_obj()206{207	ip nexthop add id 101 via 169.254.2.22 dev $rp12208	ip nexthop add id 102 via 169.254.3.23 dev $rp13209	ip nexthop add id 103 group 101/102210	ip route add 198.51.100.0/24 vrf vrf-r1 nhid 103211 212	ip nexthop add id 104 via fe80:2::22 dev $rp12213	ip nexthop add id 105 via fe80:3::23 dev $rp13214	ip nexthop add id 106 group 104/105215	ip route add 2001:db8:2::/64 vrf vrf-r1 nhid 106216 217	ip nexthop add id 201 via 169.254.2.12 dev $rp22218	ip nexthop add id 202 via 169.254.3.13 dev $rp23219	ip nexthop add id 203 group 201/202220	ip route add 192.0.2.0/24 vrf vrf-r2 nhid 203221 222	ip nexthop add id 204 via fe80:2::12 dev $rp22223	ip nexthop add id 205 via fe80:3::13 dev $rp23224	ip nexthop add id 206 group 204/205225	ip route add 2001:db8:1::/64 vrf vrf-r2 nhid 206226}227 228multipath4_test()229{230	local desc=$1; shift231	local weight_rp12=$1; shift232	local weight_rp13=$1; shift233	local ports=${1-sp=1024,dp=0-32768}; shift234 235	local t0_rp12 t0_rp13 t1_rp12 t1_rp13236	local packets_rp12 packets_rp13237 238	# Transmit multiple flows from h1 to h2 and make sure they are239	# distributed between both multipath links (rp12 and rp13)240	# according to the configured weights.241	sysctl_set net.ipv4.fib_multipath_hash_policy 1242	ip nexthop replace id 103 group 101,$weight_rp12/102,$weight_rp13243 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 1250 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_rp13257 258	# Restore settings.259	ip nexthop replace id 103 group 101/102260	sysctl_restore net.ipv4.fib_multipath_hash_policy261}262 263multipath6_test()264{265	local desc=$1; shift266	local weight_rp12=$1; shift267	local weight_rp13=$1; shift268	local ports=${1-sp=1024,dp=0-32768}; shift269 270	local t0_rp12 t0_rp13 t1_rp12 t1_rp13271	local packets_rp12 packets_rp13272 273	# Transmit multiple flows from h1 to h2 and make sure they are274	# distributed between both multipath links (rp12 and rp13)275	# according to the configured weights.276	sysctl_set net.ipv6.fib_multipath_hash_policy 1277 278	ip nexthop replace id 106 group 104,$weight_rp12/105,$weight_rp13279 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 1286 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_rp13293 294	ip nexthop replace id 106 group 104/105295 296	sysctl_restore net.ipv6.fib_multipath_hash_policy297}298 299multipath_test()300{301	log_info "Running IPv4 multipath tests"302	multipath4_test "ECMP" 1 1303	multipath4_test "Weighted MP 2:1" 2 1304	multipath4_test "Weighted MP 11:45" 11 45305 306	log_info "Running IPv4 multipath tests with IPv6 link-local nexthops"307	ip nexthop replace id 101 via fe80:2::22 dev $rp12308	ip nexthop replace id 102 via fe80:3::23 dev $rp13309 310	multipath4_test "ECMP" 1 1311	multipath4_test "Weighted MP 2:1" 2 1312	multipath4_test "Weighted MP 11:45" 11 45313 314	ip nexthop replace id 102 via 169.254.3.23 dev $rp13315	ip nexthop replace id 101 via 169.254.2.22 dev $rp12316 317	log_info "Running IPv6 multipath tests"318	multipath6_test "ECMP" 1 1319	multipath6_test "Weighted MP 2:1" 2 1320	multipath6_test "Weighted MP 11:45" 11 45321}322 323multipath16_test()324{325	check_nhgw16 104 || return326 327	log_info "Running 16-bit IPv4 multipath tests"328	multipath4_test "65535:65535" 65535 65535329	multipath4_test "128:512" 128 512330	omit_on_slow \331		multipath4_test "255:65535" 255 65535 sp=1024-1026,dp=0-65535332 333	log_info "Running 16-bit IPv6 multipath tests"334	multipath6_test "65535:65535" 65535 65535335	multipath6_test "128:512" 128 512336	omit_on_slow \337		multipath6_test "255:65535" 255 65535 sp=1024-1026,dp=0-65535338}339 340ping_ipv4_blackhole()341{342	RET=0343 344	ip nexthop add id 1001 blackhole345	ip nexthop add id 1002 group 1001346 347	ip route replace 198.51.100.0/24 vrf vrf-r1 nhid 1001348	ping_do $h1 198.51.100.2349	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 1002352	ping_do $h1 198.51.100.2353	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 103356	ping_do $h1 198.51.100.2357	check_err $? "ping failed with a valid nexthop"358 359	log_test "IPv4 blackhole ping"360 361	ip nexthop del id 1002362	ip nexthop del id 1001363}364 365ping_ipv6_blackhole()366{367	RET=0368 369	ip -6 nexthop add id 1001 blackhole370	ip nexthop add id 1002 group 1001371 372	ip route replace 2001:db8:2::/64 vrf vrf-r1 nhid 1001373	ping6_do $h1 2001:db8:2::2374	check_fail $? "ping did not fail when using a blackhole nexthop"375 376	ip route replace 2001:db8:2::/64 vrf vrf-r1 nhid 1002377	ping6_do $h1 2001:db8:2::2378	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 106381	ping6_do $h1 2001:db8:2::2382	check_err $? "ping failed with a valid nexthop"383 384	log_test "IPv6 blackhole ping"385 386	ip nexthop del id 1002387	ip -6 nexthop del id 1001388}389 390nh_stats_test_v4()391{392	__nh_stats_test_v4 mpath393}394 395nh_stats_test_v6()396{397	__nh_stats_test_v6 mpath398}399 400setup_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_prepare415 416	h1_create417	h2_create418 419	router1_create420	router2_create421 422	forwarding_enable423}424 425cleanup()426{427	pre_cleanup428 429	forwarding_restore430 431	router2_destroy432	router1_destroy433 434	h2_destroy435	h1_destroy436 437	vrf_cleanup438}439 440ping_ipv4()441{442	ping_test $h1 198.51.100.2443}444 445ping_ipv6()446{447	ping6_test $h1 2001:db8:2::2448}449 450ip nexthop ls >/dev/null 2>&1451if [ $? -ne 0 ]; then452	echo "Nexthop objects not supported; skipping tests"453	exit $ksft_skip454fi455 456trap cleanup EXIT457 458setup_prepare459setup_wait460routing_nh_obj461 462tests_run463 464exit $EXIT_STATUS465