Commit acaaffc5 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'selftests-forwarding-various-fixes'

Ido Schimmel says:

====================
selftests: forwarding: Various fixes

Fix various problems with forwarding selftests. See individual patches
for problem description and solution.
====================

Link: https://lore.kernel.org/r/20230808141503.4060661-1-idosch@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 8a70ed95 8b5ff370
Loading
Loading
Loading
Loading
+33 −26
Original line number Diff line number Diff line
@@ -850,6 +850,7 @@ cfg_test()
__fwd_test_host_ip()
{
	local grp=$1; shift
	local dmac=$1; shift
	local src=$1; shift
	local mode=$1; shift
	local name
@@ -872,27 +873,27 @@ __fwd_test_host_ip()
	# Packet should only be flooded to multicast router ports when there is
	# no matching MDB entry. The bridge is not configured as a multicast
	# router port.
	$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
	tc_check_packets "dev br0 ingress" 1 0
	check_err $? "Packet locally received after flood"

	# Install a regular port group entry and expect the packet to not be
	# locally received.
	bridge mdb add dev br0 port $swp2 grp $grp temp vid 10
	$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
	tc_check_packets "dev br0 ingress" 1 0
	check_err $? "Packet locally received after installing a regular entry"

	# Add a host entry and expect the packet to be locally received.
	bridge mdb add dev br0 port br0 grp $grp temp vid 10
	$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
	tc_check_packets "dev br0 ingress" 1 1
	check_err $? "Packet not locally received after adding a host entry"

	# Remove the host entry and expect the packet to not be locally
	# received.
	bridge mdb del dev br0 port br0 grp $grp vid 10
	$MZ $mode $h1.10 -c 1 -p 128 -A $src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $src -B $grp -t udp -q
	tc_check_packets "dev br0 ingress" 1 1
	check_err $? "Packet locally received after removing a host entry"

@@ -905,8 +906,8 @@ __fwd_test_host_ip()

fwd_test_host_ip()
{
	__fwd_test_host_ip "239.1.1.1" "192.0.2.1" "-4"
	__fwd_test_host_ip "ff0e::1" "2001:db8:1::1" "-6"
	__fwd_test_host_ip "239.1.1.1" "01:00:5e:01:01:01" "192.0.2.1" "-4"
	__fwd_test_host_ip "ff0e::1" "33:33:00:00:00:01" "2001:db8:1::1" "-6"
}

fwd_test_host_l2()
@@ -966,6 +967,7 @@ fwd_test_host()
__fwd_test_port_ip()
{
	local grp=$1; shift
	local dmac=$1; shift
	local valid_src=$1; shift
	local invalid_src=$1; shift
	local mode=$1; shift
@@ -999,43 +1001,43 @@ __fwd_test_port_ip()
		vlan_ethtype $eth_type vlan_id 10 dst_ip $grp \
		src_ip $invalid_src action drop

	$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 1 0
	check_err $? "Packet from valid source received on H2 before adding entry"

	$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 2 0
	check_err $? "Packet from invalid source received on H2 before adding entry"

	bridge mdb add dev br0 port $swp2 grp $grp vid 10 \
		filter_mode $filter_mode source_list $src_list

	$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 1 1
	check_err $? "Packet from valid source not received on H2 after adding entry"

	$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 2 0
	check_err $? "Packet from invalid source received on H2 after adding entry"

	bridge mdb replace dev br0 port $swp2 grp $grp vid 10 \
		filter_mode exclude

	$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 1 2
	check_err $? "Packet from valid source not received on H2 after allowing all sources"

	$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 2 1
	check_err $? "Packet from invalid source not received on H2 after allowing all sources"

	bridge mdb del dev br0 port $swp2 grp $grp vid 10

	$MZ $mode $h1.10 -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $valid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 1 2
	check_err $? "Packet from valid source received on H2 after deleting entry"

	$MZ $mode $h1.10 -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	$MZ $mode $h1.10 -a own -b $dmac -c 1 -p 128 -A $invalid_src -B $grp -t udp -q
	tc_check_packets "dev $h2 ingress" 2 1
	check_err $? "Packet from invalid source received on H2 after deleting entry"

@@ -1047,11 +1049,11 @@ __fwd_test_port_ip()

fwd_test_port_ip()
{
	__fwd_test_port_ip "239.1.1.1" "192.0.2.1" "192.0.2.2" "-4" "exclude"
	__fwd_test_port_ip "ff0e::1" "2001:db8:1::1" "2001:db8:1::2" "-6" \
	__fwd_test_port_ip "239.1.1.1" "01:00:5e:01:01:01" "192.0.2.1" "192.0.2.2" "-4" "exclude"
	__fwd_test_port_ip "ff0e::1" "33:33:00:00:00:01" "2001:db8:1::1" "2001:db8:1::2" "-6" \
		"exclude"
	__fwd_test_port_ip "239.1.1.1" "192.0.2.1" "192.0.2.2" "-4" "include"
	__fwd_test_port_ip "ff0e::1" "2001:db8:1::1" "2001:db8:1::2" "-6" \
	__fwd_test_port_ip "239.1.1.1" "01:00:5e:01:01:01" "192.0.2.1" "192.0.2.2" "-4" "include"
	__fwd_test_port_ip "ff0e::1" "33:33:00:00:00:01" "2001:db8:1::1" "2001:db8:1::2" "-6" \
		"include"
}

@@ -1127,7 +1129,7 @@ ctrl_igmpv3_is_in_test()
		filter_mode include source_list 192.0.2.1

	# IS_IN ( 192.0.2.2 )
	$MZ $h1.10 -c 1 -A 192.0.2.1 -B 239.1.1.1 \
	$MZ $h1.10 -c 1 -a own -b 01:00:5e:01:01:01 -A 192.0.2.1 -B 239.1.1.1 \
		-t ip proto=2,p=$(igmpv3_is_in_get 239.1.1.1 192.0.2.2) -q

	bridge -d mdb show dev br0 vid 10 | grep 239.1.1.1 | grep -q 192.0.2.2
@@ -1140,7 +1142,7 @@ ctrl_igmpv3_is_in_test()
		filter_mode include source_list 192.0.2.1

	# IS_IN ( 192.0.2.2 )
	$MZ $h1.10 -c 1 -A 192.0.2.1 -B 239.1.1.1 \
	$MZ $h1.10 -a own -b 01:00:5e:01:01:01 -c 1 -A 192.0.2.1 -B 239.1.1.1 \
		-t ip proto=2,p=$(igmpv3_is_in_get 239.1.1.1 192.0.2.2) -q

	bridge -d mdb show dev br0 vid 10 | grep 239.1.1.1 | grep -v "src" | \
@@ -1167,7 +1169,7 @@ ctrl_mldv2_is_in_test()

	# IS_IN ( 2001:db8:1::2 )
	local p=$(mldv2_is_in_get fe80::1 ff0e::1 2001:db8:1::2)
	$MZ -6 $h1.10 -c 1 -A fe80::1 -B ff0e::1 \
	$MZ -6 $h1.10 -a own -b 33:33:00:00:00:01 -c 1 -A fe80::1 -B ff0e::1 \
		-t ip hop=1,next=0,p="$p" -q

	bridge -d mdb show dev br0 vid 10 | grep ff0e::1 | \
@@ -1181,7 +1183,7 @@ ctrl_mldv2_is_in_test()
		filter_mode include source_list 2001:db8:1::1

	# IS_IN ( 2001:db8:1::2 )
	$MZ -6 $h1.10 -c 1 -A fe80::1 -B ff0e::1 \
	$MZ -6 $h1.10 -a own -b 33:33:00:00:00:01 -c 1 -A fe80::1 -B ff0e::1 \
		-t ip hop=1,next=0,p="$p" -q

	bridge -d mdb show dev br0 vid 10 | grep ff0e::1 | grep -v "src" | \
@@ -1206,6 +1208,11 @@ ctrl_test()
	ctrl_mldv2_is_in_test
}

if ! bridge mdb help 2>&1 | grep -q "replace"; then
	echo "SKIP: iproute2 too old, missing bridge mdb replace support"
	exit $ksft_skip
fi

trap cleanup EXIT

setup_prepare
+15 −4
Original line number Diff line number Diff line
@@ -252,7 +252,8 @@ ctl4_entries_add()
	local IPs=$(seq -f 192.0.2.%g 1 $((n - 1)))
	local peer=$(locus_dev_peer $locus)
	local GRP=239.1.1.${grp}
	$MZ $peer -c 1 -A 192.0.2.1 -B $GRP \
	local dmac=01:00:5e:01:01:$(printf "%02x" $grp)
	$MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B $GRP \
		-t ip proto=2,p=$(igmpv3_is_in_get $GRP $IPs) -q
	sleep 1

@@ -272,7 +273,8 @@ ctl4_entries_del()

	local peer=$(locus_dev_peer $locus)
	local GRP=239.1.1.${grp}
	$MZ $peer -c 1 -A 192.0.2.1 -B 224.0.0.2 \
	local dmac=01:00:5e:00:00:02
	$MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B 224.0.0.2 \
		-t ip proto=2,p=$(igmpv2_leave_get $GRP) -q
	sleep 1
	! bridge mdb show dev br0 | grep -q $GRP
@@ -289,8 +291,10 @@ ctl6_entries_add()
	local peer=$(locus_dev_peer $locus)
	local SIP=fe80::1
	local GRP=ff0e::${grp}
	local dmac=33:33:00:00:00:$(printf "%02x" $grp)
	local p=$(mldv2_is_in_get $SIP $GRP $IPs)
	$MZ -6 $peer -c 1 -A $SIP -B $GRP -t ip hop=1,next=0,p="$p" -q
	$MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \
		-t ip hop=1,next=0,p="$p" -q
	sleep 1

	local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l)
