1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0 3 4 # +------------------------+ +----------------------+ 5 # | H1 (vrf) | | H2 (vrf) | 6 # | + $h1.555 | | + $h2.777 | 7 # | | 192.0.2.1/28 | | | 192.0.2.18/28 | 8 # | | 2001:db8:1::1/64 | | | 2001:db8:2::2/64 | 9 # | | | | | | 10 # | + $h1 | | + $h2 | 11 # +----|-------------------+ +--|-------------------+ 12 # | | 13 # +----|--------------------------------------------------|-------------------+ 14 # | SW | | | 15 # | +--|--------------------------------------------------|-----------------+ | 16 # | | + $swp1 BR1 (802.1q) + $swp2 | | 17 # | | | | 18 # | +------+------------------------------------------+---------------------+ | 19 # | | | | 20 # | + br1.555 + br1.777 | 21 # | 192.0.2.2/28 192.0.2.17/28 | 22 # | 2001:db8:1::2/64 2001:db8:2::1/64 | 23 # +---------------------------------------------------------------------------+ 24 25 ALL_TESTS=" 26 ping_ipv4 27 ping_ipv6 28 respin_config 29 ping_ipv4 30 ping_ipv6 31 " 32 NUM_NETIFS=4 33 source lib.sh 34 35 h1_create() 36 { 37 simple_if_init $h1 38 vlan_create $h1 555 v$h1 192.0.2.1/28 2001:db8:1::1/64 39 ip -4 route add 192.0.2.16/28 vrf v$h1 nexthop via 192.0.2.2 40 ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2 41 } 42 43 h1_destroy() 44 { 45 ip -6 route del 2001:db8:2::/64 vrf v$h1 46 ip -4 route del 192.0.2.16/28 vrf v$h1 47 vlan_destroy $h1 555 48 simple_if_fini $h1 49 } 50 51 h2_create() 52 { 53 simple_if_init $h2 54 vlan_create $h2 777 v$h2 192.0.2.18/28 2001:db8:2::2/64 55 ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.17 56 ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1 57 } 58 59 h2_destroy() 60 { 61 ip -6 route del 2001:db8:1::/64 vrf v$h2 62 ip -4 route del 192.0.2.0/28 vrf v$h2 63 vlan_destroy $h2 777 64 simple_if_fini $h2 65 } 66 67 router_create() 68 { 69 ip link add name br1 address $(mac_get $swp1) \ 70 type bridge vlan_filtering 1 71 ip link set dev br1 up 72 73 ip link set dev $swp1 master br1 74 ip link set dev $swp2 master br1 75 ip link set dev $swp1 up 76 ip link set dev $swp2 up 77 78 bridge vlan add dev br1 vid 555 self 79 bridge vlan add dev br1 vid 777 self 80 bridge vlan add dev $swp1 vid 555 81 bridge vlan add dev $swp2 vid 777 82 83 vlan_create br1 555 "" 192.0.2.2/28 2001:db8:1::2/64 84 vlan_create br1 777 "" 192.0.2.17/28 2001:db8:2::1/64 85 } 86 87 router_destroy() 88 { 89 vlan_destroy br1 777 90 vlan_destroy br1 555 91 92 bridge vlan del dev $swp2 vid 777 93 bridge vlan del dev $swp1 vid 555 94 bridge vlan del dev br1 vid 777 self 95 bridge vlan del dev br1 vid 555 self 96 97 ip link set dev $swp2 down nomaster 98 ip link set dev $swp1 down nomaster 99 100 ip link set dev br1 down 101 ip link del dev br1 102 } 103 104 setup_prepare() 105 { 106 h1=${NETIFS[p1]} 107 swp1=${NETIFS[p2]} 108 109 swp2=${NETIFS[p3]} 110 h2=${NETIFS[p4]} 111 112 vrf_prepare 113 114 h1_create 115 h2_create 116 117 router_create 118 119 forwarding_enable 120 } 121 122 cleanup() 123 { 124 pre_cleanup 125 126 forwarding_restore 127 128 router_destroy 129 130 h2_destroy 131 h1_destroy 132 133 vrf_cleanup 134 } 135 136 ping_ipv4() 137 { 138 ping_test $h1 192.0.2.18 139 } 140 141 ping_ipv6() 142 { 143 ping6_test $h1 2001:db8:2::2 144 } 145 146 respin_config() 147 { 148 log_info "Remaster bridge slave" 149 150 ip link set dev $swp2 nomaster 151 ip link set dev $swp1 nomaster 152 153 sleep 2 154 155 ip link set dev $swp1 master br1 156 ip link set dev $swp2 master br1 157 158 bridge vlan add dev $swp1 vid 555 159 bridge vlan add dev $swp2 vid 777 160 } 161 162 trap cleanup EXIT 163 164 setup_prepare 165 setup_wait 166 167 tests_run 168 169 exit $EXIT_STATUS 170