Fix the UDP tests for dtrace.
The code imported from opensolaris was depending on ping supporting UDP for sending probes. Since this is not supported by ping on FreeBSD use a perl script instead. The remote test requires the usage of ksh93, so state that in the sheband. Enable the local test, but keep the remote test disabled, since it requires a remote machine on the LAN. Reviewed by: markj@, gnn@ Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D16268
This commit is contained in:
parent
d7aeb429a0
commit
dc9f20b3f3
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/ksh
|
||||
#!/usr/bin/env ksh
|
||||
#
|
||||
# CDDL HEADER START
|
||||
#
|
||||
@ -36,14 +36,14 @@
|
||||
# 4. An unlikely race causes the unlocked global send/receive
|
||||
# variables to be corrupted.
|
||||
#
|
||||
# This test sends a UDP message using ping and checks that at least the
|
||||
# This test sends a UDP message using perl and checks that at least the
|
||||
# following counts were traced:
|
||||
#
|
||||
# 1 x ip:::send (UDP sent to ping's base UDP port)
|
||||
# 1 x udp:::send (UDP sent to ping's base UDP port)
|
||||
# 1 x ip:::send (UDP sent to UDP port 33434)
|
||||
# 1 x udp:::send (UDP sent to UDP port 33434)
|
||||
# 1 x ip:::receive (UDP received)
|
||||
#
|
||||
# No udp:::receive event is expected as the response ping -U elicits is
|
||||
# No udp:::receive event is expected since the UDP packet elicts
|
||||
# an ICMP PORT_UNREACHABLE response rather than a UDP packet, and locally
|
||||
# the echo request UDP packet only reaches IP, so the udp:::receive probe
|
||||
# is not triggered by it.
|
||||
@ -56,8 +56,25 @@ fi
|
||||
|
||||
dtrace=$1
|
||||
local=127.0.0.1
|
||||
port=33434
|
||||
DIR=/var/tmp/dtest.$$
|
||||
|
||||
$dtrace -c "/sbin/ping -U $local" -qs /dev/stdin <<EOF | grep -v 'is alive'
|
||||
mkdir $DIR
|
||||
cd $DIR
|
||||
|
||||
cat > test.pl <<-EOPERL
|
||||
use IO::Socket;
|
||||
my \$s = IO::Socket::INET->new(
|
||||
Proto => "udp",
|
||||
PeerAddr => "$local",
|
||||
PeerPort => $port);
|
||||
die "Could not create UDP socket $local port $port" unless \$s;
|
||||
send \$s, "Hello", 0;
|
||||
close \$s;
|
||||
sleep(2);
|
||||
EOPERL
|
||||
|
||||
$dtrace -c 'perl test.pl' -qs /dev/stdin <<EODTRACE
|
||||
BEGIN
|
||||
{
|
||||
ipsend = udpsend = ipreceive = 0;
|
||||
@ -90,4 +107,11 @@ END
|
||||
printf("ip:::receive - %s\n", ipreceive >= 1 ? "yes" : "no");
|
||||
printf("udp:::send - %s\n", udpsend >= 1 ? "yes" : "no");
|
||||
}
|
||||
EOF
|
||||
EODTRACE
|
||||
|
||||
status=$?
|
||||
|
||||
cd /
|
||||
/bin/rm -rf $DIR
|
||||
|
||||
exit $status
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/ksh
|
||||
#!/usr/bin/env ksh93
|
||||
#
|
||||
# CDDL HEADER START
|
||||
#
|
||||
@ -36,7 +36,7 @@
|
||||
# 4. An unlikely race causes the unlocked global send/receive
|
||||
# variables to be corrupted.
|
||||
#
|
||||
# This test sends a UDP message using ping and checks that at least the
|
||||
# This test sends a UDP message using perl and checks that at least the
|
||||
# following counts were traced:
|
||||
#
|
||||
# 1 x ip:::send (UDP sent to ping's base UDP port)
|
||||
@ -50,6 +50,8 @@ fi
|
||||
|
||||
dtrace=$1
|
||||
getaddr=./get.ipv4remote.pl
|
||||
port=33434
|
||||
DIR=/var/tmp/dtest.$$
|
||||
|
||||
if [[ ! -x $getaddr ]]; then
|
||||
print -u2 "could not find or execute sub program: $getaddr"
|
||||
@ -60,7 +62,22 @@ if (( $? != 0 )); then
|
||||
exit 4
|
||||
fi
|
||||
|
||||
$dtrace -c "/sbin/ping -U $dest" -qs /dev/stdin <<EOF | grep -v 'is alive'
|
||||
mkdir $DIR
|
||||
cd $DIR
|
||||
|
||||
cat > test.pl <<-EOPERL
|
||||
use IO::Socket;
|
||||
my \$s = IO::Socket::INET->new(
|
||||
Proto => "udp",
|
||||
PeerAddr => "$dest",
|
||||
PeerPort => $port);
|
||||
die "Could not create UDP socket $dest port $port" unless \$s;
|
||||
send \$s, "Hello", 0;
|
||||
close \$s;
|
||||
sleep(2);
|
||||
EOPERL
|
||||
|
||||
$dtrace -c 'perl test.pl' -qs /dev/stdin <<EODTRACE
|
||||
BEGIN
|
||||
{
|
||||
ipsend = udpsend = 0;
|
||||
@ -85,4 +102,11 @@ END
|
||||
printf("ip:::send - %s\n", ipsend >= 1 ? "yes" : "no");
|
||||
printf("udp:::send - %s\n", udpsend >= 1 ? "yes" : "no");
|
||||
}
|
||||
EOF
|
||||
EODTRACE
|
||||
|
||||
status=$?
|
||||
|
||||
cd /
|
||||
/bin/rm -rf $DIR
|
||||
|
||||
exit $status
|
||||
|
@ -33,7 +33,6 @@ exclude EXFAIL common/funcs/tst.copyin.d
|
||||
exclude EXFAIL common/funcs/tst.copyinto.d
|
||||
exclude EXFAIL common/funcs/tst.ddi_pathname.d
|
||||
exclude EXFAIL common/io/tst.fds.d
|
||||
exclude EXFAIL common/ip/tst.ipv4localudp.ksh
|
||||
exclude EXFAIL common/mdb/tst.dtracedcmd.ksh
|
||||
exclude EXFAIL common/misc/tst.dofmax.ksh
|
||||
exclude EXFAIL common/misc/tst.include.ksh
|
||||
|
Loading…
Reference in New Issue
Block a user