xref: /netbsd/tests/net/if_lagg/t_lagg.sh (revision 870bb1d2)
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