#!/bin/bash
#
# Name: lssd
# Copyright: (C) 2003 Hewlett-Packard Company
#
# Description: lists all sd devies and a description
#              of each device
#
# Modification History
#
# Chad Dupuis	04/11/03 Initial Development
# Chad Dupuis   06/11/04 Added code to get the wwid of the
#                        FC target that a particular sd
#                        device is attached to

# functions

space_str () {
 STRINGSIZE=$1
 STR=$2 
 SPACESTR=""
 
 SIZE=`echo $STR | wc -c`
 NUM_OF_SPACES=`expr $STRINGSIZE - $SIZE`

 COUNT=$NUM_OF_SPACES

 while [ $COUNT -ne 0 ]
 do
  SPACESTR=$SPACESTR" "
  COUNT=`expr $COUNT - 1`
 done
}
 
# defines

SCSI_INFO="/opt/hp/hp_fibreutils/scsi_info"
LETT_LIST=" a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx " 

# check to make sure that scsi_info exists

ls $SCSI_INFO 1>/dev/null 2>/dev/null

if [ $? -ne 0 ]
then
 echo "$SCSI_INFO does not exist"
 exit 1
fi

for i in $LETT_LIST
do
 # check to see if device is bound 

 $SCSI_INFO /dev/sd${i} 1>/dev/null 2>/dev/null

 if [ $? -ne 0 ]
 then
  exit 0
 fi

 # get device info from scsi_info

 OUTPUT=`$SCSI_INFO /dev/sd${i}` 
 CONN=`echo $OUTPUT | awk 'BEGIN {FS=":"} {print $1}' | awk 'BEGIN {FS="="} {print $2}' | sed 's/"//g'`
 VENDOR=`echo $OUTPUT | awk 'BEGIN {FS=":"} {print $2}' | awk 'BEGIN {FS="="} {print $2}' | sed 's/"//g'`
 MODEL=`echo $OUTPUT | awk 'BEGIN {FS=":"} {print $3}' | awk 'BEGIN {FS="="} {print $2}' | sed 's/"//g'`
 FWREV=`echo $OUTPUT | awk 'BEGIN {FS=":"} {print $4}' | awk 'BEGIN {FS="="} {print $2}' | sed 's/"//g'`
 
 # get the number of spaces to pad after the connection address

 space_str 5 "sd${i}"
 DEVICESPACE=$SPACESTR 
 space_str 16 $CONN
 CONNSPACE=$SPACESTR

 # get wwid for sd devices

 WWID=""
 ADAPTERINST=`echo $CONN | awk 'BEGIN {FS=","} {print $1}'`
 INSTFILE=`find /proc/scsi/qla* -name "$ADAPTERINST" -print 2>/dev/null`

 if [ "$INSTFILE" != "" ]
 then
 	DEVICETARGET=`echo $CONN | awk 'BEGIN {FS=","} {print $3}'`
	WWID=`cat $INSTFILE | grep target | grep "\-${DEVICETARGET}=" | awk 'BEGIN {FS="="} {print $2}' | sed 's/;//'`
 fi
 
 # format world wide ID string

 if [ "$WWID" != "" ]
 then
  	WWID="`echo $WWID | cut -c 1-4`"-"`echo $WWID | cut -c 5-8`"-"`echo $WWID | cut -c 9-12`"-"`echo $WWID | cut -c 13-16`"
 fi 
 
 echo "sd${i}${DEVICESPACE} ${CONN}${CONNSPACE} $VENDOR $MODEL $FWREV  $WWID"
done
