|
|
#!/bin/sh -e
# Inspired from a script by Remco <remco@d-compu.dyndns.org>. # Support for /dev/discs/* and /dev/cdroms/* by Daniel Mueller <danm@gmx.li>. # # BUS="scsi", PROGRAM="/etc/udev/scsi-devfs.sh %k %b %n", \ # NAME="%c{1}", SYMLINK="%k %c{2}"
get_ide_offset() { local num=0 local dev
for dev in /proc/ide/*/media; do if [ "`cat $dev`" = "$1" ]; then num=$(($num + 1)) fi done
echo $num }
get_next_number() { local num=0 local dev local offset=`get_ide_offset $2` if [ "$2" = "disk" ]; then local DRIVE="${1%%[0-9]*}" local DEVLIST="/sys/block/sd*" else local DRIVE=$1 local DEVLIST="/sys/block/sr*" fi
for dev in $DEVLIST; do [ "${dev#/sys/block/}" = "$DRIVE" ] && break num=$(($num + 1)) done
echo $(($offset + $num)) }
# the format is "HOST:BUS:TARGET:LUN" SCSI_ID=$2 HOST=${SCSI_ID%%:*} SCSI_ID=${SCSI_ID#*:} BUS=${SCSI_ID%%:*} SCSI_ID=${SCSI_ID#*:} TARGET=${SCSI_ID%%:*} SCSI_ID=${SCSI_ID#*:} LUN=$SCSI_ID
case "$1" in scd*|sr*) # CDROM/DVD NAME=cd LINK="cdroms/cdrom"`get_next_number $1 cdrom` ;; sd*) if [ "$3" ]; then NAME=part$3 LINK="discs/disc"`get_next_number $1 disk`/part${3} else NAME=disc LINK="discs/disc"`get_next_number $1 disk`/disc fi ;; nst*) NAME=$(echo "$1" | sed -e 's/nst0m/nmt/') [ $NAME = "mt0" ] && LINK=ntape ;; st*) NAME=$(echo "$1" | sed -e 's/st0m/mt/') [ $NAME = "mt0" ] && LINK=tape ;; sg*|*) NAME=generic ;; esac
echo scsi/host$HOST/bus$BUS/target$TARGET/lun$LUN/$NAME $LINK
exit 0
|