svn commit: r346854 - head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip

Michael Tuexen tuexen at FreeBSD.org
Sun Apr 28 19:07:33 UTC 2019


Author: tuexen
Date: Sun Apr 28 19:07:31 2019
New Revision: 346854
URL: https://svnweb.freebsd.org/changeset/base/346854

Log:
  Some test scripts use ncat --sctp --listen port to run an SCTP discard
  server in the background. However, when running in the background,
  stdin is closed and ncat initiates a graceful shutdown of the SCTP
  association. This is not expected by the client. Therefore, the
  ncat-based discard server is replaced by a perl-based one.
  
  In addition, to remove the dependency from ncat, which needs to be
  installed via the nmap port, also the code testing for a free SCTP port
  is changed to use the perl-based client.
  
  Finally, remove some debug output from the report generated.
  
  Reviewed by:		lwhsu@
  Differential Revision:	https://reviews.freebsd.org/D20086

Modified:
  head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.ipv4localsctp.ksh
  head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.localsctpstate.ksh

Modified: head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.ipv4localsctp.ksh
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.ipv4localsctp.ksh	Sun Apr 28 19:02:34 2019	(r346853)
+++ head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.ipv4localsctp.ksh	Sun Apr 28 19:07:31 2019	(r346854)
@@ -58,36 +58,52 @@ DIR=/var/tmp/dtest.$$
 
 sctpport=1024
 bound=5000
-while [ $sctpport -lt $bound ]; do
-	ncat --sctp -z $local $sctpport > /dev/null || break
-	sctpport=$(($sctpport + 1))
-done
-if [ $sctpport -eq $bound ]; then
-	echo "couldn't find an available SCTP port"
-	exit 1
-fi
 
 mkdir $DIR
 cd $DIR
 
-# ncat will exit when the association is closed.
-ncat --sctp --listen $local $sctpport &
-
-cat > test.pl <<-EOPERL
+cat > client.pl <<-EOPERL
 	use IO::Socket;
 	my \$s = IO::Socket::INET->new(
 	    Type => SOCK_STREAM,
 	    Proto => "sctp",
 	    LocalAddr => "$local",
 	    PeerAddr => "$local",
-	    PeerPort => $sctpport,
+	    PeerPort => \$ARGV[0],
 	    Timeout => 3);
-	die "Could not connect to host $local port $sctpport \$@" unless \$s;
+	die "Could not connect to host $local port \$ARGV[0] \$@" unless \$s;
 	close \$s;
-	sleep(2);
+	sleep(\$ARGV[1]);
 EOPERL
 
-$dtrace -c 'perl test.pl' -qs /dev/stdin <<EODTRACE
+while [ $sctpport -lt $bound ]; do
+	perl client.pl $sctpport 0 2>&- || break
+	sctpport=$(($sctpport + 1))
+done
+if [ $sctpport -eq $bound ]; then
+	echo "couldn't find an available SCTP port"
+	exit 1
+fi
+
+cat > server.pl <<-EOPERL
+	use IO::Socket;
+	my \$l = IO::Socket::INET->new(
+	    Type => SOCK_STREAM,
+	    Proto => "sctp",
+	    LocalAddr => "$local",
+	    LocalPort => $sctpport,
+	    Listen => 1,
+	    Reuse => 1);
+	die "Could not listen on $local port $sctpport \$@" unless \$l;
+	my \$c = \$l->accept();
+	close \$l;
+	while (<\$c>) {};
+	close \$c;
+EOPERL
+
+perl server.pl &
+
+$dtrace -c "perl client.pl $sctpport 2" -qs /dev/stdin <<EODTRACE
 BEGIN
 {
 	ipsend = sctpsend = ipreceive = sctpreceive = 0;
@@ -122,10 +138,10 @@ sctp:::receive
 END
 {
 	printf("Minimum SCTP events seen\n\n");
-	printf("ip:::send (%d) - %s\n", ipsend, ipsend >= 7 ? "yes" : "no");
-	printf("ip:::receive (%d) - %s\n", ipreceive, ipreceive >= 7 ? "yes" : "no");
-	printf("sctp:::send (%d) - %s\n", sctpsend, sctpsend >= 7 ? "yes" : "no");
-	printf("sctp:::receive (%d) - %s\n", sctpreceive, sctpreceive >= 7 ? "yes" : "no");
+	printf("ip:::send - %s\n", ipsend >= 7 ? "yes" : "no");
+	printf("ip:::receive - %s\n", ipreceive >= 7 ? "yes" : "no");
+	printf("sctp:::send - %s\n", sctpsend >= 7 ? "yes" : "no");
+	printf("sctp:::receive - %s\n", sctpreceive >= 7 ? "yes" : "no");
 }
 EODTRACE
 

Modified: head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.localsctpstate.ksh
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.localsctpstate.ksh	Sun Apr 28 19:02:34 2019	(r346853)
+++ head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ip/tst.localsctpstate.ksh	Sun Apr 28 19:07:31 2019	(r346854)
@@ -61,36 +61,52 @@ DIR=/var/tmp/dtest.$$
 
 sctpport=1024
 bound=5000
-while [ $sctpport -lt $bound ]; do
-	ncat --sctp -z $local $sctpport > /dev/null || break
-	sctpport=$(($sctpport + 1))
-done
-if [ $sctpport -eq $bound ]; then
-	echo "couldn't find an available SCTP port"
-	exit 1
-fi
 
 mkdir $DIR
 cd $DIR
 
-# ncat will exit when the association is closed.
-ncat --sctp --listen $local $sctpport &
-
-cat > test.pl <<-EOPERL
+cat > client.pl <<-EOPERL
 	use IO::Socket;
 	my \$s = IO::Socket::INET->new(
 	    Type => SOCK_STREAM,
 	    Proto => "sctp",
 	    LocalAddr => "$local",
 	    PeerAddr => "$local",
-	    PeerPort => $sctpport,
+	    PeerPort => \$ARGV[0],
 	    Timeout => 3);
-	die "Could not connect to host $local port $sctpport \$@" unless \$s;
+	die "Could not connect to host $local port \$ARGV[0] \$@" unless \$s;
 	close \$s;
-	sleep(2);
+	sleep(\$ARGV[1]);
 EOPERL
 
-$dtrace -c 'perl test.pl' -qs /dev/stdin <<EODTRACE
+while [ $sctpport -lt $bound ]; do
+	perl client.pl $sctpport 0 2>&- || break
+	sctpport=$(($sctpport + 1))
+done
+if [ $sctpport -eq $bound ]; then
+	echo "couldn't find an available SCTP port"
+	exit 1
+fi
+
+cat > server.pl <<-EOPERL
+	use IO::Socket;
+	my \$l = IO::Socket::INET->new(
+	    Type => SOCK_STREAM,
+	    Proto => "sctp",
+	    LocalAddr => "$local",
+	    LocalPort => $sctpport,
+	    Listen => 1,
+	    Reuse => 1);
+	die "Could not listen on $local port $sctpport \$@" unless \$l;
+	my \$c = \$l->accept();
+	close \$l;
+	while (<\$c>) {};
+	close \$c;
+EOPERL
+
+perl server.pl &
+
+$dtrace -c "perl client.pl $sctpport 2" -qs /dev/stdin <<EODTRACE
 BEGIN
 {
 	ipsend = sctpsend = ipreceive = sctpreceive = 0;


More information about the svn-src-head mailing list