brintos

brintos / linux-shallow public Read only

0
0
Text · 9.1 KiB · c2420bb Raw
358 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +-----------------------+                             +----------------------+5# | H1 (vrf)              |                             | H2 (vrf)             |6# |    + $h1              |                             |              $h2 +   |7# |    | 192.0.2.1/28     |                             |     192.0.2.2/28 |   |8# |    | 2001:db8:1::1/64 |                             | 2001:db8:1::2/64 |   |9# +----|------------------+                             +------------------|---+10#      |                                                                   |11# +----|-------------------------------------------------------------------|---+12# | SW |                                                                   |   |13# |  +-|-------------------------------------------------------------------|-+ |14# |  | + $swp1                       BR                              $swp2 + | |15# |  +-----------------------------------------------------------------------+ |16# +----------------------------------------------------------------------------+17 18ALL_TESTS="19	test_l2_miss_unicast20	test_l2_miss_multicast21	test_l2_miss_ll_multicast22	test_l2_miss_broadcast23"24 25NUM_NETIFS=426source lib.sh27source tc_common.sh28 29h1_create()30{31	simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/6432}33 34h1_destroy()35{36	simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/6437}38 39h2_create()40{41	simple_if_init $h2 192.0.2.2/28 2001:db8:1::2/6442}43 44h2_destroy()45{46	simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/6447}48 49switch_create()50{51	ip link add name br1 up type bridge52	ip link set dev $swp1 master br153	ip link set dev $swp1 up54	ip link set dev $swp2 master br155	ip link set dev $swp2 up56 57	tc qdisc add dev $swp2 clsact58}59 60switch_destroy()61{62	tc qdisc del dev $swp2 clsact63 64	ip link set dev $swp2 down65	ip link set dev $swp2 nomaster66	ip link set dev $swp1 down67	ip link set dev $swp1 nomaster68	ip link del dev br169}70 71test_l2_miss_unicast()72{73	local dmac=00:01:02:03:04:0574	local dip=192.0.2.275	local sip=192.0.2.176 77	RET=078 79	# Unknown unicast.80	tc filter add dev $swp2 egress protocol ipv4 handle 101 pref 1 \81	   flower indev $swp1 l2_miss 1 dst_mac $dmac src_ip $sip \82	   dst_ip $dip action pass83	# Known unicast.84	tc filter add dev $swp2 egress protocol ipv4 handle 102 pref 1 \85	   flower indev $swp1 l2_miss 0 dst_mac $dmac src_ip $sip \86	   dst_ip $dip action pass87 88	# Before adding FDB entry.89	$MZ $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q90 91	tc_check_packets "dev $swp2 egress" 101 192	check_err $? "Unknown unicast filter was not hit before adding FDB entry"93 94	tc_check_packets "dev $swp2 egress" 102 095	check_err $? "Known unicast filter was hit before adding FDB entry"96 97	# Adding FDB entry.98	bridge fdb replace $dmac dev $swp2 master static99 100	$MZ $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q101 102	tc_check_packets "dev $swp2 egress" 101 1103	check_err $? "Unknown unicast filter was hit after adding FDB entry"104 105	tc_check_packets "dev $swp2 egress" 102 1106	check_err $? "Known unicast filter was not hit after adding FDB entry"107 108	# Deleting FDB entry.109	bridge fdb del $dmac dev $swp2 master static110 111	$MZ $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q112 113	tc_check_packets "dev $swp2 egress" 101 2114	check_err $? "Unknown unicast filter was not hit after deleting FDB entry"115 116	tc_check_packets "dev $swp2 egress" 102 1117	check_err $? "Known unicast filter was hit after deleting FDB entry"118 119	tc filter del dev $swp2 egress protocol ipv4 pref 1 handle 102 flower120	tc filter del dev $swp2 egress protocol ipv4 pref 1 handle 101 flower121 122	log_test "L2 miss - Unicast"123}124 125test_l2_miss_multicast_common()126{127	local proto=$1; shift128	local sip=$1; shift129	local dip=$1; shift130	local dmac=$1; shift131	local mode=$1; shift132	local name=$1; shift133 134	RET=0135 136	# Unregistered multicast.137	tc filter add dev $swp2 egress protocol $proto handle 101 pref 1 \138	   flower indev $swp1 l2_miss 1 src_ip $sip dst_ip $dip \139	   action pass140	# Registered multicast.141	tc filter add dev $swp2 egress protocol $proto handle 102 pref 1 \142	   flower indev $swp1 l2_miss 0 src_ip $sip dst_ip $dip \143	   action pass144 145	# Before adding MDB entry.146	$MZ $mode $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q147 148	tc_check_packets "dev $swp2 egress" 101 1149	check_err $? "Unregistered multicast filter was not hit before adding MDB entry"150 151	tc_check_packets "dev $swp2 egress" 102 0152	check_err $? "Registered multicast filter was hit before adding MDB entry"153 154	# Adding MDB entry.155	bridge mdb replace dev br1 port $swp2 grp $dip permanent156 157	$MZ $mode $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q158 159	tc_check_packets "dev $swp2 egress" 101 1160	check_err $? "Unregistered multicast filter was hit after adding MDB entry"161 162	tc_check_packets "dev $swp2 egress" 102 1163	check_err $? "Registered multicast filter was not hit after adding MDB entry"164 165	# Deleting MDB entry.166	bridge mdb del dev br1 port $swp2 grp $dip167 168	$MZ $mode $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q169 170	tc_check_packets "dev $swp2 egress" 101 2171	check_err $? "Unregistered multicast filter was not hit after deleting MDB entry"172 173	tc_check_packets "dev $swp2 egress" 102 1174	check_err $? "Registered multicast filter was hit after deleting MDB entry"175 176	tc filter del dev $swp2 egress protocol $proto pref 1 handle 102 flower177	tc filter del dev $swp2 egress protocol $proto pref 1 handle 101 flower178 179	log_test "L2 miss - Multicast ($name)"180}181 182test_l2_miss_multicast_ipv4()183{184	local proto="ipv4"185	local sip=192.0.2.1186	local dip=239.1.1.1187	local dmac=01:00:5e:01:01:01188	local mode="-4"189	local name="IPv4"190 191	test_l2_miss_multicast_common $proto $sip $dip $dmac $mode $name192}193 194test_l2_miss_multicast_ipv6()195{196	local proto="ipv6"197	local sip=2001:db8:1::1198	local dip=ff0e::1199	local dmac=33:33:00:00:00:01200	local mode="-6"201	local name="IPv6"202 203	test_l2_miss_multicast_common $proto $sip $dip $dmac $mode $name204}205 206test_l2_miss_multicast()207{208	# Configure $swp2 as a multicast router port so that it will forward209	# both registered and unregistered multicast traffic.210	bridge link set dev $swp2 mcast_router 2211 212	# Set the Max Response Delay to 100 centiseconds (1 second) so that the213	# bridge will start forwarding according to its MDB soon after a214	# multicast querier is enabled.215	ip link set dev br1 type bridge mcast_query_response_interval 100216 217	# Forwarding according to MDB entries only takes place when the bridge218	# detects that there is a valid querier in the network. Set the bridge219	# as the querier and assign it a valid IPv6 link-local address to be220	# used as the source address for MLD queries.221	ip link set dev br1 type bridge mcast_querier 1222	ip -6 address add fe80::1/64 nodad dev br1223	sleep 10224 225	test_l2_miss_multicast_ipv4226	test_l2_miss_multicast_ipv6227 228	ip -6 address del fe80::1/64 dev br1229	ip link set dev br1 type bridge mcast_querier 0230	ip link set dev br1 type bridge mcast_query_response_interval 1000231	bridge link set dev $swp2 mcast_router 1232}233 234test_l2_miss_multicast_common2()235{236	local name=$1; shift237	local dmac=$1; shift238	local dip=224.0.0.1239	local sip=192.0.2.1240 241}242 243test_l2_miss_ll_multicast_common()244{245	local proto=$1; shift246	local dmac=$1; shift247	local sip=$1; shift248	local dip=$1; shift249	local mode=$1; shift250	local name=$1; shift251 252	RET=0253 254	tc filter add dev $swp2 egress protocol $proto handle 101 pref 1 \255	   flower indev $swp1 l2_miss 1 dst_mac $dmac src_ip $sip \256	   dst_ip $dip action pass257 258	$MZ $mode $h1 -a own -b $dmac -t ip -A $sip -B $dip -c 1 -p 100 -q259 260	tc_check_packets "dev $swp2 egress" 101 1261	check_err $? "Filter was not hit"262 263	tc filter del dev $swp2 egress protocol $proto pref 1 handle 101 flower264 265	log_test "L2 miss - Link-local multicast ($name)"266}267 268test_l2_miss_ll_multicast_ipv4()269{270	local proto=ipv4271	local dmac=01:00:5e:00:00:01272	local sip=192.0.2.1273	local dip=224.0.0.1274	local mode="-4"275	local name="IPv4"276 277	test_l2_miss_ll_multicast_common $proto $dmac $sip $dip $mode $name278}279 280test_l2_miss_ll_multicast_ipv6()281{282	local proto=ipv6283	local dmac=33:33:00:00:00:01284	local sip=2001:db8:1::1285	local dip=ff02::1286	local mode="-6"287	local name="IPv6"288 289	test_l2_miss_ll_multicast_common $proto $dmac $sip $dip $mode $name290}291 292test_l2_miss_ll_multicast()293{294	test_l2_miss_ll_multicast_ipv4295	test_l2_miss_ll_multicast_ipv6296}297 298test_l2_miss_broadcast()299{300	local dmac=ff:ff:ff:ff:ff:ff301	local smac=00:01:02:03:04:05302 303	RET=0304 305	tc filter add dev $swp2 egress protocol all handle 101 pref 1 \306	   flower l2_miss 1 dst_mac $dmac src_mac $smac \307	   action pass308	tc filter add dev $swp2 egress protocol all handle 102 pref 1 \309	   flower l2_miss 0 dst_mac $dmac src_mac $smac \310	   action pass311 312	$MZ $h1 -a $smac -b $dmac -c 1 -p 100 -q313 314	tc_check_packets "dev $swp2 egress" 101 0315	check_err $? "L2 miss filter was hit when should not"316 317	tc_check_packets "dev $swp2 egress" 102 1318	check_err $? "L2 no miss filter was not hit when should"319 320	tc filter del dev $swp2 egress protocol all pref 1 handle 102 flower321	tc filter del dev $swp2 egress protocol all pref 1 handle 101 flower322 323	log_test "L2 miss - Broadcast"324}325 326setup_prepare()327{328	h1=${NETIFS[p1]}329	swp1=${NETIFS[p2]}330 331	swp2=${NETIFS[p3]}332	h2=${NETIFS[p4]}333 334	vrf_prepare335	h1_create336	h2_create337	switch_create338}339 340cleanup()341{342	pre_cleanup343 344	switch_destroy345	h2_destroy346	h1_destroy347	vrf_cleanup348}349 350trap cleanup EXIT351 352setup_prepare353setup_wait354 355tests_run356 357exit $EXIT_STATUS358