# %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
#
-# default permissions for block devices
-SUBSYSTEM="block", GROUP="disk"
-SUBSYSTEM="block", SYSFS{removable}="1", GROUP="floppy"
-
# workaround for devices which do not report media changes
-BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1", \
- PROGRAM="/bin/cat /proc/ide/%k/model", RESULT="IOMEGA ZIP *", \
- NAME{all_partitions}="%k%n", GROUP="floppy"
+BUS=="ide", KERNEL=="hd[a-z]", SYSFS{removable}=="1", \
+ ENV{ID_MODEL}=="IOMEGA_ZIP*", NAME="%k", OPTIONS+="all_partitions"
# IDE devices
-BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1", \
- PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom*", \
- GROUP="cdrom"
-BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1", \
- PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="floppy*", \
- GROUP="floppy"
-BUS="ide", KERNEL="hd[a-z]*", \
- PROGRAM="/etc/udev/scripts/ide-devfs.sh %k %b %n", \
- NAME="%c{1}", SYMLINK="%k %c{2}"
-BUS="ide", KERNEL="ht[0-9]*", GROUP="tape"
-BUS="ide", KERNEL="nht[0-9]*", GROUP="tape"
+BUS=="ide", KERNEL=="hd[a-z]*", PROGRAM="ide-devfs.sh %k %b %n", \
+ NAME="%c{1}", SYMLINK+="%k %c{2}"
# SCSI 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[gr][0-9]*", SYSFS{type}="5", \
- PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", \
- NAME="%c{1}", SYMLINK="%k %c{2}", GROUP="cdrom"
-BUS="scsi", KERNEL="sr[0-9]*", \
- PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", \
- NAME="%c{1}", SYMLINK="%k %c{2}", GROUP="cdrom"
-BUS="scsi", KERNEL="sg[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}", GROUP="tape"
-BUS="scsi", KERNEL="nst[0-9]*", \
- PROGRAM="/etc/udev/scripts/scsi-devfs.sh %k %b %n", \
- NAME="%c{1}", SYMLINK="%k %c{2}", GROUP="tape"
+BUS=="scsi", PROGRAM="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"
+KERNEL=="cciss!*|ida!*|rd!*", PROGRAM="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"
+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[0-9]*", NAME="usb/%k"
-BUS="usb", KERNEL="legousbtower*", NAME="usb/%k", MODE="0666"
-BUS="usb", KERNEL="dabusb*", NAME="usb/%k"
-BUS="usb", KERNEL="cpad[0-9]*", NAME="usb/%k"
-BUS="usb", KERNEL="ttyUSB*", SYSFS{product}="Palm Handheld*", SYMLINK="pilot"
+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*|Handspring Visor", \
+ SYMLINK+="pilot"
+
+# usbfs-like devices
+SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", \
+ NAME="%c"
# serial devices
-SUBSYSTEM="tty", GROUP="dialout"
-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"
+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="ptmx", MODE="0666"
-KERNEL="tty", MODE="0666"
-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"
+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
-SUBSYSTEM="video4linux", GROUP="video"
-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", GROUP="video"
-KERNEL="fb[0-9]*", NAME="fb/%n", GROUP="video"
-KERNEL="nvidia*", GROUP="video"
-KERNEL="card[0-9]*", NAME="dri/%k", GROUP="video"
+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="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}", \
+ NAME="%c"
+KERNEL=="fb[0-9]*", NAME="fb/%n"
+KERNEL=="card[0-9]*", NAME="dri/%k"
# misc devices
-KERNEL="random", MODE="0666"
-KERNEL="urandom", MODE="0444"
-KERNEL="mem", MODE="0640", GROUP="kmem"
-KERNEL="kmem", MODE="0640", GROUP="kmem"
-KERNEL="port", MODE="0640", GROUP="kmem"
-KERNEL="full", MODE="0666"
-KERNEL="null", MODE="0666"
-KERNEL="zero", MODE="0666"
-KERNEL="inotify", MODE="0666"
-KERNEL="sgi_fetchop", MODE="0666"
-KERNEL="sonypi", MODE="0666"
-KERNEL="apm_bios", NAME="misc/%k",
-KERNEL="agpgart", NAME="misc/%k", GROUP="video"
-KERNEL="nvram", NAME="misc/%k", GROUP="nvram"
-KERNEL="psaux", NAME="misc/%k"
-KERNEL="rtc", NAME="misc/%k", MODE="0644", GROUP="audio"
-KERNEL="hw_random", NAME="hwrng"
+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"
# printers and parallel devices
-SUBSYSTEM="printer", GROUP="lp"
-BUS="usb", KERNEL="lp[0-9]*", NAME="usb/%k"
-KERNEL="lp[0-9]*", NAME="printers/%n"
-KERNEL="pt[0-9]*", GROUP="tape"
-KERNEL="pht[0-9]*", GROUP="tape"
-
-KERNEL="i2c-[0-9]*", NAME="i2c/%n"
-KERNEL="fd[0-9]*", NAME="floppy/%n", GROUP="floppy"
+KERNEL=="lp[0-9]*", NAME="printers/%n"
+KERNEL=="parport[0-9]*", NAME="parports/%n"
-KERNEL="cdemu[0-9]*", NAME="cdemu/%n", GROUP="cdrom"
-KERNEL="pktcdvd[0-9]*", NAME="pktcdvd/%n", GROUP="cdrom"
-KERNEL="pktcdvd", NAME="pktcdvd/control", MODE="0644"
+KERNEL=="i2c-[0-9]*", NAME="i2c/%n"
+KERNEL=="fd[0-9]*", NAME="floppy/%n"
-KERNEL="cpu[0-9]*", NAME="cpu/%n/cpuid"
-KERNEL="msr[0-9]*", NAME="cpu/%n/msr"
-KERNEL="microcode", NAME="cpu/microcode"
+KERNEL=="cdemu[0-9]*", NAME="cdemu/%n"
+KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n"
+KERNEL=="pktcdvd", NAME="pktcdvd/control"
-KERNEL="umad*", NAME="infiniband/%k"
-KERNEL="issm*", NAME="infiniband/%k"
+KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
+KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
+KERNEL=="microcode", NAME="cpu/microcode"
-KERNEL="tap[0-9]*", NAME="net/%k"
-KERNEL="tun", NAME="net/%k"
+KERNEL=="umad*", NAME="infiniband/%k"
+KERNEL=="issm*", NAME="infiniband/%k"
+KERNEL=="uverbs*", NAME="infiniband/%k"
+KERNEL=="ucm*", NAME="infiniband/%k"
# sound devices
-SUBSYSTEM="sound", GROUP="audio"
-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"
+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", \
- 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", MODE="0664"
-KERNEL="ts[0-9]*", NAME="input/%k"
-KERNEL="uinput", NAME="input/%k"
+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"
+SUBSYSTEM=="aoe", KERNEL=="revalidate", 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]*", NAME=""
+KERNEL=="device-mapper", NAME="mapper/control"