linux/tools/testing/selftests/net/forwarding/loopback.sh
Hangbin Liu cc7e3f63d7 selftests: loopback.sh: skip this test if the driver does not support
The loopback feature is only supported on a few drivers like broadcom,
mellanox, etc. The default veth driver has not supported it yet. To avoid
returning failed and making the runner feel confused, let's just skip
the test on drivers that not support loopback.

Fixes: ad11340994 ("selftests: Add loopback test")
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-01-03 12:23:34 -08:00

103 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4
ALL_TESTS="loopback_test"
NUM_NETIFS=2
source tc_common.sh
source lib.sh
h1_create()
{
simple_if_init $h1 192.0.2.1/24
tc qdisc add dev $h1 clsact
}
h1_destroy()
{
tc qdisc del dev $h1 clsact
simple_if_fini $h1 192.0.2.1/24
}
h2_create()
{
simple_if_init $h2
}
h2_destroy()
{
simple_if_fini $h2
}
loopback_test()
{
RET=0
tc filter add dev $h1 ingress protocol arp pref 1 handle 101 flower \
skip_hw arp_op reply arp_tip 192.0.2.1 action drop
$MZ $h1 -c 1 -t arp -q
tc_check_packets "dev $h1 ingress" 101 1
check_fail $? "Matched on a filter without loopback setup"
ethtool -K $h1 loopback on
check_err $? "Failed to enable loopback"
setup_wait_dev $h1
$MZ $h1 -c 1 -t arp -q
tc_check_packets "dev $h1 ingress" 101 1
check_err $? "Did not match on filter with loopback"
ethtool -K $h1 loopback off
check_err $? "Failed to disable loopback"
$MZ $h1 -c 1 -t arp -q
tc_check_packets "dev $h1 ingress" 101 2
check_fail $? "Matched on a filter after loopback was removed"
tc filter del dev $h1 ingress protocol arp pref 1 handle 101 flower
log_test "loopback"
}
setup_prepare()
{
h1=${NETIFS[p1]}
h2=${NETIFS[p2]}
vrf_prepare
h1_create
h2_create
if ethtool -k $h1 | grep loopback | grep -q fixed; then
log_test "SKIP: dev $h1 does not support loopback feature"
exit $ksft_skip
fi
}
cleanup()
{
pre_cleanup
h2_destroy
h1_destroy
vrf_cleanup
}
trap cleanup EXIT
setup_prepare
setup_wait
tests_run
exit $EXIT_STATUS