David van Moolenbroek b636d99d91 Import NetBSD tcpdump(8)
For now, printing of Sun RPC requests is disabled because we do not
yet have the RPC header files.  This should affect basically noone,
as we do not have any RPC-based programs yet, for the same reason.

Change-Id: Ie7818faaaacdc104d8b2c37a68866b4ce18247d6
2017-03-21 22:00:21 +00:00

69 lines
1.8 KiB
Perl
Executable File

#!/usr/bin/env perl
system("mkdir -p NEW DIFF");
if(@ARGV != 4) {
print "Usage: TESTonce name input output options\n";
exit 20;
}
$name=$ARGV[0];
$input=$ARGV[1];
$output=$ARGV[2];
$options=$ARGV[3];
my $r;
if ($^O eq 'MSWin32') {
$r = system "..\\windump -n -r $input $options 2>NUL | sed 's/\\r//' | tee NEW/$output | diff $output - >DIFF/$output.diff";
# need to do same as below for Cygwin.
}
else {
# we used to do this as a nice pipeline, but the problem is that $r fails to
# to be set properly if the tcpdump core dumps.
$r = system "../tcpdump 2>/dev/null -n -r $input $options >NEW/$output";
if($r == 0x100) {
# this means tcpdump exited with code 1.
open(OUTPUT, ">>"."NEW/$output") || die "fail to open $output\n";
printf OUTPUT "EXIT CODE %08x\n", $r;
close(OUTPUT);
$r = 0;
}
if($r == 0) {
$r = system "cat NEW/$output | diff $output - >DIFF/$output.diff";
}
#print sprintf("END: %08x\n", $r);
}
if($r == 0) {
printf " %-30s: passed\n", $name;
unlink "DIFF/$output.diff";
exit 0;
}
printf " %-30s: TEST FAILED", $name;
open FOUT, '>>failure-outputs.txt';
printf FOUT "Failed test: $name\n\n";
close FOUT;
if(-f "DIFF/$output.diff") {
system "cat DIFF/$output.diff >> failure-outputs.txt";
}
if($r == -1) {
print " (failed to execute: $!)\n";
exit 30;
}
# this is not working right, $r == 0x8b00 when there is a core dump.
# clearly, we need some platform specific perl magic to take this apart, so look for "core"
# too.
if($r & 127 || -f "core") {
my $with = ($r & 128) ? 'with' : 'without';
if(-f "core") {
$with = "with";
}
printf " (terminated with signal %u, %s coredump)\n", ($r & 127), $with;
exit ($r & 128) ? 10 : 20;
}
print "\n";
exit $r >> 8;