File: scsi-devfs.sh

package info (click to toggle)
udev 0.105-4etch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 672 kB
  • ctags: 54
  • sloc: sh: 1,636; makefile: 273
file content (84 lines) | stat: -rw-r--r-- 1,576 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/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>.
#
# SUBSYSTEMS="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

	[ "$(echo /proc/ide/hd*/media)" = "/proc/ide/hd*/media" ] && return

	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