@@ -310,8 +314,10 @@ ctl6_entries_del()
	local peer=$(locus_dev_peer $locus)
	local SIP=fe80::1
	local GRP=ff0e::${grp}
	local dmac=33:33:00:00:00:$(printf "%02x" $grp)
	local p=$(mldv1_done_get $SIP $GRP)
	$MZ -6 $peer -c 1 -A $SIP -B $GRP -t ip hop=1,next=0,p="$p" -q
	$MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \
		-t ip hop=1,next=0,p="$p" -q
	sleep 1
	! bridge mdb show dev br0 | grep -q $GRP
}
@@ -1328,6 +1334,11 @@ test_8021qvs()
	switch_destroy
}

if ! bridge link help 2>&1 | grep -q "mcast_max_groups"; then
	echo "SKIP: iproute2 too old, missing bridge \"mcast_max_groups\" support"
	exit $ksft_skip
fi

trap cleanup EXIT

setup_prepare
+2 −0
Original line number Diff line number Diff line
@@ -286,6 +286,8 @@ different_speeds_autoneg_on()
	ethtool -s $h1 autoneg on
}

skip_on_veth

trap cleanup EXIT

setup_prepare
+2 −0
Original line number Diff line number Diff line
@@ -108,6 +108,8 @@ no_cable()
	ip link set dev $swp3 down
}

skip_on_veth

setup_prepare

tests_run
+13 −5
Original line number Diff line number Diff line
@@ -258,11 +258,6 @@ h2_destroy()

setup_prepare()
{
	check_ethtool_mm_support
	check_tc_fp_support
	require_command lldptool
	bail_on_lldpad "autoconfigure the MAC Merge layer" "configure it manually"

	h1=${NETIFS[p1]}
	h2=${NETIFS[p2]}

@@ -278,6 +273,19 @@ cleanup()
	h1_destroy
}

check_ethtool_mm_support
check_tc_fp_support
require_command lldptool
bail_on_lldpad "autoconfigure the MAC Merge layer" "configure it manually"

for netif in ${NETIFS[@]}; do
	ethtool --show-mm $netif 2>&1 &> /dev/null
	if [[ $? -ne 0 ]]; then
		echo "SKIP: $netif does not support MAC Merge"
		exit $ksft_skip
	fi
done

trap cleanup EXIT

setup_prepare
Loading