# %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
#
-# permissions for IDE CD devices
-BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom*", NAME="%k", MODE="0660", GROUP="cdrom"
+# workaround for devices which do not report media changes
+BUS=="ide", KERNEL=="hd[a-z]", SYSFS{removable}=="1", \
+ PROGRAM="/sbin/ata_id --export $tempnode", ENV{ID_MODEL}=="IOMEGA_ZIP*", \
+ NAME="%k", OPTIONS+="all_partitions"
-# permissions for IDE floppy devices
-BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="floppy*", NAME="%k", MODE="0660", GROUP="floppy"
+# SCSI devices
+BUS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n"
-# permissions for SCSI CD devices
-BUS="scsi", KERNEL="sr[0-9]*", SYSFS{type}="5", NAME="scd%n", MODE="0660", GROUP="cdrom", SYMLINK="sr%n"
-BUS="scsi", KERNEL="sg[0-9]*", SYSFS{type}="5", NAME="%k", MODE="0660", GROUP="cdrom"
+# USB devices
+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"
+# usbfs-like devices
+SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k K=$${K#usbdev} B=$${K%%%%.*} D=$${K#*.}; echo bus/usb/$$B/$$D'", \
+ SYMLINK+="%c"
-# 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"
-
-KERNEL="dvb*", PROGRAM="/etc/udev/scripts/dvb.sh %k", NAME="%c"
-
-KERNEL="card*", NAME="dri/card%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"
+# serial devices
+KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
+KERNEL=="capi[0-9]*", NAME="capi/%n"
-# ALSA 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"
+# video devices
+KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k K=$${K#dvb} A=$${K%%%%.*} D=$${K#*.}; echo dvb/adapter$$A/$$D'", \
+ NAME="%c"
+KERNEL=="card[0-9]*", NAME="dri/%k"
-# 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"
+# misc devices
+KERNEL=="hw_random", NAME="hwrng"
+KERNEL=="tun", NAME="net/%k"
+
+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"
+KERNEL=="uverbs*", NAME="infiniband/%k"
+KERNEL=="ucm", NAME="infiniband/%k"
+
+# ALSA 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"
+
+# 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"