xref: /netbsd-src/tests/net/if_wg/t_basic.sh (revision c37c3d379cc079f02c4c192815e8d6a1f0cf55ec)
1*c37c3d37Sriastradh#	$NetBSD: t_basic.sh,v 1.6 2024/10/08 02:29:40 riastradh Exp $
225154f5fSriastradh#
325154f5fSriastradh# Copyright (c) 2018 Ryota Ozaki <ozaki.ryota@gmail.com>
425154f5fSriastradh# All rights reserved.
525154f5fSriastradh#
625154f5fSriastradh# Redistribution and use in source and binary forms, with or without
725154f5fSriastradh# modification, are permitted provided that the following conditions
825154f5fSriastradh# are met:
925154f5fSriastradh# 1. Redistributions of source code must retain the above copyright
1025154f5fSriastradh#    notice, this list of conditions and the following disclaimer.
1125154f5fSriastradh# 2. Redistributions in binary form must reproduce the above copyright
1225154f5fSriastradh#    notice, this list of conditions and the following disclaimer in the
1325154f5fSriastradh#    documentation and/or other materials provided with the distribution.
1425154f5fSriastradh#
1525154f5fSriastradh# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1625154f5fSriastradh# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
1725154f5fSriastradh# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1825154f5fSriastradh# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
1925154f5fSriastradh# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2025154f5fSriastradh# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2125154f5fSriastradh# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2225154f5fSriastradh# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2325154f5fSriastradh# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2425154f5fSriastradh# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2525154f5fSriastradh# POSSIBILITY OF SUCH DAMAGE.
2625154f5fSriastradh#
2725154f5fSriastradh
2825154f5fSriastradhBUS=bus
2925154f5fSriastradhSOCK_LOCAL=unix://wg_local
3025154f5fSriastradhSOCK_PEER=unix://wg_peer
3125154f5fSriastradhSOCK_PEER2=unix://wg_peer2
3225154f5fSriastradh
3325154f5fSriastradh
3425154f5fSriastradhcheck_ping_payload()
3525154f5fSriastradh{
3625154f5fSriastradh	local proto=$1
3725154f5fSriastradh	local ip=$2
3825154f5fSriastradh	local ping= size=
3925154f5fSriastradh
4025154f5fSriastradh	if [ $proto = inet ]; then
4125154f5fSriastradh		ping="atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w 1"
4225154f5fSriastradh	else
4325154f5fSriastradh		ping="atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X 1"
4425154f5fSriastradh	fi
4525154f5fSriastradh
4625154f5fSriastradh	for size in $(seq 1 100) $(seq 450 550) $(seq 1400 1500); do
4725154f5fSriastradh		$ping -s $size $ip
4825154f5fSriastradh	done
4925154f5fSriastradh}
5025154f5fSriastradh
5126f9ca4eSriastradhcheck_badudp()
5226f9ca4eSriastradh{
5326f9ca4eSriastradh	local proto=$1
5426f9ca4eSriastradh	local ip=$2
5526f9ca4eSriastradh	local port=51820        # XXX parametrize more clearly
5626f9ca4eSriastradh
5726f9ca4eSriastradh	if [ $proto = inet ]; then
5826f9ca4eSriastradh		atf_check -o ignore -e ignore \
5926f9ca4eSriastradh		    $HIJACKING nc -4uv -w1 $ip $port </dev/null
6026f9ca4eSriastradh	else
6126f9ca4eSriastradh		atf_check -o ignore -e ignore \
6226f9ca4eSriastradh		    $HIJACKING nc -6uv -w1 $ip $port </dev/null
6326f9ca4eSriastradh	fi
6426f9ca4eSriastradh}
6526f9ca4eSriastradh
6625154f5fSriastradhtest_common()
6725154f5fSriastradh{
6825154f5fSriastradh	local type=$1
6925154f5fSriastradh	local outer_proto=$2
7025154f5fSriastradh	local inner_proto=$3
7125154f5fSriastradh	local ifconfig="atf_check -s exit:0 rump.ifconfig"
7225154f5fSriastradh	local port=51820
7325154f5fSriastradh	local ip_local= ip_peer=
7425154f5fSriastradh	local ip_wg_local= ip_wg_peer=
7525154f5fSriastradh	local outer_prefix= outer_prefixall=
7625154f5fSriastradh	local inner_prefix= inner_prefixall=
7725154f5fSriastradh
7825154f5fSriastradh	if [ $outer_proto = inet ]; then
7925154f5fSriastradh		ip_local=192.168.1.1
8025154f5fSriastradh		ip_peer=192.168.1.2
8125154f5fSriastradh		outer_prefix=24
8225154f5fSriastradh		outer_prefixall=32
8325154f5fSriastradh	else
8425154f5fSriastradh		ip_local=fc00::1
8525154f5fSriastradh		ip_peer=fc00::2
8625154f5fSriastradh		outer_prefix=64
8725154f5fSriastradh		outer_prefixall=128
8825154f5fSriastradh	fi
8925154f5fSriastradh
9025154f5fSriastradh	if [ $inner_proto = inet ]; then
9125154f5fSriastradh		ip_wg_local=10.0.0.1
9225154f5fSriastradh		ip_wg_peer=10.0.0.2
9325154f5fSriastradh		inner_prefix=24
9425154f5fSriastradh		inner_prefixall=32
9525154f5fSriastradh	else
9625154f5fSriastradh		ip_wg_local=fd00::1
9725154f5fSriastradh		ip_wg_peer=fd00::2
9825154f5fSriastradh		inner_prefix=64
9925154f5fSriastradh		inner_prefixall=128
10025154f5fSriastradh	fi
10125154f5fSriastradh
10225154f5fSriastradh	setup_servers
10325154f5fSriastradh
10425154f5fSriastradh	# It sets key_priv_local key_pub_local key_priv_peer key_pub_peer
10525154f5fSriastradh	generate_keys
10625154f5fSriastradh
10725154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
10825154f5fSriastradh	setup_common shmif0 $outer_proto $ip_local $outer_prefix
10925154f5fSriastradh	setup_wg_common wg0 $inner_proto $ip_wg_local $inner_prefix $port "$key_priv_local"
11012f66125Sroy	add_peer wg0 peer0 $key_pub_peer $ip_peer:$port $ip_wg_peer/$inner_prefixall
11160f64147Ssimonb	$ifconfig -w 10
11225154f5fSriastradh
11325154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER
11425154f5fSriastradh	setup_common shmif0 $outer_proto $ip_peer $outer_prefix
11525154f5fSriastradh	setup_wg_common wg0 $inner_proto $ip_wg_peer $inner_prefix $port "$key_priv_peer"
11625154f5fSriastradh	add_peer wg0 peer0 $key_pub_local $ip_local:$port $ip_wg_local/$inner_prefixall
11760f64147Ssimonb	$ifconfig -w 10
11825154f5fSriastradh
11925154f5fSriastradh	if [ $type = basic ]; then
12025154f5fSriastradh		export RUMP_SERVER=$SOCK_LOCAL
12125154f5fSriastradh		check_ping $inner_proto $ip_wg_peer
12225154f5fSriastradh	elif [ $type = payload ]; then
12325154f5fSriastradh		export RUMP_SERVER=$SOCK_LOCAL
12425154f5fSriastradh		check_ping_payload $inner_proto $ip_wg_peer
12526f9ca4eSriastradh	elif [ $type = badudp ]; then
12626f9ca4eSriastradh		export RUMP_SERVER=$SOCK_LOCAL
12726f9ca4eSriastradh		check_badudp $outer_proto $ip_peer
12825154f5fSriastradh	fi
12925154f5fSriastradh
13025154f5fSriastradh	destroy_wg_interfaces
13125154f5fSriastradh}
13225154f5fSriastradh
13325154f5fSriastradhatf_test_case wg_create_destroy cleanup
13425154f5fSriastradhwg_create_destroy_head()
13525154f5fSriastradh{
13625154f5fSriastradh
13725154f5fSriastradh	atf_set "descr" "tests to create/destroy wg(4) interfaces"
13825154f5fSriastradh	atf_set "require.progs" "rump_server" "wgconfig" "wg-keygen"
13925154f5fSriastradh}
14025154f5fSriastradh
14125154f5fSriastradhwg_create_destroy_body()
14225154f5fSriastradh{
14325154f5fSriastradh
14425154f5fSriastradh	rump_server_crypto_start $SOCK_LOCAL netinet6 wg
14525154f5fSriastradh
14625154f5fSriastradh	test_create_destroy_common $SOCK_LOCAL wg0 true
14725154f5fSriastradh}
14825154f5fSriastradh
14925154f5fSriastradhwg_create_destroy_cleanup()
15025154f5fSriastradh{
15125154f5fSriastradh
15225154f5fSriastradh	$DEBUG && dump
15325154f5fSriastradh	cleanup
15425154f5fSriastradh}
15525154f5fSriastradh
15625154f5fSriastradhwg_create_destroy_peers_common()
15725154f5fSriastradh{
15825154f5fSriastradh	local proto=$1
15925154f5fSriastradh	local ifconfig="atf_check -s exit:0 rump.ifconfig"
16025154f5fSriastradh	local port=51820
16125154f5fSriastradh	local ip_local= ip_peer=
16225154f5fSriastradh	local ip_wg_local= ip_wg_peer=
16325154f5fSriastradh	local outer_prefix= outer_prefixall=
16425154f5fSriastradh	local inner_prefix= inner_prefixall=
16525154f5fSriastradh
16625154f5fSriastradh	if [ $proto = inet ]; then
16725154f5fSriastradh		ip_local=192.168.1.1
16825154f5fSriastradh		ip_peer=192.168.1.2
16925154f5fSriastradh		outer_prefix=24
17025154f5fSriastradh		outer_prefixall=32
17125154f5fSriastradh		ip_wg_local=10.0.0.1
17225154f5fSriastradh		ip_wg_peer=10.0.0.2
17325154f5fSriastradh		inner_prefix=24
17425154f5fSriastradh		inner_prefixall=32
17525154f5fSriastradh	else
17625154f5fSriastradh		ip_local=fc00::1
17725154f5fSriastradh		ip_peer=fc00::2
17825154f5fSriastradh		outer_prefix=64
17925154f5fSriastradh		outer_prefixall=128
18025154f5fSriastradh		ip_wg_local=fd00::1
18125154f5fSriastradh		ip_wg_peer=fd00::2
18225154f5fSriastradh		inner_prefix=64
18325154f5fSriastradh		inner_prefixall=128
18425154f5fSriastradh	fi
18525154f5fSriastradh
18625154f5fSriastradh	rump_server_crypto_start $SOCK_LOCAL netinet6 wg
18725154f5fSriastradh	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
18825154f5fSriastradh
18925154f5fSriastradh	# It sets key_priv_local key_pub_local key_priv_peer key_pub_peer
19025154f5fSriastradh	generate_keys
19125154f5fSriastradh
19225154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
19325154f5fSriastradh	setup_common shmif0 $proto $ip_local $outer_prefix
19425154f5fSriastradh	setup_wg_common wg0 $proto $ip_wg_local $inner_prefix $port "$key_priv_local"
19525154f5fSriastradh
19625154f5fSriastradh	add_peer wg0 peer0 $key_pub_peer $ip_peer:$port $ip_wg_peer/$inner_prefixall
19725154f5fSriastradh
19825154f5fSriastradh	delete_peer wg0 peer0
19925154f5fSriastradh}
20025154f5fSriastradh
20125154f5fSriastradhatf_test_case wg_create_destroy_peers_ipv4 cleanup
20225154f5fSriastradhwg_create_destroy_peers_ipv4_head()
20325154f5fSriastradh{
20425154f5fSriastradh
20525154f5fSriastradh	atf_set "descr" "tests to create/destroy peers (IPv4)"
20625154f5fSriastradh	atf_set "require.progs" "rump_server" "wgconfig" "wg-keygen"
20725154f5fSriastradh}
20825154f5fSriastradh
20925154f5fSriastradhwg_create_destroy_peers_ipv4_body()
21025154f5fSriastradh{
21125154f5fSriastradh
21225154f5fSriastradh	wg_create_destroy_peers_common inet
21325154f5fSriastradh}
21425154f5fSriastradh
21525154f5fSriastradhwg_create_destroy_peers_ipv4_cleanup()
21625154f5fSriastradh{
21725154f5fSriastradh
21825154f5fSriastradh	$DEBUG && dump
21925154f5fSriastradh	cleanup
22025154f5fSriastradh}
22125154f5fSriastradh
22225154f5fSriastradhatf_test_case wg_create_destroy_peers_ipv6 cleanup
22325154f5fSriastradhwg_create_destroy_peers_ipv6_head()
22425154f5fSriastradh{
22525154f5fSriastradh
22625154f5fSriastradh	atf_set "descr" "tests to create/destroy peers (IPv6)"
22725154f5fSriastradh	atf_set "require.progs" "rump_server" "wgconfig" "wg-keygen"
22825154f5fSriastradh}
22925154f5fSriastradh
23025154f5fSriastradhwg_create_destroy_peers_ipv6_body()
23125154f5fSriastradh{
23225154f5fSriastradh
23325154f5fSriastradh	wg_create_destroy_peers_common inet6
23425154f5fSriastradh}
23525154f5fSriastradh
23625154f5fSriastradhwg_create_destroy_peers_ipv6_cleanup()
23725154f5fSriastradh{
23825154f5fSriastradh
23925154f5fSriastradh	$DEBUG && dump
24025154f5fSriastradh	cleanup
24125154f5fSriastradh}
24225154f5fSriastradh
24325154f5fSriastradhadd_basic_test()
24425154f5fSriastradh{
24525154f5fSriastradh	local inner=$1
24625154f5fSriastradh	local outer=$2
24725154f5fSriastradh	local ipv4=inet
24825154f5fSriastradh	local ipv6=inet6
24925154f5fSriastradh
25025154f5fSriastradh	name="wg_basic_${inner}_over_${outer}"
25125154f5fSriastradh	fulldesc="Test wg(4) with ${inner} over ${outer}"
25225154f5fSriastradh
25325154f5fSriastradh	eval inner=\$$inner
25425154f5fSriastradh	eval outer=\$$outer
25525154f5fSriastradh
25625154f5fSriastradh	atf_test_case ${name} cleanup
25725154f5fSriastradh	eval "
25825154f5fSriastradh		${name}_head() {
25925154f5fSriastradh			atf_set descr \"${fulldesc}\"
26025154f5fSriastradh			atf_set require.progs rump_server wgconfig wg-keygen
26125154f5fSriastradh		}
26225154f5fSriastradh		${name}_body() {
26325154f5fSriastradh			test_common basic $outer $inner
26425154f5fSriastradh			rump_server_destroy_ifaces
26525154f5fSriastradh		}
26625154f5fSriastradh		${name}_cleanup() {
26725154f5fSriastradh			\$DEBUG && dump
26825154f5fSriastradh			cleanup
26925154f5fSriastradh		}"
27025154f5fSriastradh	atf_add_test_case ${name}
27125154f5fSriastradh}
27225154f5fSriastradh
27325154f5fSriastradhadd_payload_sizes_test()
27425154f5fSriastradh{
27525154f5fSriastradh	local inner=$1
27625154f5fSriastradh	local outer=$2
27725154f5fSriastradh	local ipv4=inet
27825154f5fSriastradh	local ipv6=inet6
27925154f5fSriastradh
28025154f5fSriastradh	name="wg_payload_sizes_${inner}_over_${outer}"
28125154f5fSriastradh	fulldesc="Test wg(4) with ${inner} over ${outer} with various payload sizes"
28225154f5fSriastradh
28325154f5fSriastradh	eval inner=\$$inner
28425154f5fSriastradh	eval outer=\$$outer
28525154f5fSriastradh
28625154f5fSriastradh	atf_test_case ${name} cleanup
28725154f5fSriastradh	eval "
28825154f5fSriastradh		${name}_head() {
28925154f5fSriastradh			atf_set descr \"${fulldesc}\"
29025154f5fSriastradh			atf_set require.progs rump_server wgconfig wg-keygen
29125154f5fSriastradh		}
29225154f5fSriastradh		${name}_body() {
29325154f5fSriastradh			test_common payload $outer $inner
29425154f5fSriastradh			rump_server_destroy_ifaces
29525154f5fSriastradh		}
29625154f5fSriastradh		${name}_cleanup() {
29725154f5fSriastradh			\$DEBUG && dump
29825154f5fSriastradh			cleanup
29925154f5fSriastradh		}"
30025154f5fSriastradh	atf_add_test_case ${name}
30125154f5fSriastradh}
30225154f5fSriastradh
30326f9ca4eSriastradhadd_badudp_test()
30426f9ca4eSriastradh{
30526f9ca4eSriastradh	local inner=$1
30626f9ca4eSriastradh	local outer=$2
30726f9ca4eSriastradh	local ipv4=inet
30826f9ca4eSriastradh	local ipv6=inet6
30926f9ca4eSriastradh
31026f9ca4eSriastradh	name="wg_badudp_${inner}_over_${outer}"
31126f9ca4eSriastradh	fulldesc="Test wg(4) with ${inner} over ${outer} with bad UDP packets"
31226f9ca4eSriastradh
31326f9ca4eSriastradh	eval inner=\$$inner
31426f9ca4eSriastradh	eval outer=\$$outer
31526f9ca4eSriastradh
31626f9ca4eSriastradh	atf_test_case ${name} cleanup
31726f9ca4eSriastradh	eval "
31826f9ca4eSriastradh		${name}_head() {
31926f9ca4eSriastradh			atf_set descr \"${fulldesc}\"
32026f9ca4eSriastradh			atf_set require.progs rump_server wgconfig wg-keygen nc
32126f9ca4eSriastradh		}
32226f9ca4eSriastradh		${name}_body() {
32326f9ca4eSriastradh			test_common badudp $outer $inner
32426f9ca4eSriastradh			rump_server_destroy_ifaces
32526f9ca4eSriastradh		}
32626f9ca4eSriastradh		${name}_cleanup() {
32726f9ca4eSriastradh			\$DEBUG && dump
32826f9ca4eSriastradh			cleanup
32926f9ca4eSriastradh		}"
33026f9ca4eSriastradh	atf_add_test_case ${name}
33126f9ca4eSriastradh}
33226f9ca4eSriastradh
33325154f5fSriastradhatf_test_case wg_multiple_interfaces cleanup
33425154f5fSriastradhwg_multiple_interfaces_head()
33525154f5fSriastradh{
33625154f5fSriastradh
33725154f5fSriastradh	atf_set "descr" "tests multiple wg(4) interfaces"
33825154f5fSriastradh	atf_set "require.progs" "rump_server" "wgconfig" "wg-keygen"
33925154f5fSriastradh}
34025154f5fSriastradh
34125154f5fSriastradhwg_multiple_interfaces_body()
34225154f5fSriastradh{
34325154f5fSriastradh	local ifconfig="atf_check -s exit:0 rump.ifconfig"
34425154f5fSriastradh	local ping="atf_check -s exit:0 -o ignore rump.ping -n -i 0.1 -c 3 -w 1"
34525154f5fSriastradh	local ping_fail="atf_check -s not-exit:0 -o ignore rump.ping -n -c 1 -w 1"
34625154f5fSriastradh	local key_priv_peer2=
34725154f5fSriastradh	local key_pub_peer2=
34825154f5fSriastradh	local ip_local=192.168.1.1
34925154f5fSriastradh	local ip_local2=192.168.2.1
35025154f5fSriastradh	local ip_peer=192.168.1.2
35125154f5fSriastradh	local ip_peer2=192.168.2.2
35225154f5fSriastradh	local ip_wg_local=10.0.0.1
35325154f5fSriastradh	local ip_wg_local2=10.0.1.1
35425154f5fSriastradh	local ip_wg_peer=10.0.0.2
35525154f5fSriastradh	local ip_wg_peer2=10.0.1.2
35625154f5fSriastradh	local port=51820
35725154f5fSriastradh	local port2=51821
35825154f5fSriastradh	local outfile=./out
35925154f5fSriastradh
36025154f5fSriastradh	setup_servers
36125154f5fSriastradh	rump_server_add_iface $SOCK_LOCAL shmif1 $BUS
36225154f5fSriastradh
36325154f5fSriastradh	rump_server_crypto_start $SOCK_PEER2 netinet6 wg
36425154f5fSriastradh	rump_server_add_iface $SOCK_PEER2 shmif0 $BUS
36525154f5fSriastradh
36625154f5fSriastradh	# It sets key_priv_local key_pub_local key_priv_peer key_pub_peer
36725154f5fSriastradh	generate_keys
36825154f5fSriastradh	key_priv_peer2=$(wg-keygen)
36925154f5fSriastradh	key_pub_peer2=$(echo $key_priv_peer2| wg-keygen --pub)
37025154f5fSriastradh
37125154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
37225154f5fSriastradh	setup_common shmif0 inet $ip_local 24
37325154f5fSriastradh	setup_common shmif1 inet $ip_local2 24
37425154f5fSriastradh	setup_wg_common wg0 inet $ip_wg_local 24 $port "$key_priv_local"
37525154f5fSriastradh	setup_wg_common wg1 inet $ip_wg_local2 24 $port2 "$key_priv_local"
37612f66125Sroy	add_peer wg0 peer0 $key_pub_peer $ip_peer:$port $ip_wg_peer/32
37712f66125Sroy	add_peer wg1 peer0 $key_pub_peer2 $ip_peer2:$port2 $ip_wg_peer2/32
37860f64147Ssimonb	$ifconfig -w 10
37925154f5fSriastradh
38025154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER
38125154f5fSriastradh	setup_common shmif0 inet $ip_peer 24
38225154f5fSriastradh	setup_wg_common wg0 inet $ip_wg_peer 24 $port "$key_priv_peer"
38312f66125Sroy	add_peer wg0 peer0 $key_pub_local $ip_local:$port $ip_wg_local/32
38460f64147Ssimonb	$ifconfig -w 10
38525154f5fSriastradh
38625154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER2
38725154f5fSriastradh	setup_common shmif0 inet $ip_peer2 24
38825154f5fSriastradh	setup_wg_common wg0 inet $ip_wg_peer2 24 $port2 "$key_priv_peer2"
38925154f5fSriastradh	add_peer wg0 peer0 $key_pub_local $ip_local2:$port2 $ip_wg_local2/32
39060f64147Ssimonb	$ifconfig -w 10
39125154f5fSriastradh
39225154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
39325154f5fSriastradh
39425154f5fSriastradh	extract_new_packets $BUS > $outfile
39525154f5fSriastradh	$DEBUG && cat $outfile
39625154f5fSriastradh
39725154f5fSriastradh	$ping $ip_wg_peer
39825154f5fSriastradh
39925154f5fSriastradh	extract_new_packets $BUS > $outfile
40025154f5fSriastradh	$DEBUG && cat $outfile
40125154f5fSriastradh
40225154f5fSriastradh	$ping $ip_wg_peer2
40325154f5fSriastradh
40425154f5fSriastradh	extract_new_packets $BUS > $outfile
40525154f5fSriastradh	$DEBUG && cat $outfile
40625154f5fSriastradh
40725154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
40825154f5fSriastradh	$ifconfig wg0 destroy
40925154f5fSriastradh	$ifconfig wg1 destroy
41025154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER
41125154f5fSriastradh	$ifconfig wg0 destroy
41225154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER2
41325154f5fSriastradh	$ifconfig wg0 destroy
41425154f5fSriastradh}
41525154f5fSriastradh
41625154f5fSriastradhwg_multiple_interfaces_cleanup()
41725154f5fSriastradh{
41825154f5fSriastradh
41925154f5fSriastradh	$DEBUG && dump
42025154f5fSriastradh	cleanup
42125154f5fSriastradh}
42225154f5fSriastradh
42325154f5fSriastradhatf_test_case wg_multiple_peers cleanup
42425154f5fSriastradhwg_multiple_peers_head()
42525154f5fSriastradh{
42625154f5fSriastradh
42725154f5fSriastradh	atf_set "descr" "tests multiple wg(4) peers"
42825154f5fSriastradh	atf_set "require.progs" "rump_server" "wgconfig" "wg-keygen"
42925154f5fSriastradh}
43025154f5fSriastradh
43125154f5fSriastradhwg_multiple_peers_body()
43225154f5fSriastradh{
43325154f5fSriastradh	local ifconfig="atf_check -s exit:0 rump.ifconfig"
43425154f5fSriastradh	local ping="atf_check -s exit:0 -o ignore rump.ping -n -i 0.1 -c 3 -w 1"
43525154f5fSriastradh	local ping_fail="atf_check -s not-exit:0 -o ignore rump.ping -n -c 1 -w 1"
43625154f5fSriastradh	local key_priv_peer2=
43725154f5fSriastradh	local key_pub_peer2=
43825154f5fSriastradh	local ip_local=192.168.1.1
43925154f5fSriastradh	local ip_peer=192.168.1.2
44025154f5fSriastradh	local ip_peer2=192.168.1.3
44125154f5fSriastradh	local ip_wg_local=10.0.0.1
44225154f5fSriastradh	local ip_wg_peer=10.0.0.2
44325154f5fSriastradh	local ip_wg_peer2=10.0.0.3
44425154f5fSriastradh	local port=51820
44525154f5fSriastradh	local outfile=./out
44625154f5fSriastradh
44725154f5fSriastradh	setup_servers
44825154f5fSriastradh	rump_server_add_iface $SOCK_LOCAL shmif1 $BUS
44925154f5fSriastradh
45025154f5fSriastradh	rump_server_crypto_start $SOCK_PEER2 netinet6 wg
45125154f5fSriastradh	rump_server_add_iface $SOCK_PEER2 shmif0 $BUS
45225154f5fSriastradh
45325154f5fSriastradh	# It sets key_priv_local key_pub_local key_priv_peer key_pub_peer
45425154f5fSriastradh	generate_keys
45525154f5fSriastradh	key_priv_peer2=$(wg-keygen)
45625154f5fSriastradh	key_pub_peer2=$(echo $key_priv_peer2| wg-keygen --pub)
45725154f5fSriastradh
45825154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
45925154f5fSriastradh	setup_common shmif0 inet $ip_local 24
46025154f5fSriastradh	setup_wg_common wg0 inet $ip_wg_local 24 $port "$key_priv_local"
46112f66125Sroy	add_peer wg0 peer0 $key_pub_peer $ip_peer:$port $ip_wg_peer/32
46212f66125Sroy	add_peer wg0 peer1 $key_pub_peer2 $ip_peer2:$port $ip_wg_peer2/32
46360f64147Ssimonb	$ifconfig -w 10
46425154f5fSriastradh
46525154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER
46625154f5fSriastradh	setup_common shmif0 inet $ip_peer 24
46725154f5fSriastradh	setup_wg_common wg0 inet $ip_wg_peer 24 $port "$key_priv_peer"
46812f66125Sroy	add_peer wg0 peer0 $key_pub_local $ip_local:$port $ip_wg_local/32
46960f64147Ssimonb	$ifconfig -w 10
47025154f5fSriastradh
47125154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER2
47225154f5fSriastradh	setup_common shmif0 inet $ip_peer2 24
47325154f5fSriastradh	setup_wg_common wg0 inet $ip_wg_peer2 24 $port "$key_priv_peer2"
47425154f5fSriastradh	add_peer wg0 peer0 $key_pub_local $ip_local:$port $ip_wg_local/32
47560f64147Ssimonb	$ifconfig -w 10
47625154f5fSriastradh
47725154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
47825154f5fSriastradh
47925154f5fSriastradh	extract_new_packets $BUS > $outfile
48025154f5fSriastradh	$DEBUG && cat $outfile
48125154f5fSriastradh
48225154f5fSriastradh	$ping $ip_wg_peer
48325154f5fSriastradh
48425154f5fSriastradh	extract_new_packets $BUS > $outfile
48525154f5fSriastradh	$DEBUG && cat $outfile
48625154f5fSriastradh
48725154f5fSriastradh	$ping $ip_wg_peer2
48825154f5fSriastradh
48925154f5fSriastradh	extract_new_packets $BUS > $outfile
49025154f5fSriastradh	$DEBUG && cat $outfile
49125154f5fSriastradh
49225154f5fSriastradh	export RUMP_SERVER=$SOCK_LOCAL
49325154f5fSriastradh	$ifconfig wg0 destroy
49425154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER
49525154f5fSriastradh	$ifconfig wg0 destroy
49625154f5fSriastradh	export RUMP_SERVER=$SOCK_PEER2
49725154f5fSriastradh	$ifconfig wg0 destroy
49825154f5fSriastradh}
49925154f5fSriastradh
50025154f5fSriastradhwg_multiple_peers_cleanup()
50125154f5fSriastradh{
50225154f5fSriastradh
50325154f5fSriastradh	$DEBUG && dump
50425154f5fSriastradh	cleanup
50525154f5fSriastradh}
50625154f5fSriastradh
50725154f5fSriastradhatf_init_test_cases()
50825154f5fSriastradh{
50925154f5fSriastradh
51026f9ca4eSriastradh	add_badudp_test ipv4 ipv4
51126f9ca4eSriastradh	add_badudp_test ipv4 ipv6
51226f9ca4eSriastradh	add_badudp_test ipv6 ipv4
51326f9ca4eSriastradh	add_badudp_test ipv6 ipv6
51426f9ca4eSriastradh
51525154f5fSriastradh	add_basic_test ipv4 ipv4
51625154f5fSriastradh	add_basic_test ipv4 ipv6
51725154f5fSriastradh	add_basic_test ipv6 ipv4
51825154f5fSriastradh	add_basic_test ipv6 ipv6
51925154f5fSriastradh
52025154f5fSriastradh	add_payload_sizes_test ipv4 ipv4
52125154f5fSriastradh	add_payload_sizes_test ipv4 ipv6
52225154f5fSriastradh	add_payload_sizes_test ipv6 ipv4
52325154f5fSriastradh	add_payload_sizes_test ipv6 ipv6
52425154f5fSriastradh
52525154f5fSriastradh	atf_add_test_case wg_create_destroy
52625154f5fSriastradh	atf_add_test_case wg_create_destroy_peers_ipv4
52725154f5fSriastradh	atf_add_test_case wg_create_destroy_peers_ipv6
52825154f5fSriastradh	atf_add_test_case wg_multiple_interfaces
52925154f5fSriastradh	atf_add_test_case wg_multiple_peers
53025154f5fSriastradh}
531