brintos

brintos / linux-shallow public Read only

0
0
Text · 18.1 KiB · 5d97fa3 Raw
562 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 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) HW55# =============================================================================56# |                                                             |  (likely) SW57# |                                                             |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_ipv4110"111NUM_NETIFS=6112source lib.sh113 114hx_create()115{116	local vrf_name=$1; shift117	local if_name=$1; shift118	local ip_addr=$1; shift119	local gw_ip=$1; shift120 121	vrf_create $vrf_name122	ip link set dev $if_name master $vrf_name123	ip link set dev $vrf_name up124	ip link set dev $if_name up125 126	ip address add $ip_addr/24 dev $if_name127	ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \128		dev $if_name129	ip route add default vrf $vrf_name nexthop via $gw_ip130}131export -f hx_create132 133hx_destroy()134{135	local vrf_name=$1; shift136	local if_name=$1; shift137	local ip_addr=$1; shift138	local gw_ip=$1; shift139 140	ip route del default vrf $vrf_name nexthop via $gw_ip141	ip neigh del $gw_ip dev $if_name142	ip address del $ip_addr/24 dev $if_name143 144	ip link set dev $if_name down145	vrf_destroy $vrf_name146}147 148h1_create()149{150	hx_create "vrf-h1" $h1 10.1.1.101 10.1.1.1151}152 153h1_destroy()154{155	hx_destroy "vrf-h1" $h1 10.1.1.101 10.1.1.1156}157 158h2_create()159{160	hx_create "vrf-h2" $h2 10.1.2.101 10.1.2.1161}162 163h2_destroy()164{165	hx_destroy "vrf-h2" $h2 10.1.2.101 10.1.2.1166}167 168switch_create()169{170	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \171		mcast_snooping 0172	# Make sure the bridge uses the MAC address of the local port and not173	# that of the VxLAN's device.174	ip link set dev br1 address $(mac_get $swp1)175	ip link set dev br1 up176 177	ip link set dev $rp1 up178	ip address add dev $rp1 192.0.2.1/24179	ip route add 10.0.0.2/32 nexthop via 192.0.2.2180 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 100184	ip link set dev vx10 up185 186	ip link set dev vx10 master br1187	bridge vlan add vid 10 dev vx10 pvid untagged188 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 100192	ip link set dev vx20 up193 194	ip link set dev vx20 master br1195	bridge vlan add vid 20 dev vx20 pvid untagged196 197	ip link set dev $swp1 master br1198	ip link set dev $swp1 up199	bridge vlan add vid 10 dev $swp1 pvid untagged200 201	ip link set dev $swp2 master br1202	ip link set dev $swp2 up203	bridge vlan add vid 20 dev $swp2 pvid untagged204 205	ip link add name vx4001 type vxlan id 104001		\206		local 10.0.0.1 dstport 4789			\207		nolearning noudpcsum tos inherit ttl 100208	ip link set dev vx4001 up209 210	ip link set dev vx4001 master br1211	bridge vlan add vid 4001 dev vx4001 pvid untagged212 213	ip address add 10.0.0.1/32 dev lo214 215	# Create SVIs216	vrf_create "vrf-green"217	ip link set dev vrf-green up218 219	ip link add link br1 name vlan10 up master vrf-green type vlan id 10220	ip address add 10.1.1.11/24 dev vlan10221	ip link add link vlan10 name vlan10-v up master vrf-green \222		address 00:00:5e:00:01:01 type macvlan mode private223	ip address add 10.1.1.1/24 dev vlan10-v224 225	ip link add link br1 name vlan20 up master vrf-green type vlan id 20226	ip address add 10.1.2.11/24 dev vlan20227	ip link add link vlan20 name vlan20-v up master vrf-green \228		address 00:00:5e:00:01:01 type macvlan mode private229	ip address add 10.1.2.1/24 dev vlan20-v230 231	ip link add link br1 name vlan4001 up master vrf-green \232		type vlan id 4001233 234	bridge vlan add vid 10 dev br1 self235	bridge vlan add vid 20 dev br1 self236	bridge vlan add vid 4001 dev br1 self237 238	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10239	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20240 241	sysctl_set net.ipv4.conf.all.rp_filter 0242	sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0243	sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0244}245 246switch_destroy()247{248	sysctl_restore net.ipv4.conf.all.rp_filter249 250	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20251	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10252 253	bridge vlan del vid 4001 dev br1 self254	bridge vlan del vid 20 dev br1 self255	bridge vlan del vid 10 dev br1 self256 257	ip link del dev vlan4001258 259	ip link del dev vlan20260 261	ip link del dev vlan10262 263	vrf_destroy "vrf-green"264 265	ip address del 10.0.0.1/32 dev lo266 267	bridge vlan del vid 20 dev $swp2268	ip link set dev $swp2 down269	ip link set dev $swp2 nomaster270 271	bridge vlan del vid 10 dev $swp1272	ip link set dev $swp1 down273	ip link set dev $swp1 nomaster274 275	bridge vlan del vid 4001 dev vx4001276	ip link set dev vx4001 nomaster277 278	ip link set dev vx4001 down279	ip link del dev vx4001280 281	bridge vlan del vid 20 dev vx20282	ip link set dev vx20 nomaster283 284	ip link set dev vx20 down285	ip link del dev vx20286 287	bridge vlan del vid 10 dev vx10288	ip link set dev vx10 nomaster289 290	ip link set dev vx10 down291	ip link del dev vx10292 293	ip route del 10.0.0.2/32 nexthop via 192.0.2.2294	ip address del dev $rp1 192.0.2.1/24295	ip link set dev $rp1 down296 297	ip link set dev br1 down298	ip link del dev br1299}300 301spine_create()302{303	vrf_create "vrf-spine"304	ip link set dev $rp2 master vrf-spine305	ip link set dev v1 master vrf-spine306	ip link set dev vrf-spine up307	ip link set dev $rp2 up308	ip link set dev v1 up309 310	ip address add 192.0.2.2/24 dev $rp2311	ip address add 192.0.3.2/24 dev v1312 313	ip route add 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1314	ip route add 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1315}316 317spine_destroy()318{319	ip route del 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1320	ip route del 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1321 322	ip address del 192.0.3.2/24 dev v1323	ip address del 192.0.2.2/24 dev $rp2324 325	ip link set dev v1 down326	ip link set dev $rp2 down327	vrf_destroy "vrf-spine"328}329 330ns_h1_create()331{332	hx_create "vrf-h1" w2 10.1.1.102 10.1.1.1333}334export -f ns_h1_create335 336ns_h2_create()337{338	hx_create "vrf-h2" w4 10.1.2.102 10.1.2.1339}340export -f ns_h2_create341 342ns_switch_create()343{344	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \345		mcast_snooping 0346	ip link set dev br1 up347 348	ip link set dev v2 up349	ip address add dev v2 192.0.3.1/24350	ip route add 10.0.0.1/32 nexthop via 192.0.3.2351 352	ip link add name vx10 type vxlan id 1010		\353		local 10.0.0.2 remote 10.0.0.1 dstport 4789	\354		nolearning noudpcsum tos inherit ttl 100355	ip link set dev vx10 up356 357	ip link set dev vx10 master br1358	bridge vlan add vid 10 dev vx10 pvid untagged359 360	ip link add name vx20 type vxlan id 1020		\361		local 10.0.0.2 remote 10.0.0.1 dstport 4789	\362		nolearning noudpcsum tos inherit ttl 100363	ip link set dev vx20 up364 365	ip link set dev vx20 master br1366	bridge vlan add vid 20 dev vx20 pvid untagged367 368	ip link add name vx4001 type vxlan id 104001		\369		local 10.0.0.2 dstport 4789			\370		nolearning noudpcsum tos inherit ttl 100371	ip link set dev vx4001 up372 373	ip link set dev vx4001 master br1374	bridge vlan add vid 4001 dev vx4001 pvid untagged375 376	ip link set dev w1 master br1377	ip link set dev w1 up378	bridge vlan add vid 10 dev w1 pvid untagged379 380	ip link set dev w3 master br1381	ip link set dev w3 up382	bridge vlan add vid 20 dev w3 pvid untagged383 384	ip address add 10.0.0.2/32 dev lo385 386	# Create SVIs387	vrf_create "vrf-green"388	ip link set dev vrf-green up389 390	ip link add link br1 name vlan10 up master vrf-green type vlan id 10391	ip address add 10.1.1.12/24 dev vlan10392	ip link add link vlan10 name vlan10-v up master vrf-green \393		address 00:00:5e:00:01:01 type macvlan mode private394	ip address add 10.1.1.1/24 dev vlan10-v395 396	ip link add link br1 name vlan20 up master vrf-green type vlan id 20397	ip address add 10.1.2.12/24 dev vlan20398	ip link add link vlan20 name vlan20-v up master vrf-green \399		address 00:00:5e:00:01:01 type macvlan mode private400	ip address add 10.1.2.1/24 dev vlan20-v401 402	ip link add link br1 name vlan4001 up master vrf-green \403		type vlan id 4001404 405	bridge vlan add vid 10 dev br1 self406	bridge vlan add vid 20 dev br1 self407	bridge vlan add vid 4001 dev br1 self408 409	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10410	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20411 412	sysctl_set net.ipv4.conf.all.rp_filter 0413	sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0414	sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0415}416export -f ns_switch_create417 418ns_init()419{420	ip link add name w1 type veth peer name w2421	ip link add name w3 type veth peer name w4422 423	ip link set dev lo up424 425	ns_h1_create426	ns_h2_create427	ns_switch_create428}429export -f ns_init430 431ns1_create()432{433	ip netns add ns1434	ip link set dev v2 netns ns1435	in_ns ns1 ns_init436}437 438ns1_destroy()439{440	ip netns exec ns1 ip link set dev v2 netns 1441	ip netns del ns1442}443 444__l2_vni_init()445{446	local mac1=$1; shift447	local mac2=$1; shift448	local ip1=$1; shift449	local ip2=$1; shift450	local dst=$1; shift451 452	bridge fdb add $mac1 dev vx10 self master extern_learn static \453		dst $dst vlan 10454	bridge fdb add $mac2 dev vx20 self master extern_learn static \455		dst $dst vlan 20456 457	ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \458		extern_learn459	ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \460		extern_learn461}462export -f __l2_vni_init463 464l2_vni_init()465{466	local h1_ns_mac=$(in_ns ns1 mac_get w2)467	local h2_ns_mac=$(in_ns ns1 mac_get w4)468	local h1_mac=$(mac_get $h1)469	local h2_mac=$(mac_get $h2)470 471	__l2_vni_init $h1_ns_mac $h2_ns_mac 10.1.1.102 10.1.2.102 10.0.0.2472	in_ns ns1 __l2_vni_init $h1_mac $h2_mac 10.1.1.101 10.1.2.101 10.0.0.1473}474 475__l3_vni_init()476{477	local mac=$1; shift478	local vtep_ip=$1; shift479	local host1_ip=$1; shift480	local host2_ip=$1; shift481 482	bridge fdb add $mac dev vx4001 self master extern_learn static \483		dst $vtep_ip vlan 4001484 485	ip neigh add $vtep_ip lladdr $mac nud noarp dev vlan4001 extern_learn486 487	ip route add $host1_ip/32 vrf vrf-green nexthop via $vtep_ip \488		dev vlan4001 onlink489	ip route add $host2_ip/32 vrf vrf-green nexthop via $vtep_ip \490		dev vlan4001 onlink491}492export -f __l3_vni_init493 494l3_vni_init()495{496	local vlan4001_ns_mac=$(in_ns ns1 mac_get vlan4001)497	local vlan4001_mac=$(mac_get vlan4001)498 499	__l3_vni_init $vlan4001_ns_mac 10.0.0.2 10.1.1.102 10.1.2.102500	in_ns ns1 __l3_vni_init $vlan4001_mac 10.0.0.1 10.1.1.101 10.1.2.101501}502 503setup_prepare()504{505	h1=${NETIFS[p1]}506	swp1=${NETIFS[p2]}507 508	swp2=${NETIFS[p3]}509	h2=${NETIFS[p4]}510 511	rp1=${NETIFS[p5]}512	rp2=${NETIFS[p6]}513 514	vrf_prepare515	forwarding_enable516 517	h1_create518	h2_create519	switch_create520 521	ip link add name v1 type veth peer name v2522	spine_create523	ns1_create524 525	l2_vni_init526	l3_vni_init527}528 529cleanup()530{531	pre_cleanup532 533	ns1_destroy534	spine_destroy535	ip link del dev v1536 537	switch_destroy538	h2_destroy539	h1_destroy540 541	forwarding_restore542	vrf_cleanup543}544 545ping_ipv4()546{547	ping_test $h1 10.1.2.101 ": local->local vid 10->vid 20"548	ping_test $h1 10.1.1.102 ": local->remote vid 10->vid 10"549	ping_test $h2 10.1.2.102 ": local->remote vid 20->vid 20"550	ping_test $h1 10.1.2.102 ": local->remote vid 10->vid 20"551	ping_test $h2 10.1.1.102 ": local->remote vid 20->vid 10"552}553 554trap cleanup EXIT555 556setup_prepare557setup_wait558 559tests_run560 561exit $EXIT_STATUS562