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;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to