Blame view

samples/bpf/test_tunnel_bpf.sh 4.23 KB
6afb1e28b   William Tu   samples/bpf: Add ...
1
2
3
4
5
6
7
8
9
10
  #!/bin/bash
  # 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 ...
11
12
13
14
15
16
  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...
17
  	ip link set dev veth1 up mtu 1500
6afb1e28b   William Tu   samples/bpf: Add ...
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
  	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
  }
  
  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...
66
67
68
69
70
71
72
73
74
75
76
77
  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 ...
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  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...
96
  	cleanup
6afb1e28b   William Tu   samples/bpf: Add ...
97
98
99
100
101
102
103
104
105
106
107
  }
  
  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...
108
  	cleanup
6afb1e28b   William Tu   samples/bpf: Add ...
109
110
111
112
113
114
115
116
117
118
119
  }
  
  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...
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  	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 ...
140
141
142
  }
  
  function cleanup {
a1c82704d   Alexei Starovoitov   samples/bpf: exte...
143
144
  	set +ex
  	pkill iperf
6afb1e28b   William Tu   samples/bpf: Add ...
145
146
  	ip netns delete at_ns0
  	ip link del veth1
a1c82704d   Alexei Starovoitov   samples/bpf: exte...
147
148
149
150
151
152
  	ip link del ipip11
  	ip link del gretap11
  	ip link del geneve11
  	pkill tcpdump
  	pkill cat
  	set -ex
6afb1e28b   William Tu   samples/bpf: Add ...
153
  }
a1c82704d   Alexei Starovoitov   samples/bpf: exte...
154
  cleanup
6afb1e28b   William Tu   samples/bpf: Add ...
155
156
  echo "Testing GRE tunnel..."
  test_gre
6afb1e28b   William Tu   samples/bpf: Add ...
157
158
  echo "Testing VXLAN tunnel..."
  test_vxlan
6afb1e28b   William Tu   samples/bpf: Add ...
159
160
  echo "Testing GENEVE tunnel..."
  test_geneve
a1c82704d   Alexei Starovoitov   samples/bpf: exte...
161
162
163
  echo "Testing IPIP tunnel..."
  test_ipip
  echo "*** PASS ***"