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 / q_in_vni.sh
blob798b13525c02802a538d90de49579d8866be9c15
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
4 # +-----------------------+ +------------------------+
5 # | H1 (vrf) | | H2 (vrf) |
6 # | + $h1.10 | | + $h2.10 |
7 # | | 192.0.2.1/28 | | | 192.0.2.2/28 |
8 # | | | | | |
9 # | | + $h1.20 | | | + $h2.20 |
10 # | \ | 198.51.100.1/24 | | \ | 198.51.100.2/24 |
11 # | \| | | \| |
12 # | + $h1 | | + $h2 |
13 # +----|------------------+ +----|-------------------+
14 # | |
15 # +----|--------------------------------------------------|-------------------+
16 # | SW | | |
17 # | +--|--------------------------------------------------|-----------------+ |
18 # | | + $swp1 BR1 (802.1ad) + $swp2 | |
19 # | | vid 100 pvid untagged vid 100 pvid | |
20 # | | untagged | |
21 # | | + vx100 (vxlan) | |
22 # | | local 192.0.2.17 | |
23 # | | remote 192.0.2.34 192.0.2.50 | |
24 # | | id 1000 dstport $VXPORT | |
25 # | | vid 100 pvid untagged | |
26 # | +-----------------------------------------------------------------------+ |
27 # | |
28 # | 192.0.2.32/28 via 192.0.2.18 |
29 # | 192.0.2.48/28 via 192.0.2.18 |
30 # | |
31 # | + $rp1 |
32 # | | 192.0.2.17/28 |
33 # +----|----------------------------------------------------------------------+
34 # |
35 # +----|--------------------------------------------------------+
36 # | | VRP2 (vrf) |
37 # | + $rp2 |
38 # | 192.0.2.18/28 |
39 # | | (maybe) HW
40 # =============================================================================
41 # | | (likely) SW
42 # | + v1 (veth) + v3 (veth) |
43 # | | 192.0.2.33/28 | 192.0.2.49/28 |
44 # +----|---------------------------------------|----------------+
45 # | |
46 # +----|------------------------------+ +----|------------------------------+
47 # | + v2 (veth) NS1 (netns) | | + v4 (veth) NS2 (netns) |
48 # | 192.0.2.34/28 | | 192.0.2.50/28 |
49 # | | | |
50 # | 192.0.2.16/28 via 192.0.2.33 | | 192.0.2.16/28 via 192.0.2.49 |
51 # | 192.0.2.50/32 via 192.0.2.33 | | 192.0.2.34/32 via 192.0.2.49 |
52 # | | | |
53 # | +-------------------------------+ | | +-------------------------------+ |
54 # | | BR2 (802.1ad) | | | | BR2 (802.1ad) | |
55 # | | + vx100 (vxlan) | | | | + vx100 (vxlan) | |
56 # | | local 192.0.2.34 | | | | local 192.0.2.50 | |
57 # | | remote 192.0.2.17 | | | | remote 192.0.2.17 | |
58 # | | remote 192.0.2.50 | | | | remote 192.0.2.34 | |
59 # | | id 1000 dstport $VXPORT | | | | id 1000 dstport $VXPORT | |
60 # | | vid 100 pvid untagged | | | | vid 100 pvid untagged | |
61 # | | | | | | | |
62 # | | + w1 (veth) | | | | + w1 (veth) | |
63 # | | | vid 100 pvid untagged | | | | | vid 100 pvid untagged | |
64 # | +--|----------------------------+ | | +--|----------------------------+ |
65 # | | | | | |
66 # | +--|----------------------------+ | | +--|----------------------------+ |
67 # | | | VW2 (vrf) | | | | | VW2 (vrf) | |
68 # | | + w2 (veth) | | | | + w2 (veth) | |
69 # | | |\ | | | | |\ | |
70 # | | | + w2.10 | | | | | + w2.10 | |
71 # | | | 192.0.2.3/28 | | | | | 192.0.2.4/28 | |
72 # | | | | | | | | | |
73 # | | + w2.20 | | | | + w2.20 | |
74 # | | 198.51.100.3/24 | | | | 198.51.100.4/24 | |
75 # | +-------------------------------+ | | +-------------------------------+ |
76 # +-----------------------------------+ +-----------------------------------+
78 : ${VXPORT:=4789}
79 export VXPORT
81 : ${ALL_TESTS:="
82 ping_ipv4
85 NUM_NETIFS=6
86 source lib.sh
88 h1_create()
90 simple_if_init $h1
91 tc qdisc add dev $h1 clsact
92 vlan_create $h1 10 v$h1 192.0.2.1/28
93 vlan_create $h1 20 v$h1 198.51.100.1/24
96 h1_destroy()
98 vlan_destroy $h1 20
99 vlan_destroy $h1 10
100 tc qdisc del dev $h1 clsact
101 simple_if_fini $h1
104 h2_create()
106 simple_if_init $h2
107 tc qdisc add dev $h2 clsact
108 vlan_create $h2 10 v$h2 192.0.2.2/28
109 vlan_create $h2 20 v$h2 198.51.100.2/24
112 h2_destroy()
114 vlan_destroy $h2 20
115 vlan_destroy $h2 10
116 tc qdisc del dev $h2 clsact
117 simple_if_fini $h2
120 rp1_set_addr()
122 ip address add dev $rp1 192.0.2.17/28
124 ip route add 192.0.2.32/28 nexthop via 192.0.2.18
125 ip route add 192.0.2.48/28 nexthop via 192.0.2.18
128 rp1_unset_addr()
130 ip route del 192.0.2.48/28 nexthop via 192.0.2.18
131 ip route del 192.0.2.32/28 nexthop via 192.0.2.18
133 ip address del dev $rp1 192.0.2.17/28
136 switch_create()
138 ip link add name br1 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
139 vlan_default_pvid 0 mcast_snooping 0
140 ip link set dev br1 addrgenmode none
141 # Make sure the bridge uses the MAC address of the local port and not
142 # that of the VxLAN's device.
143 ip link set dev br1 address $(mac_get $swp1)
144 ip link set dev br1 up
146 ip link set dev $rp1 up
147 rp1_set_addr
149 ip link add name vx100 type vxlan id 1000 \
150 local 192.0.2.17 dstport "$VXPORT" \
151 nolearning noudpcsum tos inherit ttl 100
152 ip link set dev vx100 up
154 ip link set dev vx100 master br1
155 bridge vlan add vid 100 dev vx100 pvid untagged
157 ip link set dev $swp1 master br1
158 ip link set dev $swp1 up
159 bridge vlan add vid 100 dev $swp1 pvid untagged
161 ip link set dev $swp2 master br1
162 ip link set dev $swp2 up
163 bridge vlan add vid 100 dev $swp2 pvid untagged
165 bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
166 bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self
169 switch_destroy()
171 bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self
172 bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
174 bridge vlan del vid 100 dev $swp2
175 ip link set dev $swp2 down
176 ip link set dev $swp2 nomaster
178 bridge vlan del vid 100 dev $swp1
179 ip link set dev $swp1 down
180 ip link set dev $swp1 nomaster
182 ip link set dev vx100 nomaster
183 ip link set dev vx100 down
184 ip link del dev vx100
186 rp1_unset_addr
187 ip link set dev $rp1 down
189 ip link set dev br1 down
190 ip link del dev br1
193 vrp2_create()
195 simple_if_init $rp2 192.0.2.18/28
196 __simple_if_init v1 v$rp2 192.0.2.33/28
197 __simple_if_init v3 v$rp2 192.0.2.49/28
198 tc qdisc add dev v1 clsact
201 vrp2_destroy()
203 tc qdisc del dev v1 clsact
204 __simple_if_fini v3 192.0.2.49/28
205 __simple_if_fini v1 192.0.2.33/28
206 simple_if_fini $rp2 192.0.2.18/28
209 ns_init_common()
211 local in_if=$1; shift
212 local in_addr=$1; shift
213 local other_in_addr=$1; shift
214 local nh_addr=$1; shift
215 local host_addr1=$1; shift
216 local host_addr2=$1; shift
218 ip link set dev $in_if up
219 ip address add dev $in_if $in_addr/28
220 tc qdisc add dev $in_if clsact
222 ip link add name br2 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
223 vlan_default_pvid 0
224 ip link set dev br2 up
226 ip link add name w1 type veth peer name w2
228 ip link set dev w1 master br2
229 ip link set dev w1 up
230 bridge vlan add vid 100 dev w1 pvid untagged
232 ip link add name vx100 type vxlan id 1000 local $in_addr \
233 dstport "$VXPORT"
234 ip link set dev vx100 up
235 bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.17 self
236 bridge fdb append dev vx100 00:00:00:00:00:00 dst $other_in_addr self
238 ip link set dev vx100 master br2
239 tc qdisc add dev vx100 clsact
241 bridge vlan add vid 100 dev vx100 pvid untagged
243 simple_if_init w2
244 vlan_create w2 10 vw2 $host_addr1/28
245 vlan_create w2 20 vw2 $host_addr2/24
247 ip route add 192.0.2.16/28 nexthop via $nh_addr
248 ip route add $other_in_addr/32 nexthop via $nh_addr
250 export -f ns_init_common
252 ns1_create()
254 ip netns add ns1
255 ip link set dev v2 netns ns1
256 in_ns ns1 \
257 ns_init_common v2 192.0.2.34 192.0.2.50 192.0.2.33 \
258 192.0.2.3 198.51.100.3
261 ns1_destroy()
263 ip netns exec ns1 ip link set dev v2 netns 1
264 ip netns del ns1
267 ns2_create()
269 ip netns add ns2
270 ip link set dev v4 netns ns2
271 in_ns ns2 \
272 ns_init_common v4 192.0.2.50 192.0.2.34 192.0.2.49 \
273 192.0.2.4 198.51.100.4
276 ns2_destroy()
278 ip netns exec ns2 ip link set dev v4 netns 1
279 ip netns del ns2
282 setup_prepare()
284 h1=${NETIFS[p1]}
285 swp1=${NETIFS[p2]}
287 swp2=${NETIFS[p3]}
288 h2=${NETIFS[p4]}
290 rp1=${NETIFS[p5]}
291 rp2=${NETIFS[p6]}
293 vrf_prepare
294 forwarding_enable
296 h1_create
297 h2_create
298 switch_create
300 ip link add name v1 type veth peer name v2
301 ip link add name v3 type veth peer name v4
302 vrp2_create
303 ns1_create
304 ns2_create
306 r1_mac=$(in_ns ns1 mac_get w2)
307 r2_mac=$(in_ns ns2 mac_get w2)
308 h2_mac=$(mac_get $h2)
311 cleanup()
313 pre_cleanup
315 ns2_destroy
316 ns1_destroy
317 vrp2_destroy
318 ip link del dev v3
319 ip link del dev v1
321 switch_destroy
322 h2_destroy
323 h1_destroy
325 forwarding_restore
326 vrf_cleanup
329 ping_ipv4()
331 ping_test $h1 192.0.2.2 ": local->local"
332 ping_test $h1 192.0.2.3 ": local->remote 1"
333 ping_test $h1 192.0.2.4 ": local->remote 2"
336 test_all()
338 echo "Running tests with UDP port $VXPORT"
339 tests_run
342 trap cleanup EXIT
344 setup_prepare
345 setup_wait
346 test_all
348 exit $EXIT_STATUS