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