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