brintos

brintos / linux-shallow public Read only

0
0
Text · 10.9 KiB · 0548b2b Raw
348 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +-----------------------+                          +------------------------+5# | H1 (vrf)              |                          | H2 (vrf)               |6# |  + $h1.10             |                          |  + $h2.10              |7# |  | 2001:db8:1::1/64   |                          |  | 2001:db8:1::2/64    |8# |  |                    |                          |  |                     |9# |  | + $h1.20           |                          |  | + $h2.20            |10# |  \ | 2001:db8:2::1/64 |                          |  \ | 2001:db8:2::2/64  |11# |   \|                  |                          |   \|                   |12# |    + $h1              |                          |    + $h2               |13# +----|------------------+                          +----|-------------------+14#      |                                                  |15# +----|--------------------------------------------------|-------------------+16# | SW |                                                  |                   |17# | +--|--------------------------------------------------|-----------------+ |18# | |  + $swp1                   BR1 (802.1ad)            + $swp2           | |19# | |    vid 100 pvid untagged                              vid 100 pvid    | |20# | |                                                           untagged    | |21# | |  + vx100 (vxlan)                                                      | |22# | |    local 2001:db8:3::1                                                | |23# | |    remote 2001:db8:4::1 2001:db8:5::1                                 | |24# | |    id 1000 dstport $VXPORT                                            | |25# | |    vid 100 pvid untagged                                              | |26# | +-----------------------------------------------------------------------+ |27# |                                                                           |28# |  2001:db8:4::0/64 via 2001:db8:3::2                                       |29# |  2001:db8:5::0/64 via 2001:db8:3::2                                       |30# |                                                                           |31# |    + $rp1                                                                 |32# |    | 2001:db8:3::1/64                                                     |33# +----|----------------------------------------------------------------------+34#      |35# +----|----------------------------------------------------------+36# |    |                                             VRP2 (vrf)   |37# |    + $rp2                                                     |38# |      2001:db8:3::2/64                                         |39# |                                                               |   (maybe) HW40# =============================================================================41# |                                                               | (likely) SW42# |    + v1 (veth)                             + v3 (veth)        |43# |    | 2001:db8:4::2/64                      | 2001:db8:5::2/64 |44# +----|---------------------------------------|------------------+45#      |                                       |46# +----|--------------------------------+ +----|-------------------------------+47# |    + v2 (veth)        NS1 (netns)   | |    + v4 (veth)        NS2 (netns)  |48# |      2001:db8:4::1/64               | |      2001:db8:5::1/64              |49# |                                     | |                                    |50# | 2001:db8:3::0/64 via 2001:db8:4::2  | | 2001:db8:3::0/64 via 2001:db8:5::2 |51# | 2001:db8:5::1/128 via 2001:db8:4::2 | | 2001:db8:4::1/128 via              |52# |                                     | |           2001:db8:5::2            |53# | +-------------------------------+   | | +-------------------------------+  |54# | |                 BR2 (802.1ad) |   | | |                 BR2 (802.1ad) |  |55# | |  + vx100 (vxlan)              |   | | |  + vx100 (vxlan)              |  |56# | |    local 2001:db8:4::1        |   | | |    local 2001:db8:5::1        |  |57# | |    remote 2001:db8:3::1       |   | | |    remote 2001:db8:3::1       |  |58# | |    remote 2001:db8:5::1       |   | | |    remote 2001:db8:4::1       |  |59# | |    id 1000 dstport $VXPORT    |   | | |    id 1000 dstport $VXPORT    |  |60# | |    vid 100 pvid untagged      |   | | |    vid 100 pvid untagged      |  |61# | |                               |   | | |                               |  |62# | |  + w1 (veth)                  |   | | |  + w1 (veth)                  |  |63# | |  | vid 100 pvid untagged      |   | | |  | vid 100 pvid untagged      |  |64# | +--|----------------------------+   | | +--|----------------------------+  |65# |    |                                | |    |                               |66# | +--|----------------------------+   | | +--|----------------------------+  |67# | |  |                  VW2 (vrf) |   | | |  |                  VW2 (vrf) |  |68# | |  + w2 (veth)                  |   | | |  + w2 (veth)                  |  |69# | |  |\                           |   | | |  |\                           |  |70# | |  | + w2.10                    |   | | |  | + w2.10                    |  |71# | |  |   2001:db8:1::3/64         |   | | |  |   2001:db8:1::4/64         |  |72# | |  |                            |   | | |  |                            |  |73# | |  + w2.20                      |   | | |  + w2.20                      |  |74# | |    2001:db8:2::3/64           |   | | |    2001:db8:2::4/64           |  |75# | +-------------------------------+   | | +-------------------------------+  |76# +-------------------------------------+ +------------------------------------+77 78: ${VXPORT:=4789}79export VXPORT80 81: ${ALL_TESTS:="82	ping_ipv683    "}84 85NUM_NETIFS=686source lib.sh87 88h1_create()89{90	simple_if_init $h191	tc qdisc add dev $h1 clsact92	vlan_create $h1 10 v$h1 2001:db8:1::1/6493	vlan_create $h1 20 v$h1 2001:db8:2::1/6494}95 96h1_destroy()97{98	vlan_destroy $h1 2099	vlan_destroy $h1 10100	tc qdisc del dev $h1 clsact101	simple_if_fini $h1102}103 104h2_create()105{106	simple_if_init $h2107	tc qdisc add dev $h2 clsact108	vlan_create $h2 10 v$h2 2001:db8:1::2/64109	vlan_create $h2 20 v$h2 2001:db8:2::2/64110}111 112h2_destroy()113{114	vlan_destroy $h2 20115	vlan_destroy $h2 10116	tc qdisc del dev $h2 clsact117	simple_if_fini $h2118}119 120rp1_set_addr()121{122	ip address add dev $rp1 2001:db8:3::1/64123 124	ip route add 2001:db8:4::0/64 nexthop via 2001:db8:3::2125	ip route add 2001:db8:5::0/64 nexthop via 2001:db8:3::2126}127 128rp1_unset_addr()129{130	ip route del 2001:db8:5::0/64 nexthop via 2001:db8:3::2131	ip route del 2001:db8:4::0/64 nexthop via 2001:db8:3::2132 133	ip address del dev $rp1 2001:db8:3::1/64134}135 136switch_create()137{138	ip link add name br1 type bridge vlan_filtering 1 vlan_protocol 802.1ad \139		vlan_default_pvid 0 mcast_snooping 0140	# Make sure the bridge uses the MAC address of the local port and not141	# that of the VxLAN's device.142	ip link set dev br1 address $(mac_get $swp1)143	ip link set dev br1 up144 145	ip link set dev $rp1 up146	rp1_set_addr147 148	ip link add name vx100 type vxlan id 1000	\149		local 2001:db8:3::1 dstport "$VXPORT"	\150		nolearning udp6zerocsumrx udp6zerocsumtx tos inherit ttl 100151	ip link set dev vx100 up152 153	ip link set dev vx100 master br1154	bridge vlan add vid 100 dev vx100 pvid untagged155 156	ip link set dev $swp1 master br1157	ip link set dev $swp1 up158	bridge vlan add vid 100 dev $swp1 pvid untagged159 160	ip link set dev $swp2 master br1161	ip link set dev $swp2 up162	bridge vlan add vid 100 dev $swp2 pvid untagged163 164	bridge fdb append dev vx100 00:00:00:00:00:00 dst 2001:db8:4::1 self165	bridge fdb append dev vx100 00:00:00:00:00:00 dst 2001:db8:5::1 self166}167 168switch_destroy()169{170	bridge fdb del dev vx100 00:00:00:00:00:00 dst 2001:db8:5::1 self171	bridge fdb del dev vx100 00:00:00:00:00:00 dst 2001:db8:4::1 self172 173	bridge vlan del vid 100 dev $swp2174	ip link set dev $swp2 down175	ip link set dev $swp2 nomaster176 177	bridge vlan del vid 100 dev $swp1178	ip link set dev $swp1 down179	ip link set dev $swp1 nomaster180 181	ip link set dev vx100 nomaster182	ip link set dev vx100 down183	ip link del dev vx100184 185	rp1_unset_addr186	ip link set dev $rp1 down187 188	ip link set dev br1 down189	ip link del dev br1190}191 192vrp2_create()193{194	simple_if_init $rp2 2001:db8:3::2/64195	__simple_if_init v1 v$rp2 2001:db8:4::2/64196	__simple_if_init v3 v$rp2 2001:db8:5::2/64197	tc qdisc add dev v1 clsact198}199 200vrp2_destroy()201{202	tc qdisc del dev v1 clsact203	__simple_if_fini v3 2001:db8:5::2/64204	__simple_if_fini v1 2001:db8:4::2/64205	simple_if_fini $rp2 2001:db8:3::2/64206}207 208ns_init_common()209{210	local in_if=$1; shift211	local in_addr=$1; shift212	local other_in_addr=$1; shift213	local nh_addr=$1; shift214	local host_addr1=$1; shift215	local host_addr2=$1; shift216 217	ip link set dev $in_if up218	ip address add dev $in_if $in_addr/64219	tc qdisc add dev $in_if clsact220 221	ip link add name br2 type bridge vlan_filtering 1 vlan_protocol 802.1ad \222		vlan_default_pvid 0223	ip link set dev br2 up224 225	ip link add name w1 type veth peer name w2226 227	ip link set dev w1 master br2228	ip link set dev w1 up229	bridge vlan add vid 100 dev w1 pvid untagged230 231	ip link add name vx100 type vxlan id 1000 local $in_addr \232		dstport "$VXPORT" udp6zerocsumrx233	ip link set dev vx100 up234	bridge fdb append dev vx100 00:00:00:00:00:00 dst 2001:db8:3::1 self235	bridge fdb append dev vx100 00:00:00:00:00:00 dst $other_in_addr self236 237	ip link set dev vx100 master br2238	tc qdisc add dev vx100 clsact239 240	bridge vlan add vid 100 dev vx100 pvid untagged241 242	simple_if_init w2243        vlan_create w2 10 vw2 $host_addr1/64244        vlan_create w2 20 vw2 $host_addr2/64245 246	ip route add 2001:db8:3::0/64 nexthop via $nh_addr247	ip route add $other_in_addr/128 nexthop via $nh_addr248}249export -f ns_init_common250 251ns1_create()252{253	ip netns add ns1254	ip link set dev v2 netns ns1255	in_ns ns1 \256	      ns_init_common v2 2001:db8:4::1 2001:db8:5::1 2001:db8:4::2 \257			    2001:db8:1::3 2001:db8:2::3258}259 260ns1_destroy()261{262	ip netns exec ns1 ip link set dev v2 netns 1263	ip netns del ns1264}265 266ns2_create()267{268	ip netns add ns2269	ip link set dev v4 netns ns2270	in_ns ns2 \271	      ns_init_common v4 2001:db8:5::1 2001:db8:4::1 2001:db8:5::2 \272			     2001:db8:1::4 2001:db8:2::4273}274 275ns2_destroy()276{277	ip netns exec ns2 ip link set dev v4 netns 1278	ip netns del ns2279}280 281setup_prepare()282{283	h1=${NETIFS[p1]}284	swp1=${NETIFS[p2]}285 286	swp2=${NETIFS[p3]}287	h2=${NETIFS[p4]}288 289	rp1=${NETIFS[p5]}290	rp2=${NETIFS[p6]}291 292	vrf_prepare293	forwarding_enable294 295	h1_create296	h2_create297	switch_create298 299	ip link add name v1 type veth peer name v2300	ip link add name v3 type veth peer name v4301	vrp2_create302	ns1_create303	ns2_create304 305	r1_mac=$(in_ns ns1 mac_get w2)306	r2_mac=$(in_ns ns2 mac_get w2)307	h2_mac=$(mac_get $h2)308}309 310cleanup()311{312	pre_cleanup313 314	ns2_destroy315	ns1_destroy316	vrp2_destroy317	ip link del dev v3318	ip link del dev v1319 320	switch_destroy321	h2_destroy322	h1_destroy323 324	forwarding_restore325	vrf_cleanup326}327 328ping_ipv6()329{330	ping6_test $h1 2001:db8:1::2 ": local->local"331	ping6_test $h1 2001:db8:1::3 ": local->remote 1"332	ping6_test $h1 2001:db8:1::4 ": local->remote 2"333}334 335test_all()336{337	echo "Running tests with UDP port $VXPORT"338	tests_run339}340 341trap cleanup EXIT342 343setup_prepare344setup_wait345test_all346 347exit $EXIT_STATUS348