# %n the "kernel number" of the device.
# For example, 'sda3' has a "kernel number" of '3'
# %e the smallest number for that name which does not matches an existing node
-# %k the kernel name for the device.
+# %k the kernel name for the device
# %M the kernel major number for the device
# %m the kernel minor number for the device
# %b the bus id for the device
# %c the string returned by the PROGRAM
-# %s{filename} the content of a sysfs attribute.
-# %% the '%' char itself.
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
#
-# IDE block devices
-BUS="ide", KERNEL="hd[a-z]*", PROGRAM="/etc/udev/scripts/ide-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-
-# permissions for SCSI CD devices
-BUS="scsi", KERNEL="s[grt][0-9]*", SYSFS{type}="5", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}", MODE="0660", GROUP="cdrom"
-
-# SCSI block devices
-BUS="scsi", KERNEL="sd[a-z]", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="scsi", KERNEL="sd[a-z][0-9]*", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="scsi", KERNEL="sd[a-i][a-z]", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="scsi", KERNEL="sd[a-i][a-z][0-9]*", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="scsi", KERNEL="s[grt][0-9]*", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="scsi", KERNEL="scd[0-9]*", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="scsi", KERNEL="st[0-9]*", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="scsi", KERNEL="nst[0-9]*", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="%k %c{2}"
+# workaround for devices which do not report media changes
+BUS=="ide", KERNEL=="hd[a-z]", SYSFS{removable}=="1", \
+ PROGRAM="/etc/udev/scripts/ide-model.sh %k", RESULT=="IOMEGA ZIP *", \
+ NAME="%k", OPTIONS+="all_partitions"
+
+# IDE devices
+BUS=="ide", KERNEL=="hd[a-z]*", \
+ PROGRAM="/etc/udev/scripts/ide-devfs.sh %k %b %n", \
+ NAME="%c{1}", SYMLINK+="%k %c{2}"
+
+# SCSI devices
+BUS=="scsi", PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", \
+ NAME="%c{1}", SYMLINK+="%k %c{2}"
+
+# RAID controllers
+KERNEL=="cciss!*", PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", \
+ NAME="%c{1}", SYMLINK+="%k"
+KERNEL=="ida!*", PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", \
+ NAME="%c{1}", SYMLINK+="%k"
+KERNEL=="rd!*", PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", \
+ NAME="%c{1}", SYMLINK+="%k"
+
+# other block devices
+KERNEL=="md[0-9]*", NAME="md/%n",
+KERNEL=="loop[0-9]*", NAME="loop/%n"
+KERNEL=="ram[0-9]*", NAME="rd/%n"
# USB devices
-BUS="usb", KERNEL="hiddev*", NAME="usb/%k"
-BUS="usb", KERNEL="auer*", NAME="usb/%k"
-BUS="usb", KERNEL="legousbtower*", NAME="usb/%k"
-BUS="usb", KERNEL="dabusb*", NAME="usb/%k"
-BUS="usb", KERNEL="lp[0-9]*", NAME="usb/%k"
-BUS="usb", KERNEL="cpad[0-9]*", NAME="usb/%k"
-
-# block devices
-KERNEL="md[0-9]*", NAME="md/%n",
-KERNEL="loop[0-9]*", NAME="loop/%n"
-
-# tty devices
-KERNEL="tty[0-9]*", NAME="vc/%n"
-KERNEL="ttyS[0-9]*", NAME="tts/%n"
-KERNEL="ttyUSB[0-9]*", NAME="tts/USB%n"
-KERNEL="rfcomm[0-9]*", NAME="bluetooth/rfcomm/%n"
+BUS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k"
+BUS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k"
+BUS=="usb", KERNEL=="dabusb*", NAME="usb/%k"
+BUS=="usb", KERNEL=="hiddev*", NAME="usb/%k"
+BUS=="usb", KERNEL=="legousbtower*", NAME="usb/%k"
+BUS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k"
+BUS=="usb", KERNEL=="ttyUSB*", SYSFS{product}=="Palm Handheld*", \
+ SYMLINK+="pilot"
+
+# serial devices
+KERNEL=="ttyS[0-9]*", NAME="tts/%n"
+KERNEL=="ttyUSB[0-9]*", NAME="tts/USB%n"
+KERNEL=="rfcomm[0-9]*", NAME="bluetooth/rfcomm/%n",
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
+KERNEL=="capi[0-9]*", NAME="capi/%n"
# vc devices
-KERNEL="vcs", NAME="vcc/0"
-KERNEL="vcs[0-9]*", NAME="vcc/%n"
-KERNEL="vcsa", NAME="vcc/a0"
-KERNEL="vcsa[0-9]*", NAME="vcc/a%n"
-KERNEL="fb[0-9]*", NAME="fb/%n",
-
-# v4l devices
-KERNEL="video[0-9]*", NAME="v4l/video%n"
-KERNEL="radio[0-9]*", NAME="v4l/radio%n"
-KERNEL="vbi[0-9]*", NAME="v4l/vbi%n"
-KERNEL="vtx[0-9]*", NAME="v4l/vtx%n"
-KERNEL="dvb*", PROGRAM="/etc/udev/scripts/dvb.sh %k", NAME="%c"
+KERNEL=="tty[0-9]*", NAME="vc/%n"
+KERNEL=="vcs", NAME="vcc/0"
+KERNEL=="vcs[0-9]*", NAME="vcc/%n"
+KERNEL=="vcsa", NAME="vcc/a0"
+KERNEL=="vcsa[0-9]*", NAME="vcc/a%n"
+
+# video devices
+KERNEL=="video[0-9]*", NAME="v4l/%k"
+KERNEL=="radio[0-9]*", NAME="v4l/%k"
+KERNEL=="vbi[0-9]*", NAME="v4l/%k"
+KERNEL=="vtx[0-9]*", NAME="v4l/%k"
+KERNEL=="dvb*", PROGRAM="/etc/udev/scripts/dvb.sh %k", \
+ NAME="%c"
+KERNEL=="fb[0-9]*", NAME="fb/%n"
+KERNEL=="card[0-9]*", NAME="dri/%k"
# misc devices
-KERNEL="apm_bios", NAME="misc/apm_bios",
-KERNEL="agpgart", NAME="misc/agpgart",
-KERNEL="nvram", NAME="misc/nvram"
-KERNEL="psaux", NAME="misc/psaux"
-KERNEL="rtc", NAME="misc/rtc"
-
-KERNEL="card[0-9]*", NAME="dri/card%n"
-KERNEL="i2c-[0-9]*", NAME="i2c/%n"
-KERNEL="ram[0-9]*", NAME="rd/%n"
-KERNEL="lp[0-9]*", NAME="printers/%n"
-KERNEL="fd[0-9]*", NAME="floppy/%n",
-KERNEL="cdemu[0-9]*", NAME="cdemu/%n"
-KERNEL="pktcdvd[0-9]*", NAME="pktcdvd/%n"
-KERNEL="pktcdvd", NAME="pktcdvd/control"
-KERNEL="cpu[0-9]*", NAME="cpu/%n/cpuid"
-KERNEL="msr[0-9]*", NAME="cpu/%n/msr"
-KERNEL="microcode", NAME="cpu/microcode"
+KERNEL=="apm_bios", NAME="misc/%k",
+KERNEL=="agpgart", NAME="misc/%k"
+KERNEL=="hw_random", NAME="hwrng"
+KERNEL=="nvram", NAME="misc/%k"
+KERNEL=="psaux", NAME="misc/%k"
+KERNEL=="rtc", NAME="misc/%k"
+KERNEL=="tun", NAME="net/%k"
-# sound devices
-KERNEL="controlC[0-9]*", NAME="snd/%k"
-KERNEL="hwC[D0-9]*", NAME="snd/%k"
-KERNEL="pcmC[D0-9cp]*", NAME="snd/%k"
-KERNEL="midiC[D0-9]*", NAME="snd/%k"
-KERNEL="timer", NAME="snd/%k"
-KERNEL="seq", NAME="snd/%k"
-KERNEL="audio*", NAME="sound/%k"
-KERNEL="dsp*", NAME="sound/%k"
-KERNEL="adsp*", NAME="sound/%k"
-KERNEL="midi*", NAME="sound/%k"
-KERNEL="mixer*", NAME="sound/%k"
-KERNEL="sequencer*", NAME="sound/%k"
-KERNEL="amidi*", NAME="sound/%k"
-KERNEL="dmmidi*", NAME="sound/%k"
-KERNEL="admmidi*", NAME="sound/%k"
+# printers and parallel devices
+KERNEL=="lp[0-9]*", NAME="printers/%n"
+KERNEL=="parport[0-9]*", NAME="parports/%n"
-# input devices
-KERNEL="mice", NAME="input/%k"
-KERNEL="mouse[0-9]*", NAME="input/%k"
-KERNEL="event[0-9]*", NAME="input/%k", PROGRAM="/etc/udev/scripts/inputdev.sh %k", RESULT="inputdev", MODE="0664", GROUP="video"
-KERNEL="event[0-9]*", NAME="input/%k"
-KERNEL="js[0-9]*", NAME="input/%k"
-KERNEL="ts[0-9]*", NAME="input/%k"
-KERNEL="uinput", NAME="input/%k"
+KERNEL=="i2c-[0-9]*", NAME="i2c/%n"
+KERNEL=="fd[0-9]*", NAME="floppy/%n"
+
+KERNEL=="cdemu[0-9]*", NAME="cdemu/%n"
+KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n"
+KERNEL=="pktcdvd", NAME="pktcdvd/control"
-KERNEL="tap[0-9]*", NAME="net/%k"
-KERNEL="tun", NAME="net/%k"
+KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
+KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
+KERNEL=="microcode", NAME="cpu/microcode"
-# CAPI devices
-KERNEL="capi", NAME="capi20", SYMLINK="isdn/capi20"
-KERNEL="capi[0-9]*", NAME="capi/%n"
+KERNEL=="umad*", NAME="infiniband/%k"
+KERNEL=="issm*", NAME="infiniband/%k"
+
+# sound devices
+KERNEL=="controlC[0-9]*", NAME="snd/%k"
+KERNEL=="hwC[D0-9]*", NAME="snd/%k"
+KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k"
+KERNEL=="midiC[D0-9]*", NAME="snd/%k"
+KERNEL=="timer", NAME="snd/%k"
+KERNEL=="seq", NAME="snd/%k"
+KERNEL=="audio*", NAME="sound/%k"
+KERNEL=="dsp*", NAME="sound/%k"
+KERNEL=="adsp*", NAME="sound/%k"
+KERNEL=="midi*", NAME="sound/%k"
+KERNEL=="mixer*", NAME="sound/%k"
+KERNEL=="sequencer*", NAME="sound/%k"
+KERNEL=="amidi*", NAME="sound/%k"
+KERNEL=="dmmidi*", NAME="sound/%k"
+KERNEL=="admmidi*", NAME="sound/%k"
+
+# ieee1394 devices
+KERNEL=="dv1394*", NAME="dv1394/%n"
+KERNEL=="video1394*", NAME="video1394/%n"
+
+# input devices
+KERNEL=="mice", NAME="input/%k"
+KERNEL=="mouse[0-9]*", NAME="input/%k"
+KERNEL=="event[0-9]*", NAME="input/%k"
+KERNEL=="js[0-9]*", NAME="input/%k"
+KERNEL=="ts[0-9]*", NAME="input/%k"
+KERNEL=="uinput", NAME="input/%k"
# Zaptel
-KERNEL="zapctl", NAME="zap/ctl"
-KERNEL="zaptimer", NAME="zap/timer"
-KERNEL="zapchannel", NAME="zap/channel"
-KERNEL="zappseudo", NAME="zap/pseudo"
-KERNEL="zap[0-9]*", NAME="zap/%n"
+KERNEL=="zapctl", NAME="zap/ctl"
+KERNEL=="zaptimer", NAME="zap/timer"
+KERNEL=="zapchannel", NAME="zap/channel"
+KERNEL=="zappseudo", NAME="zap/pseudo"
+KERNEL=="zap[0-9]*", NAME="zap/%n"
+
+# AOE character devices
+SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k"
+SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k"
+SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k"
# device mapper creates its own device nodes, so ignore these
-KERNEL="dm-[0-9]*", NAME=""
-KERNEL="device-mapper", NAME="mapper/control"
+KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device"
+KERNEL=="device-mapper", NAME="mapper/control"