#!/usr/bin/perl
#
# Basic dump analysis, builds an info file to send to support.
#
# BSDI kanal.perl,v 1.3 1999/06/25 23:09:46 chrisk Exp
#

require "newgetopt.pl";

# -x	- Display chatter with subprocs
# -n	- Don't ask standard questions
# -s	- Slow (but complete) bsd.gdb/bsd compare
# -v	- Print more details

&NGetOpt("x","n","s","v");
$timeout = 120;
$editor = "prompt";
$gdbprompt = '\(gdb\) ';

$usage = "Usage: kanal [flags] dumpno\n";

$ENV{"PATH"} .= ":/usr/contrib/bin:/sbin";

if ($#ARGV == -1) {
	die $usage;
}
$dumpno = shift;
if ($#ARGV != -1) {
	die $usage;
}

$infofile = "infodir.$dumpno";
$bsd = "bsd.$dumpno";
$core = "bsdcore.$dumpno";

unlink("$infofile/log");
$d = `date`;
chop $d;
&addlog('********** Kanal kanal.perl,v 1.3 1999/06/25 23:09:46 chrisk Exp **********' . "\n");
&addlog("$d: $core\n");

#
# Gather basic config info
#
&addfile("dmesg.boot", "/var/db/dmesg.boot");
&addfile("patchlog", "/sys/PATCHLOG");
&addfile("install.log", "/var/db/install.log");
&addfile("rc.local", "/etc/rc.local");
&addfile("netstart", "/etc/netstart");

#
# See if the dump is readable
#
if (! -r "$core") {
	&addlog("$core not readable: $!\n");
	&done(1);
}

#
# Check for the kernel file, the dump is pretty useless without it.
#
if (!-r "$bsd") {
	$bsd = "bsd.gdb";
	if (!-r "$bsd") {
		&addlog("Can't read $bsd: $!\n");
		&done(1);
	}
	# speed things up a bit
	if (!-r "bsd.$dumpno.tmp") {
		&addlog("creating stripped version of $bsd to speed analysis\n");
		system("strip -d -o bsd.$dumpno.tmp $bsd");
	}
	$bsd = "bsd.$dumpno.tmp";
}

#
# Check bsd.N against bsdcore.N
#
&addlog("Check if $bsd and $core match\n");
$output = &runcmd("bpatch -s -N $bsd osrelease");
if ($output =~ /([0-9\.]+)/) {
	$bsdrel = $1;
} else {
	&addlog("Can't get osrelease from $bsd: $output\n");
	&done(1);
}
&startsub("gdb -k $bsd $core");
$x = &exp($gdbprompt);
print WH "x/s &osrelease\n";
$sout = &exp($gdbprompt);
print WH "quit\n";
close(C);
if ($sout =~ /:\s+\"([0-9\.]+)\"/) {
	$corerel = $1;
} else {
	&addlog("Can't get osrelease from $core: $sout\n");
	&done(1);
}
if ($bsdrel != $corerel) {
	&addlog("$bsd doesn't appear to match $core: bsdrel=$bsdrel corerel=$corerel\n");
	&done(1);
}

#
# Gather info that doesn't need bsd.gdb
#
&addlog("Gathering console output\n");
&addcmd("dmesg", "dmesg -M $core -N $bsd");
$dmesg = $out;
&addlog("Gathering network information\n");
&addcmd("netstat_in", "netstat -in -M $core -N $bsd");
&addcmd("netstat_rn", "netstat -rn -M $core -N $bsd");
&addcmd("netstat_m", "netstat -m -M $core -N $bsd");
&addcmd("netstat_s", "netstat -s -M $core -N $bsd");

&addlog("Gathering open file information\n");
&addcmd("fstat", "fstat -M $core -N $bsd -v");

&addlog("Gathering VM information\n");
&addcmd("vmstat_s", "vmstat -M $core -N $bsd -s");
&addcmd("vmstat_m", "vmstat -M $core -N $bsd -m");

