Bash程序  |  75行  |  1.76 KB

#!/bin/sh
# Copyright (c) 2017 Oracle and/or its affiliates. All Rights Reserved.
# Copyright (c) International Business Machines  Corp., 2001
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

TST_TOTAL=6
TCID="traceroute01"
TST_CLEANUP="cleanup"

TST_USE_LEGACY_API=1
. tst_net.sh

cleanup()
{
	tst_rmdir
}

setup()
{
	tst_resm TINFO "traceroute version:"
	tst_resm TINFO $(traceroute --version 2>&1)

	tst_test_cmds traceroute
	tst_tmpdir
}

run_trace()
{
	local opts="$@"
	local ip=$(tst_ipaddr rhost)
	local pattern="^[ ]+1[ ]+$ip([ ]+[0-9]+[.][0-9]+ ms){3}"

	# According to man pages, default sizes:
	local bytes=60
	[ "$TST_IPV6" ] && bytes=80

	EXPECT_PASS traceroute $ip $bytes -n -m 2 $opts \>out.log 2>&1

	grep -q "$bytes byte" out.log
	if [ $? -ne 0 ]; then
		cat out.log
		tst_resm TFAIL "'$bytes byte' not found"
	else
		tst_resm TPASS "traceroute use $bytes bytes"
	fi

	tail -1 out.log | grep -qE "$pattern"
	if [ $? -ne 0 ]; then
		cat out.log
		tst_resm TFAIL "pattern '$pattern' not found in log"
	else
		tst_resm TPASS "traceroute test completed with 1 hop"
	fi
}

setup
tst_resm TINFO "run traceroute with ICMP ECHO"
run_trace -I
tst_resm TINFO "run traceroute with TCP SYN"
run_trace -T

tst_exit