Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / testing / selftests / net / forwarding / ipip_lib.sh
blob01e62c4ac94ddc602317254e98a726544cede880
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
4 # Handles creation and destruction of IP-in-IP or GRE tunnels over the given
5 # topology. Supports both flat and hierarchical models.
7 # Flat Model:
8 # Overlay and underlay share the same VRF.
9 # SW1 uses default VRF so tunnel has no bound dev.
10 # SW2 uses non-default VRF tunnel has a bound dev.
11 # +-------------------------+
12 # | H1 |
13 # | $h1 + |
14 # | 192.0.2.1/28 | |
15 # +-------------------|-----+
16 # |
17 # +-------------------|-----+
18 # | SW1 | |
19 # | $ol1 + |
20 # | 192.0.2.2/28 |
21 # | |
22 # | + g1a (gre) |
23 # | loc=192.0.2.65 |
24 # | rem=192.0.2.66 --. |
25 # | tos=inherit | |
26 # | .------------------' |
27 # | | |
28 # | v |
29 # | + $ul1.111 (vlan) |
30 # | | 192.0.2.129/28 |
31 # | \ |
32 # | \_______ |
33 # | | |
34 # |VRF default + $ul1 |
35 # +------------|------------+
36 # |
37 # +------------|------------+
38 # | SW2 + $ul2 |
39 # | _______| |
40 # | / |
41 # | / |
42 # | + $ul2.111 (vlan) |
43 # | ^ 192.0.2.130/28 |
44 # | | |
45 # | | |
46 # | '------------------. |
47 # | + g2a (gre) | |
48 # | loc=192.0.2.66 | |
49 # | rem=192.0.2.65 --' |
50 # | tos=inherit |
51 # | |
52 # | $ol2 + |
53 # | 192.0.2.17/28 | |
54 # | VRF v$ol2 | |
55 # +-------------------|-----+
56 # |
57 # +-------------------|-----+
58 # | H2 | |
59 # | $h2 + |
60 # | 192.0.2.18/28 |
61 # +-------------------------+
63 # Hierarchical model:
64 # The tunnel is bound to a device in a different VRF
66 # +---------------------------+
67 # | H1 |
68 # | $h1 + |
69 # | 192.0.2.1/28 | |
70 # +-------------------|-------+
71 # |
72 # +-------------------|-------+
73 # | SW1 | |
74 # | +-----------------|-----+ |
75 # | | $ol1 + | |
76 # | | 192.0.2.2/28 | |
77 # | | | |
78 # | | + g1a (gre) | |
79 # | | rem=192.0.2.66 | |
80 # | | tos=inherit | |
81 # | | loc=192.0.2.65 | |
82 # | | ^ | |
83 # | | VRF v$ol1 | | |
84 # | +-----------|-----------+ |
85 # | | |
86 # | +-----------|-----------+ |
87 # | | VRF v$ul1 | | |
88 # | | | | |
89 # | | | | |
90 # | | v | |
91 # | | dummy1 + | |
92 # | | 192.0.2.65 | |
93 # | | .-------' | |
94 # | | | | |
95 # | | v | |
96 # | | + $ul1.111 (vlan) | |
97 # | | | 192.0.2.129/28 | |
98 # | | \ | |
99 # | | \_____ | |
100 # | | | | |
101 # | | + $ul1 | |
102 # | +----------|------------+ |
103 # +------------|--------------+
105 # +------------|--------------+
106 # | SW2 | |
107 # | +----------|------------+ |
108 # | | + $ul2 | |
109 # | | _____| | |
110 # | | / | |
111 # | | / | |
112 # | | | $ul2.111 (vlan) | |
113 # | | + 192.0.2.130/28 | |
114 # | | ^ | |
115 # | | | | |
116 # | | '-------. | |
117 # | | dummy2 + | |
118 # | | 192.0.2.66 | |
119 # | | ^ | |
120 # | | | | |
121 # | | | | |
122 # | | VRF v$ul2 | | |
123 # | +-----------|-----------+ |
124 # | | |
125 # | +-----------|-----------+ |
126 # | | VRF v$ol2 | | |
127 # | | | | |
128 # | | v | |
129 # | | g2a (gre)+ | |
130 # | | loc=192.0.2.66 | |
131 # | | rem=192.0.2.65 | |
132 # | | tos=inherit | |
133 # | | | |
134 # | | $ol2 + | |
135 # | | 192.0.2.17/28 | | |
136 # | +-----------------|-----+ |
137 # +-------------------|-------+
139 # +-------------------|-------+
140 # | H2 | |
141 # | $h2 + |
142 # | 192.0.2.18/28 |
143 # +---------------------------+
145 h1_create()
147 simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
148 ip route add vrf v$h1 192.0.2.16/28 via 192.0.2.2
151 h1_destroy()
153 ip route del vrf v$h1 192.0.2.16/28 via 192.0.2.2
154 simple_if_fini $h1 192.0.2.1/28
157 h2_create()
159 simple_if_init $h2 192.0.2.18/28
160 ip route add vrf v$h2 192.0.2.0/28 via 192.0.2.17
163 h2_destroy()
165 ip route del vrf v$h2 192.0.2.0/28 via 192.0.2.17
166 simple_if_fini $h2 192.0.2.18/28
169 sw1_flat_create()
171 local type=$1; shift
172 local ol1=$1; shift
173 local ul1=$1; shift
175 ip link set dev $ol1 up
176 __addr_add_del $ol1 add "192.0.2.2/28"
178 ip link set dev $ul1 up
179 vlan_create $ul1 111 "" 192.0.2.129/28
181 tunnel_create g1a $type 192.0.2.65 192.0.2.66 tos inherit "$@"
182 ip link set dev g1a up
183 __addr_add_del g1a add "192.0.2.65/32"
185 ip route add 192.0.2.66/32 via 192.0.2.130
187 ip route add 192.0.2.16/28 nexthop dev g1a
190 sw1_flat_destroy()
192 local ol1=$1; shift
193 local ul1=$1; shift
195 ip route del 192.0.2.16/28
197 ip route del 192.0.2.66/32 via 192.0.2.130
198 __simple_if_fini g1a 192.0.2.65/32
199 tunnel_destroy g1a
201 vlan_destroy $ul1 111
202 __simple_if_fini $ul1
203 __simple_if_fini $ol1 192.0.2.2/28
206 sw2_flat_create()
208 local type=$1; shift
209 local ol2=$1; shift
210 local ul2=$1; shift
212 simple_if_init $ol2 192.0.2.17/28
213 __simple_if_init $ul2 v$ol2
214 vlan_create $ul2 111 v$ol2 192.0.2.130/28
216 tunnel_create g2a $type 192.0.2.66 192.0.2.65 tos inherit dev v$ol2 \
217 "$@"
218 __simple_if_init g2a v$ol2 192.0.2.66/32
220 ip route add vrf v$ol2 192.0.2.65/32 via 192.0.2.129
221 ip route add vrf v$ol2 192.0.2.0/28 nexthop dev g2a
224 sw2_flat_destroy()
226 local ol2=$1; shift
227 local ul2=$1; shift
229 ip route del vrf v$ol2 192.0.2.0/28
231 ip route del vrf v$ol2 192.0.2.65/32 via 192.0.2.129
232 __simple_if_fini g2a 192.0.2.66/32
233 tunnel_destroy g2a
235 vlan_destroy $ul2 111
236 __simple_if_fini $ul2
237 simple_if_fini $ol2 192.0.2.17/28
240 sw1_hierarchical_create()
242 local type=$1; shift
243 local ol1=$1; shift
244 local ul1=$1; shift
246 simple_if_init $ol1 192.0.2.2/28
247 simple_if_init $ul1
248 ip link add name dummy1 type dummy
249 __simple_if_init dummy1 v$ul1 192.0.2.65/32
251 vlan_create $ul1 111 v$ul1 192.0.2.129/28
252 tunnel_create g1a $type 192.0.2.65 192.0.2.66 tos inherit dev dummy1 \
253 "$@"
254 ip link set dev g1a master v$ol1
256 ip route add vrf v$ul1 192.0.2.66/32 via 192.0.2.130
257 ip route add vrf v$ol1 192.0.2.16/28 nexthop dev g1a
260 sw1_hierarchical_destroy()
262 local ol1=$1; shift
263 local ul1=$1; shift
265 ip route del vrf v$ol1 192.0.2.16/28
266 ip route del vrf v$ul1 192.0.2.66/32
268 tunnel_destroy g1a
269 vlan_destroy $ul1 111
271 __simple_if_fini dummy1 192.0.2.65/32
272 ip link del dev dummy1
274 simple_if_fini $ul1
275 simple_if_fini $ol1 192.0.2.2/28
278 sw2_hierarchical_create()
280 local type=$1; shift
281 local ol2=$1; shift
282 local ul2=$1; shift
284 simple_if_init $ol2 192.0.2.17/28
285 simple_if_init $ul2
287 ip link add name dummy2 type dummy
288 __simple_if_init dummy2 v$ul2 192.0.2.66/32
290 vlan_create $ul2 111 v$ul2 192.0.2.130/28
291 tunnel_create g2a $type 192.0.2.66 192.0.2.65 tos inherit dev dummy2 \
292 "$@"
293 ip link set dev g2a master v$ol2
295 ip route add vrf v$ul2 192.0.2.65/32 via 192.0.2.129
296 ip route add vrf v$ol2 192.0.2.0/28 nexthop dev g2a
299 sw2_hierarchical_destroy()
301 local ol2=$1; shift
302 local ul2=$1; shift
304 ip route del vrf v$ol2 192.0.2.0/28
305 ip route del vrf v$ul2 192.0.2.65/32
307 tunnel_destroy g2a
308 vlan_destroy $ul2 111
310 __simple_if_fini dummy2 192.0.2.66/32
311 ip link del dev dummy2
313 simple_if_fini $ul2
314 simple_if_fini $ol2 192.0.2.17/28
317 topo_mtu_change()
319 local mtu=$1
321 ip link set mtu $mtu dev $h1
322 ip link set mtu $mtu dev $ol1
323 ip link set mtu $mtu dev g1a
324 ip link set mtu $mtu dev $ul1
325 ip link set mtu $mtu dev $ul1.111
326 ip link set mtu $mtu dev $h2
327 ip link set mtu $mtu dev $ol2
328 ip link set mtu $mtu dev g2a
329 ip link set mtu $mtu dev $ul2
330 ip link set mtu $mtu dev $ul2.111
333 test_mtu_change()
335 local encap=$1; shift
337 RET=0
339 ping_do $h1 192.0.2.18 "-s 1800 -w 3"
340 check_fail $? "ping $encap should not pass with size 1800"
342 RET=0
344 topo_mtu_change 2000
345 ping_do $h1 192.0.2.18 "-s 1800 -w 3"
346 check_err $?
347 log_test "ping $encap packet size 1800 after MTU change"