&addlog("Gathering swap space information\n");
&addcmd("pstat_s", "pstat -M $core -N $bsd -s");
&addlog("Gathering active vnode details\n");
&addcmd("pstat_T", "pstat -M $core -N $bsd -T");
&addcmd("pstat_v", "pstat -M $core -N $bsd -v");
&addlog("Gathering tty information\n");
&addcmd("pstat_t", "pstat -M $core -N $bsd -t");

&addlog("Running ps to get proc listing\n");
&addcmd("ps", "ps -M $core -N $bsd -a -x -e -l -O sl,start,sig,flags -w -w");

&setup_bins();
&addlog("Checking kernel text integrity\n");
$out = &runcmd("./idiff -M $core -N $bsd | head -100");
unlink("$infofile/idiff");
&addinfo("idiff", $out);
@lines = split(/\n/, $out);
foreach $_ (@lines) {
	if (/^(0xf.+):/) {
		&addlog("XXX Kernel text miscompare\n");
		last;
	}
}

# Screen dmesg output
&addlog("Screening dmesg output\n");
@lines = split(/\n/, $dmesg);
$pan = "";
$trap = "";
foreach $_ (@lines) {
	if (/(trap type.*)$/) {
		$trap = $1;
		&addlog("$trap\n");
	}
	if (/(panic: .*)$/) {
		$pan = $1;
		&addlog("$pan\n");
	}
}
$eip = "";
$cr2 = "";
if ($trap ne "") {
	$trap =~ /eip (0x[^\s]+).*cr2 (0x[^\s]+)/;
	$eip = $1;
	$cr2 = $2;
}

# Do basic check on VM structures
&addlog("Checking VM structures\n");
if (defined($opt_v)) {
	$out = &runcmd("./fdump -M $core -N $bsd -t 0 -v");
} else {
	$out = &runcmd("./fdump -M $core -N $bsd -t 0");
}
unlink("$infofile/fdump");
&addinfo("fdump", $out);
@lines = split(/\n/, $out);
foreach $_ (@lines) {
	if (/XXX/) {
		&addlog("XXX VM structure problem: $_\n");
	}
}

# Do some pmap system checks
&addlog("Checking PMAP system\n");
$out = &runcmd("./pmap -M $core -N $bsd -b");
unlink("$infofile/pmap");
&addinfo("pmap", $out);

# Dump the trace buffer
&addlog("Dumping kernel trace buffer\n");
$out = &runcmd("tdump -M $core -N $bsd");
unlink("$infofile/tdump");
&addinfo("tdump", $out);

#
# Find a matching bsd.gdb
#
&getbsdgdb();

#
# If we have a bsd.gdb do some in depth analysis
#
if ($bsdgdb ne "") {
	&gdbanal();
}

# Ask user questions
&askqs();
&done(0);

exit 0;

sub done {
	($rc) = @_;
	print "Building file to send to support...\n";
	system("shar -z $infofile > info.$dumpno");
	print "Please upload the file info.$dumpno to:\n\tftp.bsdi.com:/bsdi/support/incoming/XXXXX.info.$dumpno\n";
	print "Where XXXXX is one of:\n";
	print "	- support request number (ex: 12345.info.1)\n";
	print "	- customer ID if no support number available (ex: G1234.info.1)\n";
	print "	- your initials (ex: ewv.info.1)\n";
	print "Note: this will not automatically generate a support request,\n";
	print "      send seperate email to support\@bsdi.com to open a new support request\n";
	# offer to send email?
	if ($rc != 0) {
		print "\nProblems were detected during analysis, the output may be incomplete!\n";
		unlink("bsd.$dumpno.tmp");
	}
	exit $rc;
}

sub startsub {
	local($cmd) = @_;
	close(RH);
	close(WH);
	close(S);
	pipe(RH, WH);
	select(WH); $| = 1;
	if (open(S, "-|") == 0) {
		open(STDIN, "<&RH") || die;
		open(STDERR, ">&STDOUT") || die;
		exec "$cmd";
		die "$cmd";
	}
	select(STDOUT); $| = 1;
}

