mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
1.5 KiB

  1. #!/bin/sh -e
  2. # Inspired from a script by Remco <remco@d-compu.dyndns.org>.
  3. # Support for /dev/discs/* and /dev/cdroms/* by Daniel Mueller <danm@gmx.li>.
  4. #
  5. # BUS="scsi", PROGRAM="/etc/udev/scsi-devfs.sh %k %b %n", \
  6. # NAME="%c{1}", SYMLINK="%k %c{2}"
  7. get_ide_offset() {
  8. local num=0
  9. local dev
  10. for dev in /proc/ide/*/media; do
  11. if [ "`cat $dev`" = "$1" ]; then
  12. num=$(($num + 1))
  13. fi
  14. done
  15. echo $num
  16. }
  17. get_next_number() {
  18. local num=0
  19. local dev
  20. local offset=`get_ide_offset $2`
  21. if [ "$2" = "disk" ]; then
  22. local DRIVE="${1%%[0-9]*}"
  23. local DEVLIST="/sys/block/sd*"
  24. else
  25. local DRIVE=$1
  26. local DEVLIST="/sys/block/sr*"
  27. fi
  28. for dev in $DEVLIST; do
  29. [ "${dev#/sys/block/}" = "$DRIVE" ] && break
  30. num=$(($num + 1))
  31. done
  32. echo $(($offset + $num))
  33. }
  34. # the format is "HOST:BUS:TARGET:LUN"
  35. SCSI_ID=$2
  36. HOST=${SCSI_ID%%:*}
  37. SCSI_ID=${SCSI_ID#*:}
  38. BUS=${SCSI_ID%%:*}
  39. SCSI_ID=${SCSI_ID#*:}
  40. TARGET=${SCSI_ID%%:*}
  41. SCSI_ID=${SCSI_ID#*:}
  42. LUN=$SCSI_ID
  43. case "$1" in
  44. scd*|sr*)
  45. # CDROM/DVD
  46. NAME=cd
  47. LINK="cdroms/cdrom"`get_next_number $1 cdrom`
  48. ;;
  49. sd*)
  50. if [ "$3" ]; then
  51. NAME=part$3
  52. LINK="discs/disc"`get_next_number $1 disk`/part${3}
  53. else
  54. NAME=disc
  55. LINK="discs/disc"`get_next_number $1 disk`/disc
  56. fi
  57. ;;
  58. nst*)
  59. NAME=$(echo "$1" | sed -e 's/nst0m/nmt/')
  60. [ $NAME = "mt0" ] && LINK=ntape
  61. ;;
  62. st*)
  63. NAME=$(echo "$1" | sed -e 's/st0m/mt/')
  64. [ $NAME = "mt0" ] && LINK=tape
  65. ;;
  66. sg*|*)
  67. NAME=generic
  68. ;;
  69. esac
  70. echo scsi/host$HOST/bus$BUS/target$TARGET/lun$LUN/$NAME $LINK
  71. exit 0