#!/sbin/sh -
# %W% %G% %U% - %Q%
#ident	"@(#)vxvm:%M%	%I%"

# Copyright (c) 2000 VERITAS Software Corporation.  ALL RIGHTS RESERVED.
# UNPUBLISHED -- RIGHTS RESERVED UNDER THE COPYRIGHT
# LAWS OF THE UNITED STATES.  USE OF A COPYRIGHT NOTICE
# IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
# OR DISCLOSURE.
# 
# THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND
# TRADE SECRETS OF VERITAS SOFTWARE.  USE, DISCLOSURE,
# OR REPRODUCTION IS PROHIBITED WITHOUT THE PRIOR
# EXPRESS WRITTEN PERMISSION OF VERITAS SOFTWARE.
# 
#               RESTRICTED RIGHTS LEGEND
# USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS
# SUBJECT TO RESTRICTIONS AS SET FORTH IN SUBPARAGRAPH
# (C) (1) (ii) OF THE RIGHTS IN TECHNICAL DATA AND
# COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013.
#               VERITAS SOFTWARE
# 1600 PLYMOUTH STREET, MOUNTAIN VIEW, CA 94043

VXDIAGDIR=/usr/lib/vxvm/diag.d
VXBINDIR=/usr/lib/vxvm/bin
OSVERSION=`uname -r`
ARCHDIR=

if [ "X$OSVERSION" != "X5.6" ]
then
	if /bin/isainfo | grep sparcv9 >/dev/null 2>&1
	then
		ARCHDIR=sparcv9
	fi
fi

ADB=/usr/bin/$ARCHDIR/adb
VXDMPMDIR=$VXDIAGDIR/macros.d/$ARCHDIR
DESTDIR=/tmp
OUTFILE=$DESTDIR/dmpdebug.out.$$

login_id=`id |  cut -f2 -d "(" | cut -f1 -d")"`
if [ "$login_id" != "root" ]
then
	echo "\nvxvm: vxdmpdebug: ERROR: must be super-user to execute."
	exit 1
fi

rm -rf $OUTFILE > /dev/null

echo "
NOTICE:  This script will issue two "vxconfigd -k" commands as part of its 
         operation.  This will cause a momentary stoppage of any vxvm
         configuration actions.  This should not harm any data, however it may
         cause some configuration operations (e.g. moving subdisks, plex 
         resynchronization) to abort unexpectedly.  Any vxvm configuration
         changes should be completed before running this script. \n"

while :
do
	echo "Continue operation? [y,n,q] (default: n) \c"
	read x
	case $x in
	y|Y) 	echo ""	
		break
		;;
	n|N)	exit 0	
		;;
	q|Q)	exit 0	
		;;
	*)	[ -z "$x" ] && exit 0
   		;;
	esac
done
		
echo "DMP Debugging information" > $OUTFILE
if [ $? -ne 0 ]
then
	echo "$0: can't create output file $OUTFILE!"
	exit 1
fi
echo >> $OUTFILE

echo "DMP Debugging information"
echo "sending to output file $OUTFILE"

echo "system information...\c"

echo "uname -a information" >> $OUTFILE
echo >> $OUTFILE
uname -a >> $OUTFILE
echo >> $OUTFILE

date >> $OUTFILE
echo >> $OUTFILE

echo "pkginfo information" >> $OUTFILE
echo >> $OUTFILE
if pkginfo -x SUNWvxvm.* > /dev/null 2>&1
then 
	pkginfo -l SUNWvxvm.* >> $OUTFILE 2>&1
fi
if pkginfo -x VRTSvxvm.* > /dev/null 2>&1
then 
	pkginfo -l VRTSvxvm.* >> $OUTFILE 2>&1
fi
echo >> $OUTFILE

echo "modinfo infomation" >> $OUTFILE
/usr/sbin/modinfo | /usr/bin/grep vx >> $OUTFILE 2>&1
echo >> $OUTFILE

