1#!/bin/sh 2# 3# DESCRIBE 2.2 - Describe the given devices. Author: Kees J. Bot 4# 5# BUGS 6# - Arguments may not contain shell metacharacters. 7 8case $# in 90) flag=; set -$- /dev ;; 10*) flag=d ;; 11esac 12 13ls -l$flag $* | \ 14sed -e '/^total/d' \ 15 -e '/^l/d' \ 16 -e '/^[^bc]/s/.* /BAD BAD /' \ 17 -e '/^[bc]/s/.* \([0-9][0-9]*\), *\([0-9][0-9]*\).* /\1 \2 /' \ 18| { 19ex=0 # exit code 20 21while read major minor path 22do 23 case $path in 24 /*) name=`expr $path : '.*/\\(.*\\)$'` 25 ;; 26 *) name=$path 27 esac 28 dev= des= 29 30 case $major in # One of the controllers? What is its controller nr? 31 3) ctrlr=0 ;; 32 8) ctrlr=1 ;; 33 10) ctrlr=2 ;; 34 12) ctrlr=3 ;; 35 esac 36 37 case $major,$minor in 38 1,0) des="RAM disk" dev=ram 39 ;; 40 1,1) des="memory" dev=mem 41 ;; 42 1,2) des="kernel memory" dev=kmem 43 ;; 44 1,3) des="null device, data sink" dev=null 45 ;; 46 1,4) des="boot device loaded from boot image" dev=boot 47 ;; 48 1,5) des="null byte stream generator" dev=zero 49 ;; 50 1,6) des="boot image RAM disk" dev=imgrd 51 ;; 52 1,[789]|1,1[012]) 53 ramdisk=`expr $minor - 7` 54 des="RAM disk $ramdisk" dev=ram$ramdisk 55 ;; 56 2,*) drive=`expr $minor % 4` 57 case `expr $minor - $drive` in 58 0) des='auto density' dev="fd$drive" 59 ;; 60 4) des='360k, 5.25"' dev="pc$drive" 61 ;; 62 8) des='1.2M, 5.25"' dev="at$drive" 63 ;; 64 12) des='360k in 720k, 5.25"' dev="qd$drive" 65 ;; 66 16) des='720k, 3.5"' dev="ps$drive" 67 ;; 68 20) des='360k in 1.2M, 5.25"' dev="pat$drive" 69 ;; 70 24) des='720k in 1.2M, 5.25"' dev="qh$drive" 71 ;; 72 28) des='1.44M, 3.5"' dev="PS$drive" 73 ;; 74 112) des='auto partition 0' dev="fd${drive}p0" 75 ;; 76 116) des='auto partition 1' dev="fd${drive}p1" 77 ;; 78 120) des='auto partition 2' dev="fd${drive}p2" 79 ;; 80 124) des='auto partition 3' dev="fd${drive}p3" 81 ;; 82 *) dev=BAD 83 esac 84 des="floppy drive $drive ($des)" 85 ;; 86 [38],[05]|[38],[123][05]|1[02],[05]|1[02],[123][05]) 87 drive=`expr $minor / 5` 88 des="controller $ctrlr disk $drive" dev=c${ctrlr}d${drive} 89 ;; 90 [38],?|[38],[123]?|1[02],?|1[02],[123]?) 91 drive=`expr $minor / 5` 92 par=`expr $minor % 5 - 1` 93 des="controller $ctrlr disk $drive partition $par" 94 dev=c${ctrlr}d${drive}p${par} 95 ;; 96 [38],12[89]|[38],1[3-9]?|[38],2??|1[02],12[89]|1[02],1[3-9]?|1[02],2??) 97 drive=`expr \\( $minor - 128 \\) / 16` 98 par=`expr \\( \\( $minor - 128 \\) / 4 \\) % 4` 99 sub=`expr \\( $minor - 128 \\) % 4` 100 des="hard disk $drive, partition $par, subpartition $sub" 101 des="controller $ctrlr disk $drive partition $par slice $sub" 102 #par=`expr $drive '*' 5 + $par` 103 dev=c${ctrlr}d${drive}p${par}s${sub} 104 ;; 105 [38],6[4-9]|[38],7?|1[02],6[4-9]|1[02],7?) 106 tape=`expr \\( $minor - 64 \\) / 2` 107 case $minor in 108 *[02468]) 109 des="controller $ctrlr tape $tape (non-rewinding)" 110 dev=c${ctrlr}t${tape}n 111 ;; 112 *[13579]) 113 des="controller $ctrlr tape $tape (rewinding)" 114 dev=c${ctrlr}t${tape} 115 esac 116 ;; 117 4,0) des="console device" dev=console 118 ;; 119 4,[1-7])des="virtual console $minor" dev=ttyc$minor 120 ;; 121 4,15) des="diagnostics device" dev=log 122 ;; 123 4,1[6-9]) 124 line=`expr $minor - 16` 125 des="serial line $line" dev=tty0$line 126 ;; 127 4,125) des="video output" dev=video 128 ;; 129 5,0) des="anonymous tty" dev=tty 130 ;; 131 6,0) des="line printer, parallel port" dev=lp 132 ;; 133 7,*) 134 d=`expr $minor % 8` 135 n=`expr $minor / 8` 136 case $d in 137 0) des="IP stat" dev=ipstat 138 ;; 139 1) case $name in 140 psip*) 141 des="Pseudo IP #$n" dev=psip 142 ;; 143 *) des="raw ethernet #$n" dev=eth 144 esac 145 ;; 146 2) des="raw IP #$n" dev=ip 147 ;; 148 3) des="TCP/IP #$n" dev=tcp 149 ;; 150 4) des="UDP #$n" dev=udp 151 esac 152 case $d in 153 [0123]) 154 if [ "$name" = "$dev" ] 155 then 156 des="$des (default)" 157 else 158 dev=$dev$n 159 fi 160 esac 161 ;; 162 9,0) 163 des="unix98 pseudoterminal master" dev=ptmx 164 ;; 165 9,12[89]|9,1[3-8]?|9,19[01]) 166 p=`expr \\( $minor - 128 \\) / 16 | tr '0123' 'pqrs'` 167 n=`expr $minor % 16` 168 test $n -ge 10 && n=`expr $n - 10 | tr '012345' 'abcdef'` 169 des="pseudo tty `expr $minor - 128`" dev=tty$p$n 170 ;; 171 9,???) 172 p=`expr \\( $minor - 192 \\) / 16 | tr '0123' 'pqrs'` 173 n=`expr $minor % 16` 174 test $n -ge 10 && n=`expr $n - 10 | tr '012345' 'abcdef'` 175 des="controller of tty$p$n" dev=pty$p$n 176 ;; 177 11,0) 178 des="block filter" dev=filter 179 ;; 180 13,0) 181 des="audio" dev=audio 182 ;; 183 14,0) 184 des="faulty block device driver" dev=fbd 185 ;; 186 15,0) 187 des="kernel log" dev=klog 188 ;; 189 16,0) 190 des="pseudo random number generator" dev=urandom 191 ;; 192 17,0) 193 des="hello" dev=hello 194 ;; 195 5[6-9],0|6[0-3],0) 196 drive=`expr $major - 56` 197 des="vnode disk $drive" dev=vnd$drive 198 ;; 199 5[6-9],[1-4]|6[0-3],[1-4]) 200 drive=`expr $major - 56` 201 par=`expr $minor - 1` 202 des="vnode disk $drive partition $par" dev=vnd${drive}p${par} 203 ;; 204 5[6-9],12[89]|5[6-9],13[0-9]|5[6-9],14[0-3]|6[0-3],12[89]|5[6-9],13[0-9]|5[6-9],14[0-3]) 205 drive=`expr $major - 56` 206 par=`expr \\( \\( $minor - 128 \\) / 4 \\) % 4` 207 sub=`expr \\( $minor - 128 \\) % 4` 208 des="vnode disk $drive partition $par slice $sub" 209 dev=vnd${drive}p${par}s${sub} 210 ;; 211 64,0) 212 des="keyboard input multiplexer" 213 dev=kbdmux 214 ;; 215 64,[1-4]) 216 n=`expr $minor - 1` 217 des="keyboard input $n" 218 dev=kbd$n 219 ;; 220 64,64) 221 des="mouse input multiplexer" 222 dev=mousemux 223 ;; 224 64,6[5-8]) 225 n=`expr $minor - 65` 226 des="mouse input $n" 227 dev=mouse$n 228 ;; 229 BAD,BAD) 230 des= dev= 231 ;; 232 *) dev=BAD 233 esac 234 235 case $name:$dev in 236 *:) 237 echo "$path: not a device" >&2 238 ex=1 239 ;; 240 *:*BAD*) 241 echo "$path: cannot describe: major=$major, minor=$minor" >&2 242 ex=1 243 ;; 244 $dev:*) 245 echo "$path: $des" 246 ;; 247 *:*) echo "$path: nonstandard name for $dev: $des" 248 esac 249done 250 251exit $ex 252} 253