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

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/forwarding/vxlan_asymmetric_ipv6.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 # |                         vrf-h1 |            |                      vrf-h2 |
  6 # |    + $h1                       |            | + $h2                       |
  7 # |    | 2001:db8:1::1/64          |            | | 2001:db8:2::1/64          |
  8 # |    | default via 2001:db8:1::3 |            | | default via 2001:db8:2::3 |
  9 # +----|---------------------------+            +-|---------------------------+
 10 #      |                                          |
 11 # +----|------------------------------------------|---------------------------+
 12 # | SW |                                          |                           |
 13 # | +--|------------------------------------------|-------------------------+ |
 14 # | |  + $swp1                         br1        + $swp2                   | |
 15 # | |     vid 10 pvid untagged                       vid 20 pvid untagged   | |
 16 # | |                                                                       | |
 17 # | |  + vx10                                     + vx20                    | |
 18 # | |    local 2001:db8:3::1                        local 2001:db8:3::1     | |
 19 # | |    remote 2001:db8:3::2                       remote 2001:db8:3::2    | |
 20 # | |    id 1000                                    id 2000                 | |
 21 # | |    dstport 4789                               dstport 4789            | |
 22 # | |    vid 10 pvid untagged                       vid 20 pvid untagged    | |
 23 # | |                                                                       | |
 24 # | +-----------------------------------+-----------------------------------+ |
 25 # |                                     |                                     |
 26 # | +-----------------------------------|-----------------------------------+ |
 27 # | |                                   |                                   | |
 28 # | |  +--------------------------------+--------------------------------+  | |
 29 # | |  |                                                                 |  | |
 30 # | |  + vlan10                                                   vlan20 +  | |
 31 # | |  | 2001:db8:1::2/64                               2001:db8:2::2/64 |  | |
 32 # | |  |                                                                 |  | |
 33 # | |  + vlan10-v (macvlan)                           vlan20-v (macvlan) +  | |
 34 # | |    2001:db8:1::3/64                               2001:db8:2::3/64    | |
 35 # | |    00:00:5e:00:01:01                             00:00:5e:00:01:01    | |
 36 # | |                               vrf-green                               | |
 37 # | +-----------------------------------------------------------------------+ |
 38 # |                                                                           |
 39 # |    + $rp1                                       +lo                       |
 40 # |    | 2001:db8:4::1/64                            2001:db8:3::1/128        |
 41 # +----|----------------------------------------------------------------------+
 42 #      |
 43 # +----|--------------------------------------------------------+
 44 # |    |                            vrf-spine                   |
 45 # |    + $rp2                                                   |
 46 # |      2001:db8:4::2/64                                       |
 47 # |                                                             |   (maybe) HW
 48 # =============================================================================
 49 # |                                                             |  (likely) SW
 50 # |                                                             |
 51 # |    + v1 (veth)                                              |
 52 # |    | 2001:db8:5::2/64                                       |
 53 # +----|--------------------------------------------------------+
 54 #      |
 55 # +----|----------------------------------------------------------------------+
 56 # |    + v2 (veth)                                  +lo           NS1 (netns) |
 57 # |      2001:db8:5::1/64                            2001:db8:3::2/128        |
 58 # |                                                                           |
 59 # | +-----------------------------------------------------------------------+ |
 60 # | |                               vrf-green                               | |
 61 # | |  + vlan10-v (macvlan)                           vlan20-v (macvlan) +  | |
 62 # | |  | 2001:db8:1::3/64                               2001:db8:2::3/64 |  | |
 63 # | |  | 00:00:5e:00:01:01                             00:00:5e:00:01:01 |  | |
 64 # | |  |                                                                 |  | |
 65 # | |  + vlan10                                                   vlan20 +  | |
 66 # | |  | 2001:db8:1::3/64                               2001:db8:2::3/64 |  | |
 67 # | |  |                                                                 |  | |
 68 # | |  +--------------------------------+--------------------------------+  | |
 69 # | |                                   |                                   | |
 70 # | +-----------------------------------|-----------------------------------+ |
 71 # |                                     |                                     |
 72 # | +-----------------------------------+-----------------------------------+ |
 73 # | |                                                                       | |
 74 # | |  + vx10                                     + vx20                    | |
 75 # | |    local 2001:db8:3::2                        local 2001:db8:3::2     | |
 76 # | |    remote 2001:db8:3::1                       remote 2001:db8:3::1    | |
 77 # | |    id 1000                                    id 2000                 | |
 78 # | |    dstport 4789                               dstport 4789            | |
 79 # | |    vid 10 pvid untagged                       vid 20 pvid untagged    | |
 80 # | |                                                                       | |
 81 # | |  + w1 (veth)                                + w3 (veth)               | |
 82 # | |  | vid 10 pvid untagged          br1        | vid 20 pvid untagged    | |
 83 # | +--|------------------------------------------|-------------------------+ |
 84 # |    |                                          |                           |
 85 # |    |                                          |                           |
 86 # | +--|----------------------+                +--|-------------------------+ |
 87 # | |  |               vrf-h1 |                |  |                  vrf-h2 | |
 88 # | |  + w2 (veth)            |                |  + w4 (veth)               | |
 89 # | |    2001:db8:1::4/64     |                |    2001:db8:2::4/64        | |
 90 # | |    default via          |                |    default via             | |
 91 # | |    2001:db8:1::3/64     |                |    2001:db8:2::3/64        | |
 92 # | +-------------------------+                +----------------------------+ |
 93 # +---------------------------------------------------------------------------+
 94 
 95 ALL_TESTS="
 96         ping_ipv6
 97         arp_decap
 98 "
 99 NUM_NETIFS=6
