1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 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_ipv4 70 ping_ipv6 71 72 $(: exercise remastering of LAG2 slaves ) 73 config_deslave_swp4 74 config_wait 75 ping_ipv4 76 ping_ipv6 77 config_enslave_swp4 78 config_deslave_swp1 79 config_wait 80 ping_ipv4 81 ping_ipv6 82 config_deslave_swp4 83 config_enslave_swp1 84 config_enslave_swp4 85 config_wait 86 ping_ipv4 87 ping_ipv6 88 89 $(: exercise remastering of LAG2 itself ) 90 config_remaster_lag2 91 config_wait 92 ping_ipv4 93 ping_ipv6 94 95 $(: exercise remastering of LAG3 slaves ) 96 config_deslave_swp2 97 config_wait 98 ping_ipv4 99 ping_ipv6 100 config_enslave_swp2 101 config_deslave_swp3 102 config_wait 103 ping_ipv4 104 ping_ipv6 105 config_deslave_swp2 106 config_enslave_swp3 107 config_enslave_swp2 108 config_wait 109 ping_ipv4 110 ping_ipv6 111" 112REQUIRE_TEAMD="yes" 113NUM_NETIFS=8 114source lib.sh 115 116h1_create() 117{ 118 team_create lag1 lacp 119 ip link set dev lag1 addrgenmode none 120 ip link set dev lag1 address $(mac_get $h1) 121 ip link set dev $h1 master lag1 122 ip link set dev $h4 master lag1 123 simple_if_init lag1 124 ip link set dev $h1 up 125 ip link set dev $h4 up 126 127 vlan_create lag1 100 vlag1 192.0.2.1/28 2001:db8:1::1/64 128 vlan_create lag1 200 vlag1 192.0.2.17/28 2001:db8:3::1/64 129 130 ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.2 131 ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::2 132 133 ip -4 route add 192.0.2.144/28 vrf vlag1 nexthop via 192.0.2.18 134 ip -6 route add 2001:db8:4::/64 vrf vlag1 nexthop via 2001:db8:3::2 135} 136 137h1_destroy() 138{ 139 ip -6 route del 2001:db8:4::/64 vrf vlag1 140 ip -4 route del 192.0.2.144/28 vrf vlag1 141 142 ip -6 route del 2001:db8:2::/64 vrf vlag1 143 ip -4 route del 192.0.2.128/28 vrf vlag1 144 145 vlan_destroy lag1 200 146 vlan_destroy lag1 100 147 148 ip link set dev $h4 down 149 ip link set dev $h1 down 150 simple_if_fini lag1 151 ip link set dev $h4 nomaster 152 ip link set dev $h1 nomaster 153 team_destroy lag1 154} 155 156h2_create() 157{ 158 team_create lag4 lacp 159 ip link set dev lag4 addrgenmode none 160 ip link set dev lag4 address $(mac_get $h2) 161 ip link set dev $h2 master lag4 162 ip link set dev $h3 master lag4 163 simple_if_init lag4 164 ip link set dev $h2 up 165 ip link set dev $h3 up 166 167 vlan_create lag4 100 vlag4 192.0.2.130/28 2001:db8:2::2/64 168 vlan_create lag4 200 vlag4 192.0.2.146/28 2001:db8:4::2/64 169 170 ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129 171 ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1 172 173 ip -4 route add 192.0.2.16/28 vrf vlag4 nexthop via 192.0.2.145 174 ip -6 route add 2001:db8:3::/64 vrf vlag4 nexthop via 2001:db8:4::1 175} 176 177h2_destroy() 178{ 179 ip -6 route del 2001:db8:3::/64 vrf vlag4 180 ip -4 route del 192.0.2.16/28 vrf vlag4 181 182 ip -6 route del 2001:db8:1::/64 vrf vlag4 183 ip -4 route del 192.0.2.0/28 vrf vlag4 184 185 vlan_destroy lag4 200 186 vlan_destroy lag4 100 187 188 ip link set dev $h3 down 189 ip link set dev $h2 down 190 simple_if_fini lag4 191 ip link set dev $h3 nomaster 192 ip link set dev $h2 nomaster 193 team_destroy lag4 194} 195 196router_create() 197{ 198 team_create lag2 lacp 199 ip link set dev lag2 addrgenmode none 200 ip link set dev lag2 address $(mac_get $swp1) 201 ip link set dev $swp1 master lag2 202 ip link set dev $swp4 master lag2 203 204 vlan_create lag2 100 205 vlan_create lag2 200 206 207 ip link add name br1 type bridge vlan_filtering 0 208 ip link set dev br1 address $(mac_get lag2.100) 209 ip link set dev lag2.100 master br1 210 211 ip link add name br2 type bridge vlan_filtering 0 212 ip link set dev br2 address $(mac_get lag2.200) 213 ip link set dev lag2.200 master br2 214 215 ip link set dev $swp1 up 216 ip link set dev $swp4 up 217 ip link set dev br1 up 218 ip link set dev br2 up 219 220 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 221 __addr_add_del br2 add 192.0.2.18/28 2001:db8:3::2/64 222 223 team_create lag3 lacp 224 ip link set dev lag3 addrgenmode none 225 ip link set dev lag3 address $(mac_get $swp2) 226 ip link set dev $swp2 master lag3 227 ip link set dev $swp3 master lag3 228 ip link set dev $swp2 up 229 ip link set dev $swp3 up 230 231 vlan_create lag3 100 232 vlan_create lag3 200 233 234 __addr_add_del lag3.100 add 192.0.2.129/28 2001:db8:2::1/64 235 __addr_add_del lag3.200 add 192.0.2.145/28 2001:db8:4::1/64 236} 237 238router_destroy() 239{ 240 __addr_add_del lag3.200 del 192.0.2.145/28 2001:db8:4::1/64 241 __addr_add_del lag3.100 del 192.0.2.129/28 2001:db8:2::1/64 242 243 vlan_destroy lag3 200 244 vlan_destroy lag3 100 245 246 ip link set dev $swp3 down 247 ip link set dev $swp2 down 248 ip link set dev $swp3 nomaster 249 ip link set dev $swp2 nomaster 250 team_destroy lag3 251 252 __addr_add_del br2 del 192.0.2.18/28 2001:db8:3::2/64 253 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 254 255 ip link set dev br2 down 256 ip link set dev br1 down 257 ip link set dev $swp4 down 258 ip link set dev $swp1 down 259 260 ip link set dev lag2.200 nomaster 261 ip link del dev br2 262 263 ip link set dev lag2.100 nomaster 264 ip link del dev br1 265 266 vlan_destroy lag2 200 267 vlan_destroy lag2 100 268 269 ip link set dev $swp4 nomaster 270 ip link set dev $swp1 nomaster 271 team_destroy lag2 272} 273 274config_remaster_lag2() 275{ 276 log_info "Remaster bridge slaves" 277 278 ip link set dev lag2.200 nomaster 279 ip link set dev lag2.100 nomaster 280 sleep 2 281 ip link set dev lag2.100 master br1 282 ip link set dev lag2.200 master br2 283} 284 285config_deslave() 286{ 287 local netdev=$1; shift 288 289 log_info "Deslave $netdev" 290 ip link set dev $netdev down 291 ip link set dev $netdev nomaster 292 ip link set dev $netdev up 293} 294 295config_deslave_swp1() 296{ 297 config_deslave $swp1 298} 299 300config_deslave_swp2() 301{ 302 config_deslave $swp2 303} 304 305config_deslave_swp3() 306{ 307 config_deslave $swp3 308} 309 310config_deslave_swp4() 311{ 312 config_deslave $swp4 313} 314 315config_enslave() 316{ 317 local netdev=$1; shift 318 local master=$1; shift 319 320 log_info "Enslave $netdev to $master" 321 ip link set dev $netdev down 322 ip link set dev $netdev master $master 323 ip link set dev $netdev up 324} 325 326config_enslave_swp1() 327{ 328 config_enslave $swp1 lag2 329} 330 331config_enslave_swp2() 332{ 333 config_enslave $swp2 lag3 334} 335 336config_enslave_swp3() 337{ 338 config_enslave $swp3 lag3 339} 340 341config_enslave_swp4() 342{ 343 config_enslave $swp4 lag2 344} 345 346config_wait() 347{ 348 setup_wait_dev lag2 349 setup_wait_dev lag3 350} 351 352setup_prepare() 353{ 354 h1=${NETIFS[p1]} 355 swp1=${NETIFS[p2]} 356 357 swp2=${NETIFS[p3]} 358 h2=${NETIFS[p4]} 359 360 swp3=${NETIFS[p5]} 361 h3=${NETIFS[p6]} 362 363 h4=${NETIFS[p7]} 364 swp4=${NETIFS[p8]} 365 366 vrf_prepare 367 368 h1_create 369 h2_create 370 371 router_create 372 373 forwarding_enable 374} 375 376cleanup() 377{ 378 pre_cleanup 379 380 forwarding_restore 381 382 router_destroy 383 384 h2_destroy 385 h1_destroy 386 387 vrf_cleanup 388} 389 390ping_ipv4() 391{ 392 ping_test lag1.100 192.0.2.130 ": via 100" 393 ping_test lag1.200 192.0.2.146 ": via 200" 394} 395 396ping_ipv6() 397{ 398 ping6_test lag1.100 2001:db8:2::2 ": via 100" 399 ping6_test lag1.200 2001:db8:4::2 ": via 200" 400} 401 402trap cleanup EXIT 403 404setup_prepare 405setup_wait 406 407tests_run 408 409exit $EXIT_STATUS 410