#
# Read from subprocess until expected string is received or we time out
# a return variable.
#	arg0 = prompt regexp
#
sub exp {
	undef $bufr;
	$outflag = $_[1];
	if (defined($opt_x)) {
		print STDERR "Expect: $_[0] timeout=$timeout\n";
	}
	($expected) = @_;
	while (1) {
		$rin = '';
		vec($rin,fileno(S),1) = 1;
		($nfound,$timeleft) = select($rout=$rin, undef, undef,
			 $timeout);
		if ($nfound == 0) {
			print STDERR "*** TIMEOUT ***\n";
			print STDERR "*** Expected=:$expected:\n";
			print STDERR "*** Got=:$bufr:\n";
			return("timeout");
		}
		$bytes = sysread(S,$ibuf, 80);
		# This ugliness strips parity
		#for ($i=0 ; $i < $bytes; $i++) {
		#	$v = ord(substr($ibuf,$i,1))&0x7f;
		#	substr($ibuf,$i,1) = sprintf("%c",$v);
		#}
		if ($bytes == 0 || !defined $bytes) {
			return $bufr;
		}
		if (defined($opt_x)) {
			print STDERR "Debug read: $ibuf\n";
		}
		$bufr .= $ibuf;
		if ($bufr =~ /$_[0]/)  { last; }
	}
	$bufr;
}

#
# Add string data to a section
#
sub addinfo {
	($section, $data) = @_;
	if (!-d "$infofile") {
		mkdir("$infofile", 0755) || die "Can't create $infofile: $!\n";
	}
	open(INF, ">>$infofile/$section") || die "Can't open $infofile/$section: $!\n";
	print INF $data;
	close(INF);
}

#
# Edit an info section
#
sub editinfo {
	($section) = @_;
	if ($editor ne "prompt") {
		system("$editor $infofile/$section");
		return;
	}
	print "\n";
	open(F, "$infofile/$section") || die "Can't open $infofile/$section: $!\n";
	print <F>;
	close(F);
	print "[Enter text, end with a . by itself on the last line or an EOF\n";
	print "To enter an editor type vi, emacs, or pico by itself on a line]\n";
	$bufr = "";
	while (1) {
		print "> ";
		$line = <STDIN>;
		if (!defined($line)) {
			last;
		}
		$orig = $line;
		chop $line;
		if ($line eq ".") {
			last;
		}
		if ($line eq "vi" || $line eq "emacs" || line eq "pico") {
			$editor = $line;
			&addinfo($section, $bufr);
			&editinfo($section);
			return;
		}
		$bufr .= $orig;
	}
	&addinfo($section, $bufr);
}

#
# Ask dump questions of user
#
sub askqs {
	if (defined($opt_n)) {
		return;
	}
	@dqs = (
	"q_custid",
"What is your customer ID (Nxxxx)? If you don't know it please send
us any information (name, address, email address) we might use to
find you in our database.",
	"q_hwchanges",
"Has any hardware or the operating environment been changed on this
system recently? This could include adding a disk or RAM, changing
BIOS settings, moving the machine, attaching to a UPS, or anything
else along these lines. If this is a new install (ie: it has never
been stable) please let us know that as well.",
	"q_swchanges",
"Have there been any changes to system software (new patches applied,
upgrades) or usage patterns (ie: heavier or lighter than normal usage,
setting up a news feed, installing new programs off the net)?",
	"q_hwnotfound",
"Please describe any hardware present on the system that is NOT
recognized by BSD/OS at boot time.",
	"q_cputype",
"What type of CPU and speed do you have (ex: Intel Pentium 120)?",
	"q_ramsize",
"What type of RAM is installed (number of SIMMS, size of each SIMM)?",
	"q_parity",
"Is parity checking enabled in the BIOS and do you have parity RAM?",
	"q_cache",
"How much secondary cache are you using and is it enabled?",
	"q_scsi",
"If using SCSI: do you have any SCSI devices in external cabinets? If yes,
please describe the devices and how they are cabled (what order on they are
on the cable and which ones are terminated). If not using SCSI enter NA.",
	"q_repeatable",
"Can this crash be repeated by setting up certain hardware or software
conditions? If so please describe how to repeat it on the failing system.",
	"q_localmods",
"Are there any local modifications to the kernel or system utilities? If so
please give a general description of their purpose and what modules they
affect."
);
	$skipem = 0;
	while ($cat = shift @dqs) {
		$q = shift @dqs;
		$q .= "\n----------------\n";
		if (! -f "$infofile/$cat") {
			open(F, ">$infofile/$cat") || die "Can't create $infofile/$cat: $!\n";
			print F "$q";
			close(F);
		}
		# Check if we've gotten an answer
		next if ($skipem != 0);
		open(F, "<$infofile/$cat") || die "Can't open $infofile/$cat: $!\n";
		$buf = join("",<F>);
		close(F);
		if ($buf eq $q) {
			&editinfo($cat);
			open(F, "<$infofile/$cat") || die "Can't open $infofile/$cat: $!\n";
			$buf = join("",<F>);
			close(F);
			if ($buf eq $q &&
			    &prompt("Skip the rest of the questions?", "n")
			    eq "y") {
				$skipem = 1;
			}
		}
	}
}