100 source lib.sh
101 
102 require_command $ARPING
103 
104 hx_create()
105 {
106         local vrf_name=$1; shift
107         local if_name=$1; shift
108         local ip_addr=$1; shift
109         local gw_ip=$1; shift
110 
111         vrf_create $vrf_name
112         ip link set dev $if_name master $vrf_name
113         ip link set dev $vrf_name up
114         ip link set dev $if_name up
115 
116         ip address add $ip_addr/64 dev $if_name
117         ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \
118                 dev $if_name
119         ip route add default vrf $vrf_name nexthop via $gw_ip
120 }
121 export -f hx_create
122 
123 hx_destroy()
124 {
125         local vrf_name=$1; shift
126         local if_name=$1; shift
127         local ip_addr=$1; shift
128         local gw_ip=$1; shift
129 
130         ip route del default vrf $vrf_name nexthop via $gw_ip
131         ip neigh del $gw_ip dev $if_name
132         ip address del $ip_addr/64 dev $if_name
133 
134         ip link set dev $if_name down
135         vrf_destroy $vrf_name
136 }
137 
138 h1_create()
139 {
140         hx_create "vrf-h1" $h1 2001:db8:1::1 2001:db8:1::3
141 }
142 
143 h1_destroy()
144 {
145         hx_destroy "vrf-h1" $h1 2001:db8:1::1 2001:db8:1::3
146 }
147 
148 h2_create()
149 {
150         hx_create "vrf-h2" $h2 2001:db8:2::1 2001:db8:2::3
151 }
152 
153 h2_destroy()
154 {
155         hx_destroy "vrf-h2" $h2 2001:db8:2::1 2001:db8:2::3
156 }
157 
158 switch_create()
159 {
160         ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \
161                 mcast_snooping 0
162         # Make sure the bridge uses the MAC address of the local port and not
163         # that of the VxLAN's device.
164         ip link set dev br1 address $(mac_get $swp1)
165         ip link set dev br1 up
166 
167         ip link set dev $rp1 up
168         ip address add dev $rp1 2001:db8:4::1/64
169         ip route add 2001:db8:3::2/128 nexthop via 2001:db8:4::2
170 
171         ip link add name vx10 type vxlan id 1000                \
172                 local 2001:db8:3::1 remote 2001:db8:3::2 dstport 4789   \
173                 nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100
174         ip link set dev vx10 up
175 
176         ip link set dev vx10 master br1
177         bridge vlan add vid 10 dev vx10 pvid untagged
178 
179         ip link add name vx20 type vxlan id 2000                \
180                 local 2001:db8:3::1 remote 2001:db8:3::2 dstport 4789   \
181                 nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100
182         ip link set dev vx20 up
183 
184         ip link set dev vx20 master br1
185         bridge vlan add vid 20 dev vx20 pvid untagged
186 
187         ip link set dev $swp1 master br1
188         ip link set dev $swp1 up
189         bridge vlan add vid 10 dev $swp1 pvid untagged
190 
191         ip link set dev $swp2 master br1
192         ip link set dev $swp2 up
193         bridge vlan add vid 20 dev $swp2 pvid untagged
194 
195         ip address add 2001:db8:3::1/128 dev lo
196 
197         # Create SVIs
198         vrf_create "vrf-green"
199         ip link set dev vrf-green up
200 
201         ip link add link br1 name vlan10 up master vrf-green type vlan id 10
202         ip address add 2001:db8:1::2/64 dev vlan10
203         ip link add link vlan10 name vlan10-v up master vrf-green \
204                 address 00:00:5e:00:01:01 type macvlan mode private
205         ip address add 2001:db8:1::3/64 dev vlan10-v
206 
207         ip link add link br1 name vlan20 up master vrf-green type vlan id 20
208         ip address add 2001:db8:2::2/64 dev vlan20
209         ip link add link vlan20 name vlan20-v up master vrf-green \
210                 address 00:00:5e:00:01:01 type macvlan mode private
211         ip address add 2001:db8:2::3/64 dev vlan20-v
212 
213         bridge vlan add vid 10 dev br1 self
214         bridge vlan add vid 20 dev br1 self
215 
216         bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
217         bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
218 
219 }
220 
221 switch_destroy()
222 {
223         bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20
224         bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10
225 
226         bridge vlan del vid 20 dev br1 self
227         bridge vlan del vid 10 dev br1 self
228 
229         ip link del dev vlan20
230 
231         ip link del dev vlan10
232 
233         vrf_destroy "vrf-green"
234 
235         ip address del 2001:db8:3::1/128 dev lo
236 
237         bridge vlan del vid 20 dev $swp2
238         ip link set dev $swp2 down
239         ip link set dev $swp2 nomaster
240 
241         bridge vlan del vid 10 dev $swp1
242         ip link set dev $swp1 down
243         ip link set dev $swp1 nomaster
244 
245         bridge vlan del vid 20 dev vx20
246         ip link set dev vx20 nomaster
247 
248         ip link set dev vx20 down
249         ip link del dev vx20
250 
251         bridge vlan del vid 10 dev vx10
252         ip link set dev vx10 nomaster
253 
254         ip link set dev vx10 down
255         ip link del dev vx10
256 
257         ip route del 2001:db8:3::2 nexthop via 2001:db8:4::2
258         ip address del dev $rp1 2001:db8:4::1/64
259         ip link set dev $rp1 down
260 
261         ip link set dev br1 down
262         ip link del dev br1
263 }
264 
265 spine_create()
266 {
267         vrf_create "vrf-spine"
268         ip link set dev $rp2 master vrf-spine
269         ip link set dev v1 master vrf-spine
270         ip link set dev vrf-spine up
271         ip link set dev $rp2 up
272         ip link set dev v1 up
273 
274         ip address add 2001:db8:4::2/64 dev $rp2
275         ip address add 2001:db8:5::2/64 dev v1
276 
277         ip route add 2001:db8:3::1/128 vrf vrf-spine nexthop via \
278                 2001:db8:4::1
279         ip route add 2001:db8:3::2/128 vrf vrf-spine nexthop via \
280                 2001:db8:5::1
281 }
282 
283 spine_destroy()
284 {
285         ip route del 2001:db8:3::2/128 vrf vrf-spine nexthop via \
286                 2001:db8:5::1
287         ip route del 2001:db8:3::1/128 vrf vrf-spine nexthop via \
288                 2001:db8:4::1
289 
290         ip address del 2001:db8:5::2/64 dev v1
291         ip address del 2001:db8:4::2/64 dev $rp2
292 
293         ip link set dev v1 down
294         ip link set dev $rp2 down
295         vrf_destroy "vrf-spine"
296 }
297 
298 ns_h1_create()
299 {
300         hx_create "vrf-h1" w2 2001:db8:1::4 2001:db8:1::3
301 }
302 export -f ns_h1_create
303 
304 ns_h2_create()
305 {
306         hx_create "vrf-h2" w4 2001:db8:2::4 2001:db8:2::3
307 }
308 export -f ns_h2_create
309 
310 ns_switch_create()
311 {
312         ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \
313                 mcast_snooping 0
314         ip link set dev br1 up
315 
316         ip link set dev v2 up
317         ip address add dev v2 2001:db8:5::1/64
318         ip route add 2001:db8:3::1 nexthop via 2001:db8:5::2
319 
320         ip link add name vx10 type vxlan id 1000                \
321                 local 2001:db8:3::2 remote 2001:db8:3::1 dstport 4789   \
322                 nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100
323         ip link set dev vx10 up
324 
325         ip link set dev vx10 master br1
326         bridge vlan add vid 10 dev vx10 pvid untagged
327 
328         ip link add name vx20 type vxlan id 2000                \
329                 local 2001:db8:3::2 remote 2001:db8:3::1 dstport 4789   \
330                 nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100
331         ip link set dev vx20 up
332 
333         ip link set dev vx20 master br1
334         bridge vlan add vid 20 dev vx20 pvid untagged
335 
336         ip link set dev w1 master br1
337         ip link set dev w1 up
338         bridge vlan add vid 10 dev w1 pvid untagged
339 
340         ip link set dev w3 master br1
341         ip link set dev w3 up
342         bridge vlan add vid 20 dev w3 pvid untagged
343 
344         ip address add 2001:db8:3::2/128 dev lo
345 
346         # Create SVIs
347         vrf_create "vrf-green"
348         ip link set dev vrf-green up
349 
350         ip link add link br1 name vlan10 up master vrf-green type vlan id 10
351         ip address add 2001:db8:1::3/64 dev vlan10
352         ip link add link vlan10 name vlan10-v up master vrf-green \
353                 address 00:00:5e:00:01:01 type macvlan mode private
354         ip address add 2001:db8:1::3/64 dev vlan10-v
355 
356         ip link add link br1 name vlan20 up master vrf-green type vlan id 20
357         ip address add 2001:db8:2::3/64 dev vlan20
358         ip link add link vlan20 name vlan20-v up master vrf-green \
359                 address 00:00:5e:00:01:01 type macvlan mode private
360         ip address add 2001:db8:2::3/64 dev vlan20-v
361 
362         bridge vlan add vid 10 dev br1 self
363         bridge vlan add vid 20 dev br1 self
364 
365         bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
366         bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
367 }
368 export -f ns_switch_create
369 
370 ns_init()
371 {
372         ip link add name w1 type veth peer name w2
373         ip link add name w3 type veth peer name w4
374 
375         ip link set dev lo up
376 
377         ns_h1_create
378         ns_h2_create
379         ns_switch_create
380 }
381 export -f ns_init
382 
383 ns1_create()
384 {
385         ip netns add ns1
386         ip link set dev v2 netns ns1
387         in_ns ns1 ns_init
388 }
389 
390 ns1_destroy()
391 {
392         ip netns exec ns1 ip link set dev v2 netns 1
393         ip netns del ns1
394 }
395 
396 macs_populate()
397 {
398         local mac1=$1; shift
399         local mac2=$1; shift
400         local ip1=$1; shift
401         local ip2=$1; shift
402         local dst=$1; shift
403 
404         bridge fdb add $mac1 dev vx10 self master extern_learn static \
405                 dst $dst vlan 10
406         bridge fdb add $mac2 dev vx20 self master extern_learn static \
407                 dst $dst vlan 20
408 
409         ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \
410                 extern_learn
411         ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \
412                 extern_learn
413 }
414 export -f macs_populate
415 
416 macs_initialize()
417 {
418         local h1_ns_mac=$(in_ns ns1 mac_get w2)
419         local h2_ns_mac=$(in_ns ns1 mac_get w4)
420         local h1_mac=$(mac_get $h1)
421         local h2_mac=$(mac_get $h2)
422 
423         macs_populate $h1_ns_mac $h2_ns_mac 2001:db8:1::4 2001:db8:2::4 \
424                 2001:db8:3::2
425         in_ns ns1 macs_populate $h1_mac $h2_mac 2001:db8:1::1 2001:db8:2::1 \
426                 2001:db8:3::1
427 }
428 
429 setup_prepare()
430 {
431         h1=${NETIFS[p1]}
432         swp1=${NETIFS[p2]}
433 
434         swp2=${NETIFS[p3]}
435         h2=${NETIFS[p4]}
436 
437         rp1=${NETIFS[p5]}
438         rp2=${NETIFS[p6]}
439 
440         vrf_prepare
441         forwarding_enable
442 
443         h1_create
444         h2_create
445         switch_create
446 
447         ip link add name v1 type veth peer name v2
448         spine_create
449         ns1_create
450         in_ns ns1 forwarding_enable
451 
452         macs_initialize
453 }
454 
455 cleanup()
456 {
457         pre_cleanup
458 
459         ns1_destroy
460         spine_destroy
461         ip link del dev v1
462 
463         switch_destroy
464         h2_destroy
465         h1_destroy
466 
467         forwarding_restore
468         vrf_cleanup
469 }
470 
471 ping_ipv6()
472 {
473         ping6_test $h1 2001:db8:2::1 ": local->local vid 10->vid 20"
474         ping6_test $h1 2001:db8:1::4 ": local->remote vid 10->vid 10"
475         ping6_test $h2 2001:db8:2::4 ": local->remote vid 20->vid 20"
476         ping6_test $h1 2001:db8:2::4 ": local->remote vid 10->vid 20"
477         ping6_test $h2 2001:db8:1::4 ": local->remote vid 20->vid 10"
478 }
479 
480 arp_decap()
481 {
482         # Repeat the ping tests, but without populating the neighbours. This
483         # makes sure we correctly decapsulate ARP packets
484         log_info "deleting neighbours from vlan interfaces"
485 
486         ip neigh del 2001:db8:1::4 dev vlan10
487         ip neigh del 2001:db8:2::4 dev vlan20
488 
489         ping_ipv6
490 
491         ip neigh replace 2001:db8:1::4 lladdr $(in_ns ns1 mac_get w2) \
492                 nud noarp dev vlan10 extern_learn
493         ip neigh replace 2001:db8:2::4 lladdr $(in_ns ns1 mac_get w4) \
494                 nud noarp dev vlan20 extern_learn
495 }
496 
497 trap cleanup EXIT
498 
499 setup_prepare
500 setup_wait
501 
502 tests_run
503 
504 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