summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@suse.de>2006-01-23 19:08:06 +0100
committerKay Sievers <kay.sievers@suse.de>2006-01-23 19:08:06 +0100
commitaabc6a7294936030fa646ee6f6eae6ffe004774c (patch)
treebed6dcaccc153ce944ed09717e3b9342335c8729
parentd8a57e7c2624bf19ad2f4f91a6d9149d5228402f (diff)
path_id: handle fiber channel
Patch from: Hannes Reinecke <hare@suse.de> Signed-off-by: Kay Sievers <kay.sievers@suse.de>
-rwxr-xr-xextras/path_id43
1 files changed, 43 insertions, 0 deletions
diff --git a/extras/path_id b/extras/path_id
index af1837a77d..b58e1eda6a 100755
--- a/extras/path_id
+++ b/extras/path_id
@@ -248,6 +248,46 @@ handle_block_scsi () {
RESULT=0
}
+handle_block_fc () {
+: handle_block_fc $*
+ local DEV=$1
+ local cil controller_port controller_dev
+ # SCSI-FC device
+ fc_tgt_hcil="${DEV##*/}"
+ fc_tgt_lun="${fc_tgt_hcil##*:}"
+ fc_tgt_path="${DEV%/*}"
+ fc_tgt_num="${fc_tgt_path##*/}"
+ fc_tgt_dev="${fc_tgt_path}/fc_transport:${fc_tgt_num}"
+ if [ -e "$fc_tgt_dev/port_name" ]; then
+ read wwpn < $fc_tgt_dev/port_name
+ fi
+ if [ -z "$wwpn" ] ; then
+ : no WWPN
+ RESULT=1
+ return
+ fi
+ # Linux currently knows about 32bit luns
+ tmp_lun3=$(printf "%04x" $(($fc_tgt_lun & 0xFFFF)))
+ tmp_lun2=$(printf "%04x" $(( ($fc_tgt_lun >> 16) & 0xFFFF)))
+ tmp_lun1="0000"
+ tmp_lun0="0000"
+
+ if (($fc_tgt_lun == 0)) ; then
+ lun="0x0000000000000000"
+ else
+ lun="0x${tmp_lun3}${tmp_lun2}${tmp_lun1}${tmp_lun0}"
+ fi
+ controller_dev="${fc_tgt_path%/host[0-9]*}"
+ adapter="${controller_dev##*/}"
+ bus="pci"
+ d="$bus-$adapter"
+ if [ -z "$controller_port" ] ; then
+ controller_port=0
+ fi
+ d="${d}-fc-${wwpn}:${lun}"
+ RESULT=0
+}
+
handle_block_usb_storage () {
: handle_block_usb_storage $*
local DEV=$1
@@ -353,6 +393,9 @@ handle_block () {
RESULT=0
fi
;;
+ */rport-[0-9]*:[0-9]*-[0-9]*/*)
+ handle_block_fc "$D"
+ ;;
*/host[0-9]*/[0-9]*:[0-9]*:[0-9]*:[0-9]*)
# check for ieee1394 sbp2
if test -f $D/ieee1394_id ; then