sub prompt {
	($p, $def) = @_;
	print "$p [$def] ";
	$ans = <STDIN>;
	chop $ans;
	if ($ans eq "") {
		$ans = $def;
	}
	return $ans;
}

sub runcmd {
        local($cmd) = @_;
        if (open(C, "-|") == 0) {
                open(STDERR, ">&STDOUT") || die;
                exec "$cmd";
                die "$cmd";
        }
        $out = join("", <C>);
	close(C);
	return $out;
}

sub addlog {
	($msg) = @_;
	&addinfo("log", $msg);
	print $msg;
}

sub addfile {
	($section, $file) = @_;
	open(F, "<$file") || do {
		&addlog("Can't read $file: $!\n");
		return;
	};
	$tmp = join("", <F>);
	close(F);
	unlink("$infofile/$section");
	&addinfo($section, $tmp);
}

sub addcmd {
	($section, $cmd) = @_;
	$out = &runcmd($cmd);
	unlink("$infofile/$section");
	&addinfo($section, $out);
}

sub getbsdgdb {
	@bsdplaces = (	"bsd.gdb",
			"/sys/compile/GENERIC/bsd.gdb",
			"/usr/src/sys/compile/GENERIC/bsd.gdb",
			"/sys/compile/LOCAL/bsd.gdb",
			"/usr/src/sys/compile/LOCAL/bsd.gdb",
			"/cdrom/sys/compile/GENERIC/bsd.gdb" );
	$bsdgdb = "";
	while (1) {
		if ($bsdgdb eq "") {
			$bsdgdb = shift @bsdplaces;
			if ($last == 0 && $bsdgdb eq "") {
				$out = &runcmd("bpatch -N $bsd -s version");
				@lines = split(/\n/, $out);
				$lines[1] =~ /:(\S+)$/;
				$bsdgdb = "$1/bsd.gdb";
				$last = 1;
			}
		}
		# Ask for one if we're out of ideas
		if ($bsdgdb eq "") {
			print "The filename of a bsd.gdb that matches $bsd is needed.\n";
			print "If no file is entered some dump analysis will not be performed\n";
			print "Please enter filename: ";
			$bsdgdb = <STDIN>;
			chop $bsdgdb;
			last if ($bsdgdb eq "");
		}
		if (! -r $bsdgdb) {
			&addlog("$bsdgdb not found or readable\n");
			$bsdgdb = "";
			next;
		}
		if (&compbsd($bsd, $bsdgdb) != 0) {
			&addlog("$bsdgdb does not match $bsd\n");
			$bsdgdb = "";
			next;
		}
		&addlog("Checking for debug symbols in $bsdgdb\n");
		$out = `objdump --syms $bsdgdb | head -100 | grep stabstr | wc`;
		if ($out =~ /0\s+0\s+0/) {
			&addlog("$bsdgdb does not contain debugging information\n");
			$bsdgdb = "";
			next;
		}
		last;
	}
}

