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