Linux Audio

Check our new training course

Real-Time Linux with PREEMPT_RT training

Feb 18-20, 2025
Register
Loading...
v6.8
  1#!/bin/sh
  2# SPDX-License-Identifier: GPL-2.0
  3#
  4# Create 3 namespaces with 3 veth peers, and
  5# forward packets in-between using native XDP
  6#
  7#                      XDP_TX
  8# NS1(veth11)        NS2(veth22)        NS3(veth33)
  9#      |                  |                  |
 10#      |                  |                  |
 11#   (veth1,            (veth2,            (veth3,
 12#   id:111)            id:122)            id:133)
 13#     ^ |                ^ |                ^ |
 14#     | |  XDP_REDIRECT  | |  XDP_REDIRECT  | |
 15#     | ------------------ ------------------ |
 16#     -----------------------------------------
 17#                    XDP_REDIRECT
 18
 19# Kselftest framework requirement - SKIP code is 4.
 20ksft_skip=4
 21
 22TESTNAME=xdp_veth
 23BPF_FS=$(awk '$3 == "bpf" {print $2; exit}' /proc/mounts)
 24BPF_DIR=$BPF_FS/test_$TESTNAME
 25readonly NS1="ns1-$(mktemp -u XXXXXX)"
 26readonly NS2="ns2-$(mktemp -u XXXXXX)"
 27readonly NS3="ns3-$(mktemp -u XXXXXX)"
 28
 29_cleanup()
 30{
 31	set +e
 32	ip link del veth1 2> /dev/null
 33	ip link del veth2 2> /dev/null
 34	ip link del veth3 2> /dev/null
 35	ip netns del ${NS1} 2> /dev/null
 36	ip netns del ${NS2} 2> /dev/null
 37	ip netns del ${NS3} 2> /dev/null
 38	rm -rf $BPF_DIR 2> /dev/null
 39}
 40
 41cleanup_skip()
 42{
 43	echo "selftests: $TESTNAME [SKIP]"
 44	_cleanup
 45
 46	exit $ksft_skip
 47}
 48
 49cleanup()
 50{
 51	if [ "$?" = 0 ]; then
 52		echo "selftests: $TESTNAME [PASS]"
 53	else
 54		echo "selftests: $TESTNAME [FAILED]"
 55	fi
 56	_cleanup
 57}
 58
 59if [ $(id -u) -ne 0 ]; then
 60	echo "selftests: $TESTNAME [SKIP] Need root privileges"
 61	exit $ksft_skip
 62fi
 63
 64if ! ip link set dev lo xdp off > /dev/null 2>&1; then
 65	echo "selftests: $TESTNAME [SKIP] Could not run test without the ip xdp support"
 66	exit $ksft_skip
 67fi
 68
 69if [ -z "$BPF_FS" ]; then
 70	echo "selftests: $TESTNAME [SKIP] Could not run test without bpffs mounted"
 71	exit $ksft_skip
 72fi
 73
 74if ! bpftool version > /dev/null 2>&1; then
 75	echo "selftests: $TESTNAME [SKIP] Could not run test without bpftool"
 76	exit $ksft_skip
 77fi
 78
 79set -e
 80
 81trap cleanup_skip EXIT
 82
 83ip netns add ${NS1}
 84ip netns add ${NS2}
 85ip netns add ${NS3}
 86
 87ip link add veth1 index 111 type veth peer name veth11 netns ${NS1}
 88ip link add veth2 index 122 type veth peer name veth22 netns ${NS2}
 89ip link add veth3 index 133 type veth peer name veth33 netns ${NS3}
 90
 91ip link set veth1 up
 92ip link set veth2 up
 93ip link set veth3 up
 94
 95ip -n ${NS1} addr add 10.1.1.11/24 dev veth11
 96ip -n ${NS3} addr add 10.1.1.33/24 dev veth33
 97
 98ip -n ${NS1} link set dev veth11 up
 99ip -n ${NS2} link set dev veth22 up