#
# Compare two bsd's (usually a bsd.N and bsd.gdb) to see if they (probably)
# match.
#
sub compbsd {
	($bsd1, $bsd2) = @_;
	&addlog("Checking $bsd1 against $bsd2\n");
	if (!defined($opt_s)) {
		$out1 = `bpatch -N $bsd1 osrelease`;
		$out2 = `bpatch -N $bsd2 osrelease`;
	} else {
		$out1 = `nm -p -g $bsd1`;
		$out2 = `nm -p -g $bsd2`;
	}
	if ($out1 ne $out2) {
		return 1;
	}
	return 0;
}

sub gdbanal {
	unlink("$infofile/gdb");
	&addlog("Starting gdb...\n");
	&startsub("gdb -k $bsdgdb $core");
	$x = &exp($gdbprompt);
	&addinfo("gdb", $x);
	if ($x eq "timeout") {
		print WH "quit\n";
		close(C);
		return 1;
	}
	&addlog("Gathering basic gdb information\n");
	return 1 if (&gcmd("set height 0\n") != 0);
	return 1 if (&gcmd("source /sys/scripts/bsdi.ps\n") != 0);
	if ($eip ne "") {
		return 1 if (&gcmd("x/i $eip\n") != 0);
		return 1 if (&gcmd("list *$eip\n") != 0);
	}
	return 1 if (&gcmd("bt\n") != 0);
	return 1 if (&gcmd("frame 2\n") != 0);
	return 1 if (&gcmd("p/x frame\n") != 0);
	return 1 if (&gcmd("p cnt\n") != 0);
	return 1 if (&gcmd("p/x _klock\n") != 0);
	return 1 if (&gcmd("p/x slock\n") != 0);
	return 1 if (&gcmd("p/x ulock\n") != 0);
	return 1 if (&gcmd("p/x ipend_lock\n") != 0);
	return 1 if (&gcmd("p/x kdebug_lock\n") != 0);
	return 1 if (&gcmd("p num2cpu\n") != 0);
	for ($cpu = 0; $cpu < 15; $cpu++) {
		return 1 if (&gcmd("p/x *num2cpu[$cpu]\n") != 0);
	}
	return 1 if (&gcmd("ps\n") != 0);
	# Run a stack trace on each process...
	&addlog("Gathering stack traces for each process (this might take some time)\n");
	@list = split(/\n/, $x);
	foreach $_ (@list) {
		if (/^\s*([0-9]+) ([0-9,a-f]+) /) {
			$pid = $1;
			$paddr = $2;
		} else {
			&addinfo("gdb", "\n*** Bad ps line: $_");
			next;
		}
		return 1 if (&gcmds("printf \"%s\\n\", &((struct proc *)0x$paddr)->p_comm\n") != 0);
		$x =~ s/\n.*$//;
		&addinfo("gdb", "\n**** Proc $pid, $x, paddr=0x$paddr ****\n");
		return 1 if (&gcmd("paddr 0x$paddr\n") != 0);
		return 1 if (&gcmd("bt\n") != 0);
		# Extract the highest frame number
		@tmp = split(/\n/, $x);
		$hframe = -1;
		foreach $l (@tmp) {
			if ($l =~ /^\#([0-9]+)/) {
				$hframe = $1;
			}
		}
		next if ($hframe == -1);
		for ($fno = 0; $fno <= $hframe; $fno++) {
			return 1 if (&gcmd("frame $fno\n") != 0);
			return 1 if (&gcmd("info locals\n") != 0);
		}
	}
	print WH "quit\n";
	close(C);
	return 0;
}

sub gcmd {
	($cmd) = @_;
	&addinfo("gdb", "===> $cmd");
	print WH $cmd;
	$x = &exp($gdbprompt);
	&addinfo("gdb", $x);
	if ($x eq "timeout" || $x eq "") {
		print WH "quit\n";
		close(C);
		return 1;
	}
	return 0;
}
# silent
sub gcmds {
	($cmd) = @_;
	print WH $cmd;
	$x = &exp($gdbprompt);
	if ($x eq "timeout" || $x eq "") {
		print WH "quit\n";
		close(C);
		return 1;
	}
	return 0;
}

# Unpack binary commands
sub setup_bins {
	open(P, "| gunzip | pax -r -v");
	while (<DATA>) {
		print P unpack("u", $_);
	}
	close(P);
}
__END__
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
-=UG=?P`<P3Z"`*``````