echo "vxautoconfig output...\c"
echo "vxautoconfig output" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
$VXDIAGDIR/vxautoconfig >> $OUTFILE 2>&1
echo >> $OUTFILE
echo "done"

echo "vxdevwalk output...\c" 
echo "vxdevwalk output" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
$VXDIAGDIR/vxdevwalk >> $OUTFILE 2>&1
echo >> $OUTFILE
echo "done"

echo "A dump of the DMP database as seen by the API\c"
echo "A dump of the DMP database as seen by vxdmp driver's API" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
$VXDIAGDIR/vxdmpdbprint >> $OUTFILE 2>&1
echo >> $OUTFILE
echo >> $OUTFILE

echo "vxdisk list output...\c"
echo "vxdisk list output" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
/usr/sbin/vxdisk list >> $OUTFILE 2>&1
echo >> $OUTFILE
echo >> $OUTFILE

echo "per device vxdisk list output" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
for i in `/usr/sbin/vxdisk list | /usr/bin/awk '{ print $1 }'`
do
	[ "$i" = "DEVICE" ] && continue
	/usr/sbin/vxdisk list $i >> $OUTFILE 2>&1
	echo >> $OUTFILE
done
echo >> $OUTFILE

echo "ls -l /dev/rdsk/*s2 output">> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
/usr/bin/ls -l /dev/rdsk/*s2 >> $OUTFILE 2>&1
echo >> $OUTFILE

echo "ls -l /dev/dsk/*s2 output" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
/usr/bin/ls -l /dev/dsk/*s2 >> $OUTFILE 2>&1
echo >> $OUTFILE

echo "ls -lL /dev/rdsk/*s2 output" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
/usr/bin/ls -lL /dev/rdsk/*s2 >> $OUTFILE 2>&1
echo >> $OUTFILE

echo "ls -lL /dev/dsk/*s2" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
/usr/bin/ls -lL /dev/dsk/*s2 >> $OUTFILE 2>&1
echo >> $OUTFILE
echo "done"

echo "scsi inquiry command outputs...\c" 
echo "scsi inquiry command outputs" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
for i in `ls /dev/rdsk/*s2`
do
	echo $i >> $OUTFILE
	$VXDIAGDIR/vxdmpinq $i >> $OUTFILE 2>&1
	echo >> $OUTFILE
done 
echo "done"

echo "vxconfigd debug output; please wait...\c"
echo "vxconfigd -k -x 9 output" >> $OUTFILE 2>&1
echo "----------------------------------------------------------" >> $OUTFILE
echo >> $OUTFILE
vxconfigd -k -x 9 -x tracefile=$OUTFILE >> /dev/null 2>&1

# now we'll reset vxconfigd back to a normal mode...
vxconfigd -k
echo "done"

if [ ! -x $ADB ]
then
	echo "exiting $ADB not found\n" 
	echo "exiting $ADB not found" >> $OUTFILE
	exit 1
fi

echo >> $OUTFILE
echo "Dumping DMP tables for SunOS $OSVERSION...\c"
ADBCOMMAND="$ADB -I /usr/lib/adb:. -k"

echo "Dumping DMP tables for SunOS $OSVERSION..." >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE

cd $VXDMPMDIR
echo "$<dmp" | $ADBCOMMAND >> $OUTFILE

cd $VXDIAGDIR
echo "DMP tables dumped to $OUTFILE." >> $OUTFILE
echo "done\n"

if [ -x /usr/ccs/bin/what ]
then
	echo "VM driver information" >> $OUTFILE
echo "----------------------------------------------------------" >> $OUTFILE
	echo >> $OUTFILE
	for vmdrivers in vxdmp vxio vxspec
	do
		echo "$vmdrivers information" >> $OUTFILE
		/usr/ccs/bin/what /kernel/drv/$vmdrivers >> $OUTFILE 2>&1
		echo >> $OUTFILE
	done
	echo >> $OUTFILE
fi
echo "done"

echo "Script is finished.  Please email $OUTFILE to:"
echo "\tsupport@veritas.com"
echo "Please make sure to include your case ID in the subject.\n"

exit 0
