409 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +--------------------------------------------+5# | H1 (vrf) |6# | |7# | + LAG1.100 + LAG1.200 |8# | | 192.0.2.1/28 | 192.0.2.17/28 |9# | | 2001:db8:1::1/64 | 2001:db8:3:1/64 |10# | \___________ _______/ |11# | v |12# | + LAG1 (team) |13# | | |14# | ____^____ |15# | / \ |16# | + $h1 + $h4 |17# | | | |18# +----------|-----------|---------------------+19# | |20# +----------|-----------|---------------------+21# | SW | | |22# | + $swp1 + $swp4 |23# | \____ ____/ |24# | v |25# | LAG2 (team) + |26# | | |27# | _______^______________ |28# | / \ |29# | +------|------------+ +-------|----------+ |30# | | + LAG2.100 | | + LAG2.200 | |31# | | | | | |32# | | BR1 (802.1d) | | BR2 (802.1d) | |33# | | 192.0.2.2/28 | | 192.0.2.18/28 | |34# | | 2001:db8:1::2/64 | | 2001:db8:3:2/64 | |35# | | | | | |36# | +-------------------+ +------------------+ |37# | |38# | + LAG3.100 + LAG3.200 |39# | | 192.0.2.129/28 | 192.0.2.145/28 |40# | | 2001:db8:2::1/64 | 2001:db8:4::1/64 |41# | | | |42# | \_________ ___________/ |43# | v |44# | + LAG3 (team) |45# | ____|____ |46# | / \ |47# | + $swp2 + $swp3 |48# | | | |49# +-------|---------|--------------------------+50# | |51# +-------|---------|--------------------------+52# | | | |53# | + $h2 + $h3 |54# | \____ ___/ |55# | | |56# | + LAG4 (team) |57# | | |58# | __________^__________ |59# | / \ |60# | | | |61# | + LAG4.100 + LAG4.200 |62# | 192.0.2.130/28 192.0.2.146/28 |63# | 2001:db8:2::2/64 2001:db8:4::2/64 |64# | |65# | H2 (vrf) |66# +--------------------------------------------+67 68ALL_TESTS="69 ping_ipv470 ping_ipv671 72 $(: exercise remastering of LAG2 slaves )73 config_deslave_swp474 config_wait75 ping_ipv476 ping_ipv677 config_enslave_swp478 config_deslave_swp179 config_wait80 ping_ipv481 ping_ipv682 config_deslave_swp483 config_enslave_swp184 config_enslave_swp485 config_wait86 ping_ipv487 ping_ipv688 89 $(: exercise remastering of LAG2 itself )90 config_remaster_lag291 config_wait92 ping_ipv493 ping_ipv694 95 $(: exercise remastering of LAG3 slaves )96 config_deslave_swp297 config_wait98 ping_ipv499 ping_ipv6100 config_enslave_swp2101 config_deslave_swp3102 config_wait103 ping_ipv4104 ping_ipv6105 config_deslave_swp2106 config_enslave_swp3107 config_enslave_swp2108 config_wait109 ping_ipv4110 ping_ipv6111"112NUM_NETIFS=8113source lib.sh114 115h1_create()116{117 team_create lag1 lacp118 ip link set dev lag1 addrgenmode none119 ip link set dev lag1 address $(mac_get $h1)120 ip link set dev $h1 master lag1121 ip link set dev $h4 master lag1122 simple_if_init lag1123 ip link set dev $h1 up124 ip link set dev $h4 up125 126 vlan_create lag1 100 vlag1 192.0.2.1/28 2001:db8:1::1/64127 vlan_create lag1 200 vlag1 192.0.2.17/28 2001:db8:3::1/64128 129 ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.2130 ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::2131 132 ip -4 route add 192.0.2.144/28 vrf vlag1 nexthop via 192.0.2.18133 ip -6 route add 2001:db8:4::/64 vrf vlag1 nexthop via 2001:db8:3::2134}135 136h1_destroy()137{138 ip -6 route del 2001:db8:4::/64 vrf vlag1139 ip -4 route del 192.0.2.144/28 vrf vlag1140 141 ip -6 route del 2001:db8:2::/64 vrf vlag1142 ip -4 route del 192.0.2.128/28 vrf vlag1143 144 vlan_destroy lag1 200145 vlan_destroy lag1 100146 147 ip link set dev $h4 down148 ip link set dev $h1 down149 simple_if_fini lag1150 ip link set dev $h4 nomaster151 ip link set dev $h1 nomaster152 team_destroy lag1153}154 155h2_create()156{157 team_create lag4 lacp158 ip link set dev lag4 addrgenmode none159 ip link set dev lag4 address $(mac_get $h2)160 ip link set dev $h2 master lag4161 ip link set dev $h3 master lag4162 simple_if_init lag4163 ip link set dev $h2 up164 ip link set dev $h3 up165 166 vlan_create lag4 100 vlag4 192.0.2.130/28 2001:db8:2::2/64167 vlan_create lag4 200 vlag4 192.0.2.146/28 2001:db8:4::2/64168 169 ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129170 ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1171 172 ip -4 route add 192.0.2.16/28 vrf vlag4 nexthop via 192.0.2.145173 ip -6 route add 2001:db8:3::/64 vrf vlag4 nexthop via 2001:db8:4::1174}175 176h2_destroy()177{178 ip -6 route del 2001:db8:3::/64 vrf vlag4179 ip -4 route del 192.0.2.16/28 vrf vlag4180 181 ip -6 route del 2001:db8:1::/64 vrf vlag4182 ip -4 route del 192.0.2.0/28 vrf vlag4183 184 vlan_destroy lag4 200185 vlan_destroy lag4 100186 187 ip link set dev $h3 down188 ip link set dev $h2 down189 simple_if_fini lag4190 ip link set dev $h3 nomaster191 ip link set dev $h2 nomaster192 team_destroy lag4193}194 195router_create()196{197 team_create lag2 lacp198 ip link set dev lag2 addrgenmode none199 ip link set dev lag2 address $(mac_get $swp1)200 ip link set dev $swp1 master lag2201 ip link set dev $swp4 master lag2202 203 vlan_create lag2 100204 vlan_create lag2 200205 206 ip link add name br1 type bridge vlan_filtering 0207 ip link set dev br1 address $(mac_get lag2.100)208 ip link set dev lag2.100 master br1209 210 ip link add name br2 type bridge vlan_filtering 0211 ip link set dev br2 address $(mac_get lag2.200)212 ip link set dev lag2.200 master br2213 214 ip link set dev $swp1 up215 ip link set dev $swp4 up216 ip link set dev br1 up217 ip link set dev br2 up218 219 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64220 __addr_add_del br2 add 192.0.2.18/28 2001:db8:3::2/64221 222 team_create lag3 lacp223 ip link set dev lag3 addrgenmode none224 ip link set dev lag3 address $(mac_get $swp2)225 ip link set dev $swp2 master lag3226 ip link set dev $swp3 master lag3227 ip link set dev $swp2 up228 ip link set dev $swp3 up229 230 vlan_create lag3 100231 vlan_create lag3 200232 233 __addr_add_del lag3.100 add 192.0.2.129/28 2001:db8:2::1/64234 __addr_add_del lag3.200 add 192.0.2.145/28 2001:db8:4::1/64235}236 237router_destroy()238{239 __addr_add_del lag3.200 del 192.0.2.145/28 2001:db8:4::1/64240 __addr_add_del lag3.100 del 192.0.2.129/28 2001:db8:2::1/64241 242 vlan_destroy lag3 200243 vlan_destroy lag3 100244 245 ip link set dev $swp3 down246 ip link set dev $swp2 down247 ip link set dev $swp3 nomaster248 ip link set dev $swp2 nomaster249 team_destroy lag3250 251 __addr_add_del br2 del 192.0.2.18/28 2001:db8:3::2/64252 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64253 254 ip link set dev br2 down255 ip link set dev br1 down256 ip link set dev $swp4 down257 ip link set dev $swp1 down258 259 ip link set dev lag2.200 nomaster260 ip link del dev br2261 262 ip link set dev lag2.100 nomaster263 ip link del dev br1264 265 vlan_destroy lag2 200266 vlan_destroy lag2 100267 268 ip link set dev $swp4 nomaster269 ip link set dev $swp1 nomaster270 team_destroy lag2271}272 273config_remaster_lag2()274{275 log_info "Remaster bridge slaves"276 277 ip link set dev lag2.200 nomaster278 ip link set dev lag2.100 nomaster279 sleep 2280 ip link set dev lag2.100 master br1281 ip link set dev lag2.200 master br2282}283 284config_deslave()285{286 local netdev=$1; shift287 288 log_info "Deslave $netdev"289 ip link set dev $netdev down290 ip link set dev $netdev nomaster291 ip link set dev $netdev up292}293 294config_deslave_swp1()295{296 config_deslave $swp1297}298 299config_deslave_swp2()300{301 config_deslave $swp2302}303 304config_deslave_swp3()305{306 config_deslave $swp3307}308 309config_deslave_swp4()310{311 config_deslave $swp4312}313 314config_enslave()315{316 local netdev=$1; shift317 local master=$1; shift318 319 log_info "Enslave $netdev to $master"320 ip link set dev $netdev down321 ip link set dev $netdev master $master322 ip link set dev $netdev up323}324 325config_enslave_swp1()326{327 config_enslave $swp1 lag2328}329 330config_enslave_swp2()331{332 config_enslave $swp2 lag3333}334 335config_enslave_swp3()336{337 config_enslave $swp3 lag3338}339 340config_enslave_swp4()341{342 config_enslave $swp4 lag2343}344 345config_wait()346{347 setup_wait_dev lag2348 setup_wait_dev lag3349}350 351setup_prepare()352{353 h1=${NETIFS[p1]}354 swp1=${NETIFS[p2]}355 356 swp2=${NETIFS[p3]}357 h2=${NETIFS[p4]}358 359 swp3=${NETIFS[p5]}360 h3=${NETIFS[p6]}361 362 h4=${NETIFS[p7]}363 swp4=${NETIFS[p8]}364 365 vrf_prepare366 367 h1_create368 h2_create369 370 router_create371 372 forwarding_enable373}374 375cleanup()376{377 pre_cleanup378 379 forwarding_restore380 381 router_destroy382 383 h2_destroy384 h1_destroy385 386 vrf_cleanup387}388 389ping_ipv4()390{391 ping_test lag1.100 192.0.2.130 ": via 100"392 ping_test lag1.200 192.0.2.146 ": via 200"393}394 395ping_ipv6()396{397 ping6_test lag1.100 2001:db8:2::2 ": via 100"398 ping6_test lag1.200 2001:db8:4::2 ": via 200"399}400 401trap cleanup EXIT402 403setup_prepare404setup_wait405 406tests_run407 408exit $EXIT_STATUS409