brintos

brintos / linux-shallow public Read only

0
0
Text · 7.3 KiB · b98ea94 Raw
341 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +--------------------+                     +----------------------+5# | H1                 |                     |                   H2 |6# |                    |                     |                      |7# |              $h1 + |                     | + $h2                |8# |     192.0.2.2/24 | |                     | | 198.51.100.2/24    |9# | 2001:db8:1::2/64 | |                     | | 2001:db8:2::2/64   |10# |                  | |                     | |                    |11# +------------------|-+                     +-|--------------------+12#                    |                         |13# +------------------|-------------------------|--------------------+14# | SW               |                         |                    |15# |                  |                         |                    |16# |             $rp1 +                         + $rp2               |17# |     192.0.2.1/24                             198.51.100.1/24    |18# | 2001:db8:1::1/64                             2001:db8:2::1/64   |19# |                                                                 |20# +-----------------------------------------------------------------+21 22ALL_TESTS="23	ping_ipv424	ping_ipv625	sip_in_class_e26	mc_mac_mismatch27	ipv4_sip_equal_dip28	ipv6_sip_equal_dip29	ipv4_dip_link_local30"31 32NUM_NETIFS=433source lib.sh34source tc_common.sh35 36require_command $MCD37require_command $MC_CLI38table_name=selftests39 40h1_create()41{42	vrf_create "vrf-h1"43	ip link set dev $h1 master vrf-h144 45	ip link set dev vrf-h1 up46	ip link set dev $h1 up47 48	ip address add 192.0.2.2/24 dev $h149	ip address add 2001:db8:1::2/64 dev $h150 51	ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.152	ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::153}54 55h1_destroy()56{57	ip route del 2001:db8:2::/64 vrf vrf-h158	ip route del 198.51.100.0/24 vrf vrf-h159 60	ip address del 2001:db8:1::2/64 dev $h161	ip address del 192.0.2.2/24 dev $h162 63	ip link set dev $h1 down64	vrf_destroy "vrf-h1"65}66 67h2_create()68{69	vrf_create "vrf-h2"70	ip link set dev $h2 master vrf-h271 72	ip link set dev vrf-h2 up73	ip link set dev $h2 up74 75	ip address add 198.51.100.2/24 dev $h276	ip address add 2001:db8:2::2/64 dev $h277 78	ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.179	ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::180}81 82h2_destroy()83{84	ip route del 2001:db8:1::/64 vrf vrf-h285	ip route del 192.0.2.0/24 vrf vrf-h286 87	ip address del 2001:db8:2::2/64 dev $h288	ip address del 198.51.100.2/24 dev $h289 90	ip link set dev $h2 down91	vrf_destroy "vrf-h2"92}93 94router_create()95{96	ip link set dev $rp1 up97	ip link set dev $rp2 up98 99	tc qdisc add dev $rp2 clsact100 101	ip address add 192.0.2.1/24 dev $rp1102	ip address add 2001:db8:1::1/64 dev $rp1103 104	ip address add 198.51.100.1/24 dev $rp2105	ip address add 2001:db8:2::1/64 dev $rp2106}107 108router_destroy()109{110	ip address del 2001:db8:2::1/64 dev $rp2111	ip address del 198.51.100.1/24 dev $rp2112 113	ip address del 2001:db8:1::1/64 dev $rp1114	ip address del 192.0.2.1/24 dev $rp1115 116	tc qdisc del dev $rp2 clsact117 118	ip link set dev $rp2 down119	ip link set dev $rp1 down120}121 122start_mcd()123{124	SMCROUTEDIR="$(mktemp -d)"125 126	for ((i = 1; i <= $NUM_NETIFS; ++i)); do127		echo "phyint ${NETIFS[p$i]} enable" >> \128			$SMCROUTEDIR/$table_name.conf129	done130 131	$MCD -N -I $table_name -f $SMCROUTEDIR/$table_name.conf \132		-P $SMCROUTEDIR/$table_name.pid133}134 135kill_mcd()136{137	pkill $MCD138	rm -rf $SMCROUTEDIR139}140 141setup_prepare()142{143	h1=${NETIFS[p1]}144	rp1=${NETIFS[p2]}145 146	rp2=${NETIFS[p3]}147	h2=${NETIFS[p4]}148 149	rp1mac=$(mac_get $rp1)150 151	start_mcd152 153	vrf_prepare154 155	h1_create156	h2_create157 158	router_create159 160	forwarding_enable161}162 163cleanup()164{165	pre_cleanup166 167	forwarding_restore168 169	router_destroy170 171	h2_destroy172	h1_destroy173 174	vrf_cleanup175 176	kill_mcd177}178 179ping_ipv4()180{181	ping_test $h1 198.51.100.2182}183 184ping_ipv6()185{186	ping6_test $h1 2001:db8:2::2187}188 189sip_in_class_e()190{191	RET=0192 193	# Disable rpfilter to prevent packets to be dropped because of it.194	sysctl_set net.ipv4.conf.all.rp_filter 0195	sysctl_set net.ipv4.conf.$rp1.rp_filter 0196 197	tc filter add dev $rp2 egress protocol ip pref 1 handle 101 \198		flower src_ip 240.0.0.1 ip_proto udp action pass199 200	$MZ $h1 -t udp "sp=54321,dp=12345" -c 5 -d 1msec \201		-A 240.0.0.1 -b $rp1mac -B 198.51.100.2 -q202 203	tc_check_packets "dev $rp2 egress" 101 5204	check_err $? "Packets were dropped"205 206	log_test "Source IP in class E"207 208	tc filter del dev $rp2 egress protocol ip pref 1 handle 101 flower209	sysctl_restore net.ipv4.conf.$rp1.rp_filter210	sysctl_restore net.ipv4.conf.all.rp_filter211}212 213create_mcast_sg()214{215	local if_name=$1; shift216	local s_addr=$1; shift217	local mcast=$1; shift218	local dest_ifs=${@}219 220	$MC_CLI -I $table_name add $if_name $s_addr $mcast $dest_ifs221}222 223delete_mcast_sg()224{225	local if_name=$1; shift226	local s_addr=$1; shift227	local mcast=$1; shift228	local dest_ifs=${@}229 230	$MC_CLI -I $table_name remove $if_name $s_addr $mcast $dest_ifs231}232 233__mc_mac_mismatch()234{235	local desc=$1; shift236	local proto=$1; shift237	local sip=$1; shift238	local dip=$1; shift239	local flags=${1:-""}; shift240	local dmac=01:02:03:04:05:06241 242	RET=0243 244	tc filter add dev $rp2 egress protocol $proto pref 1 handle 101 \245		flower dst_ip $dip action pass246 247	create_mcast_sg $rp1 $sip $dip $rp2248 249	$MZ $flags $h1 -t udp "sp=54321,dp=12345" -c 5 -d 1msec -b $dmac \250		-B $dip -q251 252	tc_check_packets "dev $rp2 egress" 101 5253	check_err $? "Packets were dropped"254 255	log_test "Multicast MAC mismatch: $desc"256 257	delete_mcast_sg $rp1 $sip $dip $rp2258	tc filter del dev $rp2 egress protocol $proto pref 1 handle 101 flower259}260 261mc_mac_mismatch()262{263	__mc_mac_mismatch "IPv4" "ip" 192.0.2.2 225.1.2.3264	__mc_mac_mismatch "IPv6" "ipv6" 2001:db8:1::2 ff0e::3 "-6"265}266 267ipv4_sip_equal_dip()268{269	RET=0270 271	# Disable rpfilter to prevent packets to be dropped because of it.272	sysctl_set net.ipv4.conf.all.rp_filter 0273	sysctl_set net.ipv4.conf.$rp1.rp_filter 0274 275	tc filter add dev $rp2 egress protocol ip pref 1 handle 101 \276		flower src_ip 198.51.100.2  action pass277 278	$MZ $h1 -t udp "sp=54321,dp=12345" -c 5 -d 1msec \279		-A 198.51.100.2 -b $rp1mac -B 198.51.100.2 -q280 281	tc_check_packets "dev $rp2 egress" 101 5282	check_err $? "Packets were dropped"283 284	log_test "Source IP is equal to destination IP: IPv4"285 286	tc filter del dev $rp2 egress protocol ip pref 1 handle 101 flower287	sysctl_restore net.ipv4.conf.$rp1.rp_filter288	sysctl_restore net.ipv4.conf.all.rp_filter289}290 291ipv6_sip_equal_dip()292{293	RET=0294 295	tc filter add dev $rp2 egress protocol ipv6 pref 1 handle 101 \296		flower src_ip 2001:db8:2::2 action pass297 298	$MZ -6 $h1 -t udp "sp=54321,dp=12345" -c 5 -d 1msec \299		-A 2001:db8:2::2 -b $rp1mac -B 2001:db8:2::2 -q300 301	tc_check_packets "dev $rp2 egress" 101 5302	check_err $? "Packets were dropped"303 304	log_test "Source IP is equal to destination IP: IPv6"305 306	tc filter del dev $rp2 egress protocol ipv6 pref 1 handle 101 flower307}308 309ipv4_dip_link_local()310{311	local dip=169.254.1.1312 313	RET=0314 315	tc filter add dev $rp2 egress protocol ip pref 1 handle 101 \316		flower dst_ip $dip action pass317 318	ip neigh add 169.254.1.1 lladdr 00:11:22:33:44:55 dev $rp2319	ip route add 169.254.1.0/24 dev $rp2320 321	$MZ $h1 -t udp "sp=54321,dp=12345" -c 5 -d 1msec -b $rp1mac -B $dip -q322 323	tc_check_packets "dev $rp2 egress" 101 5324	check_err $? "Packets were dropped"325 326	log_test "IPv4 destination IP is link-local"327 328	ip route del 169.254.1.0/24 dev $rp2329	ip neigh del 169.254.1.1 lladdr 00:11:22:33:44:55 dev $rp2330	tc filter del dev $rp2 egress protocol ip pref 1 handle 101 flower331}332 333trap cleanup EXIT334 335setup_prepare336setup_wait337 338tests_run339 340exit $EXIT_STATUS341