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 "} 79 NUM_NETIFS=8 80 : ${lib_dir:=.} 81 source $lib_dir/lib.sh 82 $EXTRA_SOURCE 83 84 h1_create() 85 { 86 team_create lag1 lacp 87 ip link set dev lag1 address $(mac_get $h1) 88 ip link set dev $h1 master lag1 89 ip link set dev $h4 master lag1 90 simple_if_init lag1 192.0.2.1/28 2001:db8:1::1/64 91 ip link set dev $h1 up 92 ip link set dev $h4 up 93 ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.2 94 ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::2 95 } 96 97 h1_destroy() 98 { 99 ip -6 route del 2001:db8:2::/64 vrf vlag1 100 ip -4 route del 192.0.2.128/28 vrf vlag1 101 ip link set dev $h4 down 102 ip link set dev $h1 down 103 simple_if_fini lag1 192.0.2.1/28 2001:db8:1::1/64 104 ip link set dev $h4 nomaster 105 ip link set dev $h1 nomaster 106 team_destroy lag1 107 } 108 109 h2_create() 110 { 111 team_create lag4 lacp 112 ip link set dev lag4 address $(mac_get $h2) 113 ip link set dev $h2 master lag4 114 ip link set dev $h3 master lag4 115 simple_if_init lag4 192.0.2.130/28 2001:db8:2::2/64 116 ip link set dev $h2 up 117 ip link set dev $h3 up 118 ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129 119 ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1 120 } 121 122 h2_destroy() 123 { 124 ip -6 route del 2001:db8:1::/64 vrf vlag4 125 ip -4 route del 192.0.2.0/28 vrf vlag4 126 ip link set dev $h3 down 127 ip link set dev $h2 down 128 simple_if_fini lag4 192.0.2.130/28 2001:db8:2::2/64 129 ip link set dev $h3 nomaster 130 ip link set dev $h2 nomaster 131 team_destroy lag4 132 } 133 134 router_create() 135 { 136 team_create lag2 lacp 137 ip link set dev lag2 address $(mac_get $swp1) 138 ip link set dev $swp1 master lag2 139 ip link set dev $swp4 master lag2 140 141 ip link add name br1 address $(mac_get lag2) \ 142 type bridge vlan_filtering 1 143 ip link set dev lag2 master br1 144 145 ip link set dev $swp1 up 146 ip link set dev $swp4 up 147 ip link set dev br1 up 148 149 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 150 151 team_create lag3 lacp 152 ip link set dev lag3 address $(mac_get $swp2) 153 ip link set dev $swp2 master lag3 154 ip link set dev $swp3 master lag3 155 ip link set dev $swp2 up 156 ip link set dev $swp3 up 157 __addr_add_del lag3 add 192.0.2.129/28 2001:db8:2::1/64 158 } 159 160 router_destroy() 161 { 162 __addr_add_del lag3 del 192.0.2.129/28 2001:db8:2::1/64 163 ip link set dev $swp3 down 164 ip link set dev $swp2 down 165 ip link set dev $swp3 nomaster 166 ip link set dev $swp2 nomaster 167 team_destroy lag3 168 169 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 170 171 ip link set dev $swp4 down 172 ip link set dev $swp1 down 173 ip link set dev br1 down 174 175 ip link set dev lag2 nomaster 176 ip link del dev br1 177 178 ip link set dev $swp4 nomaster 179 ip link set dev $swp1 nomaster 180 team_destroy lag2 181 } 182 183 config_remaster_lag2() 184 { 185 log_info "Remaster bridge slave" 186 187 ip link set dev lag2 nomaster 188 sleep 2 189 ip link set dev lag2 master br1 190 } 191 192 config_remaster_lag3() 193 { 194 log_info "Move lag3 to the bridge, then out again" 195 196 ip link set dev lag3 master br1 197 sleep 2 198 ip link set dev lag3 nomaster 199 } 200 201 config_deslave() 202 { 203 local netdev=$1; shift 204 205 log_info "Deslave $netdev" 206 ip link set dev $netdev down 207 ip link set dev $netdev nomaster 208 ip link set dev $netdev up 209 } 210 211 config_deslave_swp1() 212 { 213 config_deslave $swp1 214 } 215 216 config_deslave_swp2() 217 { 218 config_deslave $swp2 219 } 220 221 config_deslave_swp3() 222 { 223 config_deslave $swp3 224 } 225 226 config_deslave_swp4() 227 { 228 config_deslave $swp4 229 } 230 231 config_enslave() 232 { 233 local netdev=$1; shift 234 local master=$1; shift 235 236 log_info "Enslave $netdev to $master" 237 ip link set dev $netdev down 238 ip link set dev $netdev master $master 239 ip link set dev $netdev up 240 } 241 242 config_enslave_swp1() 243 { 244 config_enslave $swp1 lag2 245 } 246 247 config_enslave_swp2() 248 { 249 config_enslave $swp2 lag3 250 } 251 252 config_enslave_swp3() 253 { 254 config_enslave $swp3 lag3 255 } 256 257 config_enslave_swp4() 258 { 259 config_enslave $swp4 lag2 260 } 261 262 config_wait() 263 { 264 setup_wait_dev lag2 265 setup_wait_dev lag3 266 } 267 268 setup_prepare() 269 { 270 h1=${NETIFS[p1]} 271 swp1=${NETIFS[p2]} 272 273 swp2=${NETIFS[p3]} 274 h2=${NETIFS[p4]} 275 276 swp3=${NETIFS[p5]} 277 h3=${NETIFS[p6]} 278 279 h4=${NETIFS[p7]} 280 swp4=${NETIFS[p8]} 281 282 vrf_prepare 283 284 h1_create 285 h2_create 286 287 router_create 288 289 forwarding_enable 290 } 291 292 cleanup() 293 { 294 pre_cleanup 295 296 forwarding_restore 297 298 router_destroy 299 300 h2_destroy 301 h1_destroy 302 303 vrf_cleanup 304 } 305 306 ping_ipv4() 307 { 308 ping_test lag1 192.0.2.130 309 } 310 311 ping_ipv6() 312 { 313 ping6_test lag1 2001:db8:2::2 314 } 315 316 trap cleanup EXIT 317 318 setup_prepare 319 setup_wait 320 321 tests_run 322 323 exit $EXIT_STATUS
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.