mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-31 08:28:13 +00:00
8fffa0e345
Convert almost all SEC("xdp_blah") uses to strict SEC("xdp") to comply with strict libbpf 1.0 logic of exact section name match for XDP program types. There is only one exception, which is only tested through iproute2 and defines multiple XDP programs within the same BPF object. Given iproute2 still works in non-strict libbpf mode and it doesn't have means to specify XDP programs by its name (not section name/title), leave that single file alone for now until iproute2 gains lookup by function/program name. Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Dave Marchevsky <davemarchevsky@fb.com> Link: https://lore.kernel.org/bpf/20210928161946.2512801-3-andrii@kernel.org
118 lines
3 KiB
Bash
Executable file
118 lines
3 KiB
Bash
Executable file
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Create 3 namespaces with 3 veth peers, and
|
|
# forward packets in-between using native XDP
|
|
#
|
|
# XDP_TX
|
|
# NS1(veth11) NS2(veth22) NS3(veth33)
|
|
# | | |
|
|
# | | |
|
|
# (veth1, (veth2, (veth3,
|
|
# id:111) id:122) id:133)
|
|
# ^ | ^ | ^ |
|
|
# | | XDP_REDIRECT | | XDP_REDIRECT | |
|
|
# | ------------------ ------------------ |
|
|
# -----------------------------------------
|
|
# XDP_REDIRECT
|
|
|
|
# Kselftest framework requirement - SKIP code is 4.
|
|
ksft_skip=4
|
|
|
|
TESTNAME=xdp_veth
|
|
BPF_FS=$(awk '$3 == "bpf" {print $2; exit}' /proc/mounts)
|
|
BPF_DIR=$BPF_FS/test_$TESTNAME
|
|
|
|
_cleanup()
|
|
{
|
|
set +e
|
|
ip link del veth1 2> /dev/null
|
|
ip link del veth2 2> /dev/null
|
|
ip link del veth3 2> /dev/null
|
|
ip netns del ns1 2> /dev/null
|
|
ip netns del ns2 2> /dev/null
|
|
ip netns del ns3 2> /dev/null
|
|
rm -rf $BPF_DIR 2> /dev/null
|
|
}
|
|
|
|
cleanup_skip()
|
|
{
|
|
echo "selftests: $TESTNAME [SKIP]"
|
|
_cleanup
|
|
|
|
exit $ksft_skip
|
|
}
|
|
|
|
cleanup()
|
|
{
|
|
if [ "$?" = 0 ]; then
|
|
echo "selftests: $TESTNAME [PASS]"
|
|
else
|
|
echo "selftests: $TESTNAME [FAILED]"
|
|
fi
|
|
_cleanup
|
|
}
|
|
|
|
if [ $(id -u) -ne 0 ]; then
|
|
echo "selftests: $TESTNAME [SKIP] Need root privileges"
|
|
exit $ksft_skip
|
|
fi
|
|
|
|
if ! ip link set dev lo xdp off > /dev/null 2>&1; then
|
|
echo "selftests: $TESTNAME [SKIP] Could not run test without the ip xdp support"
|
|
exit $ksft_skip
|
|
fi
|
|
|
|
if [ -z "$BPF_FS" ]; then
|
|
echo "selftests: $TESTNAME [SKIP] Could not run test without bpffs mounted"
|
|
exit $ksft_skip
|
|
fi
|
|
|
|
if ! bpftool version > /dev/null 2>&1; then
|
|
echo "selftests: $TESTNAME [SKIP] Could not run test without bpftool"
|
|
exit $ksft_skip
|
|
fi
|
|
|
|
set -e
|
|
|
|
trap cleanup_skip EXIT
|
|
|
|
ip netns add ns1
|
|
ip netns add ns2
|
|
ip netns add ns3
|
|
|
|
ip link add veth1 index 111 type veth peer name veth11 netns ns1
|
|
ip link add veth2 index 122 type veth peer name veth22 netns ns2
|
|
ip link add veth3 index 133 type veth peer name veth33 netns ns3
|
|
|
|
ip link set veth1 up
|
|
ip link set veth2 up
|
|
ip link set veth3 up
|
|
|
|
ip -n ns1 addr add 10.1.1.11/24 dev veth11
|
|
ip -n ns3 addr add 10.1.1.33/24 dev veth33
|
|
|
|
ip -n ns1 link set dev veth11 up
|
|
ip -n ns2 link set dev veth22 up
|
|
ip -n ns3 link set dev veth33 up
|
|
|
|
mkdir $BPF_DIR
|
|
bpftool prog loadall \
|
|
xdp_redirect_map.o $BPF_DIR/progs type xdp \
|
|
pinmaps $BPF_DIR/maps
|
|
bpftool map update pinned $BPF_DIR/maps/tx_port key 0 0 0 0 value 122 0 0 0
|
|
bpftool map update pinned $BPF_DIR/maps/tx_port key 1 0 0 0 value 133 0 0 0
|
|
bpftool map update pinned $BPF_DIR/maps/tx_port key 2 0 0 0 value 111 0 0 0
|
|
ip link set dev veth1 xdp pinned $BPF_DIR/progs/redirect_map_0
|
|
ip link set dev veth2 xdp pinned $BPF_DIR/progs/redirect_map_1
|
|
ip link set dev veth3 xdp pinned $BPF_DIR/progs/redirect_map_2
|
|
|
|
ip -n ns1 link set dev veth11 xdp obj xdp_dummy.o sec xdp
|
|
ip -n ns2 link set dev veth22 xdp obj xdp_tx.o sec xdp
|
|
ip -n ns3 link set dev veth33 xdp obj xdp_dummy.o sec xdp
|
|
|
|
trap cleanup EXIT
|
|
|
|
ip netns exec ns1 ping -c 1 -W 1 10.1.1.33
|
|
|
|
exit 0
|