324 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 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_ipv431 ping_ipv632 33 $(: exercise remastering of LAG2 slaves )34 config_deslave_swp435 config_wait36 ping_ipv437 ping_ipv638 config_enslave_swp439 config_deslave_swp140 config_wait41 ping_ipv442 ping_ipv643 config_deslave_swp444 config_enslave_swp145 config_enslave_swp446 config_wait47 ping_ipv448 ping_ipv649 50 $(: exercise remastering of LAG2 itself )51 config_remaster_lag252 config_wait53 ping_ipv454 ping_ipv655 56 $(: exercise remastering of LAG3 slaves )57 config_deslave_swp258 config_wait59 ping_ipv460 ping_ipv661 config_enslave_swp262 config_deslave_swp363 config_wait64 ping_ipv465 ping_ipv666 config_deslave_swp267 config_enslave_swp368 config_enslave_swp269 config_wait70 ping_ipv471 ping_ipv672 73 $(: move LAG3 to a bridge and then out )74 config_remaster_lag375 config_wait76 ping_ipv477 ping_ipv678 "}79NUM_NETIFS=880: ${lib_dir:=.}81source $lib_dir/lib.sh82$EXTRA_SOURCE83 84h1_create()85{86 team_create lag1 lacp87 ip link set dev lag1 address $(mac_get $h1)88 ip link set dev $h1 master lag189 ip link set dev $h4 master lag190 simple_if_init lag1 192.0.2.1/28 2001:db8:1::1/6491 ip link set dev $h1 up92 ip link set dev $h4 up93 ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.294 ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::295}96 97h1_destroy()98{99 ip -6 route del 2001:db8:2::/64 vrf vlag1100 ip -4 route del 192.0.2.128/28 vrf vlag1101 ip link set dev $h4 down102 ip link set dev $h1 down103 simple_if_fini lag1 192.0.2.1/28 2001:db8:1::1/64104 ip link set dev $h4 nomaster105 ip link set dev $h1 nomaster106 team_destroy lag1107}108 109h2_create()110{111 team_create lag4 lacp112 ip link set dev lag4 address $(mac_get $h2)113 ip link set dev $h2 master lag4114 ip link set dev $h3 master lag4115 simple_if_init lag4 192.0.2.130/28 2001:db8:2::2/64116 ip link set dev $h2 up117 ip link set dev $h3 up118 ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129119 ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1120}121 122h2_destroy()123{124 ip -6 route del 2001:db8:1::/64 vrf vlag4125 ip -4 route del 192.0.2.0/28 vrf vlag4126 ip link set dev $h3 down127 ip link set dev $h2 down128 simple_if_fini lag4 192.0.2.130/28 2001:db8:2::2/64129 ip link set dev $h3 nomaster130 ip link set dev $h2 nomaster131 team_destroy lag4132}133 134router_create()135{136 team_create lag2 lacp137 ip link set dev lag2 address $(mac_get $swp1)138 ip link set dev $swp1 master lag2139 ip link set dev $swp4 master lag2140 141 ip link add name br1 address $(mac_get lag2) \142 type bridge vlan_filtering 1143 ip link set dev lag2 master br1144 145 ip link set dev $swp1 up146 ip link set dev $swp4 up147 ip link set dev br1 up148 149 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64150 151 team_create lag3 lacp152 ip link set dev lag3 address $(mac_get $swp2)153 ip link set dev $swp2 master lag3154 ip link set dev $swp3 master lag3155 ip link set dev $swp2 up156 ip link set dev $swp3 up157 __addr_add_del lag3 add 192.0.2.129/28 2001:db8:2::1/64158}159 160router_destroy()161{162 __addr_add_del lag3 del 192.0.2.129/28 2001:db8:2::1/64163 ip link set dev $swp3 down164 ip link set dev $swp2 down165 ip link set dev $swp3 nomaster166 ip link set dev $swp2 nomaster167 team_destroy lag3168 169 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64170 171 ip link set dev $swp4 down172 ip link set dev $swp1 down173 ip link set dev br1 down174 175 ip link set dev lag2 nomaster176 ip link del dev br1177 178 ip link set dev $swp4 nomaster179 ip link set dev $swp1 nomaster180 team_destroy lag2181}182 183config_remaster_lag2()184{185 log_info "Remaster bridge slave"186 187 ip link set dev lag2 nomaster188 sleep 2189 ip link set dev lag2 master br1190}191 192config_remaster_lag3()193{194 log_info "Move lag3 to the bridge, then out again"195 196 ip link set dev lag3 master br1197 sleep 2198 ip link set dev lag3 nomaster199}200 201config_deslave()202{203 local netdev=$1; shift204 205 log_info "Deslave $netdev"206 ip link set dev $netdev down207 ip link set dev $netdev nomaster208 ip link set dev $netdev up209}210 211config_deslave_swp1()212{213 config_deslave $swp1214}215 216config_deslave_swp2()217{218 config_deslave $swp2219}220 221config_deslave_swp3()222{223 config_deslave $swp3224}225 226config_deslave_swp4()227{228 config_deslave $swp4229}230 231config_enslave()232{233 local netdev=$1; shift234 local master=$1; shift235 236 log_info "Enslave $netdev to $master"237 ip link set dev $netdev down238 ip link set dev $netdev master $master239 ip link set dev $netdev up240}241 242config_enslave_swp1()243{244 config_enslave $swp1 lag2245}246 247config_enslave_swp2()248{249 config_enslave $swp2 lag3250}251 252config_enslave_swp3()253{254 config_enslave $swp3 lag3255}256 257config_enslave_swp4()258{259 config_enslave $swp4 lag2260}261 262config_wait()263{264 setup_wait_dev lag2265 setup_wait_dev lag3266}267 268setup_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_prepare283 284 h1_create285 h2_create286 287 router_create288 289 forwarding_enable290}291 292cleanup()293{294 pre_cleanup295 296 forwarding_restore297 298 router_destroy299 300 h2_destroy301 h1_destroy302 303 vrf_cleanup304}305 306ping_ipv4()307{308 ping_test lag1 192.0.2.130309}310 311ping_ipv6()312{313 ping6_test lag1 2001:db8:2::2314}315 316trap cleanup EXIT317 318setup_prepare319setup_wait320 321tests_run322 323exit $EXIT_STATUS324