1*870bb1d2Syamaguchi# $NetBSD: t_lagg.sh,v 1.8 2022/03/31 03:26:33 yamaguchi Exp $ 220274667Syamaguchi# 320274667Syamaguchi# Copyright (c) 2021 Internet Initiative Japan Inc. 420274667Syamaguchi# All rights reserved. 520274667Syamaguchi# 620274667Syamaguchi# Redistribution and use in source and binary forms, with or without 720274667Syamaguchi# modification, are permitted provided that the following conditions 820274667Syamaguchi# are met: 920274667Syamaguchi# 1. Redistributions of source code must retain the above copyright 1020274667Syamaguchi# notice, this list of conditions and the following disclaimer. 1120274667Syamaguchi# 2. Redistributions in binary form must reproduce the above copyright 1220274667Syamaguchi# notice, this list of conditions and the following disclaimer in the 1320274667Syamaguchi# documentation and/or other materials provided with the distribution. 1420274667Syamaguchi# 1520274667Syamaguchi# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 1620274667Syamaguchi# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1720274667Syamaguchi# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1820274667Syamaguchi# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 1920274667Syamaguchi# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2020274667Syamaguchi# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2120274667Syamaguchi# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2220274667Syamaguchi# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2320274667Syamaguchi# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2420274667Syamaguchi# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2520274667Syamaguchi# POSSIBILITY OF SUCH DAMAGE. 2620274667Syamaguchi# 2720274667Syamaguchi 2820274667SyamaguchiSOCK_HOST0=unix://commsock0 2920274667SyamaguchiSOCK_HOST1=unix://commsock1 3020274667SyamaguchiSOCK_HOST2=unix://commsock2 3120274667SyamaguchiBUS0=bus0 3220274667SyamaguchiBUS1=bus1 3320274667SyamaguchiBUS2=bus2 3420274667SyamaguchiIP4ADDR0=192.168.0.1 3520274667SyamaguchiIP4ADDR1=192.168.0.2 3620274667SyamaguchiIP4ADDR2=192.168.1.1 3720274667SyamaguchiIP4ADDR3=192.168.1.2 3820274667SyamaguchiIP6ADDR0=fc00::1 3920274667SyamaguchiIP6ADDR1=fc00::2 4020274667SyamaguchiIP6ADDR2=fc00:1::1 4120274667SyamaguchiIP6ADDR3=fc00:1::2 4220274667SyamaguchiWAITTIME=20 4320274667Syamaguchi 4420274667SyamaguchiDEBUG=${DEBUG:-false} 4520274667Syamaguchi 4620274667Syamaguchiwait_state() 4720274667Syamaguchi{ 4820274667Syamaguchi local state=$1 4920274667Syamaguchi local if_lagg=$2 5020274667Syamaguchi local if_port=$3 5120274667Syamaguchi 5220274667Syamaguchi local n=$WAITTIME 5320274667Syamaguchi local cmd_grep="grep -q ${state}" 5420274667Syamaguchi 5520274667Syamaguchi if [ x"$if_port" != x"" ]; then 5620274667Syamaguchi cmd_grep="grep $if_port | $cmd_grep" 5720274667Syamaguchi fi 5820274667Syamaguchi 5920274667Syamaguchi for i in $(seq $n); do 6020274667Syamaguchi rump.ifconfig $if_lagg | eval $cmd_grep 6120274667Syamaguchi if [ $? = 0 ] ; then 6220274667Syamaguchi $DEBUG && echo "wait for $i seconds." 6320274667Syamaguchi return 0 6420274667Syamaguchi fi 6520274667Syamaguchi 6620274667Syamaguchi sleep 1 6720274667Syamaguchi done 6820274667Syamaguchi 6920274667Syamaguchi $DEBUG && rump.ifconfig -v $if_lagg 7020274667Syamaguchi atf_fail "Couldn't be ${state} for $n seconds." 7120274667Syamaguchi} 7220274667Syamaguchiwait_for_distributing() 7320274667Syamaguchi{ 7420274667Syamaguchi 7520274667Syamaguchi wait_state "DISTRIBUTING" $* 7620274667Syamaguchi} 7720274667Syamaguchi 7820274667Syamaguchiexpected_inactive() 7920274667Syamaguchi{ 8020274667Syamaguchi local if_lagg=$1 8120274667Syamaguchi local if_port=$2 8220274667Syamaguchi 8320274667Syamaguchi sleep 3 # wait a little 8420274667Syamaguchi atf_check -s exit:0 -o not-match:"${if_port}.*ACTIVE" \ 8520274667Syamaguchi rump.ifconfig ${if_lagg} 8620274667Syamaguchi} 8720274667Syamaguchi 88d51dce31Syamaguchisetup_l2tp_ipv4tunnel() 89d51dce31Syamaguchi{ 90d51dce31Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 91d51dce31Syamaguchi 92d51dce31Syamaguchi local a_addr0=10.0.0.1 93d51dce31Syamaguchi local a_addr1=10.0.0.2 94d51dce31Syamaguchi local b_addr0=10.0.1.1 95d51dce31Syamaguchi local b_addr1=10.0.1.2 96d51dce31Syamaguchi local c_addr0=10.0.2.1 97d51dce31Syamaguchi local c_addr1=10.0.2.2 98d51dce31Syamaguchi 99d51dce31Syamaguchi local a_session0=1001 100d51dce31Syamaguchi local a_session1=1002 101d51dce31Syamaguchi local b_session0=1011 102d51dce31Syamaguchi local b_session1=1012 103d51dce31Syamaguchi local c_session0=1021 104d51dce31Syamaguchi local c_session1=1022 105d51dce31Syamaguchi 106d51dce31Syamaguchi rump_server_add_iface $SOCK_HOST0 l2tp0 107d51dce31Syamaguchi rump_server_add_iface $SOCK_HOST0 l2tp1 108d51dce31Syamaguchi rump_server_add_iface $SOCK_HOST0 l2tp2 109d51dce31Syamaguchi rump_server_add_iface $SOCK_HOST1 l2tp0 110d51dce31Syamaguchi rump_server_add_iface $SOCK_HOST1 l2tp1 111d51dce31Syamaguchi rump_server_add_iface $SOCK_HOST1 l2tp2 112d51dce31Syamaguchi 113d51dce31Syamaguchi 114d51dce31Syamaguchi export RUMP_SERVER=$SOCK_HOST0 115d51dce31Syamaguchi $atf_ifconfig shmif0 $a_addr0/24 116d51dce31Syamaguchi $atf_ifconfig l2tp0 tunnel $a_addr0 $a_addr1 117d51dce31Syamaguchi $atf_ifconfig l2tp0 session $a_session0 $a_session1 118d51dce31Syamaguchi 119d51dce31Syamaguchi $atf_ifconfig shmif1 $b_addr0/24 120d51dce31Syamaguchi $atf_ifconfig l2tp1 tunnel $b_addr0 $b_addr1 121d51dce31Syamaguchi $atf_ifconfig l2tp1 session $b_session0 $b_session1 122d51dce31Syamaguchi 123d51dce31Syamaguchi $atf_ifconfig shmif2 $c_addr0/24 124d51dce31Syamaguchi $atf_ifconfig l2tp2 tunnel $c_addr0 $c_addr1 125d51dce31Syamaguchi $atf_ifconfig l2tp2 session $c_session0 $c_session1 126d51dce31Syamaguchi 127d51dce31Syamaguchi export RUMP_SERVER=$SOCK_HOST1 128d51dce31Syamaguchi $atf_ifconfig shmif0 $a_addr1/24 129d51dce31Syamaguchi $atf_ifconfig l2tp0 tunnel $a_addr1 $a_addr0 130d51dce31Syamaguchi $atf_ifconfig l2tp0 session $a_session1 $a_session0 131d51dce31Syamaguchi 132d51dce31Syamaguchi $atf_ifconfig shmif1 $b_addr1/24 133d51dce31Syamaguchi $atf_ifconfig l2tp1 tunnel $b_addr1 $b_addr0 134d51dce31Syamaguchi $atf_ifconfig l2tp1 session $b_session1 $b_session0 135d51dce31Syamaguchi 136d51dce31Syamaguchi $atf_ifconfig shmif2 $c_addr1/24 137d51dce31Syamaguchi $atf_ifconfig l2tp2 tunnel $c_addr1 $c_addr0 138d51dce31Syamaguchi $atf_ifconfig l2tp2 session $c_session1 $c_session0 139d51dce31Syamaguchi} 140d51dce31Syamaguchi 14120274667Syamaguchiatf_test_case lagg_ifconfig cleanup 14220274667Syamaguchilagg_ifconfig_head() 14320274667Syamaguchi{ 14420274667Syamaguchi 14520274667Syamaguchi atf_set "descr" "tests for create, destroy, and ioctl of lagg(4)" 14620274667Syamaguchi atf_set "require.progs" "rump_server" 14720274667Syamaguchi} 14820274667Syamaguchi 14920274667Syamaguchilagg_ifconfig_body() 15020274667Syamaguchi{ 15120274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 15220274667Syamaguchi 15320274667Syamaguchi rump_server_start $SOCK_HOST0 lagg 15420274667Syamaguchi 15520274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 15620274667Syamaguchi $atf_ifconfig lagg0 create 15720274667Syamaguchi $atf_ifconfig lagg0 destroy 15820274667Syamaguchi 15920274667Syamaguchi $atf_ifconfig lagg0 create 16020274667Syamaguchi $atf_ifconfig shmif0 create 16120274667Syamaguchi 16220274667Syamaguchi $atf_ifconfig lagg0 laggproto none 16320274667Syamaguchi atf_check -s exit:0 -o match:'laggproto none' \ 16420274667Syamaguchi rump.ifconfig lagg0 16520274667Syamaguchi 16620274667Syamaguchi # cannot add a port while protocol is none 16720274667Syamaguchi atf_check -s not-exit:0 -e ignore \ 16820274667Syamaguchi rump.ifconfig lagg0 laggport shmif0 16920274667Syamaguchi 17020274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 17120274667Syamaguchi atf_check -s exit:0 -o match:'laggproto lacp' \ 17220274667Syamaguchi rump.ifconfig lagg0 17320274667Syamaguchi 17420274667Syamaguchi # add a port and an added port 17520274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 17620274667Syamaguchi atf_check -s not-exit:0 -e ignore \ 17720274667Syamaguchi rump.ifconfig lagg0 laggport shmif0 17820274667Syamaguchi 17920274667Syamaguchi # remove an added port and a removed port 18020274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 18120274667Syamaguchi atf_check -s not-exit:0 -e ignore \ 18220274667Syamaguchi rump.ifconfig lagg0 -laggport shmif0 18320274667Syamaguchi 18420274667Syamaguchi # re-add a removed port 18520274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 18620274667Syamaguchi 18720274667Syamaguchi # detach protocol even if the I/F has ports 18820274667Syamaguchi $atf_ifconfig lagg0 laggproto none 18920274667Syamaguchi 19020274667Syamaguchi # destroy the interface while grouping ports 19120274667Syamaguchi $atf_ifconfig lagg0 destroy 19220274667Syamaguchi 19320274667Syamaguchi $atf_ifconfig lagg0 create 19420274667Syamaguchi $atf_ifconfig shmif1 create 19520274667Syamaguchi 19620274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 19720274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 19820274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 19920274667Syamaguchi 20020274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 20120274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 20220274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif1 20320274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 20420274667Syamaguchi 20520274667Syamaguchi # destroy a LAGed port 20620274667Syamaguchi atf_check -s exit:0 -o match:shmif0 rump.ifconfig lagg0 20720274667Syamaguchi atf_check -s exit:0 -o match:shmif1 rump.ifconfig lagg0 20820274667Syamaguchi $atf_ifconfig shmif0 destroy 20920274667Syamaguchi $atf_ifconfig shmif1 destroy 21020274667Syamaguchi 21120274667Syamaguchi $atf_ifconfig lagg0 laggproto none 21220274667Syamaguchi atf_check -s exit:0 -o ignore rump.ifconfig lagg0 21320274667Syamaguchi} 21420274667Syamaguchi 21520274667Syamaguchilagg_ifconfig_cleanup() 21620274667Syamaguchi{ 21720274667Syamaguchi $DEBG && dump 21820274667Syamaguchi cleanup 21920274667Syamaguchi} 22020274667Syamaguchi 22120274667Syamaguchiatf_test_case lagg_macaddr cleanup 22220274667Syamaguchilagg_macaddr_head() 22320274667Syamaguchi{ 22420274667Syamaguchi atf_set "descr" "tests for a MAC address to assign to lagg(4)" 22520274667Syamaguchi atf_set "require.progs" "rump_server" 22620274667Syamaguchi} 22720274667Syamaguchi 22820274667Syamaguchilagg_macaddr_body() 22920274667Syamaguchi{ 23020274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 23193505dbeSyamaguchi local lnkaddr0="02:00:00:00:00:01" # 02: I/G = 0, G/L = 1 23220274667Syamaguchi 23320274667Syamaguchi rump_server_start $SOCK_HOST0 lagg 23420274667Syamaguchi 23520274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 23620274667Syamaguchi $atf_ifconfig lagg0 create 23720274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 23820274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 23920274667Syamaguchi 24020274667Syamaguchi maddr=$(get_macaddr $SOCK_HOST0 lagg0) 24120274667Syamaguchi maddr0=$(get_macaddr $SOCK_HOST0 shmif0) 24220274667Syamaguchi maddr1=$(get_macaddr $SOCK_HOST0 shmif1) 24320274667Syamaguchi 24420274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 24520274667Syamaguchi 24693505dbeSyamaguchi # 24793505dbeSyamaguchi # Copy MAC address from shmif0 that is 24893505dbeSyamaguchi # the first port to lagg. 24993505dbeSyamaguchi # (laggport: (none) => shmif0) 25093505dbeSyamaguchi # 25120274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 25220274667Syamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig lagg0 25393505dbeSyamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0 25420274667Syamaguchi 25593505dbeSyamaguchi # 25693505dbeSyamaguchi # Copy MAC address assigned to lagg0 to shmif1 25793505dbeSyamaguchi # (laggport: shmif0 => shmif0, shmif1) 25893505dbeSyamaguchi # 25920274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 26020274667Syamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig lagg0 26120274667Syamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif1 26220274667Syamaguchi 26393505dbeSyamaguchi # 26493505dbeSyamaguchi # Change MAC address on the detaching 26593505dbeSyamaguchi # the first port (shmif0) from lagg0 26693505dbeSyamaguchi # (laggport: shmif0, shmif1 => shmif1) 26793505dbeSyamaguchi # 26820274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 26920274667Syamaguchi atf_check -s exit:0 -o match:$maddr1 rump.ifconfig lagg0 27020274667Syamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0 27193505dbeSyamaguchi atf_check -s exit:0 -o match:$maddr1 rump.ifconfig shmif1 27220274667Syamaguchi 27393505dbeSyamaguchi # 27493505dbeSyamaguchi # Copy lagg0's MAC address to shmif0 even if 27593505dbeSyamaguchi # lagg0 had used shmif0's MAC address 27693505dbeSyamaguchi # (laggport: shmif1 => shmif1, shmif0) 27793505dbeSyamaguchi # 27820274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 27920274667Syamaguchi atf_check -s exit:0 -o match:$maddr1 rump.ifconfig lagg0 28020274667Syamaguchi atf_check -s exit:0 -o match:$maddr1 rump.ifconfig shmif0 28120274667Syamaguchi 28293505dbeSyamaguchi # 28393505dbeSyamaguchi # should not change MAC address of lagg0 on detaching 28493505dbeSyamaguchi # shmif0 that copied mac address from lagg0 28593505dbeSyamaguchi # (laggport: shmif1, shmif0 => shmif1) 28693505dbeSyamaguchi # 28720274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 28893505dbeSyamaguchi atf_check -s exit:0 -o match:$maddr1 rump.ifconfig lagg0 28920274667Syamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0 29020274667Syamaguchi 29193505dbeSyamaguchi # 29293505dbeSyamaguchi # Use the generated MAC address 29393505dbeSyamaguchi # when all port detached from lagg0 29493505dbeSyamaguchi # (laggport: shmif1 => (none)) 29520274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif1 29620274667Syamaguchi atf_check -s exit:0 -o match:$maddr rump.ifconfig lagg0 29793505dbeSyamaguchi 29893505dbeSyamaguchi # 29993505dbeSyamaguchi # Copy the active MAC address from shmif0 to lagg0 30093505dbeSyamaguchi # when shmif0 has two MAC addresses 30193505dbeSyamaguchi # 30293505dbeSyamaguchi $atf_ifconfig shmif0 link $lnkaddr0 30393505dbeSyamaguchi $atf_ifconfig lagg0 laggport shmif0 30493505dbeSyamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig lagg0 30593505dbeSyamaguchi atf_check -s exit:0 -o not-match:$lnkaddr0 rump.ifconfig lagg0 30693505dbeSyamaguchi atf_check -s exit:0 -o match:$maddr0 rump.ifconfig shmif0 30793505dbeSyamaguchi atf_check -s exit:0 -o match:$lnkaddr0 rump.ifconfig shmif0 30820274667Syamaguchi} 30920274667Syamaguchi 31020274667Syamaguchilagg_macaddr_cleanup() 31120274667Syamaguchi{ 31220274667Syamaguchi $DEBUG && dump 31320274667Syamaguchi cleanup 31420274667Syamaguchi} 31520274667Syamaguchi 31620274667Syamaguchiatf_test_case lagg_ipv6lla cleanup 31720274667Syamaguchilagg_ipv6lla_head() 31820274667Syamaguchi{ 31920274667Syamaguchi atf_set "descr" "tests for a IPV6 LLA to assign to lagg(4)" 32020274667Syamaguchi atf_set "require.progs" "rump_server" 32120274667Syamaguchi} 32220274667Syamaguchi 32320274667Syamaguchilagg_ipv6lla_body() 32420274667Syamaguchi{ 32520274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 32620274667Syamaguchi 32720274667Syamaguchi rump_server_start $SOCK_HOST0 netinet6 lagg 32820274667Syamaguchi 32920274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 33020274667Syamaguchi $atf_ifconfig lagg0 create 33120274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 33220274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 33320274667Syamaguchi 33420274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 33520274667Syamaguchi 33620274667Syamaguchi $atf_ifconfig shmif0 up 33720274667Syamaguchi atf_check -s exit:0 -o match:'inet6 fe80:' rump.ifconfig shmif0 33820274667Syamaguchi 33920274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp laggport shmif0 34020274667Syamaguchi atf_check -s exit:0 -o not-match:'inet6 fe80:' rump.ifconfig shmif0 34120274667Syamaguchi 34220274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 34320274667Syamaguchi $atf_ifconfig shmif1 up 34420274667Syamaguchi atf_check -s exit:0 -o not-match:'inet6 fe80:' rump.ifconfig shmif1 34520274667Syamaguchi 34620274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 34720274667Syamaguchi atf_check -s exit:0 -o match:'inet6 fe80:' rump.ifconfig shmif0 34820274667Syamaguchi 34920274667Syamaguchi $atf_ifconfig shmif1 down 35020274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif1 35120274667Syamaguchi atf_check -s exit:0 -o not-match:'inet fe80:' rump.ifconfig shmif1 35220274667Syamaguchi} 35320274667Syamaguchi 35420274667Syamaguchilagg_ipv6lla_cleanup() 35520274667Syamaguchi{ 35620274667Syamaguchi $DEBUG && dump 35720274667Syamaguchi cleanup 35820274667Syamaguchi} 35920274667Syamaguchi 360*870bb1d2Syamaguchiatf_test_case lagg_mtu cleanup 361*870bb1d2Syamaguchilagg_mtu_head() 362*870bb1d2Syamaguchi{ 363*870bb1d2Syamaguchi atf_set "descr" "tests for MTU" 364*870bb1d2Syamaguchi atf_set "require.progs" "rump_server" 365*870bb1d2Syamaguchi} 366*870bb1d2Syamaguchi 367*870bb1d2Syamaguchilagg_mtu_body() 368*870bb1d2Syamaguchi{ 369*870bb1d2Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 370*870bb1d2Syamaguchi local mtu_1st=1450 371*870bb1d2Syamaguchi local mtu_big=1460 372*870bb1d2Syamaguchi local mtu_small=1440 373*870bb1d2Syamaguchi 374*870bb1d2Syamaguchi rump_server_start $SOCK_HOST0 lagg 375*870bb1d2Syamaguchi 376*870bb1d2Syamaguchi export RUMP_SERVER=$SOCK_HOST0 377*870bb1d2Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 378*870bb1d2Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 379*870bb1d2Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2 380*870bb1d2Syamaguchi $atf_ifconfig lagg0 create 381*870bb1d2Syamaguchi $atf_ifconfig lagg0 laggproto lacp 382*870bb1d2Syamaguchi 383*870bb1d2Syamaguchi $atf_ifconfig shmif0 mtu $mtu_1st 384*870bb1d2Syamaguchi $atf_ifconfig shmif1 mtu $mtu_big 385*870bb1d2Syamaguchi $atf_ifconfig shmif2 mtu $mtu_small 386*870bb1d2Syamaguchi 387*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig lagg0 388*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0 389*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_big" rump.ifconfig shmif1 390*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_small" rump.ifconfig shmif2 391*870bb1d2Syamaguchi 392*870bb1d2Syamaguchi # copy MTU from 1st port 393*870bb1d2Syamaguchi $atf_ifconfig lagg0 laggport shmif0 394*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0 395*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0 396*870bb1d2Syamaguchi 397*870bb1d2Syamaguchi # copy MTU to added port 398*870bb1d2Syamaguchi $atf_ifconfig lagg0 laggport shmif1 399*870bb1d2Syamaguchi $atf_ifconfig lagg0 laggport shmif2 400*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0 401*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0 402*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif1 403*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif2 404*870bb1d2Syamaguchi 405*870bb1d2Syamaguchi # reset MTU after detaching from lagg0 406*870bb1d2Syamaguchi $atf_ifconfig lagg0 -laggport shmif2 407*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_small" rump.ifconfig shmif2 408*870bb1d2Syamaguchi 409*870bb1d2Syamaguchi # change MTU of lagg0 410*870bb1d2Syamaguchi $atf_ifconfig lagg0 mtu 1500 411*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig lagg0 412*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig shmif0 413*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig shmif1 414*870bb1d2Syamaguchi 415*870bb1d2Syamaguchi # reset MTU after detching from lagg0 416*870bb1d2Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 417*870bb1d2Syamaguchi $atf_ifconfig lagg0 -laggport shmif1 418*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0 419*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_big" rump.ifconfig shmif1 420*870bb1d2Syamaguchi 421*870bb1d2Syamaguchi # MTU should not be changed 422*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *1500" rump.ifconfig lagg0 423*870bb1d2Syamaguchi 424*870bb1d2Syamaguchi # copy MTU from 1st port even when MTU of lagg0 is changhed 425*870bb1d2Syamaguchi $atf_ifconfig lagg0 mtu 1400 426*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *1400" rump.ifconfig lagg0 427*870bb1d2Syamaguchi $atf_ifconfig lagg0 laggport shmif0 428*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0 429*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0 430*870bb1d2Syamaguchi 431*870bb1d2Syamaguchi # MTU of lagg0 need not reset 432*870bb1d2Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 433*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig lagg0 434*870bb1d2Syamaguchi atf_check -s exit:0 -o match:"mtu *$mtu_1st" rump.ifconfig shmif0 435*870bb1d2Syamaguchi} 436*870bb1d2Syamaguchi 437*870bb1d2Syamaguchilagg_mtu_cleanup() 438*870bb1d2Syamaguchi{ 439*870bb1d2Syamaguchi 440*870bb1d2Syamaguchi $DEBUG && dump 441*870bb1d2Syamaguchi cleanup 442*870bb1d2Syamaguchi} 443*870bb1d2Syamaguchi 44420274667Syamaguchiatf_test_case lagg_lacp_basic cleanup 44520274667Syamaguchilagg_lacp_basic_head() 44620274667Syamaguchi{ 44720274667Syamaguchi 44820274667Syamaguchi atf_set "descr" "tests for LACP basic functions" 44920274667Syamaguchi atf_set "require.progs" "rump_server" 45020274667Syamaguchi} 45120274667Syamaguchi 45220274667Syamaguchilagg_lacp_basic_body() 45320274667Syamaguchi{ 45420274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 45520274667Syamaguchi 45620274667Syamaguchi rump_server_start $SOCK_HOST0 lagg 45720274667Syamaguchi rump_server_start $SOCK_HOST1 lagg 45820274667Syamaguchi rump_server_start $SOCK_HOST2 lagg 45920274667Syamaguchi 46020274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 46120274667Syamaguchi 46220274667Syamaguchi # added running interface 46320274667Syamaguchi $atf_ifconfig shmif0 create 46420274667Syamaguchi $atf_ifconfig shmif0 linkstr $BUS0 46520274667Syamaguchi 46620274667Syamaguchi $atf_ifconfig shmif1 create 46720274667Syamaguchi $atf_ifconfig shmif1 linkstr $BUS1 46820274667Syamaguchi 46920274667Syamaguchi $atf_ifconfig lagg0 create 47020274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 47120274667Syamaguchi 47220274667Syamaguchi $atf_ifconfig shmif0 up 47320274667Syamaguchi $atf_ifconfig shmif1 up 47420274667Syamaguchi $atf_ifconfig lagg0 up 47520274667Syamaguchi 47620274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 47720274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 47820274667Syamaguchi $atf_ifconfig -w 10 47920274667Syamaguchi 48020274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 48120274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif1 48220274667Syamaguchi $atf_ifconfig lagg0 down 48320274667Syamaguchi 48420274667Syamaguchi # add the same interfaces again 48520274667Syamaguchi $atf_ifconfig lagg0 up 48620274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 48720274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 48820274667Syamaguchi 48920274667Syamaguchi # detach and re-attach protocol 49020274667Syamaguchi $atf_ifconfig lagg0 laggproto none 49120274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp \ 49220274667Syamaguchi laggport shmif0 laggport shmif1 49320274667Syamaguchi 49420274667Syamaguchi $atf_ifconfig lagg0 -laggport shmif0 -laggport shmif1 49520274667Syamaguchi $atf_ifconfig lagg0 destroy 49620274667Syamaguchi $atf_ifconfig shmif0 destroy 49720274667Syamaguchi $atf_ifconfig shmif1 destroy 49820274667Syamaguchi 49920274667Syamaguchi # tests for a loopback condition 50020274667Syamaguchi $atf_ifconfig shmif0 create 50120274667Syamaguchi $atf_ifconfig shmif0 linkstr $BUS0 50220274667Syamaguchi $atf_ifconfig shmif1 create 50320274667Syamaguchi $atf_ifconfig shmif1 linkstr $BUS0 50420274667Syamaguchi $atf_ifconfig lagg0 create 50520274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp \ 50620274667Syamaguchi laggport shmif0 laggport shmif1 50720274667Syamaguchi $atf_ifconfig shmif0 up 50820274667Syamaguchi $atf_ifconfig shmif1 up 50920274667Syamaguchi $atf_ifconfig lagg0 up 51020274667Syamaguchi 51120274667Syamaguchi expected_inactive lagg0 51220274667Syamaguchi 51320274667Syamaguchi $atf_ifconfig shmif0 down 51420274667Syamaguchi $atf_ifconfig shmif0 destroy 51520274667Syamaguchi $atf_ifconfig shmif1 down 51620274667Syamaguchi $atf_ifconfig shmif1 destroy 51720274667Syamaguchi $atf_ifconfig lagg0 down 51820274667Syamaguchi $atf_ifconfig lagg0 destroy 51920274667Syamaguchi 52020274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 52120274667Syamaguchi $atf_ifconfig shmif0 create 52220274667Syamaguchi $atf_ifconfig shmif0 linkstr $BUS0 52320274667Syamaguchi $atf_ifconfig shmif0 up 52420274667Syamaguchi 52520274667Syamaguchi $atf_ifconfig shmif1 create 52620274667Syamaguchi $atf_ifconfig shmif1 linkstr $BUS1 52720274667Syamaguchi $atf_ifconfig shmif1 up 52820274667Syamaguchi 52920274667Syamaguchi $atf_ifconfig shmif2 create 53020274667Syamaguchi $atf_ifconfig shmif2 linkstr $BUS2 53120274667Syamaguchi $atf_ifconfig shmif2 up 53220274667Syamaguchi 53320274667Syamaguchi $atf_ifconfig lagg0 create 53420274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp laggport shmif0 \ 53520274667Syamaguchi laggport shmif1 laggport shmif2 53620274667Syamaguchi $atf_ifconfig lagg0 up 53720274667Syamaguchi 53820274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 53920274667Syamaguchi $atf_ifconfig shmif0 create 54020274667Syamaguchi $atf_ifconfig shmif0 linkstr $BUS0 54120274667Syamaguchi $atf_ifconfig shmif0 up 54220274667Syamaguchi 54320274667Syamaguchi $atf_ifconfig shmif1 create 54420274667Syamaguchi $atf_ifconfig shmif1 linkstr $BUS1 54520274667Syamaguchi $atf_ifconfig shmif1 up 54620274667Syamaguchi 54720274667Syamaguchi $atf_ifconfig lagg0 create 54820274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 54920274667Syamaguchi $atf_ifconfig lagg1 create 55020274667Syamaguchi $atf_ifconfig lagg1 laggproto lacp 55120274667Syamaguchi 55220274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 55320274667Syamaguchi $atf_ifconfig lagg0 up 55420274667Syamaguchi wait_for_distributing lagg0 shmif0 55520274667Syamaguchi 55620274667Syamaguchi $atf_ifconfig lagg1 laggport shmif1 55720274667Syamaguchi $atf_ifconfig lagg1 up 55820274667Syamaguchi 55920274667Syamaguchi export RUMP_SERVER=$SOCK_HOST2 56020274667Syamaguchi $atf_ifconfig shmif0 create 56120274667Syamaguchi $atf_ifconfig shmif0 linkstr $BUS2 56220274667Syamaguchi $atf_ifconfig shmif0 up 56320274667Syamaguchi 56420274667Syamaguchi $atf_ifconfig lagg0 create 56520274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp laggport shmif0 56620274667Syamaguchi $atf_ifconfig lagg0 up 56720274667Syamaguchi 56820274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 56920274667Syamaguchi wait_for_distributing lagg0 shmif0 57020274667Syamaguchi expected_inactive lagg0 shmif1 57120274667Syamaguchi expected_inactive lagg0 shmif2 57220274667Syamaguchi} 57320274667Syamaguchi 57420274667Syamaguchilagg_lacp_basic_cleanup() 57520274667Syamaguchi{ 57620274667Syamaguchi 57720274667Syamaguchi $DEBUG && dump 57820274667Syamaguchi cleanup 57920274667Syamaguchi} 58020274667Syamaguchi 58120274667Syamaguchilagg_lacp_ping() 58220274667Syamaguchi{ 58320274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 58420274667Syamaguchi 58520274667Syamaguchi local af=$1 586d51dce31Syamaguchi local l2proto=$2 58720274667Syamaguchi local atf_ping="atf_check -s exit:0 -o ignore rump.ping -c 1" 58820274667Syamaguchi local ping=rump.ping 58920274667Syamaguchi local rumplib="" 59020274667Syamaguchi local pfx=24 59120274667Syamaguchi local addr_host0=$IP4ADDR0 59220274667Syamaguchi local addr_host1=$IP4ADDR1 59320274667Syamaguchi 59420274667Syamaguchi case $af in 59520274667Syamaguchi "inet") 59620274667Syamaguchi # do nothing 59720274667Syamaguchi ;; 59820274667Syamaguchi "inet6") 59920274667Syamaguchi atf_ping="atf_check -s exit:0 -o ignore rump.ping6 -c 1" 60020274667Syamaguchi rumplib="netinet6" 60120274667Syamaguchi pfx=64 60220274667Syamaguchi addr_host0=$IP6ADDR0 60320274667Syamaguchi addr_host1=$IP6ADDR1 60420274667Syamaguchi ;; 60520274667Syamaguchi esac 60620274667Syamaguchi 607d51dce31Syamaguchi case $l2proto in 608d51dce31Syamaguchi "ether") 609d51dce31Syamaguchi iface0=shmif0 610d51dce31Syamaguchi iface1=shmif1 611d51dce31Syamaguchi iface2=shmif2 612d51dce31Syamaguchi ;; 613d51dce31Syamaguchi "l2tp") 614d51dce31Syamaguchi rumplib="$rumplib l2tp" 615d51dce31Syamaguchi iface0=l2tp0 616d51dce31Syamaguchi iface1=l2tp1 617d51dce31Syamaguchi iface2=l2tp2 618d51dce31Syamaguchi ;; 619d51dce31Syamaguchi esac 620d51dce31Syamaguchi 62120274667Syamaguchi rump_server_start $SOCK_HOST0 lagg $rumplib 62220274667Syamaguchi rump_server_start $SOCK_HOST1 lagg $rumplib 62320274667Syamaguchi 62420274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 62520274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 62620274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2 62720274667Syamaguchi 62820274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0 62920274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1 63020274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2 63120274667Syamaguchi 632d51dce31Syamaguchi if [ x"$l2proto" = x"l2tp" ];then 633d51dce31Syamaguchi setup_l2tp_ipv4tunnel 634d51dce31Syamaguchi fi 635d51dce31Syamaguchi 63620274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 63720274667Syamaguchi $atf_ifconfig lagg0 create 638d51dce31Syamaguchi $atf_ifconfig lagg0 laggproto lacp laggport $iface0 63920274667Syamaguchi $atf_ifconfig lagg0 $af $addr_host0/$pfx 640d51dce31Syamaguchi $atf_ifconfig $iface0 up 64120274667Syamaguchi $atf_ifconfig lagg0 up 64220274667Syamaguchi 64320274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 64420274667Syamaguchi $atf_ifconfig lagg0 create 645d51dce31Syamaguchi $atf_ifconfig lagg0 laggproto lacp laggport $iface0 64620274667Syamaguchi $atf_ifconfig lagg0 $af $addr_host1/$pfx 647d51dce31Syamaguchi $atf_ifconfig $iface0 up 64820274667Syamaguchi $atf_ifconfig lagg0 up 64920274667Syamaguchi 65020274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 65120274667Syamaguchi wait_for_distributing lagg0 65220274667Syamaguchi $atf_ifconfig -w 10 65320274667Syamaguchi 65420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 65520274667Syamaguchi wait_for_distributing lagg0 65620274667Syamaguchi $atf_ifconfig -w 10 65720274667Syamaguchi 65820274667Syamaguchi $atf_ping $addr_host0 65920274667Syamaguchi 66020274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 661d51dce31Syamaguchi $atf_ifconfig $iface1 up 662d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface1 laggport $iface2 663d51dce31Syamaguchi $atf_ifconfig $iface2 up 66420274667Syamaguchi 66520274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 666d51dce31Syamaguchi $atf_ifconfig $iface1 up 667d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface1 laggport $iface2 668d51dce31Syamaguchi $atf_ifconfig $iface2 up 66920274667Syamaguchi 67020274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 671d51dce31Syamaguchi wait_for_distributing lagg0 $iface1 672d51dce31Syamaguchi wait_for_distributing lagg0 $iface2 67320274667Syamaguchi 67420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 675d51dce31Syamaguchi wait_for_distributing lagg0 $iface1 676d51dce31Syamaguchi wait_for_distributing lagg0 $iface2 67720274667Syamaguchi 67820274667Syamaguchi $atf_ping $addr_host0 67920274667Syamaguchi} 68020274667Syamaguchi 68120274667Syamaguchiatf_test_case lagg_lacp_ipv4 cleanup 68220274667Syamaguchilagg_lacp_ipv4_head() 68320274667Syamaguchi{ 68420274667Syamaguchi 68520274667Syamaguchi atf_set "descr" "tests for IPv4 with LACP" 68620274667Syamaguchi atf_set "require.progs" "rump_server" 68720274667Syamaguchi} 68820274667Syamaguchi 68920274667Syamaguchilagg_lacp_ipv4_body() 69020274667Syamaguchi{ 69120274667Syamaguchi 692d51dce31Syamaguchi lagg_lacp_ping "inet" "ether" 69320274667Syamaguchi} 69420274667Syamaguchi 69520274667Syamaguchilagg_lacp_ipv4_cleanup() 69620274667Syamaguchi{ 69720274667Syamaguchi 69820274667Syamaguchi $DEBUG && dump 69920274667Syamaguchi cleanup 70020274667Syamaguchi} 70120274667Syamaguchi 70236034b53Syamaguchiatf_test_case lagg_lacp_ipv6 cleanup 70320274667Syamaguchilagg_lacp_ipv6_head() 70420274667Syamaguchi{ 70520274667Syamaguchi 70620274667Syamaguchi atf_set "descr" "tests for IPv6 with LACP" 70720274667Syamaguchi atf_set "require.progs" "rump_server" 70820274667Syamaguchi} 70920274667Syamaguchi 71020274667Syamaguchilagg_lacp_ipv6_body() 71120274667Syamaguchi{ 71220274667Syamaguchi 713d51dce31Syamaguchi lagg_lacp_ping "inet6" "ether" 71420274667Syamaguchi} 71520274667Syamaguchi 71620274667Syamaguchilagg_lacp_ipv6_cleanup() 71720274667Syamaguchi{ 71820274667Syamaguchi 71920274667Syamaguchi $DEBUG && dump 72020274667Syamaguchi cleanup 72120274667Syamaguchi} 72220274667Syamaguchi 723d51dce31Syamaguchiatf_test_case lagg_lacp_l2tp_ipv4 cleanup 724d51dce31Syamaguchilagg_lacp_l2tp_ipv4_head() 725d51dce31Syamaguchi{ 726d51dce31Syamaguchi 727d51dce31Syamaguchi atf_set "descr" "tests for LACP over l2tp by using IPv4" 728d51dce31Syamaguchi atf_set "require.progs" "rump_server" 729d51dce31Syamaguchi} 730d51dce31Syamaguchi 731d51dce31Syamaguchilagg_lacp_l2tp_ipv4_body() 732d51dce31Syamaguchi{ 733d51dce31Syamaguchi 734d51dce31Syamaguchi lagg_lacp_ping "inet" "l2tp" 735d51dce31Syamaguchi} 736d51dce31Syamaguchi 737d51dce31Syamaguchilagg_lacp_l2tp_ipv4_cleanup() 738d51dce31Syamaguchi{ 739d51dce31Syamaguchi 740d51dce31Syamaguchi $DEBUG && dump 741d51dce31Syamaguchi cleanup 742d51dce31Syamaguchi} 743d51dce31Syamaguchi 744d51dce31Syamaguchiatf_test_case lagg_lacp_l2tp_ipv6 cleanup 745d51dce31Syamaguchilagg_lacp_l2tp_ipv6_head() 746d51dce31Syamaguchi{ 747d51dce31Syamaguchi 748d51dce31Syamaguchi atf_set "descr" "tests for LACP over l2tp using IPv6" 749d51dce31Syamaguchi atf_set "require.progs" "rump_server" 750d51dce31Syamaguchi} 751d51dce31Syamaguchi 752d51dce31Syamaguchilagg_lacp_l2tp_ipv6_body() 753d51dce31Syamaguchi{ 754d51dce31Syamaguchi 755d51dce31Syamaguchi lagg_lacp_ping "inet6" "l2tp" 756d51dce31Syamaguchi} 757d51dce31Syamaguchi 758d51dce31Syamaguchilagg_lacp_l2tp_ipv6_cleanup() 759d51dce31Syamaguchi{ 760d51dce31Syamaguchi 761d51dce31Syamaguchi $DEBUG && dump 762d51dce31Syamaguchi cleanup 763d51dce31Syamaguchi} 764d51dce31Syamaguchi 76520274667Syamaguchilagg_lacp_vlan() 76620274667Syamaguchi{ 76720274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 76820274667Syamaguchi 76920274667Syamaguchi local af=$1 770891e2712Syamaguchi local l2proto=$2 77120274667Syamaguchi local atf_ping="atf_check -s exit:0 -o ignore rump.ping -c 1" 77220274667Syamaguchi local rumplib="vlan" 77320274667Syamaguchi local pfx=24 77420274667Syamaguchi local vlan0_addr_host0=$IP4ADDR0 77520274667Syamaguchi local host0addr0=$IP4ADDR0 77620274667Syamaguchi local host1addr0=$IP4ADDR1 77720274667Syamaguchi local host0addr1=$IP4ADDR2 77820274667Syamaguchi local host1addr1=$IP4ADDR3 77920274667Syamaguchi 78020274667Syamaguchi case $af in 78120274667Syamaguchi "inet") 78220274667Syamaguchi # do nothing 78320274667Syamaguchi ;; 78420274667Syamaguchi "inet6") 78520274667Syamaguchi atf_ping="atf_check -s exit:0 -o ignore rump.ping6 -c 1" 786e8e4dc6fSyamaguchi rumplib="$rumplib netinet6" 78720274667Syamaguchi pfx=64 78820274667Syamaguchi host0addr0=$IP6ADDR0 78920274667Syamaguchi host1addr0=$IP6ADDR1 79020274667Syamaguchi host0addr1=$IP6ADDR2 79120274667Syamaguchi host1addr1=$IP6ADDR3 79220274667Syamaguchi ;; 79320274667Syamaguchi esac 79420274667Syamaguchi 795891e2712Syamaguchi case $l2proto in 796891e2712Syamaguchi "ether") 797891e2712Syamaguchi iface0=shmif0 798891e2712Syamaguchi iface1=shmif1 799891e2712Syamaguchi iface2=shmif2 800891e2712Syamaguchi ;; 801891e2712Syamaguchi "l2tp") 802891e2712Syamaguchi rumplib="$rumplib l2tp" 803891e2712Syamaguchi iface0=l2tp0 804891e2712Syamaguchi iface1=l2tp1 805891e2712Syamaguchi iface2=l2tp2 806891e2712Syamaguchi esac 807891e2712Syamaguchi 80820274667Syamaguchi rump_server_start $SOCK_HOST0 lagg $rumplib 80920274667Syamaguchi rump_server_start $SOCK_HOST1 lagg $rumplib 81020274667Syamaguchi 81120274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 81220274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 81320274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2 81420274667Syamaguchi 81520274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0 81620274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1 81720274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2 81820274667Syamaguchi 819891e2712Syamaguchi if [ x"$l2proto" = x"l2tp" ]; then 820891e2712Syamaguchi setup_l2tp_ipv4tunnel 821891e2712Syamaguchi fi 822891e2712Syamaguchi 82352e4cf0dSyamaguchi for sock in $SOCK_HOST0 $SOCK_HOST1; do 82452e4cf0dSyamaguchi export RUMP_SERVER=$sock 82520274667Syamaguchi $atf_ifconfig lagg0 create 826891e2712Syamaguchi $atf_ifconfig lagg0 laggproto lacp laggport $iface0 82720274667Syamaguchi 82820274667Syamaguchi $atf_ifconfig vlan0 create 82920274667Syamaguchi $atf_ifconfig vlan0 vlan 10 vlanif lagg0 83020274667Syamaguchi $atf_ifconfig vlan1 create 83120274667Syamaguchi $atf_ifconfig vlan1 vlan 11 vlanif lagg0 83252e4cf0dSyamaguchi 83352e4cf0dSyamaguchi $atf_ifconfig $iface0 up 83452e4cf0dSyamaguchi $atf_ifconfig lagg0 up 83552e4cf0dSyamaguchi done 83652e4cf0dSyamaguchi 83752e4cf0dSyamaguchi export RUMP_SERVER=$SOCK_HOST0 83852e4cf0dSyamaguchi wait_for_distributing lagg0 83952e4cf0dSyamaguchi $atf_ifconfig vlan0 $af $host0addr0/$pfx 84052e4cf0dSyamaguchi $atf_ifconfig vlan0 up 84120274667Syamaguchi $atf_ifconfig vlan1 $af $host0addr1/$pfx 84220274667Syamaguchi $atf_ifconfig vlan1 up 84320274667Syamaguchi 84420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 84552e4cf0dSyamaguchi wait_for_distributing lagg0 84620274667Syamaguchi $atf_ifconfig vlan0 $af $host1addr0/$pfx 84720274667Syamaguchi $atf_ifconfig vlan0 up 84820274667Syamaguchi $atf_ifconfig vlan1 $af $host1addr1/$pfx 84920274667Syamaguchi $atf_ifconfig vlan1 up 85020274667Syamaguchi 85120274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 85220274667Syamaguchi $atf_ifconfig -w 10 85320274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 85420274667Syamaguchi $atf_ifconfig -w 10 85520274667Syamaguchi 85620274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 85720274667Syamaguchi $atf_ping $host1addr0 85820274667Syamaguchi $atf_ping $host1addr1 85920274667Syamaguchi 860891e2712Syamaguchi $atf_ifconfig lagg0 laggport $iface1 861891e2712Syamaguchi $atf_ifconfig $iface1 up 86220274667Syamaguchi 86320274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 864891e2712Syamaguchi $atf_ifconfig lagg0 laggport $iface1 865891e2712Syamaguchi $atf_ifconfig $iface1 up 86620274667Syamaguchi 86720274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 868891e2712Syamaguchi wait_for_distributing lagg0 $iface1 86920274667Syamaguchi 87020274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 871891e2712Syamaguchi wait_for_distributing lagg0 $iface1 87220274667Syamaguchi 87320274667Syamaguchi $atf_ping $host0addr0 87420274667Syamaguchi $atf_ping $host0addr1 87520274667Syamaguchi} 87620274667Syamaguchi 87720274667Syamaguchiatf_test_case lagg_lacp_vlan_ipv4 cleanup 87820274667Syamaguchilagg_lacp_vlan_ipv4_head() 87920274667Syamaguchi{ 88020274667Syamaguchi 88120274667Syamaguchi atf_set "descr" "tests for IPv4 VLAN frames over LACP LAG" 88220274667Syamaguchi atf_set "require.progs" "rump_server" 88320274667Syamaguchi} 88420274667Syamaguchi 88520274667Syamaguchilagg_lacp_vlan_ipv4_body() 88620274667Syamaguchi{ 88720274667Syamaguchi 888891e2712Syamaguchi lagg_lacp_vlan "inet" "ether" 88920274667Syamaguchi} 89020274667Syamaguchi 89120274667Syamaguchilagg_lacp_vlan_ipv4_cleanup() 89220274667Syamaguchi{ 89320274667Syamaguchi $DEBUG && dump 89420274667Syamaguchi cleanup 89520274667Syamaguchi} 89620274667Syamaguchi 89720274667Syamaguchiatf_test_case lagg_lacp_vlan_ipv6 cleanup 89820274667Syamaguchilagg_lacp_vlan_ipv6_head() 89920274667Syamaguchi{ 90020274667Syamaguchi 90120274667Syamaguchi atf_set "descr" "tests for IPv6 VLAN frames over LACP LAG" 90220274667Syamaguchi atf_set "require.progs" "rump_server" 90320274667Syamaguchi} 90420274667Syamaguchi 90520274667Syamaguchilagg_lacp_vlan_ipv6_body() 90620274667Syamaguchi{ 90720274667Syamaguchi 908891e2712Syamaguchi lagg_lacp_vlan "inet6" "ether" 90920274667Syamaguchi} 91020274667Syamaguchi 91120274667Syamaguchilagg_lacp_vlan_ipv6_cleanup() 91220274667Syamaguchi{ 91320274667Syamaguchi $DEBUG && dump 91420274667Syamaguchi cleanup 91520274667Syamaguchi} 91620274667Syamaguchi 917891e2712Syamaguchiatf_test_case lagg_lacp_vlanl2tp_ipv4 cleanup 918891e2712Syamaguchilagg_lacp_vlanl2tp_ipv4_head() 919891e2712Syamaguchi{ 920891e2712Syamaguchi 921891e2712Syamaguchi atf_set "descr" "tests for IPv4 VLAN frames over LACP L2TP LAG" 922891e2712Syamaguchi atf_set "require.progs" "rump_server" 923891e2712Syamaguchi} 924891e2712Syamaguchi 925891e2712Syamaguchilagg_lacp_vlanl2tp_ipv4_body() 926891e2712Syamaguchi{ 927891e2712Syamaguchi 928891e2712Syamaguchi lagg_lacp_vlan "inet" "l2tp" 929891e2712Syamaguchi} 930891e2712Syamaguchi 931891e2712Syamaguchilagg_lacp_vlanl2tp_ipv4_cleanup() 932891e2712Syamaguchi{ 933891e2712Syamaguchi 934891e2712Syamaguchi $DEBUG && dump 935891e2712Syamaguchi cleanup 936891e2712Syamaguchi} 937891e2712Syamaguchi 938891e2712Syamaguchiatf_test_case lagg_lacp_vlanl2tp_ipv6 cleanup 939891e2712Syamaguchilagg_lacp_vlanl2tp_ipv6_head() 940891e2712Syamaguchi{ 941891e2712Syamaguchi 942891e2712Syamaguchi atf_set "descr" "tests for IPv6 VLAN frames over LACP L2TP LAG" 943891e2712Syamaguchi atf_set "require.progs" "rump_server" 944891e2712Syamaguchi} 945891e2712Syamaguchi 946891e2712Syamaguchilagg_lacp_vlanl2tp_ipv6_body() 947891e2712Syamaguchi{ 948891e2712Syamaguchi 949891e2712Syamaguchi lagg_lacp_vlan "inet6" "l2tp" 950891e2712Syamaguchi} 951891e2712Syamaguchi 952891e2712Syamaguchilagg_lacp_vlanl2tp_ipv6_cleanup() 953891e2712Syamaguchi{ 954891e2712Syamaguchi 955891e2712Syamaguchi $DEBUG && dump 956891e2712Syamaguchi cleanup 957891e2712Syamaguchi} 958891e2712Syamaguchi 95920274667Syamaguchiatf_test_case lagg_lacp_portpri cleanup 96020274667Syamaguchilagg_lacp_portpri_head() 96120274667Syamaguchi{ 96220274667Syamaguchi 96320274667Syamaguchi atf_set "descr" "tests for LACP port priority" 96420274667Syamaguchi atf_set "require.progs" "rump_server" 96520274667Syamaguchi} 96620274667Syamaguchi 96720274667Syamaguchilagg_lacp_portpri_body() 96820274667Syamaguchi{ 96920274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 97020274667Syamaguchi 97120274667Syamaguchi rump_server_start $SOCK_HOST0 lagg 97220274667Syamaguchi rump_server_start $SOCK_HOST1 lagg 97320274667Syamaguchi 97420274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 97520274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 97620274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2 97720274667Syamaguchi 97820274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0 97920274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1 98020274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2 98120274667Syamaguchi 98220274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 98320274667Syamaguchi $atf_ifconfig lagg0 create 98420274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 98520274667Syamaguchi $atf_ifconfig lagg0 lagglacp maxports 2 98620274667Syamaguchi 98720274667Syamaguchi $atf_ifconfig shmif0 up 98820274667Syamaguchi $atf_ifconfig shmif1 up 98920274667Syamaguchi $atf_ifconfig shmif2 up 99020274667Syamaguchi 99120274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 pri 1000 99220274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 pri 2000 99320274667Syamaguchi $atf_ifconfig lagg0 laggport shmif2 pri 3000 99420274667Syamaguchi $atf_ifconfig lagg0 up 99520274667Syamaguchi 99620274667Syamaguchi atf_check -s exit:0 -o match:'shmif0 pri=1000' rump.ifconfig lagg0 99720274667Syamaguchi atf_check -s exit:0 -o match:'shmif1 pri=2000' rump.ifconfig lagg0 99820274667Syamaguchi atf_check -s exit:0 -o match:'shmif2 pri=3000' rump.ifconfig lagg0 99920274667Syamaguchi 100020274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 100120274667Syamaguchi $atf_ifconfig lagg0 create 100220274667Syamaguchi $atf_ifconfig lagg0 laggproto lacp 100320274667Syamaguchi 100420274667Syamaguchi $atf_ifconfig shmif0 up 100520274667Syamaguchi $atf_ifconfig shmif1 up 100620274667Syamaguchi $atf_ifconfig shmif2 up 100720274667Syamaguchi 100820274667Syamaguchi $atf_ifconfig lagg0 laggport shmif0 pri 300 100920274667Syamaguchi $atf_ifconfig lagg0 laggport shmif1 pri 200 101020274667Syamaguchi $atf_ifconfig lagg0 laggport shmif2 pri 100 101120274667Syamaguchi $atf_ifconfig lagg0 up 101220274667Syamaguchi 101320274667Syamaguchi atf_check -s exit:0 -o match:'shmif0 pri=300' rump.ifconfig lagg0 101420274667Syamaguchi atf_check -s exit:0 -o match:'shmif1 pri=200' rump.ifconfig lagg0 101520274667Syamaguchi atf_check -s exit:0 -o match:'shmif2 pri=100' rump.ifconfig lagg0 101620274667Syamaguchi 101720274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 101820274667Syamaguchi wait_for_distributing lagg0 shmif0 101920274667Syamaguchi wait_for_distributing lagg0 shmif1 102020274667Syamaguchi wait_state "STANDBY" lagg0 shmif2 102120274667Syamaguchi 102220274667Syamaguchi $atf_ifconfig shmif0 down 102320274667Syamaguchi wait_for_distributing lagg0 shmif2 102420274667Syamaguchi 102520274667Syamaguchi $atf_ifconfig shmif0 up 102620274667Syamaguchi wait_for_distributing lagg0 shmif0 102720274667Syamaguchi 102820274667Syamaguchi $atf_ifconfig lagg0 laggportpri shmif0 5000 102920274667Syamaguchi $atf_ifconfig lagg0 laggportpri shmif1 5000 103020274667Syamaguchi $atf_ifconfig lagg0 laggportpri shmif2 5000 103120274667Syamaguchi 103220274667Syamaguchi atf_check -s exit:0 -o match:'shmif0 pri=5000' rump.ifconfig lagg0 103320274667Syamaguchi atf_check -s exit:0 -o match:'shmif1 pri=5000' rump.ifconfig lagg0 103420274667Syamaguchi atf_check -s exit:0 -o match:'shmif2 pri=5000' rump.ifconfig lagg0 103520274667Syamaguchi 103620274667Syamaguchi wait_state "STANDBY" lagg0 shmif0 103720274667Syamaguchi wait_for_distributing lagg0 shmif1 103820274667Syamaguchi wait_for_distributing lagg0 shmif2 103920274667Syamaguchi} 104020274667Syamaguchi 104120274667Syamaguchilagg_lacp_portpri_cleanup() 104220274667Syamaguchi{ 104320274667Syamaguchi 104420274667Syamaguchi $DEBUG && dump 104520274667Syamaguchi cleanup 104620274667Syamaguchi} 104720274667Syamaguchi 104820274667Syamaguchilagg_failover() 104920274667Syamaguchi{ 105020274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 105120274667Syamaguchi 105220274667Syamaguchi local af=$1 1053d51dce31Syamaguchi local l2proto=$2 105420274667Syamaguchi local ping="rump.ping -c 1" 105520274667Syamaguchi local rumplib="" 105620274667Syamaguchi local pfx=24 105720274667Syamaguchi local addr_host0=$IP4ADDR0 105820274667Syamaguchi local addr_host1=$IP4ADDR1 105920274667Syamaguchi 106020274667Syamaguchi case $af in 106120274667Syamaguchi "inet") 106220274667Syamaguchi # do nothing 106320274667Syamaguchi ;; 106420274667Syamaguchi "inet6") 106520274667Syamaguchi ping="rump.ping6 -c 1" 106620274667Syamaguchi rumplib="netinet6" 106720274667Syamaguchi pfx=64 106820274667Syamaguchi addr_host0=$IP6ADDR0 106920274667Syamaguchi addr_host1=$IP6ADDR1 107020274667Syamaguchi ;; 107120274667Syamaguchi esac 107220274667Syamaguchi 1073d51dce31Syamaguchi case $l2proto in 1074d51dce31Syamaguchi "ether") 1075d51dce31Syamaguchi iface0="shmif0" 1076d51dce31Syamaguchi iface1="shmif1" 1077d51dce31Syamaguchi iface2="shmif2" 1078d51dce31Syamaguchi ;; 1079d51dce31Syamaguchi "l2tp") 1080d51dce31Syamaguchi rumplib="$rumplib l2tp" 1081d51dce31Syamaguchi iface0="l2tp0" 1082d51dce31Syamaguchi iface1="l2tp1" 1083d51dce31Syamaguchi iface2="l2tp2" 1084d51dce31Syamaguchi ;; 1085d51dce31Syamaguchi esac 1086d51dce31Syamaguchi 108720274667Syamaguchi local atf_ping="atf_check -s exit:0 -o ignore ${ping}" 108820274667Syamaguchi 108920274667Syamaguchi rump_server_start $SOCK_HOST0 lagg $rumplib 109020274667Syamaguchi rump_server_start $SOCK_HOST1 lagg $rumplib 109120274667Syamaguchi 109220274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 109320274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 109420274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2 109520274667Syamaguchi 109620274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0 109720274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1 109820274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2 109920274667Syamaguchi 1100d51dce31Syamaguchi if [ x"$l2proto" = x"l2tp" ]; then 1101d51dce31Syamaguchi setup_l2tp_ipv4tunnel 1102d51dce31Syamaguchi fi 1103d51dce31Syamaguchi 110420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 110520274667Syamaguchi $atf_ifconfig lagg0 create 110620274667Syamaguchi $atf_ifconfig lagg0 laggproto failover 110720274667Syamaguchi 1108d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface0 pri 1000 1109d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface1 pri 2000 1110d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface2 pri 3000 111120274667Syamaguchi $atf_ifconfig lagg0 $af $addr_host0/$pfx 111220274667Syamaguchi 111320274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 111420274667Syamaguchi $atf_ifconfig lagg0 create 111520274667Syamaguchi $atf_ifconfig lagg0 laggproto failover 111620274667Syamaguchi 1117d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface0 pri 1000 1118d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface1 pri 3000 1119d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface2 pri 2000 112020274667Syamaguchi $atf_ifconfig lagg0 $af $addr_host1/$pfx 112120274667Syamaguchi 112220274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 1123d51dce31Syamaguchi $atf_ifconfig $iface0 up 1124d51dce31Syamaguchi $atf_ifconfig $iface1 up 1125d51dce31Syamaguchi $atf_ifconfig $iface2 up 112620274667Syamaguchi $atf_ifconfig lagg0 up 112720274667Syamaguchi 112820274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 1129d51dce31Syamaguchi $atf_ifconfig $iface0 up 1130d51dce31Syamaguchi $atf_ifconfig $iface1 up 1131d51dce31Syamaguchi $atf_ifconfig $iface2 up 113220274667Syamaguchi $atf_ifconfig lagg0 up 113320274667Syamaguchi 113420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 113520274667Syamaguchi $atf_ifconfig -w 10 1136d51dce31Syamaguchi wait_for_distributing lagg0 $iface0 1137d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface0 1138d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface1 1139d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface2 114020274667Syamaguchi 114120274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 114220274667Syamaguchi $atf_ifconfig -w 10 1143d51dce31Syamaguchi wait_for_distributing lagg0 $iface0 1144d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface0 1145d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface1 1146d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface2 114720274667Syamaguchi 114820274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 114920274667Syamaguchi $atf_ping $addr_host1 115020274667Syamaguchi 1151d51dce31Syamaguchi $atf_ifconfig $iface0 down 1152d51dce31Syamaguchi wait_for_distributing lagg0 $iface1 1153d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface1 1154d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface2 115520274667Syamaguchi 115620274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 1157d51dce31Syamaguchi $atf_ifconfig $iface0 down 1158d51dce31Syamaguchi wait_for_distributing lagg0 $iface2 1159d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface2 1160d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface1 116120274667Syamaguchi 116220274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 116320274667Syamaguchi $atf_ping $addr_host1 116420274667Syamaguchi 116520274667Syamaguchi $atf_ifconfig lagg0 laggfailover -rx-all 1166d51dce31Syamaguchi atf_check -s exit:0 -o not-match:'$iface2.+COLLECTING' rump.ifconfig lagg0 116720274667Syamaguchi 116820274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 116920274667Syamaguchi $atf_ifconfig lagg0 laggfailover -rx-all 1170d51dce31Syamaguchi atf_check -s exit:0 -o not-match:'$iface1.+COLLECTING' rump.ifconfig lagg0 117120274667Syamaguchi 117220274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 117320274667Syamaguchi atf_check -s not-exit:0 -o ignore -e ignore $ping -c 1 $addr_host1 117420274667Syamaguchi} 117520274667Syamaguchi 117620274667Syamaguchiatf_test_case lagg_failover_ipv4 cleanup 117720274667Syamaguchilagg_failover_ipv4_head() 117820274667Syamaguchi{ 117920274667Syamaguchi 118020274667Syamaguchi atf_set "descr" "tests for failover using IPv4" 118120274667Syamaguchi atf_set "require.progs" "rump_server" 118220274667Syamaguchi} 118320274667Syamaguchi 118420274667Syamaguchilagg_failover_ipv4_body() 118520274667Syamaguchi{ 118620274667Syamaguchi 1187d51dce31Syamaguchi lagg_failover "inet" "ether" 118820274667Syamaguchi} 118920274667Syamaguchi 119020274667Syamaguchilagg_failover_ipv4_cleanup() 119120274667Syamaguchi{ 119220274667Syamaguchi 119320274667Syamaguchi $DEBUG && dump 119420274667Syamaguchi cleanup 119520274667Syamaguchi} 119620274667Syamaguchi 119720274667Syamaguchiatf_test_case lagg_failover_ipv6 cleanup 119820274667Syamaguchilagg_failover_ipv6_head() 119920274667Syamaguchi{ 120020274667Syamaguchi 120120274667Syamaguchi atf_set "descr" "tests for failover using IPv6" 120220274667Syamaguchi atf_set "require.progs" "rump_server" 120320274667Syamaguchi} 120420274667Syamaguchi 120520274667Syamaguchilagg_failover_ipv6_body() 120620274667Syamaguchi{ 120720274667Syamaguchi 1208d51dce31Syamaguchi lagg_failover "inet6" "ether" 120920274667Syamaguchi} 121020274667Syamaguchi 121120274667Syamaguchilagg_failover_ipv6_cleanup() 121220274667Syamaguchi{ 121320274667Syamaguchi 121420274667Syamaguchi $DEBUG && dump 121520274667Syamaguchi cleanup 121620274667Syamaguchi} 121720274667Syamaguchi 1218d51dce31Syamaguchiatf_test_case lagg_failover_l2tp_ipv4 cleanup 1219d51dce31Syamaguchilagg_failover_l2tp_ipv4_head() 1220d51dce31Syamaguchi{ 1221d51dce31Syamaguchi 1222d51dce31Syamaguchi atf_set "descr" "tests for failover over l2tp using IPv4" 1223d51dce31Syamaguchi atf_set "require.progs" "rump_server" 1224d51dce31Syamaguchi} 1225d51dce31Syamaguchi 1226d51dce31Syamaguchilagg_failover_l2tp_ipv4_body() 1227d51dce31Syamaguchi{ 1228d51dce31Syamaguchi 1229d51dce31Syamaguchi lagg_failover "inet" "l2tp" 1230d51dce31Syamaguchi} 1231d51dce31Syamaguchi 1232d51dce31Syamaguchilagg_failover_l2tp_ipv4_cleanup() 1233d51dce31Syamaguchi{ 1234d51dce31Syamaguchi $DEBUG && dump 1235d51dce31Syamaguchi cleanup 1236d51dce31Syamaguchi} 1237d51dce31Syamaguchi 1238d51dce31Syamaguchiatf_test_case lagg_failover_l2tp_ipv6 cleanup 1239d51dce31Syamaguchilagg_failover_l2tp_ipv6_head() 1240d51dce31Syamaguchi{ 1241d51dce31Syamaguchi 1242d51dce31Syamaguchi atf_set "descr" "tests for failover over l2tp using IPv6" 1243d51dce31Syamaguchi atf_set "require.progs" "rump_server" 1244d51dce31Syamaguchi} 1245d51dce31Syamaguchi 1246d51dce31Syamaguchilagg_failover_l2tp_ipv6_body() 1247d51dce31Syamaguchi{ 1248d51dce31Syamaguchi 1249d51dce31Syamaguchi lagg_failover "inet6" "l2tp" 1250d51dce31Syamaguchi} 1251d51dce31Syamaguchi 1252d51dce31Syamaguchilagg_failover_l2tp_ipv6_cleanup() 1253d51dce31Syamaguchi{ 1254d51dce31Syamaguchi $DEBUG && dump 1255d51dce31Syamaguchi cleanup 1256d51dce31Syamaguchi} 1257d51dce31Syamaguchi 125820274667Syamaguchilagg_loadbalance() 125920274667Syamaguchi{ 126020274667Syamaguchi local atf_ifconfig="atf_check -s exit:0 rump.ifconfig" 126120274667Syamaguchi 126220274667Syamaguchi local af=$1 1263d51dce31Syamaguchi local l2proto=$2 126420274667Syamaguchi local ping="rump.ping -c 1" 126520274667Syamaguchi local rumplib="" 126620274667Syamaguchi local pfx=24 126720274667Syamaguchi local addr_host0=$IP4ADDR0 126820274667Syamaguchi local addr_host1=$IP4ADDR1 126920274667Syamaguchi 127020274667Syamaguchi case $af in 127120274667Syamaguchi "inet") 127220274667Syamaguchi # do nothing 127320274667Syamaguchi ;; 127420274667Syamaguchi "inet6") 127520274667Syamaguchi ping="rump.ping6 -c 1" 127620274667Syamaguchi rumplib="netinet6" 127720274667Syamaguchi pfx=64 127820274667Syamaguchi addr_host0=$IP6ADDR0 127920274667Syamaguchi addr_host1=$IP6ADDR1 128020274667Syamaguchi ;; 128120274667Syamaguchi esac 128220274667Syamaguchi 1283d51dce31Syamaguchi case $l2proto in 1284d51dce31Syamaguchi "ether") 1285d51dce31Syamaguchi iface0=shmif0 1286d51dce31Syamaguchi iface1=shmif1 1287d51dce31Syamaguchi iface2=shmif2 1288d51dce31Syamaguchi ;; 1289d51dce31Syamaguchi "l2tp") 1290d51dce31Syamaguchi rumplib="$rumplib l2tp" 1291d51dce31Syamaguchi iface0=l2tp0 1292d51dce31Syamaguchi iface1=l2tp1 1293d51dce31Syamaguchi iface2=l2tp2 1294d51dce31Syamaguchi ;; 1295d51dce31Syamaguchi esac 1296d51dce31Syamaguchi 129720274667Syamaguchi local atf_ping="atf_check -s exit:0 -o ignore ${ping}" 129820274667Syamaguchi 129920274667Syamaguchi rump_server_start $SOCK_HOST0 lagg $rumplib 130020274667Syamaguchi rump_server_start $SOCK_HOST1 lagg $rumplib 130120274667Syamaguchi 130220274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif0 $BUS0 130320274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif1 $BUS1 130420274667Syamaguchi rump_server_add_iface $SOCK_HOST0 shmif2 $BUS2 130520274667Syamaguchi 130620274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif0 $BUS0 130720274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif1 $BUS1 130820274667Syamaguchi rump_server_add_iface $SOCK_HOST1 shmif2 $BUS2 130920274667Syamaguchi 1310d51dce31Syamaguchi if [ x"$l2proto" = x"l2tp" ]; then 1311d51dce31Syamaguchi setup_l2tp_ipv4tunnel 1312d51dce31Syamaguchi fi 1313d51dce31Syamaguchi 131420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 131520274667Syamaguchi $atf_ifconfig lagg0 create 131620274667Syamaguchi $atf_ifconfig lagg0 laggproto loadbalance 131720274667Syamaguchi 1318d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface0 pri 1000 1319d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface1 pri 2000 1320d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface2 pri 3000 132120274667Syamaguchi $atf_ifconfig lagg0 $af $addr_host0/$pfx 132220274667Syamaguchi 132320274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 132420274667Syamaguchi $atf_ifconfig lagg0 create 132520274667Syamaguchi $atf_ifconfig lagg0 laggproto loadbalance 132620274667Syamaguchi 1327d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface0 pri 1000 1328d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface1 pri 3000 1329d51dce31Syamaguchi $atf_ifconfig lagg0 laggport $iface2 pri 2000 133020274667Syamaguchi $atf_ifconfig lagg0 $af $addr_host1/$pfx 133120274667Syamaguchi 133220274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 1333d51dce31Syamaguchi $atf_ifconfig $iface0 up 1334d51dce31Syamaguchi $atf_ifconfig $iface1 up 1335d51dce31Syamaguchi $atf_ifconfig $iface2 up 133620274667Syamaguchi $atf_ifconfig lagg0 up 133720274667Syamaguchi 133820274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 1339d51dce31Syamaguchi $atf_ifconfig $iface0 up 1340d51dce31Syamaguchi $atf_ifconfig $iface1 up 1341d51dce31Syamaguchi $atf_ifconfig $iface2 up 134220274667Syamaguchi $atf_ifconfig lagg0 up 134320274667Syamaguchi 134420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 134520274667Syamaguchi $atf_ifconfig -w 10 1346d51dce31Syamaguchi wait_for_distributing lagg0 $iface0 1347d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface0 1348d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface1 1349d51dce31Syamaguchi wait_state "COLLECTING" lagg0 $iface2 135020274667Syamaguchi 135120274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 135220274667Syamaguchi $atf_ifconfig -w 10 1353d51dce31Syamaguchi wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface0 1354d51dce31Syamaguchi wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1 1355d51dce31Syamaguchi wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2 135620274667Syamaguchi 135720274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 135820274667Syamaguchi $atf_ping $addr_host1 135920274667Syamaguchi 1360d51dce31Syamaguchi $atf_ifconfig $iface0 down 1361d51dce31Syamaguchi wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1 1362d51dce31Syamaguchi wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2 136320274667Syamaguchi 136420274667Syamaguchi export RUMP_SERVER=$SOCK_HOST1 1365d51dce31Syamaguchi $atf_ifconfig $iface0 down 1366d51dce31Syamaguchi wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface1 1367d51dce31Syamaguchi wait_state "COLLECTING,DISTRIBUTING" lagg0 $iface2 136820274667Syamaguchi 136920274667Syamaguchi export RUMP_SERVER=$SOCK_HOST0 137020274667Syamaguchi $atf_ping $addr_host1 137120274667Syamaguchi} 137220274667Syamaguchi 137320274667Syamaguchiatf_test_case lagg_loadbalance_ipv4 cleanup 137420274667Syamaguchilagg_loadbalance_ipv4_head() 137520274667Syamaguchi{ 137620274667Syamaguchi 137720274667Syamaguchi atf_set "descr" "tests for loadbalance using IPv4" 137820274667Syamaguchi atf_set "require.progs" "rump_server" 137920274667Syamaguchi} 138020274667Syamaguchi 138120274667Syamaguchilagg_loadbalance_ipv4_body() 138220274667Syamaguchi{ 138320274667Syamaguchi 1384d51dce31Syamaguchi lagg_loadbalance "inet" "ether" 138520274667Syamaguchi} 138620274667Syamaguchi 138720274667Syamaguchilagg_loadbalance_ipv4_cleanup() 138820274667Syamaguchi{ 138920274667Syamaguchi 139020274667Syamaguchi $DEBUG && dump 139120274667Syamaguchi cleanup 139220274667Syamaguchi} 139320274667Syamaguchi 139420274667Syamaguchiatf_test_case lagg_loadbalance_ipv6 cleanup 139520274667Syamaguchilagg_loadbalance_ipv6_head() 139620274667Syamaguchi{ 139720274667Syamaguchi 139820274667Syamaguchi atf_set "descr" "tests for loadbalance using IPv6" 139920274667Syamaguchi atf_set "require.progs" "rump_server" 140020274667Syamaguchi} 140120274667Syamaguchi 140220274667Syamaguchilagg_loadbalance_ipv6_body() 140320274667Syamaguchi{ 140420274667Syamaguchi 1405d51dce31Syamaguchi lagg_loadbalance "inet6" "ether" 140620274667Syamaguchi} 140720274667Syamaguchi 140820274667Syamaguchilagg_loadbalance_ipv6_cleanup() 140920274667Syamaguchi{ 141020274667Syamaguchi 141120274667Syamaguchi $DEBUG && dump 141220274667Syamaguchi cleanup 141320274667Syamaguchi} 141420274667Syamaguchi 1415d51dce31Syamaguchiatf_test_case lagg_loadbalance_l2tp_ipv4 cleanup 1416d51dce31Syamaguchilagg_loadbalance_l2tp_ipv4_head() 1417d51dce31Syamaguchi{ 1418d51dce31Syamaguchi 1419d51dce31Syamaguchi atf_set "descr" "tests for loadbalance over l2tp using IPv4" 1420d51dce31Syamaguchi atf_set "require.progs" "rump_server" 1421d51dce31Syamaguchi} 1422d51dce31Syamaguchi 1423d51dce31Syamaguchilagg_loadbalance_l2tp_ipv4_body() 1424d51dce31Syamaguchi{ 1425d51dce31Syamaguchi 1426d51dce31Syamaguchi lagg_loadbalance "inet" "l2tp" 1427d51dce31Syamaguchi} 1428d51dce31Syamaguchi 1429d51dce31Syamaguchilagg_loadbalance_l2tp_ipv4_cleanup() 1430d51dce31Syamaguchi{ 1431d51dce31Syamaguchi 1432d51dce31Syamaguchi $DEBUG && dump 1433d51dce31Syamaguchi cleanup 1434d51dce31Syamaguchi} 1435d51dce31Syamaguchi 1436d51dce31Syamaguchiatf_test_case lagg_loadbalance_l2tp_ipv6 cleanup 1437d51dce31Syamaguchilagg_loadbalance_l2tp_ipv4_head() 1438d51dce31Syamaguchi{ 1439d51dce31Syamaguchi 1440d51dce31Syamaguchi atf_set "descr" "tests for loadbalance over l2tp using IPv6" 1441d51dce31Syamaguchi atf_set "require.progs" "rump_server" 1442d51dce31Syamaguchi} 1443d51dce31Syamaguchi 1444d51dce31Syamaguchilagg_loadbalance_l2tp_ipv6_body() 1445d51dce31Syamaguchi{ 1446d51dce31Syamaguchi 1447d51dce31Syamaguchi lagg_loadbalance "inet6" "l2tp" 1448d51dce31Syamaguchi} 1449d51dce31Syamaguchi 1450d51dce31Syamaguchilagg_loadbalance_l2tp_ipv6_cleanup() 1451d51dce31Syamaguchi{ 1452d51dce31Syamaguchi 1453d51dce31Syamaguchi $DEBUG && dump 1454d51dce31Syamaguchi cleanup 1455d51dce31Syamaguchi} 1456d51dce31Syamaguchi 145720274667Syamaguchiatf_init_test_cases() 145820274667Syamaguchi{ 145920274667Syamaguchi 146020274667Syamaguchi atf_add_test_case lagg_ifconfig 146120274667Syamaguchi atf_add_test_case lagg_macaddr 146220274667Syamaguchi atf_add_test_case lagg_ipv6lla 1463*870bb1d2Syamaguchi atf_add_test_case lagg_mtu 146420274667Syamaguchi atf_add_test_case lagg_lacp_basic 146520274667Syamaguchi atf_add_test_case lagg_lacp_ipv4 146620274667Syamaguchi atf_add_test_case lagg_lacp_ipv6 1467d51dce31Syamaguchi atf_add_test_case lagg_lacp_l2tp_ipv4 1468d51dce31Syamaguchi atf_add_test_case lagg_lacp_l2tp_ipv6 146920274667Syamaguchi atf_add_test_case lagg_lacp_vlan_ipv4 147020274667Syamaguchi atf_add_test_case lagg_lacp_vlan_ipv6 1471891e2712Syamaguchi atf_add_test_case lagg_lacp_vlanl2tp_ipv4 1472891e2712Syamaguchi atf_add_test_case lagg_lacp_vlanl2tp_ipv6 147320274667Syamaguchi atf_add_test_case lagg_lacp_portpri 147420274667Syamaguchi atf_add_test_case lagg_failover_ipv4 147520274667Syamaguchi atf_add_test_case lagg_failover_ipv6 1476d51dce31Syamaguchi atf_add_test_case lagg_failover_l2tp_ipv4 1477d51dce31Syamaguchi atf_add_test_case lagg_failover_l2tp_ipv6 147820274667Syamaguchi atf_add_test_case lagg_loadbalance_ipv4 147920274667Syamaguchi atf_add_test_case lagg_loadbalance_ipv6 1480d51dce31Syamaguchi atf_add_test_case lagg_loadbalance_l2tp_ipv4 1481d51dce31Syamaguchi atf_add_test_case lagg_loadbalance_l2tp_ipv6 148220274667Syamaguchi} 1483