100ip -n ${NS3} link set dev veth33 up
101
102mkdir $BPF_DIR
103bpftool prog loadall \
104	xdp_redirect_map.bpf.o $BPF_DIR/progs type xdp \
105	pinmaps $BPF_DIR/maps
106bpftool map update pinned $BPF_DIR/maps/tx_port key 0 0 0 0 value 122 0 0 0
107bpftool map update pinned $BPF_DIR/maps/tx_port key 1 0 0 0 value 133 0 0 0
108bpftool map update pinned $BPF_DIR/maps/tx_port key 2 0 0 0 value 111 0 0 0
109ip link set dev veth1 xdp pinned $BPF_DIR/progs/xdp_redirect_map_0
110ip link set dev veth2 xdp pinned $BPF_DIR/progs/xdp_redirect_map_1
111ip link set dev veth3 xdp pinned $BPF_DIR/progs/xdp_redirect_map_2
112
113ip -n ${NS1} link set dev veth11 xdp obj xdp_dummy.bpf.o sec xdp
114ip -n ${NS2} link set dev veth22 xdp obj xdp_tx.bpf.o sec xdp
115ip -n ${NS3} link set dev veth33 xdp obj xdp_dummy.bpf.o sec xdp
116
117trap cleanup EXIT
118
119ip netns exec ${NS1} ping -c 1 -W 1 10.1.1.33
120
121exit 0
v5.9
  1#!/bin/sh
  2# SPDX-License-Identifier: GPL-2.0
  3#
  4# Create 3 namespaces with 3 veth peers, and
  5# forward packets in-between using native XDP
  6#
  7#                      XDP_TX
  8# NS1(veth11)        NS2(veth22)        NS3(veth33)
  9#      |                  |                  |
 10#      |                  |                  |
 11#   (veth1,            (veth2,            (veth3,
 12#   id:111)            id:122)            id:133)
 13#     ^ |                ^ |                ^ |
 14#     | |  XDP_REDIRECT  | |  XDP_REDIRECT  | |
 15#     | ------------------ ------------------ |
 16#     -----------------------------------------
 17#                    XDP_REDIRECT
 18
 19# Kselftest framework requirement - SKIP code is 4.
 20ksft_skip=4
 21
 22TESTNAME=xdp_veth
 23BPF_FS=$(awk '$3 == "bpf" {print $2; exit}' /proc/mounts)
 24BPF_DIR=$BPF_FS/test_$TESTNAME
 
 
 
 25
 26_cleanup()
 27{
 28	set +e
 29	ip link del veth1 2> /dev/null
 30	ip link del veth2 2> /dev/null
 31	ip link del veth3 2> /dev/null
 32	ip netns del ns1 2> /dev/null
 33	ip netns del ns2 2> /dev/null
 34	ip netns del ns3 2> /dev/null
 35	rm -rf $BPF_DIR 2> /dev/null
 36}
 37
 38cleanup_skip()
 39{
 40	echo "selftests: $TESTNAME [SKIP]"
 41	_cleanup
 42
 43	exit $ksft_skip
 44}
 45
 46cleanup()
 47{
 48	if [ "$?" = 0 ]; then
 49		echo "selftests: $TESTNAME [PASS]"
 50	else
 51		echo "selftests: $TESTNAME [FAILED]"
 52	fi
 53	_cleanup
 54}
 55
 56if [ $(id -u) -ne 0 ]; then
 57	echo "selftests: $TESTNAME [SKIP] Need root privileges"
 58	exit $ksft_skip
 59fi
 60
 61if ! ip link set dev lo xdp off > /dev/null 2>&1; then
 62	echo "selftests: $TESTNAME [SKIP] Could not run test without the ip xdp support"
 63	exit $ksft_skip
 64fi
 65
 66if [ -z "$BPF_FS" ]; then
 67	echo "selftests: $TESTNAME [SKIP] Could not run test without bpffs mounted"
 68	exit $ksft_skip
 69fi
 70
 71if ! bpftool version > /dev/null 2>&1; then
 72	echo "selftests: $TESTNAME [SKIP] Could not run test without bpftool"
 73	exit $ksft_skip
 74fi
 75
 76set -e
 77
 78trap cleanup_skip EXIT
 79
 80ip netns add ns1
 81ip netns add ns2
 82ip netns add ns3
 83
 84ip link add veth1 index 111 type veth peer name veth11 netns ns1
 85ip link add veth2 index 122 type veth peer name veth22 netns ns2
 86ip link add veth3 index 133 type veth peer name veth33 netns ns3
 87
 88ip link set veth1 up
 89ip link set veth2 up
 90ip link set veth3 up
 91
 92ip -n ns1 addr add 10.1.1.11/24 dev veth11
 93ip -n ns3 addr add 10.1.1.33/24 dev veth33
 94
 95ip -n ns1 link set dev veth11 up
 96ip -n ns2 link set dev veth22 up
 97ip -n ns3 link set dev veth33 up
 98
 99mkdir $BPF_DIR
100bpftool prog loadall \
101	xdp_redirect_map.o $BPF_DIR/progs type xdp \
102	pinmaps $BPF_DIR/maps
103bpftool map update pinned $BPF_DIR/maps/tx_port key 0 0 0 0 value 122 0 0 0
104bpftool map update pinned $BPF_DIR/maps/tx_port key 1 0 0 0 value 133 0 0 0
105bpftool map update pinned $BPF_DIR/maps/tx_port key 2 0 0 0 value 111 0 0 0
106ip link set dev veth1 xdp pinned $BPF_DIR/progs/redirect_map_0
107ip link set dev veth2 xdp pinned $BPF_DIR/progs/redirect_map_1
108ip link set dev veth3 xdp pinned $BPF_DIR/progs/redirect_map_2
109
110ip -n ns1 link set dev veth11 xdp obj xdp_dummy.o sec xdp_dummy
111ip -n ns2 link set dev veth22 xdp obj xdp_tx.o sec tx
112ip -n ns3 link set dev veth33 xdp obj xdp_dummy.o sec xdp_dummy
113
114trap cleanup EXIT
115
116ip netns exec ns1 ping -c 1 -W 1 10.1.1.33
117
118exit 0