X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=extras%2Fpath_id%2Fpath_id;h=a6dfbf1a089dd644ea8e50923cf519b9f6463967;hb=321f7bbb0a200cd378edfef9a7a2e779f704ac41;hp=7f0d53a1808181e48dff13891769d383d33c89b3;hpb=b12a1fb1c6073c0679e80f515fe97cb21fa88e65;p=elogind.git diff --git a/extras/path_id/path_id b/extras/path_id/path_id index 7f0d53a18..a6dfbf1a0 100644 --- a/extras/path_id/path_id +++ b/extras/path_id/path_id @@ -96,6 +96,56 @@ handle_pci () { RESULT=0 } +handle_platform () { + local DEV=$1 + cd -P $1 + DEV=${PWD} + platform_id=${DEV##*/} + host_dev_path=$DEV + while [ ! -z "$host_dev_path" ] ; do + case "$host_dev_path" in + */platform*) + host_dev_path=${host_dev_path%/*} + ;; + *) + break + ;; + esac + done + if [ "$d" ]; then + d="platform-$platform_id-$d" + else + d="platform-$platform_id" + fi + D="$host_dev_path" + RESULT=0 +} + +handle_serio () { + local DEV=$1 + cd -P $1 + DEV=${PWD} + serio_id=${DEV##*/serio} + host_dev_path=$DEV + while [ ! -z "$host_dev_path" ] ; do + case "$host_dev_path" in + */serio*) + host_dev_path=${host_dev_path%/*} + ;; + *) + break + ;; + esac + done + if [ "$d" ]; then + d="serio-$serio_id-$d" + else + d="serio-$serio_id" + fi + D="$host_dev_path" + RESULT=0 +} + handle_ide () { : handle_ide $* local DEV=$1 @@ -262,6 +312,61 @@ handle_sas () { RESULT=0 } +handle_iscsi() { + local DEV=$1 + local iscsi_session_dir + local iscsi_session iscsi_session_path + local iscsi_connection iscsi_connection_path + # iSCSI device + iscsi_session_dir="${DEV%%/target*}" + iscsi_session="${iscsi_session_dir##*/}" + iscsi_session_path=/sys/class/iscsi_session/${iscsi_session} + if [ ! -d "$iscsi_session_path" ] ; then + : no iSCSI session path + RESULT=1 + return + fi + # Currently we're not doing MC/S + for conn in ${iscsi_session_dir}/connection* ; do + iscsi_conn_num=${conn##*:} + if [ "$iscsi_conn_num" = '0' ] ; then + iscsi_connection=$(basename $conn) + fi + done + if [ -z "$iscsi_connection" ] ; then + : no iSCSI connection found + RESULT=1 + return + fi + iscsi_connection_path=/sys/class/iscsi_connection/${iscsi_connection} + if [ ! -d "$iscsi_connection_path" ] ; then + : no iSCSI connection path + RESULT=1 + return + fi + if [ -e "${iscsi_session_path}/targetname" ]; then + read iscsi_tgtname < ${iscsi_session_path}/targetname + fi + if [ -z "$iscsi_tgtname" ] ; then + : No iSCSI Targetname + RESULT=1 + return + fi + if [ -e "${iscsi_connection_path}/persistent_address" ] ; then + read iscsi_address < ${iscsi_connection_path}/persistent_address + fi + if [ -z "$iscsi_address" ] ; then + : No iSCSI Target address + RESULT=1 + return + fi + if [ -e "${iscsi_connection_path}/persistent_port" ] ; then + read iscsi_port < ${iscsi_connection_path}/persistent_port + fi + d="ip-${iscsi_address}:${iscsi_port}-iscsi-${iscsi_tgtname}" + RESULT=0 +} + handle_usb () { : handle_usb $* local DEV=$1 @@ -306,7 +411,7 @@ handle_device () { subsys="`pwd -P`" cd "$OPWD" subsys="${subsys##*/}" - if [ "$subsys" == "block" ]; then + if [ "$subsys" = "block" ]; then # parent is "block", it's a partition, move one up full_sysfs_path="${full_sysfs_path%/*}" fi @@ -363,6 +468,10 @@ handle_device () { */fw-host[0-9]*/*) handle_firewire "$D" ;; + */session[0-9]*/*) + handle_iscsi "$D" + D= + ;; */host[0-9]*/[0-9]*:[0-9]*:[0-9]*:[0-9]*) handle_scsi "$D" ;; @@ -372,6 +481,12 @@ handle_device () { */pci[0-9]*:[0-9]*) handle_pci "$D" ;; + */serio[0-9]*) + handle_serio "$D" + ;; + */platform/*) + handle_platform "$D" + ;; */devices) D= ;; @@ -382,7 +497,7 @@ handle_device () { ;; esac done - if [ "$TYPE" == "scsi_tape" ] ; then + if [ "$TYPE" = "scsi_tape" ] ; then devname=${full_sysfs_path##*/} rewind="${devname%%st*}" mode="${devname##*st}"