Blame view

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