brintos

brintos / linux-shallow public Read only

0
0
Text · 18.3 KiB · 9046334 Raw
564 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4 5# +--------------------------------+            +-----------------------------+6# |                         vrf-h1 |            |                      vrf-h2 |7# |    + $h1                       |            | + $h2                       |8# |    | 2001:db8:1::1/64          |            | | 2001:db8:2::1/64          |9# |    | default via 2001:db8:1::3 |            | | default via 2001:db8:2::3 |10# +----|---------------------------+            +-|---------------------------+11#      |                                          |12# +----|------------------------------------------|---------------------------+13# | SW |                                          |                           |14# | +--|------------------------------------------|-------------------------+ |15# | |  + $swp1                         br1          + $swp2                 | |16# | |     vid 10 pvid untagged                         vid 20 pvid untagged | |17# | |                                                                       | |18# | |  + vx10                                       + vx20                  | |19# | |    local 2001:db8:3::1                          local 2001:db8:3::1   | |20# | |    remote 2001:db8:3::2                         remote 2001:db8:3::2  | |21# | |    id 1010                                      id 1020               | |22# | |    dstport 4789                                 dstport 4789          | |23# | |    vid 10 pvid untagged                         vid 20 pvid untagged  | |24# | |                                                                       | |25# | |                             + vx4001                                  | |26# | |                               local 2001:db8:3::1                     | |27# | |                               remote 2001:db8:3::2                    | |28# | |                               id 104001                               | |29# | |                               dstport 4789                            | |30# | |                               vid 4001 pvid untagged                  | |31# | |                                                                       | |32# | +-----------------------------------+-----------------------------------+ |33# |                                     |                                     |34# | +-----------------------------------|-----------------------------------+ |35# | |                                   |                                   | |36# | |  +--------------------------------+--------------------------------+  | |37# | |  |                                |                                |  | |38# | |  + vlan10                         |                         vlan20 +  | |39# | |  | 2001:db8:1::2/64               |               2001:db8:2::2/64 |  | |40# | |  |                                |                                |  | |41# | |  + vlan10-v (macvlan)             +             vlan20-v (macvlan) +  | |42# | |    2001:db8:1::3/64           vlan4001            2001:db8:2::3/64    | |43# | |    00:00:5e:00:01:01                             00:00:5e:00:01:01    | |44# | |                               vrf-green                               | |45# | +-----------------------------------------------------------------------+ |46# |                                                                           |47# |    + $rp1                                       +lo                       |48# |    | 2001:db8:4::1/64                           2001:db8:3::1             |49# +----|----------------------------------------------------------------------+50#      |51# +----|--------------------------------------------------------+52# |    |                            vrf-spine                   |53# |    + $rp2                                                   |54# |      2001:db8:4::2/64                                       |55# |                                                             |   (maybe) HW56# =============================================================================57# |                                                             |  (likely) SW58# |                                                             |59# |    + v1 (veth)                                              |60# |    | 2001:db8:5::2/64                                       |61# +----|--------------------------------------------------------+62#      |63# +----|----------------------------------------------------------------------+64# |    + v2 (veth)                                  +lo           NS1 (netns) |65# |      2001:db8:5::1/64                            2001:db8:3::2/128        |66# |                                                                           |67# | +-----------------------------------------------------------------------+ |68# | |                               vrf-green                               | |69# | |  + vlan10-v (macvlan)                           vlan20-v (macvlan) +  | |70# | |  | 2001:db8:1::3/64                               2001:db8:2::3/64 |  | |71# | |  | 00:00:5e:00:01:01                             00:00:5e:00:01:01 |  | |72# | |  |                            vlan4001                             |  | |73# | |  + vlan10                         +                         vlan20 +  | |74# | |  | 2001:db8:1::3/64               |               2001:db8:2::3/64 |  | |75# | |  |                                |                                |  | |76# | |  +--------------------------------+--------------------------------+  | |77# | |                                   |                                   | |78# | +-----------------------------------|-----------------------------------+ |79# |                                     |                                     |80# | +-----------------------------------+-----------------------------------+ |81# | |                                                                       | |82# | |  + vx10                                     + vx20                    | |83# | |    local 2001:db8:3::2                        local 2001:db8:3::2     | |84# | |    remote 2001:db8:3::1                       remote 2001:db8:3::1    | |85# | |    id 1010                                    id 1020                 | |86# | |    dstport 4789                               dstport 4789            | |87# | |    vid 10 pvid untagged                       vid 20 pvid untagged    | |88# | |                                                                       | |89# | |                             + vx4001                                  | |90# | |                               local 2001:db8:3::2                     | |91# | |                               remote 2001:db8:3::1                    | |92# | |                               id 104001                               | |93# | |                               dstport 4789                            | |94# | |                               vid 4001 pvid untagged                  | |95# | |                                                                       | |96# | |  + w1 (veth)                                + w3 (veth)               | |97# | |  | vid 10 pvid untagged          br1        | vid 20 pvid untagged    | |98# | +--|------------------------------------------|-------------------------+ |99# |    |                                          |                           |100# |    |                                          |                           |101# | +--|----------------------+                +--|-------------------------+ |102# | |  |               vrf-h1 |                |  |                  vrf-h2 | |103# | |  + w2 (veth)            |                |  + w4 (veth)               | |104# | |    2001:db8:1::4/64     |                |    2001:db8:2::4/64        | |105# | |    default via          |                |    default via             | |106# | |    2001:db8:1::3/64     |                |    2001:db8:2::3/64        | |107# | +-------------------------+                +----------------------------+ |108# +---------------------------------------------------------------------------+109 110ALL_TESTS="111	ping_ipv6112"113NUM_NETIFS=6114source lib.sh115 116hx_create()117{118	local vrf_name=$1; shift119	local if_name=$1; shift120	local ip_addr=$1; shift121	local gw_ip=$1; shift122 123	vrf_create $vrf_name124	ip link set dev $if_name master $vrf_name125	ip link set dev $vrf_name up126	ip link set dev $if_name up127 128	ip address add $ip_addr/64 dev $if_name129	ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \130		dev $if_name131	ip route add default vrf $vrf_name nexthop via $gw_ip132}133export -f hx_create134 135hx_destroy()136{137	local vrf_name=$1; shift138	local if_name=$1; shift139	local ip_addr=$1; shift140	local gw_ip=$1; shift141 142	ip route del default vrf $vrf_name nexthop via $gw_ip143	ip neigh del $gw_ip dev $if_name144	ip address del $ip_addr/64 dev $if_name145 146	ip link set dev $if_name down147	vrf_destroy $vrf_name148}149 150h1_create()151{152	hx_create "vrf-h1" $h1 2001:db8:1::1 2001:db8:1::3153}154 155h1_destroy()156{157	hx_destroy "vrf-h1" $h1 2001:db8:1::1 2001:db8:1::3158}159 160h2_create()161{162	hx_create "vrf-h2" $h2 2001:db8:2::1 2001:db8:2::3163}164 165h2_destroy()166{167	hx_destroy "vrf-h2" $h2 2001:db8:2::1 2001:db8:2::3168}169 170switch_create()171{172	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \173		mcast_snooping 0174	# Make sure the bridge uses the MAC address of the local port and not175	# that of the VxLAN's device.176	ip link set dev br1 address $(mac_get $swp1)177	ip link set dev br1 up178 179	ip link set dev $rp1 up180	ip address add dev $rp1 2001:db8:4::1/64181	ip route add 2001:db8:3::2/128 nexthop via 2001:db8:4::2182 183	ip link add name vx10 type vxlan id 1010		\184		local 2001:db8:3::1 remote 2001:db8:3::2 dstport 4789	\185		nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100186	ip link set dev vx10 up187 188	ip link set dev vx10 master br1189	bridge vlan add vid 10 dev vx10 pvid untagged190 191	ip link add name vx20 type vxlan id 1020		\192		local 2001:db8:3::1 remote 2001:db8:3::2 dstport 4789	\193		nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100194	ip link set dev vx20 up195 196	ip link set dev vx20 master br1197	bridge vlan add vid 20 dev vx20 pvid untagged198 199	ip link set dev $swp1 master br1200	ip link set dev $swp1 up201 202	ip link set dev $swp2 master br1203	ip link set dev $swp2 up204 205	ip link add name vx4001 type vxlan id 104001		\206		local 2001:db8:3::1 dstport 4789			\207		nolearning udp6zerocsumrx udp6zerocsumtx 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 2001:db8:3::1/128 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 2001:db8:1::2/64 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 2001:db8:1::3/64 dev vlan10-v224 225	ip link add link br1 name vlan20 up master vrf-green type vlan id 20226	ip address add 2001:db8:2::2/64 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 2001:db8:2::3/64 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	bridge vlan add vid 10 dev $swp1 pvid untagged242	bridge vlan add vid 20 dev $swp2 pvid untagged243}244 245switch_destroy()246{247	bridge vlan del vid 20 dev br1 self248	bridge vlan del vid 10 dev br1 self249 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	ip link del dev vlan4001255 256	ip link del dev vlan20257 258	ip link del dev vlan10259 260	vrf_destroy "vrf-green"261 262	ip address del 2001:db8:3::1/128 dev lo263 264	bridge vlan del vid 20 dev $swp2265	ip link set dev $swp2 down266	ip link set dev $swp2 nomaster267 268	bridge vlan del vid 10 dev $swp1269	ip link set dev $swp1 down270	ip link set dev $swp1 nomaster271 272	bridge vlan del vid 4001 dev vx4001273	ip link set dev vx4001 nomaster274 275	ip link set dev vx4001 down276	ip link del dev vx4001277 278	bridge vlan del vid 20 dev vx20279	ip link set dev vx20 nomaster280 281	ip link set dev vx20 down282	ip link del dev vx20283 284	bridge vlan del vid 10 dev vx10285	ip link set dev vx10 nomaster286 287	ip link set dev vx10 down288	ip link del dev vx10289 290	ip route del 2001:db8:3::2 nexthop via 2001:db8:4::2291	ip address del dev $rp1 2001:db8:4::1/64292	ip link set dev $rp1 down293 294	ip link set dev br1 down295	ip link del dev br1296}297 298spine_create()299{300	vrf_create "vrf-spine"301	ip link set dev $rp2 master vrf-spine302	ip link set dev v1 master vrf-spine303	ip link set dev vrf-spine up304	ip link set dev $rp2 up305	ip link set dev v1 up306 307	ip address add 2001:db8:4::2/64 dev $rp2308	ip address add 2001:db8:5::2/64 dev v1309 310	ip route add 2001:db8:3::1/128 vrf vrf-spine nexthop via \311		2001:db8:4::1312	ip route add 2001:db8:3::2/128 vrf vrf-spine nexthop via \313		2001:db8:5::1314}315 316spine_destroy()317{318	ip route del 2001:db8:3::2/128 vrf vrf-spine nexthop via \319		2001:db8:5::1320	ip route del 2001:db8:3::1/128 vrf vrf-spine nexthop via \321		2001:db8:4::1322 323	ip address del 2001:db8:5::2/64 dev v1324	ip address del 2001:db8:4::2/64 dev $rp2325 326	ip link set dev v1 down327	ip link set dev $rp2 down328	vrf_destroy "vrf-spine"329}330 331ns_h1_create()332{333	hx_create "vrf-h1" w2 2001:db8:1::4 2001:db8:1::3334}335export -f ns_h1_create336 337ns_h2_create()338{339	hx_create "vrf-h2" w4 2001:db8:2::4 2001:db8:2::3340}341export -f ns_h2_create342 343ns_switch_create()344{345	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \346		mcast_snooping 0347	ip link set dev br1 up348 349	ip link set dev v2 up350	ip address add dev v2 2001:db8:5::1/64351	ip route add 2001:db8:3::1 nexthop via 2001:db8:5::2352 353	ip link add name vx10 type vxlan id 1010		\354		local 2001:db8:3::2 remote 2001:db8:3::1 dstport 4789	\355		nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100356	ip link set dev vx10 up357 358	ip link set dev vx10 master br1359	bridge vlan add vid 10 dev vx10 pvid untagged360 361	ip link add name vx20 type vxlan id 1020		\362		local 2001:db8:3::2 remote 2001:db8:3::1 dstport 4789	\363		nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100364	ip link set dev vx20 up365 366	ip link set dev vx20 master br1367	bridge vlan add vid 20 dev vx20 pvid untagged368 369	ip link add name vx4001 type vxlan id 104001		\370		local 2001:db8:3::2 dstport 4789			\371		nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100372	ip link set dev vx4001 up373 374	ip link set dev vx4001 master br1375	bridge vlan add vid 4001 dev vx4001 pvid untagged376 377	ip link set dev w1 master br1378	ip link set dev w1 up379	bridge vlan add vid 10 dev w1 pvid untagged380 381	ip link set dev w3 master br1382	ip link set dev w3 up383	bridge vlan add vid 20 dev w3 pvid untagged384 385	ip address add 2001:db8:3::2/128 dev lo386 387	# Create SVIs388	vrf_create "vrf-green"389	ip link set dev vrf-green up390 391	ip link add link br1 name vlan10 up master vrf-green type vlan id 10392	ip address add 2001:db8:1::3/64 dev vlan10393	ip link add link vlan10 name vlan10-v up master vrf-green \394		address 00:00:5e:00:01:01 type macvlan mode private395	ip address add 2001:db8:1::3/64 dev vlan10-v396 397	ip link add link br1 name vlan20 up master vrf-green type vlan id 20398	ip address add 2001:db8:2::3/64 dev vlan20399	ip link add link vlan20 name vlan20-v up master vrf-green \400		address 00:00:5e:00:01:01 type macvlan mode private401	ip address add 2001:db8:2::3/64 dev vlan20-v402 403	ip link add link br1 name vlan4001 up master vrf-green \404		type vlan id 4001405 406	bridge vlan add vid 10 dev br1 self407	bridge vlan add vid 20 dev br1 self408	bridge vlan add vid 4001 dev br1 self409 410	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10411	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20412}413export -f ns_switch_create414 415ns_init()416{417	ip link add name w1 type veth peer name w2418	ip link add name w3 type veth peer name w4419 420	ip link set dev lo up421 422	ns_h1_create423	ns_h2_create424	ns_switch_create425}426export -f ns_init427 428ns1_create()429{430	ip netns add ns1431	ip link set dev v2 netns ns1432	in_ns ns1 ns_init433}434 435ns1_destroy()436{437	ip netns exec ns1 ip link set dev v2 netns 1438	ip netns del ns1439}440 441__l2_vni_init()442{443	local mac1=$1; shift444	local mac2=$1; shift445	local ip1=$1; shift446	local ip2=$1; shift447	local dst=$1; shift448 449	bridge fdb add $mac1 dev vx10 self master extern_learn static \450		dst $dst vlan 10451	bridge fdb add $mac2 dev vx20 self master extern_learn static \452		dst $dst vlan 20453 454	ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \455		extern_learn456	ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \457		extern_learn458}459export -f __l2_vni_init460 461l2_vni_init()462{463	local h1_ns_mac=$(in_ns ns1 mac_get w2)464	local h2_ns_mac=$(in_ns ns1 mac_get w4)465	local h1_mac=$(mac_get $h1)466	local h2_mac=$(mac_get $h2)467 468	__l2_vni_init $h1_ns_mac $h2_ns_mac 2001:db8:1::4 2001:db8:2::4 \469	       2001:db8:3::2470	in_ns ns1 __l2_vni_init $h1_mac $h2_mac 2001:db8:1::1 2001:db8:2::1 \471	       2001:db8:3::1472}473 474__l3_vni_init()475{476	local mac=$1; shift477	local vtep_ip=$1; shift478	local host1_ip=$1; shift479	local host2_ip=$1; shift480 481	bridge fdb add $mac dev vx4001 self master extern_learn static \482		dst $vtep_ip vlan 4001483 484	ip neigh add $vtep_ip lladdr $mac nud noarp dev vlan4001 extern_learn485 486	ip route add $host1_ip/128 vrf vrf-green nexthop via $vtep_ip \487		dev vlan4001 onlink488	ip route add $host2_ip/128 vrf vrf-green nexthop via $vtep_ip \489		dev vlan4001 onlink490}491export -f __l3_vni_init492 493l3_vni_init()494{495	local vlan4001_ns_mac=$(in_ns ns1 mac_get vlan4001)496	local vlan4001_mac=$(mac_get vlan4001)497 498	__l3_vni_init $vlan4001_ns_mac 2001:db8:3::2 2001:db8:1::4 \499		2001:db8:2::4500	in_ns ns1 __l3_vni_init $vlan4001_mac 2001:db8:3::1 2001:db8:1::1 \501		2001:db8:2::1502}503 504setup_prepare()505{506	h1=${NETIFS[p1]}507	swp1=${NETIFS[p2]}508 509	swp2=${NETIFS[p3]}510	h2=${NETIFS[p4]}511 512	rp1=${NETIFS[p5]}513	rp2=${NETIFS[p6]}514 515	vrf_prepare516	forwarding_enable517 518	h1_create519	h2_create520	switch_create521 522	ip link add name v1 type veth peer name v2523	spine_create524	ns1_create525	in_ns ns1 forwarding_enable526 527	l2_vni_init528	l3_vni_init529}530 531cleanup()532{533	pre_cleanup534 535	ns1_destroy536	spine_destroy537	ip link del dev v1538 539	switch_destroy540	h2_destroy541	h1_destroy542 543	forwarding_restore544	vrf_cleanup545}546 547ping_ipv6()548{549	ping6_test $h1 2001:db8:2::1 ": local->local vid 10->vid 20"550	ping6_test $h1 2001:db8:1::4 ": local->remote vid 10->vid 10"551	ping6_test $h2 2001:db8:2::4 ": local->remote vid 20->vid 20"552	ping6_test $h1 2001:db8:2::4 ": local->remote vid 10->vid 20"553	ping6_test $h2 2001:db8:1::4 ": local->remote vid 20->vid 10"554}555 556trap cleanup EXIT557 558setup_prepare559setup_wait560 561tests_run562 563exit $EXIT_STATUS564