| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| # +--------------------------------------------+ |
| # | H1 (vrf) | |
| # | | |
| # | + LAG1.100 + LAG1.200 | |
| # | | 192.0.2.1/28 | 192.0.2.17/28 | |
| # | | 2001:db8:1::1/64 | 2001:db8:3:1/64 | |
| # | \___________ _______/ | |
| # | v | |
| # | + LAG1 (team) | |
| # | | | |
| # | ____^____ | |
| # | / \ | |
| # | + $h1 + $h4 | |
| # | | | | |
| # +----------|-----------|---------------------+ |
| # | | |
| # +----------|-----------|---------------------+ |
| # | SW | | | |
| # | + $swp1 + $swp4 | |
| # | \____ ____/ | |
| # | v | |
| # | LAG2 (team) + | |
| # | | | |
| # | _______^______________ | |
| # | / \ | |
| # | +------|------------+ +-------|----------+ | |
| # | | + LAG2.100 | | + LAG2.200 | | |
| # | | | | | | |
| # | | BR1 (802.1d) | | BR2 (802.1d) | | |
| # | | 192.0.2.2/28 | | 192.0.2.18/28 | | |
| # | | 2001:db8:1::2/64 | | 2001:db8:3:2/64 | | |
| # | | | | | | |
| # | +-------------------+ +------------------+ | |
| # | | |
| # | + LAG3.100 + LAG3.200 | |
| # | | 192.0.2.129/28 | 192.0.2.145/28 | |
| # | | 2001:db8:2::1/64 | 2001:db8:4::1/64 | |
| # | | | | |
| # | \_________ ___________/ | |
| # | v | |
| # | + LAG3 (team) | |
| # | ____|____ | |
| # | / \ | |
| # | + $swp2 + $swp3 | |
| # | | | | |
| # +-------|---------|--------------------------+ |
| # | | |
| # +-------|---------|--------------------------+ |
| # | | | | |
| # | + $h2 + $h3 | |
| # | \____ ___/ | |
| # | | | |
| # | + LAG4 (team) | |
| # | | | |
| # | __________^__________ | |
| # | / \ | |
| # | | | | |
| # | + LAG4.100 + LAG4.200 | |
| # | 192.0.2.130/28 192.0.2.146/28 | |
| # | 2001:db8:2::2/64 2001:db8:4::2/64 | |
| # | | |
| # | H2 (vrf) | |
| # +--------------------------------------------+ |
| |
| 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 |
| " |
| NUM_NETIFS=8 |
| source lib.sh |
| |
| h1_create() |
| { |
| team_create lag1 lacp |
| ip link set dev lag1 addrgenmode none |
| 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 |
| ip link set dev $h1 up |
| ip link set dev $h4 up |
| |
| vlan_create lag1 100 vlag1 192.0.2.1/28 2001:db8:1::1/64 |
| vlan_create lag1 200 vlag1 192.0.2.17/28 2001:db8:3::1/64 |
| |
| 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 |
| |
| ip -4 route add 192.0.2.144/28 vrf vlag1 nexthop via 192.0.2.18 |
| ip -6 route add 2001:db8:4::/64 vrf vlag1 nexthop via 2001:db8:3::2 |
| } |
| |
| h1_destroy() |
| { |
| ip -6 route del 2001:db8:4::/64 vrf vlag1 |
| ip -4 route del 192.0.2.144/28 vrf vlag1 |
| |
| ip -6 route del 2001:db8:2::/64 vrf vlag1 |
| ip -4 route del 192.0.2.128/28 vrf vlag1 |
| |
| vlan_destroy lag1 200 |
| vlan_destroy lag1 100 |
| |
| ip link set dev $h4 down |
| ip link set dev $h1 down |
| simple_if_fini lag1 |
| 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 addrgenmode none |
| 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 |
| ip link set dev $h2 up |
| ip link set dev $h3 up |
| |
| vlan_create lag4 100 vlag4 192.0.2.130/28 2001:db8:2::2/64 |
| vlan_create lag4 200 vlag4 192.0.2.146/28 2001:db8:4::2/64 |
| |
| 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 |
| |
| ip -4 route add 192.0.2.16/28 vrf vlag4 nexthop via 192.0.2.145 |
| ip -6 route add 2001:db8:3::/64 vrf vlag4 nexthop via 2001:db8:4::1 |
| } |
| |
| h2_destroy() |
| { |
| ip -6 route del 2001:db8:3::/64 vrf vlag4 |
| ip -4 route del 192.0.2.16/28 vrf vlag4 |
| |
| ip -6 route del 2001:db8:1::/64 vrf vlag4 |
| ip -4 route del 192.0.2.0/28 vrf vlag4 |
| |
| vlan_destroy lag4 200 |
| vlan_destroy lag4 100 |
| |
| ip link set dev $h3 down |
| ip link set dev $h2 down |
| simple_if_fini lag4 |
| 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 addrgenmode none |
| ip link set dev lag2 address $(mac_get $swp1) |
| ip link set dev $swp1 master lag2 |
| ip link set dev $swp4 master lag2 |
| |
| vlan_create lag2 100 |
| vlan_create lag2 200 |
| |
| ip link add name br1 type bridge vlan_filtering 0 |
| ip link set dev br1 address $(mac_get lag2.100) |
| ip link set dev lag2.100 master br1 |
| |
| ip link add name br2 type bridge vlan_filtering 0 |
| ip link set dev br2 address $(mac_get lag2.200) |
| ip link set dev lag2.200 master br2 |
| |
| ip link set dev $swp1 up |
| ip link set dev $swp4 up |
| ip link set dev br1 up |
| ip link set dev br2 up |
| |
| __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 |
| __addr_add_del br2 add 192.0.2.18/28 2001:db8:3::2/64 |
| |
| team_create lag3 lacp |
| ip link set dev lag3 addrgenmode none |
| 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 |
| |
| vlan_create lag3 100 |
| vlan_create lag3 200 |
| |
| __addr_add_del lag3.100 add 192.0.2.129/28 2001:db8:2::1/64 |
| __addr_add_del lag3.200 add 192.0.2.145/28 2001:db8:4::1/64 |
| } |
| |
| router_destroy() |
| { |
| __addr_add_del lag3.200 del 192.0.2.145/28 2001:db8:4::1/64 |
| __addr_add_del lag3.100 del 192.0.2.129/28 2001:db8:2::1/64 |
| |
| vlan_destroy lag3 200 |
| vlan_destroy lag3 100 |
| |
| 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 br2 del 192.0.2.18/28 2001:db8:3::2/64 |
| __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 |
| |
| ip link set dev br2 down |
| ip link set dev br1 down |
| ip link set dev $swp4 down |
| ip link set dev $swp1 down |
| |
| ip link set dev lag2.200 nomaster |
| ip link del dev br2 |
| |
| ip link set dev lag2.100 nomaster |
| ip link del dev br1 |
| |
| vlan_destroy lag2 200 |
| vlan_destroy lag2 100 |
| |
| ip link set dev $swp4 nomaster |
| ip link set dev $swp1 nomaster |
| team_destroy lag2 |
| } |
| |
| config_remaster_lag2() |
| { |
| log_info "Remaster bridge slaves" |
| |
| ip link set dev lag2.200 nomaster |
| ip link set dev lag2.100 nomaster |
| sleep 2 |
| ip link set dev lag2.100 master br1 |
| ip link set dev lag2.200 master br2 |
| } |
| |
| 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.100 192.0.2.130 ": via 100" |
| ping_test lag1.200 192.0.2.146 ": via 200" |
| } |
| |
| ping_ipv6() |
| { |
| ping6_test lag1.100 2001:db8:2::2 ": via 100" |
| ping6_test lag1.200 2001:db8:4::2 ": via 200" |
| } |
| |
| trap cleanup EXIT |
| |
| setup_prepare |
| setup_wait |
| |
| tests_run |
| |
| exit $EXIT_STATUS |