#!/bin/sh

####  This program collects some information about a system running myri10ge
####  Non trivial bug reports should include the output file generated by this program
####   to ease/speed-up problem resolution diagnotic

error ()
{
 echo >&2
 echo "ERROR:$@" >&2
 exit 1
}

delim ()
{
 set +x
 echo ""
 echo "***************"
 echo "***************"
 echo "** $@"
 echo "***************"
}

delimx ()
{
 set +x
 delim "$@"
 set -x
}

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH

test -f myri10ge_checks.h || ( echo "**ERROR: myri10ge_checks.h not found: be sure myri10ge has been compiled" && exit -1 )
test -f myri10ge_version.h || ( echo "**ERROR: myri10ge_version.h not found: be sure myri10ge has been compiled" && exit -1 )
headers=`sed -r -ne 's@^.* ([^ ]*/include).*$@\1@p' < myri10ge_checks.h`

output="myri10ge_bug.`hostname --short`-`date +%F_%H%m%S`.txt"
test "`id -nu`" = root || echo "**WARNING: not root user: report will be incomplete:please run as root**" >&2

echo "Will collect system info in file:" >&2
echo "     $output.gz  " >&2
echo " " >&2
echo "     Starting collecting system information..." >&2

(
exec > "$output" || error "cannot create $output file"
exec 2>&1
exec < /dev/null

###########################################
#Start collection various system information
###########################################

set -x
id -a
uname -a
set +x

for f in /etc/debian_version /etc/cat /etc/redhat-release /etc/SuSE-release; do
 if test -r $f ; then 
  delim $f
  cat "$f"
 fi
done

delim myri10ge version
cat myri10ge_version.h

delim myri10ge checks
cat myri10ge_checks.h

for f in /proc/cpuinfo /proc/meminfo /proc/version /proc/uptime  \
          /proc/cmdline /proc/interrupts /proc/net/dev /proc/iomem \
          /proc/mtrr; do
 delim "$f:"
 cat $f
done

delim "dmesg output"
dmesg

for logfile in /var/log/messages.1 /var/log/messages.0 /var/log/messages ; do
 if test -r $logfile  ; then
    delim "$logfile extract"
    egrep -A3 -B3 -i "myri10ge" "$logfile" | tail -2000
 fi
done

delim "lspci -vv -xxx"
lspci  -vv -xxx
delim "lspci -vvv -xxxx -d 14c1:"
lspci -vvv -xxxx -d 14c1:

if test -d /sys/modules/myri10ge/parameters; then
 delim "myri10ge module params"
 find /sys/modules/myri10ge/parameters -type f | xargs head 
fi

delim "lsmod"
lsmod

if test -f /proc/config.gz ; then
  delim /proc/config.gz
  zcat /proc/config.gz
else
  if test -f /boot/config-`uname -r` ; then
    delim "/boot/config-`uname -r`"
    cat /boot/config-`uname -r`
  else
    delim "/lib/modules/`uname -r`/build/.config"
    cat /lib/modules/`uname -r`/build/.config
  fi
fi

for header in ${headers}/linux/{interrupt,pci,pm,skbuff}.h ; do
  delim "kernel header ${header}"
  cat ${header}
done

for f in /var/log/dmesg /var/log/boot.msg; do
 if test -r $f ; then 
  delim $f
  cat "$f"
 fi
done

delim "sysctl info"
sysctl -a

for i in `ifconfig -a | grep -i '00:60:dd' | awk '{print $1}'`
do
    delim "ifconfig $i"
    ifconfig $i
    delim "ethtool -i $i"
    ethtool -i $i
    delim "ethtool -S $i"
    ethtool -S $i
    delim "ethtool -k $i"
    ethtool -k $i
    delim "ethtool -C $i"
    ethtool -c $i
done

delim "netstat -s"
netstat -s

for FW_DIR in /lib/firmware /usr/lib/hotplug/firmware; 
do
    if [ -d $FW_DIR ];
    then
	delim "contents of $FW_DIR"
	ls -l $FW_DIR/myri*.dat
    else
	delim "$FW_DIR does not exist"
    fi
done



if test -r /etc/vmware-release ; then
    delim "/etc/vmware-release"
    cat /etc/vmware-release
fi


if test -r /proc/vmware/log ; then
    delim "/proc/vmware/log"
    cat /proc/vmware/log
fi

if test -r /etc/vmware/esx.conf ; then
    delim "/etc/vmware/esx.conf"
    cat /etc/vmware/esx.conf
fi

if test -e /usr/sbin/esxcfg-nics ; then
    delim "esxcfg-nics"
    /usr/sbin/esxcfg-nics -l
fi

if test -e /usr/sbin/esxcfg-vswitch ; then
    delim "esxcfg-vswitch"
    /usr/sbin/esxcfg-vswitch -l
fi

if test -e /usr/sbin/esxcfg-info ; then
    delim "esxcfg-info"
    /usr/sbin/esxcfg-info -n
fi

if test -e /usr/sbin/esxcfg-info ; then
    delim "esxcfg-info"
    /usr/sbin/esxcfg-info -n
fi

if test -e /usr/sbin/esxcfg-module ; then
    delim "esxcfg-module -l"
    /usr/sbin/esxcfg-module -l
    delim "esxcfg-module -g myri10ge"
     esxcfg-module -g myri10ge 
fi


delim "END OF BUG REPORT"

exit 0
) || error "collection failed"

### end of collection, compress file #####
echo >&2
rm -f "$output.gz"
gzip -9 "$output" || error "Cannot compress $output!?"
echo "" >&2
echo "    $output.gz created" >&2
echo "    Please send it to help@myri.com with a description of your problem" >&2
echo "" >&2
