1b4a4a3b8SAlexander V. Chernikov#!/usr/bin/env atf-sh 2b4a4a3b8SAlexander V. Chernikov#- 3b4a4a3b8SAlexander V. Chernikov# SPDX-License-Identifier: BSD-2-Clause 4b4a4a3b8SAlexander V. Chernikov# 5b4a4a3b8SAlexander V. Chernikov# Copyright (c) 2020 Alexander V. Chernikov 6b4a4a3b8SAlexander V. Chernikov# 7b4a4a3b8SAlexander V. Chernikov# Redistribution and use in source and binary forms, with or without 8b4a4a3b8SAlexander V. Chernikov# modification, are permitted provided that the following conditions 9b4a4a3b8SAlexander V. Chernikov# are met: 10b4a4a3b8SAlexander V. Chernikov# 1. Redistributions of source code must retain the above copyright 11b4a4a3b8SAlexander V. Chernikov# notice, this list of conditions and the following disclaimer. 12b4a4a3b8SAlexander V. Chernikov# 2. Redistributions in binary form must reproduce the above copyright 13b4a4a3b8SAlexander V. Chernikov# notice, this list of conditions and the following disclaimer in the 14b4a4a3b8SAlexander V. Chernikov# documentation and/or other materials provided with the distribution. 15b4a4a3b8SAlexander V. Chernikov# 16b4a4a3b8SAlexander V. Chernikov# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17b4a4a3b8SAlexander V. Chernikov# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18b4a4a3b8SAlexander V. Chernikov# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19b4a4a3b8SAlexander V. Chernikov# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20b4a4a3b8SAlexander V. Chernikov# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21b4a4a3b8SAlexander V. Chernikov# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22b4a4a3b8SAlexander V. Chernikov# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23b4a4a3b8SAlexander V. Chernikov# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24b4a4a3b8SAlexander V. Chernikov# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25b4a4a3b8SAlexander V. Chernikov# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26b4a4a3b8SAlexander V. Chernikov# SUCH DAMAGE. 27b4a4a3b8SAlexander V. Chernikov# 28b4a4a3b8SAlexander V. Chernikov# 29b4a4a3b8SAlexander V. Chernikov 30b4a4a3b8SAlexander V. Chernikov. $(atf_get_srcdir)/../common/vnet.subr 31b4a4a3b8SAlexander V. Chernikov 32b4a4a3b8SAlexander V. Chernikovatf_test_case "output_tcp_setup_success" "cleanup" 33b4a4a3b8SAlexander V. Chernikovoutput_tcp_setup_success_head() 34b4a4a3b8SAlexander V. Chernikov{ 35b4a4a3b8SAlexander V. Chernikov 36b4a4a3b8SAlexander V. Chernikov atf_set descr 'Test valid IPv4 TCP output' 37b4a4a3b8SAlexander V. Chernikov atf_set require.user root 38b4a4a3b8SAlexander V. Chernikov} 39b4a4a3b8SAlexander V. Chernikov 40b4a4a3b8SAlexander V. Chernikovoutput_tcp_setup_success_body() 41b4a4a3b8SAlexander V. Chernikov{ 42b4a4a3b8SAlexander V. Chernikov 43b4a4a3b8SAlexander V. Chernikov vnet_init 44b4a4a3b8SAlexander V. Chernikov 45b4a4a3b8SAlexander V. Chernikov net_src="192.0.2." 46b4a4a3b8SAlexander V. Chernikov net_dst="192.0.2." 47b4a4a3b8SAlexander V. Chernikov ip_src="${net_src}1" 48b4a4a3b8SAlexander V. Chernikov ip_dst="${net_dst}2" 49b4a4a3b8SAlexander V. Chernikov plen=24 50b4a4a3b8SAlexander V. Chernikov text="testtesttst" 51b4a4a3b8SAlexander V. Chernikov port=4242 52b4a4a3b8SAlexander V. Chernikov 53b4a4a3b8SAlexander V. Chernikov script_name=`dirname $0`/../common/net_receiver.py 54b4a4a3b8SAlexander V. Chernikov script_name=`realpath ${script_name}` 55b4a4a3b8SAlexander V. Chernikov jname="v4t-output_tcp_setup_success" 56b4a4a3b8SAlexander V. Chernikov 57b4a4a3b8SAlexander V. Chernikov epair=$(vnet_mkepair) 58b4a4a3b8SAlexander V. Chernikov 59b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}a ${epair}a 60b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair}a up 61b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair}a inet ${ip_src}/${plen} 62b4a4a3b8SAlexander V. Chernikov 63b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}b ${epair}b 64b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair}b up 65b4a4a3b8SAlexander V. Chernikov 66b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair}b inet ${ip_dst}/${plen} 67b4a4a3b8SAlexander V. Chernikov 68b4a4a3b8SAlexander V. Chernikov # run listener 69b4a4a3b8SAlexander V. Chernikov args="--family inet --ports ${port} --match_str ${text}" 70b4a4a3b8SAlexander V. Chernikov echo jexec ${jname}b ${script_name} ${args} 71b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ${script_name} --test_name "test_listen_tcp" ${args} & 72b4a4a3b8SAlexander V. Chernikov cmd_pid=$! 73b4a4a3b8SAlexander V. Chernikov 74b4a4a3b8SAlexander V. Chernikov # wait for the script init 75b4a4a3b8SAlexander V. Chernikov counter=0 76b4a4a3b8SAlexander V. Chernikov while [ `jexec ${jname}b sockstat -4qlp ${port} | wc -l` != "1" ]; do 77b4a4a3b8SAlexander V. Chernikov sleep 0.01 78b4a4a3b8SAlexander V. Chernikov counter=$((counter+1)) 79b4a4a3b8SAlexander V. Chernikov if [ ${counter} -ge 50 ]; then break; fi 80b4a4a3b8SAlexander V. Chernikov done 81b4a4a3b8SAlexander V. Chernikov if [ `jexec ${jname}b sockstat -4qlp ${port} | wc -l` != "1" ]; then 82b4a4a3b8SAlexander V. Chernikov echo "App setup failed" 83b4a4a3b8SAlexander V. Chernikov exit 1 84b4a4a3b8SAlexander V. Chernikov fi 85b4a4a3b8SAlexander V. Chernikov 86b4a4a3b8SAlexander V. Chernikov # run sender 87b4a4a3b8SAlexander V. Chernikov echo -n "${text}" | jexec ${jname}a nc -N ${ip_dst} ${port} 88b4a4a3b8SAlexander V. Chernikov exit_code=$? 89b4a4a3b8SAlexander V. Chernikov if [ $exit_code -ne 0 ]; then atf_fail "sender exit code $exit_code" ; fi 90b4a4a3b8SAlexander V. Chernikov 91b4a4a3b8SAlexander V. Chernikov wait ${cmd_pid} 92b4a4a3b8SAlexander V. Chernikov exit_code=$? 93b4a4a3b8SAlexander V. Chernikov if [ $exit_code -ne 0 ]; then atf_fail "receiver exit code $exit_code" ; fi 94b4a4a3b8SAlexander V. Chernikov} 95b4a4a3b8SAlexander V. Chernikov 96b4a4a3b8SAlexander V. Chernikovoutput_tcp_setup_success_cleanup() 97b4a4a3b8SAlexander V. Chernikov{ 98b4a4a3b8SAlexander V. Chernikov vnet_cleanup 99b4a4a3b8SAlexander V. Chernikov} 100b4a4a3b8SAlexander V. Chernikov 101b4a4a3b8SAlexander V. Chernikov 102b4a4a3b8SAlexander V. Chernikovatf_test_case "output_udp_setup_success" "cleanup" 103b4a4a3b8SAlexander V. Chernikovoutput_udp_setup_success_head() 104b4a4a3b8SAlexander V. Chernikov{ 105b4a4a3b8SAlexander V. Chernikov 106b4a4a3b8SAlexander V. Chernikov atf_set descr 'Test valid IPv4 UDP output' 107b4a4a3b8SAlexander V. Chernikov atf_set require.user root 108b4a4a3b8SAlexander V. Chernikov} 109b4a4a3b8SAlexander V. Chernikov 110b4a4a3b8SAlexander V. Chernikovoutput_udp_setup_success_body() 111b4a4a3b8SAlexander V. Chernikov{ 112b4a4a3b8SAlexander V. Chernikov 113b4a4a3b8SAlexander V. Chernikov vnet_init 114b4a4a3b8SAlexander V. Chernikov 115b4a4a3b8SAlexander V. Chernikov net_src="192.0.2." 116b4a4a3b8SAlexander V. Chernikov net_dst="192.0.2." 117b4a4a3b8SAlexander V. Chernikov ip_src="${net_src}1" 118b4a4a3b8SAlexander V. Chernikov ip_dst="${net_dst}2" 119b4a4a3b8SAlexander V. Chernikov plen=24 120b4a4a3b8SAlexander V. Chernikov text="testtesttst" 121b4a4a3b8SAlexander V. Chernikov port=4242 122b4a4a3b8SAlexander V. Chernikov 123b4a4a3b8SAlexander V. Chernikov script_name=`dirname $0`/../common/net_receiver.py 124b4a4a3b8SAlexander V. Chernikov script_name=`realpath ${script_name}` 125b4a4a3b8SAlexander V. Chernikov jname="v4t-output_udp_setup_success" 126b4a4a3b8SAlexander V. Chernikov 127b4a4a3b8SAlexander V. Chernikov epair=$(vnet_mkepair) 128b4a4a3b8SAlexander V. Chernikov 129b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}a ${epair}a 130b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair}a up 131b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair}a inet ${ip_src}/${plen} 132b4a4a3b8SAlexander V. Chernikov 133b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}b ${epair}b 134b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair}b up 135b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair}b inet ${ip_dst}/${plen} 136b4a4a3b8SAlexander V. Chernikov 137b4a4a3b8SAlexander V. Chernikov # run listener 138b4a4a3b8SAlexander V. Chernikov args="--family inet --ports ${port} --match_str ${text}" 139b4a4a3b8SAlexander V. Chernikov echo jexec ${jname}b ${script_name} ${args} 140b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ${script_name} --test_name "test_listen_udp" ${args} & 141b4a4a3b8SAlexander V. Chernikov cmd_pid=$! 142b4a4a3b8SAlexander V. Chernikov 143b4a4a3b8SAlexander V. Chernikov # wait for the script init 144b4a4a3b8SAlexander V. Chernikov counter=0 145b4a4a3b8SAlexander V. Chernikov while [ `jexec ${jname}b sockstat -4qlp ${port} | wc -l` != "1" ]; do 146b4a4a3b8SAlexander V. Chernikov sleep 0.1 147b4a4a3b8SAlexander V. Chernikov counterc=$((counter+1)) 148b4a4a3b8SAlexander V. Chernikov if [ ${counter} -ge 50 ]; then break; fi 149b4a4a3b8SAlexander V. Chernikov done 150b4a4a3b8SAlexander V. Chernikov if [ `jexec ${jname}b sockstat -4qlp ${port} | wc -l` != "1" ]; then 151b4a4a3b8SAlexander V. Chernikov echo "App setup failed" 152b4a4a3b8SAlexander V. Chernikov exit 1 153b4a4a3b8SAlexander V. Chernikov fi 154b4a4a3b8SAlexander V. Chernikov 155b4a4a3b8SAlexander V. Chernikov # run sender 156b4a4a3b8SAlexander V. Chernikov # TODO: switch from nc to some alternative to avoid 1-second delay 157b4a4a3b8SAlexander V. Chernikov echo -n "${text}" | jexec ${jname}a nc -uNw1 ${ip_dst} ${port} 158b4a4a3b8SAlexander V. Chernikov exit_code=$? 159b4a4a3b8SAlexander V. Chernikov if [ $exit_code -ne 0 ]; then atf_fail "sender exit code $exit_code" ; fi 160b4a4a3b8SAlexander V. Chernikov 161b4a4a3b8SAlexander V. Chernikov wait ${cmd_pid} 162b4a4a3b8SAlexander V. Chernikov exit_code=$? 163b4a4a3b8SAlexander V. Chernikov if [ $exit_code -ne 0 ]; then atf_fail "receiver exit code $exit_code" ; fi 164b4a4a3b8SAlexander V. Chernikov} 165b4a4a3b8SAlexander V. Chernikov 166b4a4a3b8SAlexander V. Chernikovoutput_udp_setup_success_cleanup() 167b4a4a3b8SAlexander V. Chernikov{ 168b4a4a3b8SAlexander V. Chernikov vnet_cleanup 169b4a4a3b8SAlexander V. Chernikov} 170b4a4a3b8SAlexander V. Chernikov 171b4a4a3b8SAlexander V. Chernikovatf_test_case "output_raw_success" "cleanup" 172b4a4a3b8SAlexander V. Chernikovoutput_raw_success_head() 173b4a4a3b8SAlexander V. Chernikov{ 174b4a4a3b8SAlexander V. Chernikov 175b4a4a3b8SAlexander V. Chernikov atf_set descr 'Test valid IPv4 raw output' 176b4a4a3b8SAlexander V. Chernikov atf_set require.user root 177b4a4a3b8SAlexander V. Chernikov} 178b4a4a3b8SAlexander V. Chernikov 179b4a4a3b8SAlexander V. Chernikovoutput_raw_success_body() 180b4a4a3b8SAlexander V. Chernikov{ 181b4a4a3b8SAlexander V. Chernikov 182b4a4a3b8SAlexander V. Chernikov vnet_init 183b4a4a3b8SAlexander V. Chernikov 184b4a4a3b8SAlexander V. Chernikov net_src="192.0.2." 185b4a4a3b8SAlexander V. Chernikov net_dst="192.0.2." 186b4a4a3b8SAlexander V. Chernikov ip_src="${net_src}1" 187b4a4a3b8SAlexander V. Chernikov ip_dst="${net_dst}2" 188b4a4a3b8SAlexander V. Chernikov plen=24 189b4a4a3b8SAlexander V. Chernikov 190b4a4a3b8SAlexander V. Chernikov script_name=`dirname $0`/../common/net_receiver.py 191b4a4a3b8SAlexander V. Chernikov script_name=`realpath ${script_name}` 192b4a4a3b8SAlexander V. Chernikov jname="v4t-output_raw_success" 193b4a4a3b8SAlexander V. Chernikov 194b4a4a3b8SAlexander V. Chernikov epair=$(vnet_mkepair) 195b4a4a3b8SAlexander V. Chernikov 196b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}a ${epair}a 197b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair}a up 198b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair}a inet ${ip_src}/${plen} 199b4a4a3b8SAlexander V. Chernikov 200b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}b ${epair}b 201b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair}b up 202b4a4a3b8SAlexander V. Chernikov 203b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair}b inet ${ip_dst}/${plen} 204b4a4a3b8SAlexander V. Chernikov 205b4a4a3b8SAlexander V. Chernikov atf_check -o match:'1 packets transmitted, 1 packets received' jexec ${jname}a ping -nc1 ${ip_dst} 206b4a4a3b8SAlexander V. Chernikov} 207b4a4a3b8SAlexander V. Chernikov 208b4a4a3b8SAlexander V. Chernikovoutput_raw_success_cleanup() 209b4a4a3b8SAlexander V. Chernikov{ 210b4a4a3b8SAlexander V. Chernikov vnet_cleanup 211b4a4a3b8SAlexander V. Chernikov} 212b4a4a3b8SAlexander V. Chernikov 213b4a4a3b8SAlexander V. Chernikov# Multipath tests are done the following way: 214b4a4a3b8SAlexander V. Chernikov# epair0 215b4a4a3b8SAlexander V. Chernikov# jailA lo < > lo jailB 216b4a4a3b8SAlexander V. Chernikov# epair1 217b4a4a3b8SAlexander V. Chernikov# jailA has 2 routes towards /24 prefix on jailB loopback, via 2 epairs 218b4a4a3b8SAlexander V. Chernikov# jailB has 1 route towards /24 prefix on jailA loopback, via epair0 219b4a4a3b8SAlexander V. Chernikov# 220b4a4a3b8SAlexander V. Chernikov# jailA initiates connections/sends packets towards IPs on jailB loopback. 221b4a4a3b8SAlexander V. Chernikov# Script then compares amount of packets sent via epair0 and epair1 222b4a4a3b8SAlexander V. Chernikov 223b4a4a3b8SAlexander V. Chernikovmpath_check() 224b4a4a3b8SAlexander V. Chernikov{ 225a3525bd1SAlexander V. Chernikov if [ `sysctl -iW net.route.multipath | wc -l` != "1" ]; then 226b4a4a3b8SAlexander V. Chernikov atf_skip "This test requires ROUTE_MPATH enabled" 227b4a4a3b8SAlexander V. Chernikov fi 228b4a4a3b8SAlexander V. Chernikov} 229b4a4a3b8SAlexander V. Chernikov 230a3525bd1SAlexander V. Chernikovmpath_enable() 231a3525bd1SAlexander V. Chernikov{ 232a3525bd1SAlexander V. Chernikov jexec $1 sysctl net.route.multipath=1 233a3525bd1SAlexander V. Chernikov if [ $? != 0 ]; then 234a3525bd1SAlexander V. Chernikov atf_fail "Setting multipath in jail $1 failed". 235a3525bd1SAlexander V. Chernikov fi 236a3525bd1SAlexander V. Chernikov} 237a3525bd1SAlexander V. Chernikov 238b4a4a3b8SAlexander V. Chernikovatf_test_case "output_tcp_flowid_mpath_success" "cleanup" 239b4a4a3b8SAlexander V. Chernikovoutput_tcp_flowid_mpath_success_head() 240b4a4a3b8SAlexander V. Chernikov{ 241b4a4a3b8SAlexander V. Chernikov 242b4a4a3b8SAlexander V. Chernikov atf_set descr 'Test valid IPv4 TCP output flowid generation' 243b4a4a3b8SAlexander V. Chernikov atf_set require.user root 244b4a4a3b8SAlexander V. Chernikov} 245b4a4a3b8SAlexander V. Chernikov 246b4a4a3b8SAlexander V. Chernikovoutput_tcp_flowid_mpath_success_body() 247b4a4a3b8SAlexander V. Chernikov{ 248b4a4a3b8SAlexander V. Chernikov vnet_init 249b4a4a3b8SAlexander V. Chernikov mpath_check 250b4a4a3b8SAlexander V. Chernikov 251b4a4a3b8SAlexander V. Chernikov net_src="192.0.2." 252b4a4a3b8SAlexander V. Chernikov net_dst="198.51.100." 253b4a4a3b8SAlexander V. Chernikov ip_src="${net_src}1" 254b4a4a3b8SAlexander V. Chernikov ip_dst="${net_dst}1" 255b4a4a3b8SAlexander V. Chernikov plen=24 256b4a4a3b8SAlexander V. Chernikov text="testtesttst" 257b4a4a3b8SAlexander V. Chernikov 258b4a4a3b8SAlexander V. Chernikov script_name=`dirname $0`/../common/net_receiver.py 259b4a4a3b8SAlexander V. Chernikov script_name=`realpath ${script_name}` 260b4a4a3b8SAlexander V. Chernikov jname="v4t-output_tcp_flowid_mpath_success" 261b4a4a3b8SAlexander V. Chernikov 262b4a4a3b8SAlexander V. Chernikov epair0=$(vnet_mkepair) 263b4a4a3b8SAlexander V. Chernikov epair1=$(vnet_mkepair) 264b4a4a3b8SAlexander V. Chernikov lo_src=$(vnet_mkloopback) 265b4a4a3b8SAlexander V. Chernikov lo_dst=$(vnet_mkloopback) 266b4a4a3b8SAlexander V. Chernikov 267b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}a ${epair0}a ${epair1}a ${lo_src} 268a3525bd1SAlexander V. Chernikov mpath_enable ${jname}a 269b4a4a3b8SAlexander V. Chernikov # Setup transit IPv4 networks 270b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair0}a up 271b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair0}a inet 203.0.113.1/30 272b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair1}a up 273b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair1}a inet 203.0.113.5/30 274b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${lo_src} up 275b4a4a3b8SAlexander V. Chernikov 276b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}b ${epair0}b ${epair1}b ${lo_dst} 277b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair0}b up 278b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair0}b inet 203.0.113.2/30 279b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair1}b up 280b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair1}b inet 203.0.113.6/30 281b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} up 282b4a4a3b8SAlexander V. Chernikov 283b4a4a3b8SAlexander V. Chernikov # DST ips/ports to test 284b4a4a3b8SAlexander V. Chernikov ips="4 29 48 53 55 61 71 80 84 87 90 91 119 131 137 153 154 158 162 169 169 171 176 187 197 228 233 235 236 237 245 251" 285b4a4a3b8SAlexander V. Chernikov ports="53540 49743 43067 9131 16734 5150 14379 40292 20634 51302 3387 24387 9282 14275 42103 26881 42461 29520 45714 11096" 286b4a4a3b8SAlexander V. Chernikov 287b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${lo_src} inet ${ip_src}/32 288b4a4a3b8SAlexander V. Chernikov 289b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} inet ${ip_dst}/32 290b4a4a3b8SAlexander V. Chernikov for i in ${ips}; do 291b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} alias ${net_dst}${i}/32 292b4a4a3b8SAlexander V. Chernikov done 293b4a4a3b8SAlexander V. Chernikov 294b4a4a3b8SAlexander V. Chernikov # Add routes 295b4a4a3b8SAlexander V. Chernikov # A -> towards B via epair0a 296b4a4a3b8SAlexander V. Chernikov jexec ${jname}a route add -4 -net ${net_dst}0/${plen} 203.0.113.2 297b4a4a3b8SAlexander V. Chernikov # A -> towards B via epair1a 298b4a4a3b8SAlexander V. Chernikov jexec ${jname}a route add -4 -net ${net_dst}0/${plen} 203.0.113.6 299b4a4a3b8SAlexander V. Chernikov 300b4a4a3b8SAlexander V. Chernikov # B towards A via epair0b 301b4a4a3b8SAlexander V. Chernikov jexec ${jname}b route add -4 -net ${net_src}0/${plen} 203.0.113.1 302b4a4a3b8SAlexander V. Chernikov 303b4a4a3b8SAlexander V. Chernikov # Base setup verification 304b4a4a3b8SAlexander V. Chernikov atf_check -o match:'1 packets transmitted, 1 packets received' jexec ${jname}a ping -nc1 ${ip_dst} 305b4a4a3b8SAlexander V. Chernikov 306b4a4a3b8SAlexander V. Chernikov # run listener 307b4a4a3b8SAlexander V. Chernikov num_ports=`echo ${ports} | wc -w` 308b4a4a3b8SAlexander V. Chernikov num_ips=`echo ${ips} | wc -w` 309b4a4a3b8SAlexander V. Chernikov count_examples=$((num_ports*num_ips)) 310b4a4a3b8SAlexander V. Chernikov listener_ports=`echo ${ports} | tr ' ' '\n' | sort -n | tr '\n' ',' | sed -e 's?,$??'` 311b4a4a3b8SAlexander V. Chernikov args="--family inet --ports ${listener_ports} --count ${count_examples} --match_str ${text}" 312b4a4a3b8SAlexander V. Chernikov echo jexec ${jname}b ${script_name} ${args} 313b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ${script_name} --test_name "test_listen_tcp" ${args} & 314b4a4a3b8SAlexander V. Chernikov cmd_pid=$! 315b4a4a3b8SAlexander V. Chernikov 316b4a4a3b8SAlexander V. Chernikov # wait for the app init 317b4a4a3b8SAlexander V. Chernikov counter=0 318b4a4a3b8SAlexander V. Chernikov init=0 319b4a4a3b8SAlexander V. Chernikov while [ ${counter} -le 50 ]; do 320b4a4a3b8SAlexander V. Chernikov _ports=`jexec ${jname}b sockstat -4ql | awk "\\\$3 == ${cmd_pid} {print \\\$6}"|awk -F: "{print \\\$2}" | sort -n | tr '\n' ','` 321b4a4a3b8SAlexander V. Chernikov if [ "${_ports}" = "${listener_ports}," ]; then 322b4a4a3b8SAlexander V. Chernikov init=1 323b4a4a3b8SAlexander V. Chernikov break; 324b4a4a3b8SAlexander V. Chernikov fi 325b4a4a3b8SAlexander V. Chernikov done 326b4a4a3b8SAlexander V. Chernikov if [ ${init} -eq 0 ]; then 327b4a4a3b8SAlexander V. Chernikov jexec ${jname}b sockstat -6ql | awk "\$3 == ${cmd_pid}" 328b4a4a3b8SAlexander V. Chernikov echo "App setup failed" 329b4a4a3b8SAlexander V. Chernikov exit 1 330b4a4a3b8SAlexander V. Chernikov fi 331b4a4a3b8SAlexander V. Chernikov echo "App setup done" 332b4a4a3b8SAlexander V. Chernikov 333b4a4a3b8SAlexander V. Chernikov # run sender 334b4a4a3b8SAlexander V. Chernikov for _ip in ${ips}; do 335b4a4a3b8SAlexander V. Chernikov ip="${net_dst}${_ip}" 336b4a4a3b8SAlexander V. Chernikov for port in ${ports}; do 337b4a4a3b8SAlexander V. Chernikov echo -n "${text}" | jexec ${jname}a nc -nN ${ip} ${port} 338b4a4a3b8SAlexander V. Chernikov exit_code=$? 339b4a4a3b8SAlexander V. Chernikov if [ $exit_code -ne 0 ]; then atf_fail "sender exit code $exit_code" ; fi 340b4a4a3b8SAlexander V. Chernikov done 341b4a4a3b8SAlexander V. Chernikov done 342b4a4a3b8SAlexander V. Chernikov 343b4a4a3b8SAlexander V. Chernikov wait ${cmd_pid} 344b4a4a3b8SAlexander V. Chernikov exit_code=$? 345b4a4a3b8SAlexander V. Chernikov if [ $exit_code -ne 0 ]; then atf_fail "receiver exit code $exit_code" ; fi 346b4a4a3b8SAlexander V. Chernikov 347b4a4a3b8SAlexander V. Chernikov pkt_0=`jexec ${jname}a netstat -Wf link -I ${epair0}a | head | awk '$1!~/^Name/{print$8}'` 348b4a4a3b8SAlexander V. Chernikov pkt_1=`jexec ${jname}a netstat -Wf link -I ${epair1}a | head | awk '$1!~/^Name/{print$8}'` 349b4a4a3b8SAlexander V. Chernikov if [ ${pkt_0} -le 10 ]; then 3504a8c6300SAlexander V. Chernikov atf_fail "Balancing failure: 1: ${pkt_0} 2: ${pkt_1}" 351b4a4a3b8SAlexander V. Chernikov fi 352b4a4a3b8SAlexander V. Chernikov if [ ${pkt_1} -le 10 ]; then 3534a8c6300SAlexander V. Chernikov atf_fail "Balancing failure: 1: ${pkt_0} 2: ${pkt_1}" 354b4a4a3b8SAlexander V. Chernikov exit 1 355b4a4a3b8SAlexander V. Chernikov fi 356b4a4a3b8SAlexander V. Chernikov echo "TCP Balancing: 1: ${pkt_0} 2: ${pkt_1}" 357b4a4a3b8SAlexander V. Chernikov} 358b4a4a3b8SAlexander V. Chernikov 359b4a4a3b8SAlexander V. Chernikovoutput_tcp_flowid_mpath_success_cleanup() 360b4a4a3b8SAlexander V. Chernikov{ 361b4a4a3b8SAlexander V. Chernikov vnet_cleanup 362b4a4a3b8SAlexander V. Chernikov} 363b4a4a3b8SAlexander V. Chernikov 364b4a4a3b8SAlexander V. Chernikovatf_test_case "output_udp_flowid_mpath_success" "cleanup" 365b4a4a3b8SAlexander V. Chernikovoutput_udp_flowid_mpath_success_head() 366b4a4a3b8SAlexander V. Chernikov{ 367b4a4a3b8SAlexander V. Chernikov 368b4a4a3b8SAlexander V. Chernikov atf_set descr 'Test valid IPv4 UDP output flowid generation' 369b4a4a3b8SAlexander V. Chernikov atf_set require.user root 370b4a4a3b8SAlexander V. Chernikov} 371b4a4a3b8SAlexander V. Chernikov 372b4a4a3b8SAlexander V. Chernikovoutput_udp_flowid_mpath_success_body() 373b4a4a3b8SAlexander V. Chernikov{ 374b4a4a3b8SAlexander V. Chernikov 375b4a4a3b8SAlexander V. Chernikov vnet_init 376b4a4a3b8SAlexander V. Chernikov mpath_check 377b4a4a3b8SAlexander V. Chernikov 378b4a4a3b8SAlexander V. Chernikov # Note this test will spawn around ~100 nc processes 379b4a4a3b8SAlexander V. Chernikov 380b4a4a3b8SAlexander V. Chernikov net_src="192.0.2." 381b4a4a3b8SAlexander V. Chernikov net_dst="198.51.100." 382b4a4a3b8SAlexander V. Chernikov ip_src="${net_src}1" 383b4a4a3b8SAlexander V. Chernikov ip_dst="${net_dst}1" 384b4a4a3b8SAlexander V. Chernikov plen=24 385b4a4a3b8SAlexander V. Chernikov text="testtesttst" 386b4a4a3b8SAlexander V. Chernikov 387b4a4a3b8SAlexander V. Chernikov script_name=`dirname $0`/../common/net_receiver.py 388b4a4a3b8SAlexander V. Chernikov script_name=`realpath ${script_name}` 389*001c48b4SMark Johnston jname="v4t-output_udp_flowid_mpath_success" 390b4a4a3b8SAlexander V. Chernikov 391b4a4a3b8SAlexander V. Chernikov epair0=$(vnet_mkepair) 392b4a4a3b8SAlexander V. Chernikov epair1=$(vnet_mkepair) 393b4a4a3b8SAlexander V. Chernikov lo_src=$(vnet_mkloopback) 394b4a4a3b8SAlexander V. Chernikov lo_dst=$(vnet_mkloopback) 395b4a4a3b8SAlexander V. Chernikov 396b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}a ${epair0}a ${epair1}a ${lo_src} 397a3525bd1SAlexander V. Chernikov mpath_enable ${jname}a 398b4a4a3b8SAlexander V. Chernikov # Setup transit IPv4 networks 399b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair0}a up 400b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair0}a inet 203.0.113.1/30 401b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair1}a up 402b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair1}a inet 203.0.113.5/30 403b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${lo_src} up 404b4a4a3b8SAlexander V. Chernikov 405b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}b ${epair0}b ${epair1}b ${lo_dst} 406b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair0}b up 407b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair0}b inet 203.0.113.2/30 408b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair1}b up 409b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair1}b inet 203.0.113.6/30 410b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} up 411b4a4a3b8SAlexander V. Chernikov 412b4a4a3b8SAlexander V. Chernikov # DST ips/ports to test 413b4a4a3b8SAlexander V. Chernikov ips="4 29 48 53 55 61 71 80 84 87 90 91 119 131 137 153 154 158 162 169 169 171 176 187 197 228 233 235 236 237 245 251" 414b4a4a3b8SAlexander V. Chernikov ports="53540 49743 43067 9131 16734 5150 14379 40292 20634 51302 3387 24387 9282 14275 42103 26881 42461 29520 45714 11096" 415b4a4a3b8SAlexander V. Chernikov 416b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${lo_src} inet ${ip_src}/32 417b4a4a3b8SAlexander V. Chernikov 418b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} inet ${ip_dst}/32 419b4a4a3b8SAlexander V. Chernikov for i in ${ips}; do 420b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} alias ${net_dst}${i}/32 421b4a4a3b8SAlexander V. Chernikov done 422b4a4a3b8SAlexander V. Chernikov 423b4a4a3b8SAlexander V. Chernikov # Add routes 424b4a4a3b8SAlexander V. Chernikov # A -> towards B via epair0a 425b4a4a3b8SAlexander V. Chernikov jexec ${jname}a route add -4 -net ${net_dst}0/${plen} 203.0.113.2 426b4a4a3b8SAlexander V. Chernikov # A -> towards B via epair1a 427b4a4a3b8SAlexander V. Chernikov jexec ${jname}a route add -4 -net ${net_dst}0/${plen} 203.0.113.6 428b4a4a3b8SAlexander V. Chernikov 429b4a4a3b8SAlexander V. Chernikov # B towards A via epair0b 430b4a4a3b8SAlexander V. Chernikov jexec ${jname}b route add -4 -net ${net_src}0/${plen} 203.0.113.1 431b4a4a3b8SAlexander V. Chernikov 432b4a4a3b8SAlexander V. Chernikov # Base setup verification 433b4a4a3b8SAlexander V. Chernikov atf_check -o match:'1 packets transmitted, 1 packets received' jexec ${jname}a ping -nc1 ${ip_dst} 434b4a4a3b8SAlexander V. Chernikov 435b4a4a3b8SAlexander V. Chernikov # run listener 436b4a4a3b8SAlexander V. Chernikov num_ports=`echo ${ports} | wc -w` 437b4a4a3b8SAlexander V. Chernikov num_ips=`echo ${ips} | wc -w` 438b4a4a3b8SAlexander V. Chernikov count_examples=$((num_ports*num_ips)) 439b4a4a3b8SAlexander V. Chernikov listener_ports=`echo ${ports} | tr ' ' '\n' | sort -n | tr '\n' ',' | sed -e 's?,$??'` 440b4a4a3b8SAlexander V. Chernikov args="--family inet --ports ${listener_ports} --count ${count_examples} --match_str ${text}" 441b4a4a3b8SAlexander V. Chernikov echo jexec ${jname}b ${script_name} ${args} 442b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ${script_name} --test_name "test_listen_udp" ${args} & 443b4a4a3b8SAlexander V. Chernikov cmd_pid=$! 444b4a4a3b8SAlexander V. Chernikov 445b4a4a3b8SAlexander V. Chernikov # wait for the app init 446b4a4a3b8SAlexander V. Chernikov counter=0 447b4a4a3b8SAlexander V. Chernikov init=0 448b4a4a3b8SAlexander V. Chernikov while [ ${counter} -le 50 ]; do 449b4a4a3b8SAlexander V. Chernikov _ports=`jexec ${jname}b sockstat -4ql | awk "\\\$3 == ${cmd_pid} {print \\\$6}"|awk -F: "{print \\\$2}" | sort -n | tr '\n' ','` 450b4a4a3b8SAlexander V. Chernikov if [ "${_ports}" = "${listener_ports}," ]; then 451b4a4a3b8SAlexander V. Chernikov init=1 452b4a4a3b8SAlexander V. Chernikov break; 453b4a4a3b8SAlexander V. Chernikov fi 454b4a4a3b8SAlexander V. Chernikov done 455b4a4a3b8SAlexander V. Chernikov if [ ${init} -eq 0 ]; then 456b4a4a3b8SAlexander V. Chernikov jexec ${jname}b sockstat -4ql | awk "\$3 == ${cmd_pid}" 457b4a4a3b8SAlexander V. Chernikov echo "App setup failed" 458b4a4a3b8SAlexander V. Chernikov exit 1 459b4a4a3b8SAlexander V. Chernikov fi 460b4a4a3b8SAlexander V. Chernikov echo "App setup done" 461b4a4a3b8SAlexander V. Chernikov 462b4a4a3b8SAlexander V. Chernikov # run sender 463b4a4a3b8SAlexander V. Chernikov for _ip in ${ips}; do 464b4a4a3b8SAlexander V. Chernikov ip="${net_dst}${_ip}" 465b4a4a3b8SAlexander V. Chernikov for port in ${ports}; do 466b4a4a3b8SAlexander V. Chernikov # XXX: switch to something that allows immediate exit 467b4a4a3b8SAlexander V. Chernikov echo -n "${text}" | jexec ${jname}a nc -nuNw1 ${ip} ${port} & 468b4a4a3b8SAlexander V. Chernikov sleep 0.01 469b4a4a3b8SAlexander V. Chernikov done 470b4a4a3b8SAlexander V. Chernikov done 471b4a4a3b8SAlexander V. Chernikov 472b4a4a3b8SAlexander V. Chernikov wait ${cmd_pid} 473b4a4a3b8SAlexander V. Chernikov exit_code=$? 474b4a4a3b8SAlexander V. Chernikov if [ $exit_code -ne 0 ]; then atf_fail "receiver exit code $exit_code" ; fi 475b4a4a3b8SAlexander V. Chernikov 476b4a4a3b8SAlexander V. Chernikov pkt_0=`jexec ${jname}a netstat -Wf link -I ${epair0}a | head | awk '$1!~/^Name/{print$8}'` 477b4a4a3b8SAlexander V. Chernikov pkt_1=`jexec ${jname}a netstat -Wf link -I ${epair1}a | head | awk '$1!~/^Name/{print$8}'` 478b4a4a3b8SAlexander V. Chernikov if [ ${pkt_0} -le 10 ]; then 4794a8c6300SAlexander V. Chernikov atf_fail "Balancing failure: 1: ${pkt_0} 2: ${pkt_1}" 480b4a4a3b8SAlexander V. Chernikov fi 481b4a4a3b8SAlexander V. Chernikov if [ ${pkt_1} -le 10 ]; then 4824a8c6300SAlexander V. Chernikov atf_fail "Balancing failure: 1: ${pkt_0} 2: ${pkt_1}" 483b4a4a3b8SAlexander V. Chernikov fi 484b4a4a3b8SAlexander V. Chernikov echo "UDP BALANCING: 1: ${pkt_0} 2: ${pkt_1}" 485b4a4a3b8SAlexander V. Chernikov} 486b4a4a3b8SAlexander V. Chernikov 487b4a4a3b8SAlexander V. Chernikovoutput_udp_flowid_mpath_success_cleanup() 488b4a4a3b8SAlexander V. Chernikov{ 489b4a4a3b8SAlexander V. Chernikov vnet_cleanup 490b4a4a3b8SAlexander V. Chernikov} 491b4a4a3b8SAlexander V. Chernikov 492b4a4a3b8SAlexander V. Chernikovatf_test_case "output_raw_flowid_mpath_success" "cleanup" 493b4a4a3b8SAlexander V. Chernikovoutput_raw_flowid_mpath_success_head() 494b4a4a3b8SAlexander V. Chernikov{ 495b4a4a3b8SAlexander V. Chernikov 496b4a4a3b8SAlexander V. Chernikov atf_set descr 'Test valid IPv4 raw output flowid generation' 497b4a4a3b8SAlexander V. Chernikov atf_set require.user root 498b4a4a3b8SAlexander V. Chernikov} 499b4a4a3b8SAlexander V. Chernikov 500b4a4a3b8SAlexander V. Chernikovoutput_raw_flowid_mpath_success_body() 501b4a4a3b8SAlexander V. Chernikov{ 502b4a4a3b8SAlexander V. Chernikov 503b4a4a3b8SAlexander V. Chernikov vnet_init 504b4a4a3b8SAlexander V. Chernikov mpath_check 505b4a4a3b8SAlexander V. Chernikov 506b4a4a3b8SAlexander V. Chernikov net_src="192.0.2." 507b4a4a3b8SAlexander V. Chernikov net_dst="198.51.100." 508b4a4a3b8SAlexander V. Chernikov ip_src="${net_src}1" 509b4a4a3b8SAlexander V. Chernikov ip_dst="${net_dst}1" 510b4a4a3b8SAlexander V. Chernikov plen=24 511b4a4a3b8SAlexander V. Chernikov text="testtesttst" 512b4a4a3b8SAlexander V. Chernikov 513*001c48b4SMark Johnston jname="v4t-output_raw_flowid_mpath_success" 514b4a4a3b8SAlexander V. Chernikov 515b4a4a3b8SAlexander V. Chernikov epair0=$(vnet_mkepair) 516b4a4a3b8SAlexander V. Chernikov epair1=$(vnet_mkepair) 517b4a4a3b8SAlexander V. Chernikov lo_src=$(vnet_mkloopback) 518b4a4a3b8SAlexander V. Chernikov lo_dst=$(vnet_mkloopback) 519b4a4a3b8SAlexander V. Chernikov 520b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}a ${epair0}a ${epair1}a ${lo_src} 521a3525bd1SAlexander V. Chernikov mpath_enable ${jname}a 522b4a4a3b8SAlexander V. Chernikov # Setup transit IPv4 networks 523b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair0}a up 524b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair0}a inet 203.0.113.1/30 525b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair1}a up 526b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${epair1}a inet 203.0.113.5/30 527b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${lo_src} up 528b4a4a3b8SAlexander V. Chernikov 529b4a4a3b8SAlexander V. Chernikov vnet_mkjail ${jname}b ${epair0}b ${epair1}b ${lo_dst} 530b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair0}b up 531b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair0}b inet 203.0.113.2/30 532b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair1}b up 533b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${epair1}b inet 203.0.113.6/30 534b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} up 535b4a4a3b8SAlexander V. Chernikov 536b4a4a3b8SAlexander V. Chernikov # DST ips/ports to test 537b4a4a3b8SAlexander V. Chernikov ips="4 29 48 53 55 61 71 80 84 87 90 91 119 131 137 153 154 158 162 169 169 171 176 187 197 228 233 235 236 237 245 251" 538b4a4a3b8SAlexander V. Chernikov 539b4a4a3b8SAlexander V. Chernikov jexec ${jname}a ifconfig ${lo_src} inet ${ip_src}/32 540b4a4a3b8SAlexander V. Chernikov 541b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} inet ${ip_dst}/32 542b4a4a3b8SAlexander V. Chernikov for i in ${ips}; do 543b4a4a3b8SAlexander V. Chernikov jexec ${jname}b ifconfig ${lo_dst} alias ${net_dst}${i}/32 544b4a4a3b8SAlexander V. Chernikov done 545b4a4a3b8SAlexander V. Chernikov 546b4a4a3b8SAlexander V. Chernikov # Add routes 547b4a4a3b8SAlexander V. Chernikov # A -> towards B via epair0a 548b4a4a3b8SAlexander V. Chernikov jexec ${jname}a route add -4 -net ${net_dst}0/${plen} 203.0.113.2 549b4a4a3b8SAlexander V. Chernikov # A -> towards B via epair1a 550b4a4a3b8SAlexander V. Chernikov jexec ${jname}a route add -4 -net ${net_dst}0/${plen} 203.0.113.6 551b4a4a3b8SAlexander V. Chernikov 552b4a4a3b8SAlexander V. Chernikov # B towards A via epair0b 553b4a4a3b8SAlexander V. Chernikov jexec ${jname}b route add -4 -net ${net_src}0/${plen} 203.0.113.1 554b4a4a3b8SAlexander V. Chernikov 555b4a4a3b8SAlexander V. Chernikov # Base setup verification 556b4a4a3b8SAlexander V. Chernikov atf_check -o match:'1 packets transmitted, 1 packets received' jexec ${jname}a ping -nc1 ${ip_dst} 557b4a4a3b8SAlexander V. Chernikov 558b4a4a3b8SAlexander V. Chernikov # run sender 559b4a4a3b8SAlexander V. Chernikov valid_message='1 packets transmitted, 1 packets received' 560b4a4a3b8SAlexander V. Chernikov for _ip in ${ips}; do 561b4a4a3b8SAlexander V. Chernikov ip="${net_dst}${_ip}" 562b4a4a3b8SAlexander V. Chernikov atf_check -o match:"${valid_message}" jexec ${jname}a ping -nc1 ${ip} 563b4a4a3b8SAlexander V. Chernikov done 564b4a4a3b8SAlexander V. Chernikov 565b4a4a3b8SAlexander V. Chernikov pkt_0=`jexec ${jname}a netstat -Wf link -I ${epair0}a | head | awk '$1!~/^Name/{print$8}'` 566b4a4a3b8SAlexander V. Chernikov pkt_1=`jexec ${jname}a netstat -Wf link -I ${epair1}a | head | awk '$1!~/^Name/{print$8}'` 567b4a4a3b8SAlexander V. Chernikov 568b4a4a3b8SAlexander V. Chernikov jexec ${jname}a netstat -bWf link -I ${epair0}a 569b4a4a3b8SAlexander V. Chernikov jexec ${jname}a netstat -bWf link -I ${epair1}a 570b4a4a3b8SAlexander V. Chernikov if [ ${pkt_0} -le 10 ]; then 5714a8c6300SAlexander V. Chernikov atf_fail "Balancing failure: 1: ${pkt_0} 2: ${pkt_1}" 572b4a4a3b8SAlexander V. Chernikov fi 573b4a4a3b8SAlexander V. Chernikov if [ ${pkt_1} -le 10 ]; then 5744a8c6300SAlexander V. Chernikov atf_fail "Balancing failure: 1: ${pkt_0} 2: ${pkt_1}" 575b4a4a3b8SAlexander V. Chernikov fi 576b4a4a3b8SAlexander V. Chernikov echo "RAW BALANCING: 1: ${pkt_0} 2: ${pkt_1}" 577b4a4a3b8SAlexander V. Chernikov} 578b4a4a3b8SAlexander V. Chernikov 579b4a4a3b8SAlexander V. Chernikovoutput_raw_flowid_mpath_success_cleanup() 580b4a4a3b8SAlexander V. Chernikov{ 581b4a4a3b8SAlexander V. Chernikov vnet_cleanup 582b4a4a3b8SAlexander V. Chernikov} 583b4a4a3b8SAlexander V. Chernikov 584b4a4a3b8SAlexander V. Chernikovatf_init_test_cases() 585b4a4a3b8SAlexander V. Chernikov{ 586b4a4a3b8SAlexander V. Chernikov atf_add_test_case "output_tcp_setup_success" 587b4a4a3b8SAlexander V. Chernikov atf_add_test_case "output_udp_setup_success" 588b4a4a3b8SAlexander V. Chernikov atf_add_test_case "output_raw_success" 589b4a4a3b8SAlexander V. Chernikov atf_add_test_case "output_tcp_flowid_mpath_success" 590b4a4a3b8SAlexander V. Chernikov atf_add_test_case "output_udp_flowid_mpath_success" 591b4a4a3b8SAlexander V. Chernikov atf_add_test_case "output_raw_flowid_mpath_success" 592b4a4a3b8SAlexander V. Chernikov} 593b4a4a3b8SAlexander V. Chernikov 594