Commit 4de9c89a authored by Jesper Dangaard Brouer's avatar Jesper Dangaard Brouer Committed by David S. Miller

bpf: fix XDP vlan selftests test_xdp_vlan.sh

Change BPF selftest test_xdp_vlan.sh to (default) use generic XDP.

This selftest was created together with a fix for generic XDP, in commit
29724956 ("net: fix generic XDP to handle if eth header was
mangled"). And was suppose to catch if generic XDP was broken again.

The tests are using veth and assumed that veth driver didn't support
native driver XDP, thus it used the (ip link set) 'xdp' attach that fell
back to generic-XDP. But veth gained native-XDP support in 948d4f21
("veth: Add driver XDP"), which caused this test script to use
native-XDP.

Fixes: 948d4f21 ("veth: Add driver XDP")
Fixes: 97396ff0 ("selftests/bpf: add XDP selftests for modifying and popping VLAN headers")
Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 60d60c8f
#!/bin/bash #!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Author: Jesper Dangaard Brouer <hawk@kernel.org>
TESTNAME=xdp_vlan TESTNAME=xdp_vlan
# Default XDP mode
XDP_MODE=xdpgeneric
usage() { usage() {
echo "Testing XDP + TC eBPF VLAN manipulations: $TESTNAME" echo "Testing XDP + TC eBPF VLAN manipulations: $TESTNAME"
echo "" echo ""
...@@ -9,9 +14,23 @@ usage() { ...@@ -9,9 +14,23 @@ usage() {
echo " -v | --verbose : Verbose" echo " -v | --verbose : Verbose"
echo " --flush : Flush before starting (e.g. after --interactive)" echo " --flush : Flush before starting (e.g. after --interactive)"
echo " --interactive : Keep netns setup running after test-run" echo " --interactive : Keep netns setup running after test-run"
echo " --mode=XXX : Choose XDP mode (xdp | xdpgeneric | xdpdrv)"
echo "" echo ""
} }
valid_xdp_mode()
{
local mode=$1
case "$mode" in
xdpgeneric | xdpdrv | xdp)
return 0
;;
*)
return 1
esac
}
cleanup() cleanup()
{ {
local status=$? local status=$?
...@@ -37,7 +56,7 @@ cleanup() ...@@ -37,7 +56,7 @@ cleanup()
# Using external program "getopt" to get --long-options # Using external program "getopt" to get --long-options
OPTIONS=$(getopt -o hvfi: \ OPTIONS=$(getopt -o hvfi: \
--long verbose,flush,help,interactive,debug -- "$@") --long verbose,flush,help,interactive,debug,mode: -- "$@")
if (( $? != 0 )); then if (( $? != 0 )); then
usage usage
echo "selftests: $TESTNAME [FAILED] Error calling getopt, unknown option?" echo "selftests: $TESTNAME [FAILED] Error calling getopt, unknown option?"
...@@ -60,6 +79,11 @@ while true; do ...@@ -60,6 +79,11 @@ while true; do
cleanup cleanup
shift shift
;; ;;
--mode )
shift
XDP_MODE=$1
shift
;;
-- ) -- )
shift shift
break break
...@@ -81,8 +105,14 @@ if [ "$EUID" -ne 0 ]; then ...@@ -81,8 +105,14 @@ if [ "$EUID" -ne 0 ]; then
exit 1 exit 1
fi fi
ip link set dev lo xdp off 2>/dev/null > /dev/null valid_xdp_mode $XDP_MODE
if [ $? -ne 0 ];then if [ $? -ne 0 ]; then
echo "selftests: $TESTNAME [FAILED] unknown XDP mode ($XDP_MODE)"
exit 1
fi
ip link set dev lo xdpgeneric off 2>/dev/null > /dev/null
if [ $? -ne 0 ]; then
echo "selftests: $TESTNAME [SKIP] need ip xdp support" echo "selftests: $TESTNAME [SKIP] need ip xdp support"
exit 0 exit 0
fi fi
...@@ -166,7 +196,7 @@ export FILE=test_xdp_vlan.o ...@@ -166,7 +196,7 @@ export FILE=test_xdp_vlan.o
# First test: Remove VLAN by setting VLAN ID 0, using "xdp_vlan_change" # First test: Remove VLAN by setting VLAN ID 0, using "xdp_vlan_change"
export XDP_PROG=xdp_vlan_change export XDP_PROG=xdp_vlan_change
ip netns exec ns1 ip link set $DEVNS1 xdp object $FILE section $XDP_PROG ip netns exec ns1 ip link set $DEVNS1 $XDP_MODE object $FILE section $XDP_PROG
# In ns1: egress use TC to add back VLAN tag 4011 # In ns1: egress use TC to add back VLAN tag 4011
# (del cmd) # (del cmd)
...@@ -187,8 +217,8 @@ ip netns exec ns1 ping -W 2 -c 3 $IPADDR2 ...@@ -187,8 +217,8 @@ ip netns exec ns1 ping -W 2 -c 3 $IPADDR2
# ETH_P_8021Q indication, and this cause overwriting of our changes. # ETH_P_8021Q indication, and this cause overwriting of our changes.
# #
export XDP_PROG=xdp_vlan_remove_outer2 export XDP_PROG=xdp_vlan_remove_outer2
ip netns exec ns1 ip link set $DEVNS1 xdp off ip netns exec ns1 ip link set $DEVNS1 $XDP_MODE off
ip netns exec ns1 ip link set $DEVNS1 xdp object $FILE section $XDP_PROG ip netns exec ns1 ip link set $DEVNS1 $XDP_MODE object $FILE section $XDP_PROG
# Now the namespaces should still be able reach each-other, test with ping: # Now the namespaces should still be able reach each-other, test with ping:
ip netns exec ns2 ping -W 2 -c 3 $IPADDR1 ip netns exec ns2 ping -W 2 -c 3 $IPADDR1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment