~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/forwarding/dual_vxlan_bridge.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0
  3 
  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 # +-----------------------------------+   +-----------------------------------+
 75 
 76 : ${VXPORT:=4789}
 77 export VXPORT
 78 
 79 : ${ALL_TESTS:="
 80         ping_ipv4
 81     "}
 82 
 83 NUM_NETIFS=6
 84 source lib.sh
 85 
 86 h1_create()
 87 {
 88         simple_if_init $h1
 89         tc qdisc add dev $h1 clsact
 90         vlan_create $h1 10 v$h1 192.0.2.1/28
 91 }
 92 
 93 h1_destroy()
 94 {
 95         vlan_destroy $h1 10
 96         tc qdisc del dev $h1 clsact
 97         simple_if_fini $h1
 98 }
 99 
100 h2_create()
101 {
102         simple_if_init $h2
103         tc qdisc add dev $h2 clsact
104         vlan_create $h2 20 v$h2 192.0.2.2/28
105 }
106 
107 h2_destroy()
108 {
109         vlan_destroy $h2 20
110         tc qdisc del dev $h2 clsact
111         simple_if_fini $h2
112 }
113 
114 rp1_set_addr()
115 {
116         ip address add dev $rp1 192.0.2.17/28
117 
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
120 }
121 
122 rp1_unset_addr()
123 {
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
126 
127         ip address del dev $rp1 192.0.2.17/28
128 }
129 
130 switch_create()
131 {
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
140 
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
147 
148         ip link set dev $rp1 up
149         rp1_set_addr
150 
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
155 
156         ip link set dev vx100 master br1
157         bridge vlan add vid 100 dev vx100 pvid untagged
158 
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
162 
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
167 
168         ip link set dev vx200 master br2
169 
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
174 
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
177 }
178 
179 switch_destroy()
180 {
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
183 
184         ip link set dev vx200 nomaster
185         ip link set dev vx200 down
186         ip link del dev vx200
187 
188         ip link del dev $swp2.20
189         ip link set dev $swp2 down
190         ip link set dev $swp2 nomaster
191 
192         bridge vlan del vid 100 dev $swp1
193         ip link set dev $swp1 down
194         ip link set dev $swp1 nomaster
195 
196         ip link set dev vx100 nomaster
197         ip link set dev vx100 down
198         ip link del dev vx100
199 
200         rp1_unset_addr
201         ip link set dev $rp1 down
202 
203         ip link set dev br2 down
204         ip link del dev br2
205 
206         ip link set dev br1 down
207         ip link del dev br1
208 }
209 
210 vrp2_create()
211 {
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
216 }
217 
218 vrp2_destroy()
219 {
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
224 }
225 
226 ns_init_common()
227 {
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
236 
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
240 
241         ip link add name br3 type bridge vlan_filtering 0
242         ip link set dev br3 up
243 
244         ip link add name w1 type veth peer name w2
245 
246         ip link set dev w1 master br3
247         ip link set dev w1 up
248 
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
254 
255         ip link set dev $vxlan_name master br3
256         tc qdisc add dev $vxlan_name clsact
257 
258         simple_if_init w2
259         vlan_create w2 $vlan_id vw2 $host_addr/28
260 
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
263 }
264 export -f ns_init_common
265 
266 ns1_create()
267 {
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
273 
274         in_ns ns1 bridge vlan add vid 100 dev vx100 pvid untagged
275 }
276 
277 ns1_destroy()
278 {
279         ip netns exec ns1 ip link set dev v2 netns 1
280         ip netns del ns1
281 }
282 
283 ns2_create()
284 {
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
290 
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
294 }
295 
296 ns2_destroy()
297 {
298         ip netns exec ns2 ip link set dev v4 netns 1
299         ip netns del ns2
300 }
301 
302 setup_prepare()
303 {
304         h1=${NETIFS[p1]}
305         swp1=${NETIFS[p2]}
306 
307         swp2=${NETIFS[p3]}
308         h2=${NETIFS[p4]}
309 
310         rp1=${NETIFS[p5]}
311         rp2=${NETIFS[p6]}
312 
313         vrf_prepare
314         forwarding_enable
315 
316         h1_create
317         h2_create
318         switch_create
319 
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
325 
326         r1_mac=$(in_ns ns1 mac_get w2)
327         r2_mac=$(in_ns ns2 mac_get w2)
328         h2_mac=$(mac_get $h2)
329 }
330 
331 cleanup()
332 {
333         pre_cleanup
334 
335         ns2_destroy
336         ns1_destroy
337         vrp2_destroy
338         ip link del dev v3
339         ip link del dev v1
340 
341         switch_destroy
342         h2_destroy
343         h1_destroy
344 
345         forwarding_restore
346         vrf_cleanup
347 }
348 
349 ping_ipv4()
350 {
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"
353 }
354 
355 test_all()
356 {
357         echo "Running tests with UDP port $VXPORT"
358         tests_run
359 }
360 
361 trap cleanup EXIT
362 
363 setup_prepare
364 setup_wait
365 test_all
366 
367 exit $EXIT_STATUS

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php