brintos

brintos / linux-shallow public Read only

0
0
Text · 16.0 KiB · f493009 Raw
505 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 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) HW48# =============================================================================49# |                                                             |  (likely) SW50# |                                                             |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 95ALL_TESTS="96	ping_ipv697	arp_decap98"99NUM_NETIFS=6100source lib.sh101 102require_command $ARPING103 104hx_create()105{106	local vrf_name=$1; shift107	local if_name=$1; shift108	local ip_addr=$1; shift109	local gw_ip=$1; shift110 111	vrf_create $vrf_name112	ip link set dev $if_name master $vrf_name113	ip link set dev $vrf_name up114	ip link set dev $if_name up115 116	ip address add $ip_addr/64 dev $if_name117	ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \118		dev $if_name119	ip route add default vrf $vrf_name nexthop via $gw_ip120}121export -f hx_create122 123hx_destroy()124{125	local vrf_name=$1; shift126	local if_name=$1; shift127	local ip_addr=$1; shift128	local gw_ip=$1; shift129 130	ip route del default vrf $vrf_name nexthop via $gw_ip131	ip neigh del $gw_ip dev $if_name132	ip address del $ip_addr/64 dev $if_name133 134	ip link set dev $if_name down135	vrf_destroy $vrf_name136}137 138h1_create()139{140	hx_create "vrf-h1" $h1 2001:db8:1::1 2001:db8:1::3141}142 143h1_destroy()144{145	hx_destroy "vrf-h1" $h1 2001:db8:1::1 2001:db8:1::3146}147 148h2_create()149{150	hx_create "vrf-h2" $h2 2001:db8:2::1 2001:db8:2::3151}152 153h2_destroy()154{155	hx_destroy "vrf-h2" $h2 2001:db8:2::1 2001:db8:2::3156}157 158switch_create()159{160	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \161		mcast_snooping 0162	# Make sure the bridge uses the MAC address of the local port and not163	# that of the VxLAN's device.164	ip link set dev br1 address $(mac_get $swp1)165	ip link set dev br1 up166 167	ip link set dev $rp1 up168	ip address add dev $rp1 2001:db8:4::1/64169	ip route add 2001:db8:3::2/128 nexthop via 2001:db8:4::2170 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 100174	ip link set dev vx10 up175 176	ip link set dev vx10 master br1177	bridge vlan add vid 10 dev vx10 pvid untagged178 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 100182	ip link set dev vx20 up183 184	ip link set dev vx20 master br1185	bridge vlan add vid 20 dev vx20 pvid untagged186 187	ip link set dev $swp1 master br1188	ip link set dev $swp1 up189	bridge vlan add vid 10 dev $swp1 pvid untagged190 191	ip link set dev $swp2 master br1192	ip link set dev $swp2 up193	bridge vlan add vid 20 dev $swp2 pvid untagged194 195	ip address add 2001:db8:3::1/128 dev lo196 197	# Create SVIs198	vrf_create "vrf-green"199	ip link set dev vrf-green up200 201	ip link add link br1 name vlan10 up master vrf-green type vlan id 10202	ip address add 2001:db8:1::2/64 dev vlan10203	ip link add link vlan10 name vlan10-v up master vrf-green \204		address 00:00:5e:00:01:01 type macvlan mode private205	ip address add 2001:db8:1::3/64 dev vlan10-v206 207	ip link add link br1 name vlan20 up master vrf-green type vlan id 20208	ip address add 2001:db8:2::2/64 dev vlan20209	ip link add link vlan20 name vlan20-v up master vrf-green \210		address 00:00:5e:00:01:01 type macvlan mode private211	ip address add 2001:db8:2::3/64 dev vlan20-v212 213	bridge vlan add vid 10 dev br1 self214	bridge vlan add vid 20 dev br1 self215 216	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10217	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20218 219}220 221switch_destroy()222{223	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20224	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10225 226	bridge vlan del vid 20 dev br1 self227	bridge vlan del vid 10 dev br1 self228 229	ip link del dev vlan20230 231	ip link del dev vlan10232 233	vrf_destroy "vrf-green"234 235	ip address del 2001:db8:3::1/128 dev lo236 237	bridge vlan del vid 20 dev $swp2238	ip link set dev $swp2 down239	ip link set dev $swp2 nomaster240 241	bridge vlan del vid 10 dev $swp1242	ip link set dev $swp1 down243	ip link set dev $swp1 nomaster244 245	bridge vlan del vid 20 dev vx20246	ip link set dev vx20 nomaster247 248	ip link set dev vx20 down249	ip link del dev vx20250 251	bridge vlan del vid 10 dev vx10252	ip link set dev vx10 nomaster253 254	ip link set dev vx10 down255	ip link del dev vx10256 257	ip route del 2001:db8:3::2 nexthop via 2001:db8:4::2258	ip address del dev $rp1 2001:db8:4::1/64259	ip link set dev $rp1 down260 261	ip link set dev br1 down262	ip link del dev br1263}264 265spine_create()266{267	vrf_create "vrf-spine"268	ip link set dev $rp2 master vrf-spine269	ip link set dev v1 master vrf-spine270	ip link set dev vrf-spine up271	ip link set dev $rp2 up272	ip link set dev v1 up273 274	ip address add 2001:db8:4::2/64 dev $rp2275	ip address add 2001:db8:5::2/64 dev v1276 277	ip route add 2001:db8:3::1/128 vrf vrf-spine nexthop via \278		2001:db8:4::1279	ip route add 2001:db8:3::2/128 vrf vrf-spine nexthop via \280		2001:db8:5::1281}282 283spine_destroy()284{285	ip route del 2001:db8:3::2/128 vrf vrf-spine nexthop via \286		2001:db8:5::1287	ip route del 2001:db8:3::1/128 vrf vrf-spine nexthop via \288		2001:db8:4::1289 290	ip address del 2001:db8:5::2/64 dev v1291	ip address del 2001:db8:4::2/64 dev $rp2292 293	ip link set dev v1 down294	ip link set dev $rp2 down295	vrf_destroy "vrf-spine"296}297 298ns_h1_create()299{300	hx_create "vrf-h1" w2 2001:db8:1::4 2001:db8:1::3301}302export -f ns_h1_create303 304ns_h2_create()305{306	hx_create "vrf-h2" w4 2001:db8:2::4 2001:db8:2::3307}308export -f ns_h2_create309 310ns_switch_create()311{312	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \313		mcast_snooping 0314	ip link set dev br1 up315 316	ip link set dev v2 up317	ip address add dev v2 2001:db8:5::1/64318	ip route add 2001:db8:3::1 nexthop via 2001:db8:5::2319 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 100323	ip link set dev vx10 up324 325	ip link set dev vx10 master br1326	bridge vlan add vid 10 dev vx10 pvid untagged327 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 100331	ip link set dev vx20 up332 333	ip link set dev vx20 master br1334	bridge vlan add vid 20 dev vx20 pvid untagged335 336	ip link set dev w1 master br1337	ip link set dev w1 up338	bridge vlan add vid 10 dev w1 pvid untagged339 340	ip link set dev w3 master br1341	ip link set dev w3 up342	bridge vlan add vid 20 dev w3 pvid untagged343 344	ip address add 2001:db8:3::2/128 dev lo345 346	# Create SVIs347	vrf_create "vrf-green"348	ip link set dev vrf-green up349 350	ip link add link br1 name vlan10 up master vrf-green type vlan id 10351	ip address add 2001:db8:1::3/64 dev vlan10352	ip link add link vlan10 name vlan10-v up master vrf-green \353		address 00:00:5e:00:01:01 type macvlan mode private354	ip address add 2001:db8:1::3/64 dev vlan10-v355 356	ip link add link br1 name vlan20 up master vrf-green type vlan id 20357	ip address add 2001:db8:2::3/64 dev vlan20358	ip link add link vlan20 name vlan20-v up master vrf-green \359		address 00:00:5e:00:01:01 type macvlan mode private360	ip address add 2001:db8:2::3/64 dev vlan20-v361 362	bridge vlan add vid 10 dev br1 self363	bridge vlan add vid 20 dev br1 self364 365	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10366	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20367}368export -f ns_switch_create369 370ns_init()371{372	ip link add name w1 type veth peer name w2373	ip link add name w3 type veth peer name w4374 375	ip link set dev lo up376 377	ns_h1_create378	ns_h2_create379	ns_switch_create380}381export -f ns_init382 383ns1_create()384{385	ip netns add ns1386	ip link set dev v2 netns ns1387	in_ns ns1 ns_init388}389 390ns1_destroy()391{392	ip netns exec ns1 ip link set dev v2 netns 1393	ip netns del ns1394}395 396macs_populate()397{398	local mac1=$1; shift399	local mac2=$1; shift400	local ip1=$1; shift401	local ip2=$1; shift402	local dst=$1; shift403 404	bridge fdb add $mac1 dev vx10 self master extern_learn static \405		dst $dst vlan 10406	bridge fdb add $mac2 dev vx20 self master extern_learn static \407		dst $dst vlan 20408 409	ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \410		extern_learn411	ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \412		extern_learn413}414export -f macs_populate415 416macs_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::2425	in_ns ns1 macs_populate $h1_mac $h2_mac 2001:db8:1::1 2001:db8:2::1 \426		2001:db8:3::1427}428 429setup_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_prepare441	forwarding_enable442 443	h1_create444	h2_create445	switch_create446 447	ip link add name v1 type veth peer name v2448	spine_create449	ns1_create450	in_ns ns1 forwarding_enable451 452	macs_initialize453}454 455cleanup()456{457	pre_cleanup458 459	ns1_destroy460	spine_destroy461	ip link del dev v1462 463	switch_destroy464	h2_destroy465	h1_destroy466 467	forwarding_restore468	vrf_cleanup469}470 471ping_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 480arp_decap()481{482	# Repeat the ping tests, but without populating the neighbours. This483	# makes sure we correctly decapsulate ARP packets484	log_info "deleting neighbours from vlan interfaces"485 486	ip neigh del 2001:db8:1::4 dev vlan10487	ip neigh del 2001:db8:2::4 dev vlan20488 489	ping_ipv6490 491	ip neigh replace 2001:db8:1::4 lladdr $(in_ns ns1 mac_get w2) \492		nud noarp dev vlan10 extern_learn493	ip neigh replace 2001:db8:2::4 lladdr $(in_ns ns1 mac_get w4) \494		nud noarp dev vlan20 extern_learn495}496 497trap cleanup EXIT498 499setup_prepare500setup_wait501 502tests_run503 504exit $EXIT_STATUS505