Loading...
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
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