diff options
author | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1999-08-05 22:42:15 +0000 |
---|---|---|
committer | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1999-08-05 22:42:15 +0000 |
commit | 6ccb8c9dda0c0e856476b89dc4fd04ea10bd7a87 (patch) | |
tree | eeed07230b956675ec13683536f0a99f0baaa350 /sbin | |
parent | 4de5d7a44e531161dff7dd77861739b1f1adc3b1 (diff) |
Merge with EOM 1.2
author: niklas
EOM RCS Id
author: niklas
New regression test of exchanges, with timed events
=============================================================================
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/isakmpd/regress/exchange/run.pl | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/sbin/isakmpd/regress/exchange/run.pl b/sbin/isakmpd/regress/exchange/run.pl new file mode 100644 index 00000000000..99bf25aa5d1 --- /dev/null +++ b/sbin/isakmpd/regress/exchange/run.pl @@ -0,0 +1,81 @@ +#!/usr/bin/perl +# $OpenBSD: run.pl,v 1.1 1999/08/05 22:42:14 niklas Exp $ +# $EOM: run.pl,v 1.2 1999/08/05 22:42:42 niklas Exp $ + +use strict; +require 5.002; +require 'sys/syscall.ph'; +use Socket; +use Sys::Hostname; + +my ($rfd, $tickfac, $myaddr, $myport, $hisaddr, $hisport, $proto, $bindaddr, + $conaddr, $sec, $tick, $action, $template, $data, $next, + $nfd, $pkt, $verbose); + +$| = 1; + +$verbose = 1; +$tickfac = 0.001; +$myaddr = gethostbyname ('127.0.0.1'); +$myport = 1501; + $hisaddr = inet_aton ('127.0.0.1'); +$hisport = 1500; + +$proto = getprotobyname ('udp'); +$bindaddr = sockaddr_in ($myport, $myaddr); +socket (SOCKET, PF_INET, SOCK_DGRAM, $proto) || die "socket: $!"; +bind (SOCKET, $bindaddr); +vec ($rfd, fileno SOCKET, 1) = 1; + +$conaddr = sockaddr_in ($hisport, $hisaddr); + +sub getsec +{ + my ($tv) = pack ("ll", 0, 0); + my ($tz) = pack ("ii", 0, 0); + syscall (&SYS_gettimeofday, $tv, $tz) && return undef; + my ($sec, $usec) = unpack ("ll", $tv); + $sec % 86400 + $usec / 1000000; +} + +$sec = &getsec; +while (<>) { + next if /^\s*#/o || /^\s*$/o; + chop; + ($tick, $action, $template, $data) = split ' ', $_, 4; + while ($data =~ /\\$/o) { + chop $data; + $_ = <>; + next if /^\s*#/o; + chop; + $data .= $_; + } + $data =~ s/\s//go; + $data = pack $template, $data; + $next = $sec + $tick * $tickfac; + if ($action eq "send") { + # Wait for the moment to come. + print STDERR "waiting ", $next - $sec, " secs\n"; + select undef, undef, undef, $next - $sec + while ($sec = &getsec) < $next; +# print $data; + send SOCKET, $data, 0, $conaddr; + print STDERR "sent ", unpack ("H*", $data), "\n" if $verbose; + } elsif ($action eq "recv") { + $sec = &getsec; + printf (STDERR "waiting for data or the %.3f sec timeout\n", + $next - $sec); + $nfd = select $rfd, undef, undef, $next - $sec; + if ($nfd) { + printf STDERR "got back after %.3f secs\n", &getsec - $sec + if $verbose; +# sysread (STDIN, $pkt, 65536) if $nfd; + sysread (SOCKET, $pkt, 65536) if $nfd; + print STDERR "read ", unpack ("H*", $pkt), "\n" if $verbose; + print STDERR "cmp ", unpack ("H*", $data), "\n" if $verbose; + } else { + print STDERR "timed out\n" if $verbose; + } + die "mismatch\n" if $pkt ne $data; + } +} |