## small tr replacment which handles a specific need of this script.
smalltr()
{
- case "$1" in
- a) echo 1 ;; b) echo 2 ;; c) echo 3 ;; d) echo 4 ;; e) echo 5 ;; f) echo 6 ;;
- g) echo 7 ;; h) echo 8 ;; i) echo 9 ;; j) echo 10 ;; k) echo 11 ;; l) echo 12 ;;
- m) echo 13 ;; n) echo 14 ;; o) echo 15 ;; p) echo 16 ;;
- 1) echo a ;; 2) echo b ;; 3) echo c ;; 4) echo d ;; 5) echo e ;;
- 6) echo f ;; 7) echo g ;; 8) echo h ;; 9) echo i ;; 10) echo j ;;
- 11) echo k ;; 12) echo l ;; 13) echo m ;; 14) echo n ;; 15) echo o ;;
- 16) echo p ;;
- esac
+ local i a d t val out mod cur
+
+ val="$1"
+ out="0"
+
+ d=$(printf "%d\n" \'${val:0:1})
+
+ if (( $d > 57 )) ; then # is a letter
+ for ((i=0; i < ${#val}; i++)) ; do
+ d=$(printf "%d\n" \'${val:$i:1})
+ a=$(($d - 96))
+ out=$(($out * 26))
+ out=$(($out + $a))
+ done
+
+ else # is a number
+ t=$val
+ out=""
+
+ while ((t != 0)) ; do
+ mod=$(($t % 26))
+ t=$(($t / 26))
+ if (($mod == 0)) ; then
+ cur="z"
+ t=$(($t - 1))
+ else
+ mod=$(($mod + 96))
+ cur=$(echo $mod | gawk '{printf "%c", $1}')
+ fi
+ out="$cur$out"
+ done
+ fi
+
+ echo "$out"
+
return 0
}
[ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVHOST=$DEVHOST"
if [ "$DEVTYPE" = "Direct-Access" ] || [ "$DEVTYPE" = "Direct-Access-RBC" ] ; then
- DEVCOUNT="$(($DEVCOUNT + 1))"
- [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVCOUNT=$DEVCOUNT"
- if [ "$SUBDEV" = "$DEVCOUNT" ] ; then
- DEVICE_HOST=$DEVHOST
- DEVICE_BUS=$DEVBUS
- DEVICE_ID=$DEVID
- DEVICE_LUN=$DEVLUN
- [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVICE_HOST=$DEVICE_HOST"
- break
- fi
- fi
+ ls /sys/bus/scsi/devices/$DEVHOST:$DEVBUS:$DEVID:$DEVLUN/scsi_disk* > /dev/null 2>&1
+ if [ $? -eq 0 ] ; then
+ DEVCOUNT="$(($DEVCOUNT + 1))"
+ [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVCOUNT=$DEVCOUNT"
+ if [ "$SUBDEV" = "$DEVCOUNT" ] ; then
+ DEVICE_HOST=$DEVHOST
+ DEVICE_BUS=$DEVBUS
+ DEVICE_ID=$DEVID
+ DEVICE_LUN=$DEVLUN
+ [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVICE_HOST=$DEVICE_HOST"
+ break
+ fi
+ fi
+ fi
done
## figure out what the scsi driver is, it is /proc/scsi/dirname.
return 0
fi
+ local fc=${DEVSPEC%@*}
+ fc=${fc##/*/}
+
+ if [[ -e /proc/device-tree$DEVSPEC/device_type ]]; then
+ local devtype=$(cat /proc/device-tree$DEVSPEC/device_type);
+ if [[ $devtype = "fcp" || $devtype = "scsi-fcp" ]]; then
+ fc="fibre-channel";
+ fi
+ fi
+
+ if [[ $fc = "fibre-channel" ]]; then
+ local wwpn=$(get_fc_wwpn "$DEVICE_PATH/../../fc_remote_ports*")
+ local ofpath=$DEVSPEC
+
+ if [[ ! -e /proc/device-tree$DEVSPEC/disk ]]; then
+ for dir in `find /proc/device-tree$DEVSPEC -type d`; do
+ if [[ -e $dir/disk ]]; then
+ ofpath=${dir##/proc/device-tree}
+ break;
+ fi
+ done
+ fi
+
+ ofpath=$(printf "%s/disk@%s" $ofpath $wwpn)
+
+ if [[ $DEVICE_LUN != "0" ]]; then
+ local fc_lun=$(get_fc_scsilun $DEVICE_LUN)
+ ofpath=$(printf "%s,%s" $ofpath $fc_lun)
+ fi
+
+ echo "$ofpath"
+ return 0
+ fi
+
echo 1>&2 "$PRG: Driver: $SCSI_DRIVER is not supported"
return 1
}
return 0
}
+eth_ofpath()
+{
+ read_attr devspec /sys/class/net/$DEVICE/device
+}
+
+hfi_ofpath()
+{
+ local hfnum=${DEVICE##hf}
+ local hfpath
+
+ if [[ $hfnum = "0" || $hfnum = "2" ]]; then
+ hfpath=$(find /proc/device-tree -name hfi-ethernet* | sort | head -n 1)
+ elif [[ $hfnum = "1" || $hfnum = "3" ]]; then
+ hfpath=$(find /proc/device-tree -name hfi-ethernet* | sort | tail -n 1)
+ else
+ echo 1>&2 "$PRG: Unsupported device: $DEVICE"
+ return 1
+ fi
+
+ hfpath=${hfpath##/proc/device-tree}
+ echo "$hfpath"
+}
+
## find OpenFirmware device path for IBM CHRP hardware (scsi only)
chrp()
{
## find the actual OF path.
scsi_ofpath || return 1
;;
+ eth*)
+ eth_ofpath || return 1
+ ;;
+ hfi*)
+ hfi_ofpath || return 1
+ ;;
*)
echo 1>&2 "$PRG: Device: /dev/$DEVNODE is not supported"
return 1
exit 1
fi
-## check that FILE is a block device and exists.
-if [ ! -e "$device" ] ; then
- echo 1>&2 "$PRG: $device: No such file or directory"
- exit 1
-elif [ ! -b "$device" ] ; then
- echo 1>&2 "$PRG: $device is not a block device"
- exit 1
-fi
-
## check that we are running on a GNU/Linux system, OSX/BSD does not
## have the same /proc stuff
if [ `uname -s` != Linux ] ; then