brintos

brintos / linux-shallow public Read only

0
0
Text · 10.7 KiB · 798b135 Raw
349 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +-----------------------+                          +------------------------+5# | H1 (vrf)              |                          | H2 (vrf)               |6# |  + $h1.10             |                          |  + $h2.10              |7# |  | 192.0.2.1/28       |                          |  | 192.0.2.2/28        |8# |  |                    |                          |  |                     |9# |  | + $h1.20           |                          |  | + $h2.20            |10# |  \ | 198.51.100.1/24  |                          |  \ | 198.51.100.2/24   |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 192.0.2.17                                                   | |23# | |    remote 192.0.2.34 192.0.2.50                                       | |24# | |    id 1000 dstport $VXPORT                                            | |25# | |    vid 100 pvid untagged                                              | |26# | +-----------------------------------------------------------------------+ |27# |                                                                           |28# |  192.0.2.32/28 via 192.0.2.18                                             |29# |  192.0.2.48/28 via 192.0.2.18                                             |30# |                                                                           |31# |    + $rp1                                                                 |32# |    | 192.0.2.17/28                                                        |33# +----|----------------------------------------------------------------------+34#      |35# +----|--------------------------------------------------------+36# |    |                                             VRP2 (vrf) |37# |    + $rp2                                                   |38# |      192.0.2.18/28                                          |39# |                                                             |   (maybe) HW40# =============================================================================41# |                                                             |  (likely) SW42# |    + v1 (veth)                             + v3 (veth)      |43# |    | 192.0.2.33/28                         | 192.0.2.49/28  |44# +----|---------------------------------------|----------------+45#      |                                       |46# +----|------------------------------+   +----|------------------------------+47# |    + v2 (veth)        NS1 (netns) |   |    + v4 (veth)        NS2 (netns) |48# |      192.0.2.34/28                |   |      192.0.2.50/28                |49# |                                   |   |                                   |50# |   192.0.2.16/28 via 192.0.2.33    |   |   192.0.2.16/28 via 192.0.2.49    |51# |   192.0.2.50/32 via 192.0.2.33    |   |   192.0.2.34/32 via 192.0.2.49    |52# |                                   |   |                                   |53# | +-------------------------------+ |   | +-------------------------------+ |54# | |                 BR2 (802.1ad) | |   | |                 BR2 (802.1ad) | |55# | |  + vx100 (vxlan)              | |   | |  + vx100 (vxlan)              | |56# | |    local 192.0.2.34           | |   | |    local 192.0.2.50           | |57# | |    remote 192.0.2.17          | |   | |    remote 192.0.2.17          | |58# | |    remote 192.0.2.50          | |   | |    remote 192.0.2.34          | |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# | |  |   192.0.2.3/28             | |   | |  |   192.0.2.4/28             | |72# | |  |                            | |   | |  |                            | |73# | |  + w2.20                      | |   | |  + w2.20                      | |74# | |    198.51.100.3/24            | |   | |    198.51.100.4/24            | |75# | +-------------------------------+ |   | +-------------------------------+ |76# +-----------------------------------+   +-----------------------------------+77 78: ${VXPORT:=4789}79export VXPORT80 81: ${ALL_TESTS:="82	ping_ipv483    "}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 192.0.2.1/2893	vlan_create $h1 20 v$h1 198.51.100.1/2494}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 192.0.2.2/28109	vlan_create $h2 20 v$h2 198.51.100.2/24110}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 192.0.2.17/28123 124	ip route add 192.0.2.32/28 nexthop via 192.0.2.18125	ip route add 192.0.2.48/28 nexthop via 192.0.2.18126}127 128rp1_unset_addr()129{130	ip route del 192.0.2.48/28 nexthop via 192.0.2.18131	ip route del 192.0.2.32/28 nexthop via 192.0.2.18132 133	ip address del dev $rp1 192.0.2.17/28134}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	ip link set dev br1 addrgenmode none141	# Make sure the bridge uses the MAC address of the local port and not142	# that of the VxLAN's device.143	ip link set dev br1 address $(mac_get $swp1)144	ip link set dev br1 up145 146	ip link set dev $rp1 up147	rp1_set_addr148 149	ip link add name vx100 type vxlan id 1000		\150		local 192.0.2.17 dstport "$VXPORT"	\151		nolearning noudpcsum tos inherit ttl 100152	ip link set dev vx100 up153 154	ip link set dev vx100 master br1155	bridge vlan add vid 100 dev vx100 pvid untagged156 157	ip link set dev $swp1 master br1158	ip link set dev $swp1 up159	bridge vlan add vid 100 dev $swp1 pvid untagged160 161	ip link set dev $swp2 master br1162	ip link set dev $swp2 up163	bridge vlan add vid 100 dev $swp2 pvid untagged164 165	bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self166	bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self167}168 169switch_destroy()170{171	bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self172	bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self173 174	bridge vlan del vid 100 dev $swp2175	ip link set dev $swp2 down176	ip link set dev $swp2 nomaster177 178	bridge vlan del vid 100 dev $swp1179	ip link set dev $swp1 down180	ip link set dev $swp1 nomaster181 182	ip link set dev vx100 nomaster183	ip link set dev vx100 down184	ip link del dev vx100185 186	rp1_unset_addr187	ip link set dev $rp1 down188 189	ip link set dev br1 down190	ip link del dev br1191}192 193vrp2_create()194{195	simple_if_init $rp2 192.0.2.18/28196	__simple_if_init v1 v$rp2 192.0.2.33/28197	__simple_if_init v3 v$rp2 192.0.2.49/28198	tc qdisc add dev v1 clsact199}200 201vrp2_destroy()202{203	tc qdisc del dev v1 clsact204	__simple_if_fini v3 192.0.2.49/28205	__simple_if_fini v1 192.0.2.33/28206	simple_if_fini $rp2 192.0.2.18/28207}208 209ns_init_common()210{211	local in_if=$1; shift212	local in_addr=$1; shift213	local other_in_addr=$1; shift214	local nh_addr=$1; shift215	local host_addr1=$1; shift216	local host_addr2=$1; shift217 218	ip link set dev $in_if up219	ip address add dev $in_if $in_addr/28220	tc qdisc add dev $in_if clsact221 222	ip link add name br2 type bridge vlan_filtering 1 vlan_protocol 802.1ad \223		vlan_default_pvid 0224	ip link set dev br2 up225 226	ip link add name w1 type veth peer name w2227 228	ip link set dev w1 master br2229	ip link set dev w1 up230	bridge vlan add vid 100 dev w1 pvid untagged231 232	ip link add name vx100 type vxlan id 1000 local $in_addr \233		dstport "$VXPORT"234	ip link set dev vx100 up235	bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.17 self236	bridge fdb append dev vx100 00:00:00:00:00:00 dst $other_in_addr self237 238	ip link set dev vx100 master br2239	tc qdisc add dev vx100 clsact240 241	bridge vlan add vid 100 dev vx100 pvid untagged242 243	simple_if_init w2244        vlan_create w2 10 vw2 $host_addr1/28245        vlan_create w2 20 vw2 $host_addr2/24246 247	ip route add 192.0.2.16/28 nexthop via $nh_addr248	ip route add $other_in_addr/32 nexthop via $nh_addr249}250export -f ns_init_common251 252ns1_create()253{254	ip netns add ns1255	ip link set dev v2 netns ns1256	in_ns ns1 \257	      ns_init_common v2 192.0.2.34 192.0.2.50 192.0.2.33 \258			     192.0.2.3 198.51.100.3259}260 261ns1_destroy()262{263	ip netns exec ns1 ip link set dev v2 netns 1264	ip netns del ns1265}266 267ns2_create()268{269	ip netns add ns2270	ip link set dev v4 netns ns2271	in_ns ns2 \272	      ns_init_common v4 192.0.2.50 192.0.2.34 192.0.2.49 \273			     192.0.2.4 198.51.100.4274}275 276ns2_destroy()277{278	ip netns exec ns2 ip link set dev v4 netns 1279	ip netns del ns2280}281 282setup_prepare()283{284	h1=${NETIFS[p1]}285	swp1=${NETIFS[p2]}286 287	swp2=${NETIFS[p3]}288	h2=${NETIFS[p4]}289 290	rp1=${NETIFS[p5]}291	rp2=${NETIFS[p6]}292 293	vrf_prepare294	forwarding_enable295 296	h1_create297	h2_create298	switch_create299 300	ip link add name v1 type veth peer name v2301	ip link add name v3 type veth peer name v4302	vrp2_create303	ns1_create304	ns2_create305 306	r1_mac=$(in_ns ns1 mac_get w2)307	r2_mac=$(in_ns ns2 mac_get w2)308	h2_mac=$(mac_get $h2)309}310 311cleanup()312{313	pre_cleanup314 315	ns2_destroy316	ns1_destroy317	vrp2_destroy318	ip link del dev v3319	ip link del dev v1320 321	switch_destroy322	h2_destroy323	h1_destroy324 325	forwarding_restore326	vrf_cleanup327}328 329ping_ipv4()330{331	ping_test $h1 192.0.2.2 ": local->local"332	ping_test $h1 192.0.2.3 ": local->remote 1"333	ping_test $h1 192.0.2.4 ": local->remote 2"334}335 336test_all()337{338	echo "Running tests with UDP port $VXPORT"339	tests_run340}341 342trap cleanup EXIT343 344setup_prepare345setup_wait346test_all347 348exit $EXIT_STATUS349