186 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +---------------------------------------------+ +----------------------+5# | H1 (vrf) | | H2 (vrf) |6# | + $h1.100 + $h1.200 | | + $h2 |7# | | 192.0.2.1/28 | 192.0.2.17/28 | | | 192.0.2.130/28 |8# | | 2001:db8:1::1/64 | 2001:db8:3::1/64 | | | 192.0.2.146/28 |9# | \_________ __________/ | | | 2001:db8:2::2/64 |10# | V | | | 2001:db8:4::2/64 |11# | + $h1 | | | |12# +--------------|------------------------------+ +--|-------------------+13# | |14# +--------------|----------------------------------------|-------------------+15# | SW + $swp1 + $swp2 |16# | | 192.0.2.129/28 |17# | | 192.0.2.145/28 |18# | | 2001:db8:2::1/64 |19# | ________^___________________________ 2001:db8:4::1/64 |20# | / \ |21# | +---|------------------------------+ +---|------------------------------+ |22# | | + $swp1.100 BR1 (802.1d) | | + $swp1.200 BR2 (802.1d) | |23# | | 192.0.2.2/28 | | 192.0.2.18/28 | |24# | | 2001:db8:1::2/64 | | 2001:db8:3::2/64 | |25# | | | | | |26# | +----------------------------------+ +----------------------------------+ |27# +---------------------------------------------------------------------------+28 29ALL_TESTS="30 ping_ipv431 ping_ipv632 config_remaster33 ping_ipv434 ping_ipv635"36NUM_NETIFS=437source lib.sh38 39h1_create()40{41 simple_if_init $h142 vlan_create $h1 100 v$h1 192.0.2.1/28 2001:db8:1::1/6443 vlan_create $h1 200 v$h1 192.0.2.17/28 2001:db8:3::1/6444 ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.245 ip -4 route add 192.0.2.144/28 vrf v$h1 nexthop via 192.0.2.1846 ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::247 ip -6 route add 2001:db8:4::/64 vrf v$h1 nexthop via 2001:db8:3::248}49 50h1_destroy()51{52 ip -6 route del 2001:db8:4::/64 vrf v$h153 ip -6 route del 2001:db8:2::/64 vrf v$h154 ip -4 route del 192.0.2.144/28 vrf v$h155 ip -4 route del 192.0.2.128/28 vrf v$h156 vlan_destroy $h1 20057 vlan_destroy $h1 10058 simple_if_fini $h159}60 61h2_create()62{63 simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 \64 192.0.2.146/28 2001:db8:4::2/6465 ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.12966 ip -4 route add 192.0.2.16/28 vrf v$h2 nexthop via 192.0.2.14567 ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::168 ip -6 route add 2001:db8:3::/64 vrf v$h2 nexthop via 2001:db8:4::169}70 71h2_destroy()72{73 ip -6 route del 2001:db8:3::/64 vrf v$h274 ip -6 route del 2001:db8:1::/64 vrf v$h275 ip -4 route del 192.0.2.16/28 vrf v$h276 ip -4 route del 192.0.2.0/28 vrf v$h277 simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64 \78 192.0.2.146/28 2001:db8:4::2/6479}80 81router_create()82{83 ip link set dev $swp1 up84 85 vlan_create $swp1 10086 ip link add name br1 type bridge vlan_filtering 087 ip link set dev br1 address $(mac_get $swp1.100)88 ip link set dev $swp1.100 master br189 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/6490 ip link set dev br1 up91 92 vlan_create $swp1 20093 ip link add name br2 type bridge vlan_filtering 094 ip link set dev br2 address $(mac_get $swp1.200)95 ip link set dev $swp1.200 master br296 __addr_add_del br2 add 192.0.2.18/28 2001:db8:3::2/6497 ip link set dev br2 up98 99 ip link set dev $swp2 up100 __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64 \101 192.0.2.145/28 2001:db8:4::1/64102}103 104router_destroy()105{106 __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64 \107 192.0.2.145/28 2001:db8:4::1/64108 ip link set dev $swp2 down109 110 __addr_add_del br2 del 192.0.2.18/28 2001:db8:3::2/64111 ip link set dev $swp1.200 nomaster112 ip link del dev br2113 vlan_destroy $swp1 200114 115 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64116 ip link set dev $swp1.100 nomaster117 ip link del dev br1118 vlan_destroy $swp1 100119 120 ip link set dev $swp1 down121}122 123config_remaster()124{125 log_info "Remaster bridge slaves"126 127 ip link set dev $swp1.100 nomaster128 ip link set dev $swp1.200 nomaster129 sleep 2130 ip link set dev $swp1.200 master br2131 ip link set dev $swp1.100 master br1132}133 134setup_prepare()135{136 h1=${NETIFS[p1]}137 swp1=${NETIFS[p2]}138 139 swp2=${NETIFS[p3]}140 h2=${NETIFS[p4]}141 142 vrf_prepare143 144 h1_create145 h2_create146 147 router_create148 149 forwarding_enable150}151 152cleanup()153{154 pre_cleanup155 156 forwarding_restore157 158 router_destroy159 160 h2_destroy161 h1_destroy162 163 vrf_cleanup164}165 166ping_ipv4()167{168 ping_test $h1 192.0.2.130 ": via 100"169 ping_test $h1 192.0.2.146 ": via 200"170}171 172ping_ipv6()173{174 ping6_test $h1 2001:db8:2::2 ": via 100"175 ping6_test $h1 2001:db8:4::2 ": via 200"176}177 178trap cleanup EXIT179 180setup_prepare181setup_wait182 183tests_run184 185exit $EXIT_STATUS186