Commit af0a5111 authored by Petr Machata's avatar Petr Machata Committed by David S. Miller
Browse files

selftests: forwarding: Fix packet matching in mirroring selftests



In commit 6de6e46d ("cls_flower: Fix inability to match GRE/IPIP
packets"), cls_flower was fixed to match an outer packet of a tunneled
packet as would be expected, rather than dissecting to the inner packet and
matching on that.

This fix uncovered several issues in packet matching in mirroring
selftests:

- in mirror_gre_bridge_1d_vlan.sh and mirror_gre_vlan_bridge_1q.sh, the
  vlan_ethtype match is copied around as "ip", even as some of the tests
  are running over ip6gretap. This is fixed by using an "ipv6" for
  vlan_ethtype in the ip6gretap tests.

- in mirror_gre_changes.sh, a filter to count GRE packets is set up to
  match TTL of 50. This used to trigger in the offloaded datapath, where
  the envelope TTL was matched, but not in the software datapath, which
  considered TTL of the inner packet. Now that both match consistently, all
  the packets were double-counted. This is fixed by marking the filter as
  skip_hw, leaving only the SW datapath component active.

Fixes: 6de6e46d ("cls_flower: Fix inability to match GRE/IPIP packets")
Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c7cd82b9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ test_gretap()

test_ip6gretap()
{
	test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ip' \
	test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ipv6' \
			"mirror to ip6gretap"
}

+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ test_span_gre_ttl()

	mirror_install $swp1 ingress $tundev "matchall $tcflags"
	tc filter add dev $h3 ingress pref 77 prot $prot \
		flower ip_ttl 50 action pass
		flower skip_hw ip_ttl 50 action pass

	mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 0

+7 −6
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ test_gretap()

test_ip6gretap()
{
	test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ip' \
	test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ipv6' \
			"mirror to ip6gretap"
}

@@ -218,6 +218,7 @@ test_ip6gretap_forbidden_egress()
test_span_gre_untagged_egress()
{
	local tundev=$1; shift
	local ul_proto=$1; shift
	local what=$1; shift

	RET=0
@@ -225,7 +226,7 @@ test_span_gre_untagged_egress()
	mirror_install $swp1 ingress $tundev "matchall $tcflags"

	quick_test_span_gre_dir $tundev ingress
	quick_test_span_vlan_dir $h3 555 ingress
	quick_test_span_vlan_dir $h3 555 ingress "$ul_proto"

	h3_addr_add_del del $h3.555
	bridge vlan add dev $swp3 vid 555 pvid untagged
@@ -233,7 +234,7 @@ test_span_gre_untagged_egress()
	sleep 5

	quick_test_span_gre_dir $tundev ingress
	fail_test_span_vlan_dir $h3 555 ingress
	fail_test_span_vlan_dir $h3 555 ingress "$ul_proto"

	h3_addr_add_del del $h3
	bridge vlan add dev $swp3 vid 555
@@ -241,7 +242,7 @@ test_span_gre_untagged_egress()
	sleep 5

	quick_test_span_gre_dir $tundev ingress
	quick_test_span_vlan_dir $h3 555 ingress
	quick_test_span_vlan_dir $h3 555 ingress "$ul_proto"

	mirror_uninstall $swp1 ingress

@@ -250,12 +251,12 @@ test_span_gre_untagged_egress()

test_gretap_untagged_egress()
{
	test_span_gre_untagged_egress gt4 "mirror to gretap"
	test_span_gre_untagged_egress gt4 ip "mirror to gretap"
}

test_ip6gretap_untagged_egress()
{
	test_span_gre_untagged_egress gt6 "mirror to ip6gretap"
	test_span_gre_untagged_egress gt6 ipv6 "mirror to ip6gretap"
}

test_span_gre_fdb_roaming()
+2 −1
Original line number Diff line number Diff line
@@ -115,13 +115,14 @@ do_test_span_vlan_dir_ips()
	local dev=$1; shift
	local vid=$1; shift
	local direction=$1; shift
	local ul_proto=$1; shift
	local ip1=$1; shift
	local ip2=$1; shift

	# Install the capture as skip_hw to avoid double-counting of packets.
	# The traffic is meant for local box anyway, so will be trapped to
	# kernel.
	vlan_capture_install $dev "skip_hw vlan_id $vid vlan_ethtype ip"
	vlan_capture_install $dev "skip_hw vlan_id $vid vlan_ethtype $ul_proto"
	mirror_test v$h1 $ip1 $ip2 $dev 100 $expect
	mirror_test v$h2 $ip2 $ip1 $dev 100 $expect
	vlan_capture_uninstall $dev
+2 −2
Original line number Diff line number Diff line
@@ -85,9 +85,9 @@ test_tagged_vlan_dir()
	RET=0

	mirror_install $swp1 $direction $swp3.555 "matchall $tcflags"
	do_test_span_vlan_dir_ips 10 "$h3.555" 111 "$direction" \
	do_test_span_vlan_dir_ips 10 "$h3.555" 111 "$direction" ip \
				  192.0.2.17 192.0.2.18
	do_test_span_vlan_dir_ips  0 "$h3.555" 555 "$direction" \
	do_test_span_vlan_dir_ips  0 "$h3.555" 555 "$direction" ip \
				  192.0.2.17 192.0.2.18
	mirror_uninstall $swp1 $direction