Fixes for running mirror-to-gretap tests on veth
Subsystems (4)
cover Fixes for running mirror-to-gretap tests on veth
The forwarding selftests infrastructure makes it possible to run the individual tests on a purely software netdevices. Names of interfaces to run the test with can be passed as command line arguments to a test. lib.sh then creates veth pairs backing the interfaces if none exist in the system.
However, the tests need to recognize that they might be run on a soft device. Many mirror-to-gretap tests are buggy in this regard. This patch set aims to fix the problems in running mirror-to-gretap tests on veth devices.
In patch #1, a service function is split out of setup_wait(). In patch #2, installing a trap is made optional.
In patch #3, tc filters in several tests are tweaked to work with veth. In patch #4, the logic for waiting for neighbor is fixed for veth.
Petr Machata (4):
selftests: forwarding: lib: Split out setup_wait_dev()
selftests: forwarding: lib: Avoid trapping soft devices
selftests: forwarding: Tweak tc filters for mirror-to-gretap tests
selftests: forwarding: mirror_gre_changes: Fix waiting for neighbor
tools/testing/selftests/net/forwarding/lib.sh | 41 +++++++++++++++------- .../net/forwarding/mirror_gre_bridge_1d_vlan.sh | 6 ++-- .../selftests/net/forwarding/mirror_gre_changes.sh | 11 ++---- .../selftests/net/forwarding/mirror_gre_lib.sh | 2 +- .../net/forwarding/mirror_gre_vlan_bridge_1q.sh | 6 ++-- 5 files changed, 39 insertions(+), 27 deletions(-)
Signature · 6 lines
2.4.11 -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 1/4 selftests: forwarding: lib: Split out setup_wait_dev()
Split out of setup_wait() a function setup_wait_dev() that waits for a single device. This gives tests the opportunity to wait for a selected device after they tinkered with its upness.
--- tools/testing/selftests/net/forwarding/lib.sh | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-)
tools/testing/selftests/net/forwarding/lib.sh +16 -9
@@ -185,18 +185,25 @@ log_info() echo "INFO: $msg" } +setup_wait_dev() +{ + local dev=$1; shift + + while true; do + ip link show dev $dev up \ + | grep 'state UP' &> /dev/null + if [[ $? -ne 0 ]]; then + sleep 1 + else + break + fi + done +} + setup_wait() { for i in $(eval echo {1..$NUM_NETIFS}); do - while true; do - ip link show dev ${NETIFS[p$i]} up \ - | grep 'state UP' &> /dev/null - if [[ $? -ne 0 ]]; then - sleep 1 - else - break - fi - done + setup_wait_dev ${NETIFS[p$i]} done # Make sure links are ready.
Signature · 6 lines
2.4.11 -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 2/4 selftests: forwarding: lib: Avoid trapping soft devices
In reply to Petr MachataThere are several cases where traffic that would normally be forwarded in silicon needs to be observed in slow path. That's achieved by trapping such traffic, and the functions trap_install() and trap_uninstall() realize that. However, such treatment is obviously wrong if the device in question is actually a soft device not backed by an ASIC.
Therefore try to trap if possible, but fall back to inserting a continue if not.
--- tools/testing/selftests/net/forwarding/lib.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
tools/testing/selftests/net/forwarding/lib.sh +12 -4
@@ -479,9 +479,15 @@ trap_install() local dev=$1; shift local direction=$1; shift - # For slow-path testing, we need to install a trap to get to - # slow path the packets that would otherwise be switched in HW. - tc filter add dev $dev $direction pref 1 flower skip_sw action trap + # Some devices may not support or need in-hardware trapping of traffic + # (e.g. the veth pairs that this library creates for non-existent + # loopbacks). Use continue instead, so that there is a filter in there + # (some tests check counters), and so that other filters are still + # processed. + tc filter add dev $dev $direction pref 1 \ + flower skip_sw action trap 2>/dev/null \ + || tc filter add dev $dev $direction pref 1 \ + flower action continue } trap_uninstall()
@@ -489,11 +495,13 @@ trap_uninstall() local dev=$1; shift local direction=$1; shift - tc filter del dev $dev $direction pref 1 flower skip_sw + tc filter del dev $dev $direction pref 1 flower } slow_path_trap_install() { + # For slow-path testing, we need to install a trap to get to + # slow path the packets that would otherwise be switched in HW. if [ "${tcflags/skip_hw}" != "$tcflags" ]; then trap_install "$@" fi
Signature · 6 lines
2.4.11 -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 3/4 selftests: forwarding: Tweak tc filters for mirror-to-gretap tests
In reply to Petr MachataWhen running mirror_gre_bridge_1d_vlan tests on veth, several issues cause spurious failures:
- vlan_ethtype should be ip, not ipv6 even in mirror-to-ip6gretap case, because the overlay packet is still IPv4.
- Similarly ip_proto matches the innermost IP protocol, so can't be used to filter out GRE packet. Drop the corresponding condition.
- Because the above fixes the filters to match in slow path as well, they need to be made skip_hw so as not to double-count packets.
--- tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d_vlan.sh | 6 ++++-- tools/testing/selftests/net/forwarding/mirror_gre_lib.sh | 2 +- tools/testing/selftests/net/forwarding/mirror_gre_vlan_bridge_1q.sh | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-)
tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d_vlan.sh +4 -2
@@ -74,12 +74,14 @@ test_vlan_match() test_gretap() { - test_vlan_match gt4 'vlan_id 555 vlan_ethtype ip' "mirror to gretap" + test_vlan_match gt4 'skip_hw vlan_id 555 vlan_ethtype ip' \ + "mirror to gretap" } test_ip6gretap() { - test_vlan_match gt6 'vlan_id 555 vlan_ethtype ipv6' "mirror to ip6gretap" + test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ip' \ + "mirror to ip6gretap" } test_gretap_stp()
tools/testing/selftests/net/forwarding/mirror_gre_lib.sh +1 -1
@@ -62,7 +62,7 @@ full_test_span_gre_dir_vlan_ips() "$backward_type" "$ip1" "$ip2" tc filter add dev $h3 ingress pref 77 prot 802.1q \ - flower $vlan_match ip_proto 0x2f \ + flower $vlan_match \ action pass mirror_test v$h1 $ip1 $ip2 $h3 77 10 tc filter del dev $h3 ingress pref 77
tools/testing/selftests/net/forwarding/mirror_gre_vlan_bridge_1q.sh +4 -2
@@ -88,12 +88,14 @@ test_vlan_match() test_gretap() { - test_vlan_match gt4 'vlan_id 555 vlan_ethtype ip' "mirror to gretap" + test_vlan_match gt4 'skip_hw vlan_id 555 vlan_ethtype ip' \ + "mirror to gretap" } test_ip6gretap() { - test_vlan_match gt6 'vlan_id 555 vlan_ethtype ipv6' "mirror to ip6gretap" + test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ip' \ + "mirror to ip6gretap" } test_span_gre_forbidden_cpu()
Signature · 6 lines
2.4.11 -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 4/4 selftests: forwarding: mirror_gre_changes: Fix waiting for neighbor
In reply to Petr MachataWhen running the test on soft devices, there's no mechanism to gratuitously start resolving the neighbor for remote tunnel endpoint. So instead of passively waiting, wait for the device to be up, and then probe the neighbor with a ping.
--- tools/testing/selftests/net/forwarding/mirror_gre_changes.sh | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-)
tools/testing/selftests/net/forwarding/mirror_gre_changes.sh +2 -9
@@ -122,15 +122,8 @@ test_span_gre_egress_up() # After setting the device up, wait for neighbor to get resolved so that # we can expect mirroring to work. ip link set dev $swp3 up - while true; do - ip neigh sh dev $swp3 $remote_ip nud reachable | - grep -q ^ - if [[ $? -ne 0 ]]; then - sleep 1 - else - break - fi - done + setup_wait_dev $swp3 + ping -c 1 -I $swp3 $remote_ip &>/dev/null quick_test_span_gre_dir $tundev ingress mirror_uninstall $swp1 ingress
Signature · 6 lines
2.4.11 -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
David Miller
maintainerFrom: Petr Machata <[email protected]>
Date: Thu, 28 Jun 2018 18:56:15 +0200
Quoted 11 lines
The forwarding selftests infrastructure makes it possible to run the individual tests on a purely software netdevices. Names of interfaces to run the test with can be passed as command line arguments to a test.
lib.shthen creates veth pairs backing the interfaces if none exist in the system.However, the tests need to recognize that they might be run on a soft device. Many mirror-to-gretap tests are buggy in this regard. This patch set aims to fix the problems in running mirror-to-gretap tests on veth devices.
Quoted 4 lines
In patch #1, a service function is split out of
setup_wait(). In patch #2, installing a trap is made optional.
In patch #3, tc filters in several tests are tweaked to work with veth. In patch #4, the logic for waiting for neighbor is fixed for veth.
Series applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html