1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4# +----------------------------+ +--------------------------+ 5# | H1 (vrf) | | H2 (vrf) | 6# | | | | 7# | + LAG1 (team) | | + LAG4 (team) | 8# | | 192.0.2.1/28 | | | 192.0.2.130/28 | 9# | | 2001:db8:1::1/64 | | | 2001:db8:2::2/64 | 10# | __^___ | | __^_____ | 11# | / \ | | / \ | 12# | + $h1 + $h4 | | + $h2 + $h3 | 13# | | | | | | | | 14# +----|--------|--------------+ +-|----------|-------------+ 15# | | | | 16# +----|--------|------------------------------------|----------|-------------+ 17# | SW | | | | | 18# | + $swp1 + $swp4 + $swp2 + $swp3 | 19# | \__ ___/ \__ _____/ | 20# | v v | 21# | +------|-------------------------------+ | | 22# | | + LAG2 BR1 (802.1q) | + LAG3 (team) | 23# | | (team) 192.0.2.2/28 | 192.0.2.129/28 | 24# | | 2001:db8:1::2/64 | 2001:db8:2::1/64 | 25# | | | | 26# | +--------------------------------------+ | 27# +---------------------------------------------------------------------------+ 28 29: ${ALL_TESTS:=" 30 ping_ipv4 31 ping_ipv6 32 33 $(: exercise remastering of LAG2 slaves ) 34 config_deslave_swp4 35 config_wait 36 ping_ipv4 37 ping_ipv6 38 config_enslave_swp4 39 config_deslave_swp1 40 config_wait 41 ping_ipv4 42 ping_ipv6 43 config_deslave_swp4 44 config_enslave_swp1 45 config_enslave_swp4 46 config_wait 47 ping_ipv4 48 ping_ipv6 49 50 $(: exercise remastering of LAG2 itself ) 51 config_remaster_lag2 52 config_wait 53 ping_ipv4 54 ping_ipv6 55 56 $(: exercise remastering of LAG3 slaves ) 57 config_deslave_swp2 58 config_wait 59 ping_ipv4 60 ping_ipv6 61 config_enslave_swp2 62 config_deslave_swp3 63 config_wait 64 ping_ipv4 65 ping_ipv6 66 config_deslave_swp2 67 config_enslave_swp3 68 config_enslave_swp2 69 config_wait 70 ping_ipv4 71 ping_ipv6 72 73 $(: move LAG3 to a bridge and then out ) 74 config_remaster_lag3 75 config_wait 76 ping_ipv4 77 ping_ipv6 78 "} 79REQUIRE_TEAMD="yes" 80NUM_NETIFS=8 81: ${lib_dir:=.} 82source $lib_dir/lib.sh 83$EXTRA_SOURCE 84 85h1_create() 86{ 87 team_create lag1 lacp 88 ip link set dev lag1 address $(mac_get $h1) 89 ip link set dev $h1 master lag1 90 ip link set dev $h4 master lag1 91 simple_if_init lag1 192.0.2.1/28 2001:db8:1::1/64 92 ip link set dev $h1 up 93 ip link set dev $h4 up 94 ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.2 95 ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::2 96} 97 98h1_destroy() 99{ 100 ip -6 route del 2001:db8:2::/64 vrf vlag1 101 ip -4 route del 192.0.2.128/28 vrf vlag1 102 ip link set dev $h4 down 103 ip link set dev $h1 down 104 simple_if_fini lag1 192.0.2.1/28 2001:db8:1::1/64 105 ip link set dev $h4 nomaster 106 ip link set dev $h1 nomaster 107 team_destroy lag1 108} 109 110h2_create() 111{ 112 team_create lag4 lacp 113 ip link set dev lag4 address $(mac_get $h2) 114 ip link set dev $h2 master lag4 115 ip link set dev $h3 master lag4 116 simple_if_init lag4 192.0.2.130/28 2001:db8:2::2/64 117 ip link set dev $h2 up 118 ip link set dev $h3 up 119 ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129 120 ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1 121} 122 123h2_destroy() 124{ 125 ip -6 route del 2001:db8:1::/64 vrf vlag4 126 ip -4 route del 192.0.2.0/28 vrf vlag4 127 ip link set dev $h3 down 128 ip link set dev $h2 down 129 simple_if_fini lag4 192.0.2.130/28 2001:db8:2::2/64 130 ip link set dev $h3 nomaster 131 ip link set dev $h2 nomaster 132 team_destroy lag4 133} 134 135router_create() 136{ 137 team_create lag2 lacp 138 ip link set dev lag2 address $(mac_get $swp1) 139 ip link set dev $swp1 master lag2 140 ip link set dev $swp4 master lag2 141 142 ip link add name br1 address $(mac_get lag2) \ 143 type bridge vlan_filtering 1 144 ip link set dev lag2 master br1 145 146 ip link set dev $swp1 up 147 ip link set dev $swp4 up 148 ip link set dev br1 up 149 150 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 151 152 team_create lag3 lacp 153 ip link set dev lag3 address $(mac_get $swp2) 154 ip link set dev $swp2 master lag3 155 ip link set dev $swp3 master lag3 156 ip link set dev $swp2 up 157 ip link set dev $swp3 up 158 __addr_add_del lag3 add 192.0.2.129/28 2001:db8:2::1/64 159} 160 161router_destroy() 162{ 163 __addr_add_del lag3 del 192.0.2.129/28 2001:db8:2::1/64 164 ip link set dev $swp3 down 165 ip link set dev $swp2 down 166 ip link set dev $swp3 nomaster 167 ip link set dev $swp2 nomaster 168 team_destroy lag3 169 170 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 171 172 ip link set dev $swp4 down 173 ip link set dev $swp1 down 174 ip link set dev br1 down 175 176 ip link set dev lag2 nomaster 177 ip link del dev br1 178 179 ip link set dev $swp4 nomaster 180 ip link set dev $swp1 nomaster 181 team_destroy lag2 182} 183 184config_remaster_lag2() 185{ 186 log_info "Remaster bridge slave" 187 188 ip link set dev lag2 nomaster 189 sleep 2 190 ip link set dev lag2 master br1 191} 192 193config_remaster_lag3() 194{ 195 log_info "Move lag3 to the bridge, then out again" 196 197 ip link set dev lag3 master br1 198 sleep 2 199 ip link set dev lag3 nomaster 200} 201 202config_deslave() 203{ 204 local netdev=$1; shift 205 206 log_info "Deslave $netdev" 207 ip link set dev $netdev down 208 ip link set dev $netdev nomaster 209 ip link set dev $netdev up 210} 211 212config_deslave_swp1() 213{ 214 config_deslave $swp1 215} 216 217config_deslave_swp2() 218{ 219 config_deslave $swp2 220} 221 222config_deslave_swp3() 223{ 224 config_deslave $swp3 225} 226 227config_deslave_swp4() 228{ 229 config_deslave $swp4 230} 231 232config_enslave() 233{ 234 local netdev=$1; shift 235 local master=$1; shift 236 237 log_info "Enslave $netdev to $master" 238 ip link set dev $netdev down 239 ip link set dev $netdev master $master 240 ip link set dev $netdev up 241} 242 243config_enslave_swp1() 244{ 245 config_enslave $swp1 lag2 246} 247 248config_enslave_swp2() 249{ 250 config_enslave $swp2 lag3 251} 252 253config_enslave_swp3() 254{ 255 config_enslave $swp3 lag3 256} 257 258config_enslave_swp4() 259{ 260 config_enslave $swp4 lag2 261} 262 263config_wait() 264{ 265 setup_wait_dev lag2 266 setup_wait_dev lag3 267} 268 269setup_prepare() 270{ 271 h1=${NETIFS[p1]} 272 swp1=${NETIFS[p2]} 273 274 swp2=${NETIFS[p3]} 275 h2=${NETIFS[p4]} 276 277 swp3=${NETIFS[p5]} 278 h3=${NETIFS[p6]} 279 280 h4=${NETIFS[p7]} 281 swp4=${NETIFS[p8]} 282 283 vrf_prepare 284 285 h1_create 286 h2_create 287 288 router_create 289 290 forwarding_enable 291} 292 293cleanup() 294{ 295 pre_cleanup 296 297 forwarding_restore 298 299 router_destroy 300 301 h2_destroy 302 h1_destroy 303 304 vrf_cleanup 305} 306 307ping_ipv4() 308{ 309 ping_test lag1 192.0.2.130 310} 311 312ping_ipv6() 313{ 314 ping6_test lag1 2001:db8:2::2 315} 316 317trap cleanup EXIT 318 319setup_prepare 320setup_wait 321 322tests_run 323 324exit $EXIT_STATUS 325