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 / dual_vxlan_bridge.sh
blob68ee92df3e07f427d7c26999c6be863a41f76349
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
4 # +--------------------+ +----------------------+
5 # | H1 (vrf) | | H2 (vrf) |
6 # | + h1.10 | | + h2.20 |
7 # | | 192.0.2.1/28 | | | 192.0.2.2/28 |
8 # | | | | | |
9 # | + $h1 | | + $h2 |
10 # | | | | | |
11 # +----|---------------+ +--|-------------------+
12 # | |
13 # +----|--------------------------------------------------|--------------------+
14 # | SW | | |
15 # | +--|-------------------------------+ +----------------|------------------+ |
16 # | | + $swp1 BR1 (802.1ad) | | BR2 (802.1d) + $swp2 | |
17 # | | vid 100 pvid untagged | | | | |
18 # | | | | + $swp2.20 | |
19 # | | | | | |
20 # | | + vx100 (vxlan) | | + vx200 (vxlan) | |
21 # | | local 192.0.2.17 | | local 192.0.2.17 | |
22 # | | remote 192.0.2.34 | | remote 192.0.2.50 | |
23 # | | id 1000 dstport $VXPORT | | id 2000 dstport $VXPORT | |
24 # | | vid 100 pvid untagged | | | |
25 # | +--------------------------------- + +-----------------------------------+ |
26 # | |
27 # | 192.0.2.32/28 via 192.0.2.18 |
28 # | 192.0.2.48/28 via 192.0.2.18 |
29 # | |
30 # | + $rp1 |
31 # | | 192.0.2.17/28 |
32 # +----|-----------------------------------------------------------------------+
33 # |
34 # +----|--------------------------------------------------------+
35 # | | VRP2 (vrf) |
36 # | + $rp2 |
37 # | 192.0.2.18/28 |
38 # | | (maybe) HW
39 # =============================================================================
40 # | | (likely) SW
41 # | + v1 (veth) + v3 (veth) |
42 # | | 192.0.2.33/28 | 192.0.2.49/28 |
43 # +----|---------------------------------------|----------------+
44 # | |
45 # +----|------------------------------+ +----|------------------------------+
46 # | + v2 (veth) NS1 (netns) | | + v4 (veth) NS2 (netns) |
47 # | 192.0.2.34/28 | | 192.0.2.50/28 |
48 # | | | |
49 # | 192.0.2.16/28 via 192.0.2.33 | | 192.0.2.16/28 via 192.0.2.49 |
50 # | 192.0.2.50/32 via 192.0.2.33 | | 192.0.2.34/32 via 192.0.2.49 |
51 # | | | |
52 # | +-------------------------------+ | | +-------------------------------+ |
53 # | | BR3 (802.1ad) | | | | BR3 (802.1d) | |
54 # | | + vx100 (vxlan) | | | | + vx200 (vxlan) | |
55 # | | local 192.0.2.34 | | | | local 192.0.2.50 | |
56 # | | remote 192.0.2.17 | | | | remote 192.0.2.17 | |
57 # | | remote 192.0.2.50 | | | | remote 192.0.2.34 | |
58 # | | id 1000 dstport $VXPORT | | | | id 2000 dstport $VXPORT | |
59 # | | vid 100 pvid untagged | | | | | |
60 # | | | | | | + w1.20 | |
61 # | | | | | | | | |
62 # | | + w1 (veth) | | | | + w1 (veth) | |
63 # | | | vid 100 pvid untagged | | | | | | |
64 # | +--|----------------------------+ | | +--|----------------------------+ |
65 # | | | | | |
66 # | +--|----------------------------+ | | +--|----------------------------+ |
67 # | | | VW2 (vrf) | | | | | VW2 (vrf) | |
68 # | | + w2 (veth) | | | | + w2 (veth) | |
69 # | | | | | | | | | |
70 # | | | | | | | | | |
71 # | | + w2.10 | | | | + w2.20 | |
72 # | | 192.0.2.3/28 | | | | 192.0.2.4/28 | |
73 # | +-------------------------------+ | | +-------------------------------+ |
74 # +-----------------------------------+ +-----------------------------------+
76 : ${VXPORT:=4789}
77 export VXPORT
79 : ${ALL_TESTS:="
80 ping_ipv4
83 NUM_NETIFS=6
84 source lib.sh
86 h1_create()
88 simple_if_init $h1
89 tc qdisc add dev $h1 clsact
90 vlan_create $h1 10 v$h1 192.0.2.1/28
93 h1_destroy()
95 vlan_destroy $h1 10
96 tc qdisc del dev $h1 clsact
97 simple_if_fini $h1
100 h2_create()
102 simple_if_init $h2
103 tc qdisc add dev $h2 clsact
104 vlan_create $h2 20 v$h2 192.0.2.2/28
107 h2_destroy()
109 vlan_destroy $h2 20
110 tc qdisc del dev $h2 clsact
111 simple_if_fini $h2
114 rp1_set_addr()
116 ip address add dev $rp1 192.0.2.17/28
118 ip route add 192.0.2.32/28 nexthop via 192.0.2.18
119 ip route add 192.0.2.48/28 nexthop via 192.0.2.18
122 rp1_unset_addr()
124 ip route del 192.0.2.48/28 nexthop via 192.0.2.18
125 ip route del 192.0.2.32/28 nexthop via 192.0.2.18
127 ip address del dev $rp1 192.0.2.17/28
130 switch_create()
132 #### BR1 ####
133 ip link add name br1 type bridge vlan_filtering 1 \
134 vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0
135 ip link set dev br1 addrgenmode none
136 # Make sure the bridge uses the MAC address of the local port and not
137 # that of the VxLAN's device.
138 ip link set dev br1 address $(mac_get $swp1)
139 ip link set dev br1 up
141 #### BR2 ####
142 ip link add name br2 type bridge vlan_filtering 0 mcast_snooping 0
143 # Make sure the bridge uses the MAC address of the local port and not
144 # that of the VxLAN's device.
145 ip link set dev br2 address $(mac_get $swp2)
146 ip link set dev br2 up
148 ip link set dev $rp1 up
149 rp1_set_addr
151 #### VX100 ####
152 ip link add name vx100 type vxlan id 1000 local 192.0.2.17 \
153 dstport "$VXPORT" nolearning noudpcsum tos inherit ttl 100
154 ip link set dev vx100 up
156 ip link set dev vx100 master br1
157 bridge vlan add vid 100 dev vx100 pvid untagged
159 ip link set dev $swp1 master br1
160 ip link set dev $swp1 up
161 bridge vlan add vid 100 dev $swp1 pvid untagged
163 #### VX200 ####
164 ip link add name vx200 type vxlan id 2000 local 192.0.2.17 \
165 dstport "$VXPORT" nolearning noudpcsum tos inherit ttl 100
166 ip link set dev vx200 up
168 ip link set dev vx200 master br2
170 ip link set dev $swp2 up
171 ip link add name $swp2.20 link $swp2 type vlan id 20
172 ip link set dev $swp2.20 master br2
173 ip link set dev $swp2.20 up
175 bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
176 bridge fdb append dev vx200 00:00:00:00:00:00 dst 192.0.2.50 self
179 switch_destroy()
181 bridge fdb del dev vx200 00:00:00:00:00:00 dst 192.0.2.50 self
182 bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
184 ip link set dev vx200 nomaster
185 ip link set dev vx200 down
186 ip link del dev vx200
188 ip link del dev $swp2.20
189 ip link set dev $swp2 down
190 ip link set dev $swp2 nomaster
192 bridge vlan del vid 100 dev $swp1
193 ip link set dev $swp1 down
194 ip link set dev $swp1 nomaster
196 ip link set dev vx100 nomaster
197 ip link set dev vx100 down
198 ip link del dev vx100
200 rp1_unset_addr
201 ip link set dev $rp1 down
203 ip link set dev br2 down
204 ip link del dev br2
206 ip link set dev br1 down
207 ip link del dev br1
210 vrp2_create()
212 simple_if_init $rp2 192.0.2.18/28
213 __simple_if_init v1 v$rp2 192.0.2.33/28
214 __simple_if_init v3 v$rp2 192.0.2.49/28
215 tc qdisc add dev v1 clsact
218 vrp2_destroy()
220 tc qdisc del dev v1 clsact
221 __simple_if_fini v3 192.0.2.49/28
222 __simple_if_fini v1 192.0.2.33/28
223 simple_if_fini $rp2 192.0.2.18/28
226 ns_init_common()
228 local in_if=$1; shift
229 local in_addr=$1; shift
230 local other_in_addr=$1; shift
231 local vxlan_name=$1; shift
232 local vxlan_id=$1; shift
233 local vlan_id=$1; shift
234 local host_addr=$1; shift
235 local nh_addr=$1; shift
237 ip link set dev $in_if up
238 ip address add dev $in_if $in_addr/28
239 tc qdisc add dev $in_if clsact
241 ip link add name br3 type bridge vlan_filtering 0
242 ip link set dev br3 up
244 ip link add name w1 type veth peer name w2
246 ip link set dev w1 master br3
247 ip link set dev w1 up
249 ip link add name $vxlan_name type vxlan id $vxlan_id local $in_addr \
250 dstport "$VXPORT"
251 ip link set dev $vxlan_name up
252 bridge fdb append dev $vxlan_name 00:00:00:00:00:00 dst 192.0.2.17 self
253 bridge fdb append dev $vxlan_name 00:00:00:00:00:00 dst $other_in_addr self
255 ip link set dev $vxlan_name master br3
256 tc qdisc add dev $vxlan_name clsact
258 simple_if_init w2
259 vlan_create w2 $vlan_id vw2 $host_addr/28
261 ip route add 192.0.2.16/28 nexthop via $nh_addr
262 ip route add $other_in_addr/32 nexthop via $nh_addr
264 export -f ns_init_common
266 ns1_create()
268 ip netns add ns1
269 ip link set dev v2 netns ns1
270 in_ns ns1 \
271 ns_init_common v2 192.0.2.34 192.0.2.50 vx100 1000 10 192.0.2.3 \
272 192.0.2.33
274 in_ns ns1 bridge vlan add vid 100 dev vx100 pvid untagged
277 ns1_destroy()
279 ip netns exec ns1 ip link set dev v2 netns 1
280 ip netns del ns1
283 ns2_create()
285 ip netns add ns2
286 ip link set dev v4 netns ns2
287 in_ns ns2 \
288 ns_init_common v4 192.0.2.50 192.0.2.34 vx200 2000 20 192.0.2.4 \
289 192.0.2.49
291 in_ns ns2 ip link add name w1.20 link w1 type vlan id 20
292 in_ns ns2 ip link set dev w1.20 master br3
293 in_ns ns2 ip link set dev w1.20 up
296 ns2_destroy()
298 ip netns exec ns2 ip link set dev v4 netns 1
299 ip netns del ns2
302 setup_prepare()
304 h1=${NETIFS[p1]}
305 swp1=${NETIFS[p2]}
307 swp2=${NETIFS[p3]}
308 h2=${NETIFS[p4]}
310 rp1=${NETIFS[p5]}
311 rp2=${NETIFS[p6]}
313 vrf_prepare
314 forwarding_enable
316 h1_create
317 h2_create
318 switch_create
320 ip link add name v1 type veth peer name v2
321 ip link add name v3 type veth peer name v4
322 vrp2_create
323 ns1_create
324 ns2_create
326 r1_mac=$(in_ns ns1 mac_get w2)
327 r2_mac=$(in_ns ns2 mac_get w2)
328 h2_mac=$(mac_get $h2)
331 cleanup()
333 pre_cleanup
335 ns2_destroy
336 ns1_destroy
337 vrp2_destroy
338 ip link del dev v3
339 ip link del dev v1
341 switch_destroy
342 h2_destroy
343 h1_destroy
345 forwarding_restore
346 vrf_cleanup
349 ping_ipv4()
351 ping_test $h1 192.0.2.3 ": local->remote 1 through VxLAN with an 802.1ad bridge"
352 ping_test $h2 192.0.2.4 ": local->remote 2 through VxLAN with an 802.1d bridge"
355 test_all()
357 echo "Running tests with UDP port $VXPORT"
358 tests_run
361 trap cleanup EXIT
363 setup_prepare
364 setup_wait
365 test_all
367 exit $EXIT_STATUS