Commit 3cc382e0 authored by Hangbin Liu's avatar Hangbin Liu Committed by Alexei Starovoitov

selftests/bpf/test_xdp_vlan: use temp netns for testing

Use temp netns instead of hard code name for testing in case the
netns already exists.
Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
Link: https://lore.kernel.org/r/20220125081717.1260849-4-liuhangbin@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 9d66c9dd
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
# Kselftest framework requirement - SKIP code is 4. # Kselftest framework requirement - SKIP code is 4.
readonly KSFT_SKIP=4 readonly KSFT_SKIP=4
readonly NS1="ns1-$(mktemp -u XXXXXX)"
readonly NS2="ns2-$(mktemp -u XXXXXX)"
# Allow wrapper scripts to name test # Allow wrapper scripts to name test
if [ -z "$TESTNAME" ]; then if [ -z "$TESTNAME" ]; then
...@@ -49,15 +51,15 @@ cleanup() ...@@ -49,15 +51,15 @@ cleanup()
if [ -n "$INTERACTIVE" ]; then if [ -n "$INTERACTIVE" ]; then
echo "Namespace setup still active explore with:" echo "Namespace setup still active explore with:"
echo " ip netns exec ns1 bash" echo " ip netns exec ${NS1} bash"
echo " ip netns exec ns2 bash" echo " ip netns exec ${NS2} bash"
exit $status exit $status
fi fi
set +e set +e
ip link del veth1 2> /dev/null ip link del veth1 2> /dev/null
ip netns del ns1 2> /dev/null ip netns del ${NS1} 2> /dev/null
ip netns del ns2 2> /dev/null ip netns del ${NS2} 2> /dev/null
} }
# Using external program "getopt" to get --long-options # Using external program "getopt" to get --long-options
...@@ -126,8 +128,8 @@ fi ...@@ -126,8 +128,8 @@ fi
# Interactive mode likely require us to cleanup netns # Interactive mode likely require us to cleanup netns
if [ -n "$INTERACTIVE" ]; then if [ -n "$INTERACTIVE" ]; then
ip link del veth1 2> /dev/null ip link del veth1 2> /dev/null
ip netns del ns1 2> /dev/null ip netns del ${NS1} 2> /dev/null
ip netns del ns2 2> /dev/null ip netns del ${NS2} 2> /dev/null
fi fi
# Exit on failure # Exit on failure
...@@ -144,8 +146,8 @@ if [ -n "$VERBOSE" ]; then ...@@ -144,8 +146,8 @@ if [ -n "$VERBOSE" ]; then
fi fi
# Create two namespaces # Create two namespaces
ip netns add ns1 ip netns add ${NS1}
ip netns add ns2 ip netns add ${NS2}
# Run cleanup if failing or on kill # Run cleanup if failing or on kill
trap cleanup 0 2 3 6 9 trap cleanup 0 2 3 6 9
...@@ -154,44 +156,44 @@ trap cleanup 0 2 3 6 9 ...@@ -154,44 +156,44 @@ trap cleanup 0 2 3 6 9
ip link add veth1 type veth peer name veth2 ip link add veth1 type veth peer name veth2
# Move veth1 and veth2 into the respective namespaces # Move veth1 and veth2 into the respective namespaces
ip link set veth1 netns ns1 ip link set veth1 netns ${NS1}
ip link set veth2 netns ns2 ip link set veth2 netns ${NS2}
# NOTICE: XDP require VLAN header inside packet payload # NOTICE: XDP require VLAN header inside packet payload
# - Thus, disable VLAN offloading driver features # - Thus, disable VLAN offloading driver features
# - For veth REMEMBER TX side VLAN-offload # - For veth REMEMBER TX side VLAN-offload
# #
# Disable rx-vlan-offload (mostly needed on ns1) # Disable rx-vlan-offload (mostly needed on ns1)
ip netns exec ns1 ethtool -K veth1 rxvlan off ip netns exec ${NS1} ethtool -K veth1 rxvlan off
ip netns exec ns2 ethtool -K veth2 rxvlan off ip netns exec ${NS2} ethtool -K veth2 rxvlan off
# #
# Disable tx-vlan-offload (mostly needed on ns2) # Disable tx-vlan-offload (mostly needed on ns2)
ip netns exec ns2 ethtool -K veth2 txvlan off ip netns exec ${NS2} ethtool -K veth2 txvlan off
ip netns exec ns1 ethtool -K veth1 txvlan off ip netns exec ${NS1} ethtool -K veth1 txvlan off
export IPADDR1=100.64.41.1 export IPADDR1=100.64.41.1
export IPADDR2=100.64.41.2 export IPADDR2=100.64.41.2
# In ns1/veth1 add IP-addr on plain net_device # In ns1/veth1 add IP-addr on plain net_device
ip netns exec ns1 ip addr add ${IPADDR1}/24 dev veth1 ip netns exec ${NS1} ip addr add ${IPADDR1}/24 dev veth1
ip netns exec ns1 ip link set veth1 up ip netns exec ${NS1} ip link set veth1 up
# In ns2/veth2 create VLAN device # In ns2/veth2 create VLAN device
export VLAN=4011 export VLAN=4011
export DEVNS2=veth2 export DEVNS2=veth2
ip netns exec ns2 ip link add link $DEVNS2 name $DEVNS2.$VLAN type vlan id $VLAN ip netns exec ${NS2} ip link add link $DEVNS2 name $DEVNS2.$VLAN type vlan id $VLAN
ip netns exec ns2 ip addr add ${IPADDR2}/24 dev $DEVNS2.$VLAN ip netns exec ${NS2} ip addr add ${IPADDR2}/24 dev $DEVNS2.$VLAN
ip netns exec ns2 ip link set $DEVNS2 up ip netns exec ${NS2} ip link set $DEVNS2 up
ip netns exec ns2 ip link set $DEVNS2.$VLAN up ip netns exec ${NS2} ip link set $DEVNS2.$VLAN up
# Bringup lo in netns (to avoids confusing people using --interactive) # Bringup lo in netns (to avoids confusing people using --interactive)
ip netns exec ns1 ip link set lo up ip netns exec ${NS1} ip link set lo up
ip netns exec ns2 ip link set lo up ip netns exec ${NS2} ip link set lo up
# At this point, the hosts cannot reach each-other, # At this point, the hosts cannot reach each-other,
# because ns2 are using VLAN tags on the packets. # because ns2 are using VLAN tags on the packets.
ip netns exec ns2 sh -c 'ping -W 1 -c 1 100.64.41.1 || echo "Success: First ping must fail"' ip netns exec ${NS2} sh -c 'ping -W 1 -c 1 100.64.41.1 || echo "Success: First ping must fail"'
# Now we can use the test_xdp_vlan.c program to pop/push these VLAN tags # Now we can use the test_xdp_vlan.c program to pop/push these VLAN tags
...@@ -202,19 +204,19 @@ export FILE=test_xdp_vlan.o ...@@ -202,19 +204,19 @@ 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_MODE 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)
# tc qdisc del dev $DEVNS1 clsact 2> /dev/null # tc qdisc del dev $DEVNS1 clsact 2> /dev/null
# #
ip netns exec ns1 tc qdisc add dev $DEVNS1 clsact ip netns exec ${NS1} tc qdisc add dev $DEVNS1 clsact
ip netns exec ns1 tc filter add dev $DEVNS1 egress \ ip netns exec ${NS1} tc filter add dev $DEVNS1 egress \
prio 1 handle 1 bpf da obj $FILE sec tc_vlan_push prio 1 handle 1 bpf da obj $FILE sec tc_vlan_push
# Now the namespaces can reach each-other, test with ping: # Now the namespaces can reach each-other, test with ping:
ip netns exec ns2 ping -i 0.2 -W 2 -c 2 $IPADDR1 ip netns exec ${NS2} ping -i 0.2 -W 2 -c 2 $IPADDR1
ip netns exec ns1 ping -i 0.2 -W 2 -c 2 $IPADDR2 ip netns exec ${NS1} ping -i 0.2 -W 2 -c 2 $IPADDR2
# Second test: Replace xdp prog, that fully remove vlan header # Second test: Replace xdp prog, that fully remove vlan header
# #
...@@ -223,9 +225,9 @@ ip netns exec ns1 ping -i 0.2 -W 2 -c 2 $IPADDR2 ...@@ -223,9 +225,9 @@ ip netns exec ns1 ping -i 0.2 -W 2 -c 2 $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_MODE off ip netns exec ${NS1} ip link set $DEVNS1 $XDP_MODE off
ip netns exec ns1 ip link set $DEVNS1 $XDP_MODE 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 -i 0.2 -W 2 -c 2 $IPADDR1 ip netns exec ${NS2} ping -i 0.2 -W 2 -c 2 $IPADDR1
ip netns exec ns1 ping -i 0.2 -W 2 -c 2 $IPADDR2 ip netns exec ${NS1} ping -i 0.2 -W 2 -c 2 $IPADDR2
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