Vladimir said when adding this test:

  The bridge driver fares particularly badly [...] mainly because
  it does not implement IFF_UNICAST_FLT.

See commit 90b9566aa5cd ("selftests: forwarding: add a test for
local_termination.sh").

We don't want to hide the known gaps, but having a test which
always fails prevents us from catching regressions. Report
the cases we know may fail as XFAIL.

Reviewed-by: Vladimir Oltean <vladimir.olt...@nxp.com>
Tested-by: Vladimir Oltean <vladimir.olt...@nxp.com>
Signed-off-by: Jakub Kicinski <k...@kernel.org>
---
CC: liuhang...@gmail.com
CC: sh...@kernel.org
CC: linux-kselftest@vger.kernel.org

v2:
 - remove duplicated log_test_xfail
v1: https://lore.kernel.org/all/20240509235553.5740-1-k...@kernel.org/
---
 .../net/forwarding/local_termination.sh       | 21 ++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/net/forwarding/local_termination.sh 
b/tools/testing/selftests/net/forwarding/local_termination.sh
index c5b0cbc85b3e..4bba9c78db3e 100755
--- a/tools/testing/selftests/net/forwarding/local_termination.sh
+++ b/tools/testing/selftests/net/forwarding/local_termination.sh
@@ -73,6 +73,10 @@ check_rcv()
        local pattern=$3
        local should_receive=$4
        local should_fail=
+       local xfail_sw=$5
+
+       local kind=$(ip -j -d link show dev $if_name |
+                        jq -r '.[].linkinfo.info_kind')
 
        [ $should_receive = true ] && should_fail=0 || should_fail=1
        RET=0
@@ -81,7 +85,14 @@ check_rcv()
 
        check_err_fail "$should_fail" "$?" "reception"
 
-       log_test "$if_name: $type"
+       # If not a SW interface, ignore the XFAIL allowance
+       [ "$kind" != veth ] && [ "$kind" != bridge ] && xfail_sw=
+
+       if [ $RET -ne 0 ] && [ "$xfail_sw" == true ]; then
+           log_test_xfail "$if_name: $type"
+       else
+           log_test "$if_name: $type"
+       fi
 }
 
 mc_route_prepare()
@@ -157,7 +168,7 @@ run_test()
 
        check_rcv $rcv_if_name "Unicast IPv4 to unknown MAC address" \
                "$smac > $UNKNOWN_UC_ADDR1, ethertype IPv4 (0x0800)" \
-               false
+               false true
 
        check_rcv $rcv_if_name "Unicast IPv4 to unknown MAC address, promisc" \
                "$smac > $UNKNOWN_UC_ADDR2, ethertype IPv4 (0x0800)" \
@@ -165,7 +176,7 @@ run_test()
 
        check_rcv $rcv_if_name "Unicast IPv4 to unknown MAC address, allmulti" \
                "$smac > $UNKNOWN_UC_ADDR3, ethertype IPv4 (0x0800)" \
-               false
+               false true
 
        check_rcv $rcv_if_name "Multicast IPv4 to joined group" \
                "$smac > $JOINED_MACV4_MC_ADDR, ethertype IPv4 (0x0800)" \
@@ -173,7 +184,7 @@ run_test()
 
        check_rcv $rcv_if_name "Multicast IPv4 to unknown group" \
                "$smac > $UNKNOWN_MACV4_MC_ADDR1, ethertype IPv4 (0x0800)" \
-               false
+               false true
 
        check_rcv $rcv_if_name "Multicast IPv4 to unknown group, promisc" \
                "$smac > $UNKNOWN_MACV4_MC_ADDR2, ethertype IPv4 (0x0800)" \
@@ -189,7 +200,7 @@ run_test()
 
        check_rcv $rcv_if_name "Multicast IPv6 to unknown group" \
                "$smac > $UNKNOWN_MACV6_MC_ADDR1, ethertype IPv6 (0x86dd)" \
-               false
+               false true
 
        check_rcv $rcv_if_name "Multicast IPv6 to unknown group, promisc" \
                "$smac > $UNKNOWN_MACV6_MC_ADDR2, ethertype IPv6 (0x86dd)" \
-- 
2.45.0


Reply via email to