## 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
}