samples/bpf: extend test_tunnel_bpf.sh with ERSPAN
[linux-2.6-block.git] / samples / bpf / test_tunnel_bpf.sh
CommitLineData
6afb1e28
WT
1#!/bin/bash
2# In Namespace 0 (at_ns0) using native tunnel
3# Overlay IP: 10.1.1.100
4# local 192.16.1.100 remote 192.16.1.200
5# veth0 IP: 172.16.1.100, tunnel dev <type>00
6
7# Out of Namespace using BPF set/get on lwtunnel
8# Overlay IP: 10.1.1.200
9# local 172.16.1.200 remote 172.16.1.100
10# veth1 IP: 172.16.1.200, tunnel dev <type>11
11
6afb1e28
WT
12function config_device {
13 ip netns add at_ns0
14 ip link add veth0 type veth peer name veth1
15 ip link set veth0 netns at_ns0
16 ip netns exec at_ns0 ip addr add 172.16.1.100/24 dev veth0
17 ip netns exec at_ns0 ip link set dev veth0 up
a1c82704 18 ip link set dev veth1 up mtu 1500
6afb1e28
WT
19 ip addr add dev veth1 172.16.1.200/24
20}
21
22function add_gre_tunnel {
23 # in namespace
24 ip netns exec at_ns0 \
25 ip link add dev $DEV_NS type $TYPE key 2 local 172.16.1.100 remote 172.16.1.200
26 ip netns exec at_ns0 ip link set dev $DEV_NS up
27 ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
28
29 # out of namespace
30 ip link add dev $DEV type $TYPE key 2 external
31 ip link set dev $DEV up
32 ip addr add dev $DEV 10.1.1.200/24
33}
34
ef88f89c
WT
35function add_erspan_tunnel {
36 # in namespace
37 ip netns exec at_ns0 \
38 ip link add dev $DEV_NS type $TYPE seq key 2 local 172.16.1.100 remote 172.16.1.200 erspan 123
39 ip netns exec at_ns0 ip link set dev $DEV_NS up
40 ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
41
42 # out of namespace
43 ip link add dev $DEV type $TYPE external
44 ip link set dev $DEV up
45 ip addr add dev $DEV 10.1.1.200/24
46}
47
6afb1e28
WT
48function add_vxlan_tunnel {
49 # Set static ARP entry here because iptables set-mark works
50 # on L3 packet, as a result not applying to ARP packets,
51 # causing errors at get_tunnel_{key/opt}.
52
53 # in namespace
54 ip netns exec at_ns0 \
55 ip link add dev $DEV_NS type $TYPE id 2 dstport 4789 gbp remote 172.16.1.200
56 ip netns exec at_ns0 ip link set dev $DEV_NS address 52:54:00:d9:01:00 up
57 ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
58 ip netns exec at_ns0 arp -s 10.1.1.200 52:54:00:d9:02:00
59 ip netns exec at_ns0 iptables -A OUTPUT -j MARK --set-mark 0x800FF
60
61 # out of namespace
62 ip link add dev $DEV type $TYPE external gbp dstport 4789
63 ip link set dev $DEV address 52:54:00:d9:02:00 up
64 ip addr add dev $DEV 10.1.1.200/24
65 arp -s 10.1.1.100 52:54:00:d9:01:00
66}
67
68function add_geneve_tunnel {
69 # in namespace
70 ip netns exec at_ns0 \
71 ip link add dev $DEV_NS type $TYPE id 2 dstport 6081 remote 172.16.1.200
72 ip netns exec at_ns0 ip link set dev $DEV_NS up
73 ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
74
75 # out of namespace
76 ip link add dev $DEV type $TYPE dstport 6081 external
77 ip link set dev $DEV up
78 ip addr add dev $DEV 10.1.1.200/24
79}
80
a1c82704
AS
81function add_ipip_tunnel {
82 # in namespace
83 ip netns exec at_ns0 \
84 ip link add dev $DEV_NS type $TYPE local 172.16.1.100 remote 172.16.1.200
85 ip netns exec at_ns0 ip link set dev $DEV_NS up
86 ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
87
88 # out of namespace
89 ip link add dev $DEV type $TYPE external
90 ip link set dev $DEV up
91 ip addr add dev $DEV 10.1.1.200/24
92}
93
6afb1e28
WT
94function attach_bpf {
95 DEV=$1
96 SET_TUNNEL=$2
97 GET_TUNNEL=$3
98 tc qdisc add dev $DEV clsact
99 tc filter add dev $DEV egress bpf da obj tcbpf2_kern.o sec $SET_TUNNEL
100 tc filter add dev $DEV ingress bpf da obj tcbpf2_kern.o sec $GET_TUNNEL
101}
102
103function test_gre {
104 TYPE=gretap
105 DEV_NS=gretap00
106 DEV=gretap11
107 config_device
108 add_gre_tunnel
109 attach_bpf $DEV gre_set_tunnel gre_get_tunnel
110 ping -c 1 10.1.1.100
111 ip netns exec at_ns0 ping -c 1 10.1.1.200
a1c82704 112 cleanup
6afb1e28
WT
113}
114
ef88f89c
WT
115function test_erspan {
116 TYPE=erspan
117 DEV_NS=erspan00
118 DEV=erspan11
119 config_device
120 add_erspan_tunnel
121 attach_bpf $DEV erspan_set_tunnel erspan_get_tunnel
122 ping -c 1 10.1.1.100
123 ip netns exec at_ns0 ping -c 1 10.1.1.200
124 cleanup
125}
126
6afb1e28
WT
127function test_vxlan {
128 TYPE=vxlan
129 DEV_NS=vxlan00
130 DEV=vxlan11
131 config_device
132 add_vxlan_tunnel
133 attach_bpf $DEV vxlan_set_tunnel vxlan_get_tunnel
134 ping -c 1 10.1.1.100
135 ip netns exec at_ns0 ping -c 1 10.1.1.200
a1c82704 136 cleanup
6afb1e28
WT
137}
138
139function test_geneve {
140 TYPE=geneve
141 DEV_NS=geneve00
142 DEV=geneve11
143 config_device
144 add_geneve_tunnel
145 attach_bpf $DEV geneve_set_tunnel geneve_get_tunnel
146 ping -c 1 10.1.1.100
147 ip netns exec at_ns0 ping -c 1 10.1.1.200
a1c82704
AS
148 cleanup
149}
150
151function test_ipip {
152 TYPE=ipip
153 DEV_NS=ipip00
154 DEV=ipip11
155 config_device
156 tcpdump -nei veth1 &
157 cat /sys/kernel/debug/tracing/trace_pipe &
158 add_ipip_tunnel
159 ethtool -K veth1 gso off gro off rx off tx off
160 ip link set dev veth1 mtu 1500
161 attach_bpf $DEV ipip_set_tunnel ipip_get_tunnel
162 ping -c 1 10.1.1.100
163 ip netns exec at_ns0 ping -c 1 10.1.1.200
164 ip netns exec at_ns0 iperf -sD -p 5200 > /dev/null
165 sleep 0.2
166 iperf -c 10.1.1.100 -n 5k -p 5200
167 cleanup
6afb1e28
WT
168}
169
170function cleanup {
a1c82704
AS
171 set +ex
172 pkill iperf
6afb1e28
WT
173 ip netns delete at_ns0
174 ip link del veth1
a1c82704
AS
175 ip link del ipip11
176 ip link del gretap11
cc75f851 177 ip link del vxlan11
a1c82704 178 ip link del geneve11
ef88f89c 179 ip link del erspan11
a1c82704
AS
180 pkill tcpdump
181 pkill cat
182 set -ex
6afb1e28
WT
183}
184
ef88f89c 185trap cleanup 0 2 3 6 9
a1c82704 186cleanup
6afb1e28
WT
187echo "Testing GRE tunnel..."
188test_gre
ef88f89c
WT
189echo "Testing ERSPAN tunnel..."
190test_erspan
6afb1e28
WT
191echo "Testing VXLAN tunnel..."
192test_vxlan
6afb1e28
WT
193echo "Testing GENEVE tunnel..."
194test_geneve
a1c82704
AS
195echo "Testing IPIP tunnel..."
196test_ipip
197echo "*** PASS ***"