]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
selftests: forwarding: lib: Avoid trapping soft devices
authorPetr Machata <petrm@mellanox.com>
Thu, 28 Jun 2018 16:56:28 +0000 (18:56 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 30 Jun 2018 11:34:09 +0000 (20:34 +0900)
There 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.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/forwarding/lib.sh

index ac1df4860fbe98800db19695a7474c4611bfc124..d1f14f83979e07e3e09c4ba57f26a5a602922405 100644 (file)
@@ -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