linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* an SUBSYSTEM-based approach to rules
@ 2005-04-09 17:32 Marco d'Itri
  2005-04-10  2:01 ` Alexander E. Patrakov
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Marco d'Itri @ 2005-04-09 17:32 UTC (permalink / raw)
  To: linux-hotplug


[-- Attachment #1.1: Type: text/plain, Size: 362 bytes --]

These are the new rules files used by the debian udev package.
The interesting parts are the usage of SYSFS{type}, SYSFS{removable} and
SUBSYSTEM attributes to assign the default permissions for the devices.
This allows removing a lot of rules, e.g. now permissions for all block
devices except cdroms are assigned with just two rules.

-- 
ciao,
Marco

[-- Attachment #1.2: permissions.rules --]
[-- Type: text/plain, Size: 2122 bytes --]

# default permissions for block devices
SUBSYSTEM="block",			GROUP="disk"
SUBSYSTEM="block", SYSFS{removable}="1", GROUP="floppy"

# 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="ht[0-9]*",	GROUP="tape"
BUS="ide", KERNEL="nht[0-9]*",	GROUP="tape"

# SCSI devices
BUS="scsi", SYSFS{type}="1",	GROUP="tape"
BUS="scsi", SYSFS{type}="5",	GROUP="cdrom"
BUS="scsi", SYSFS{type}="6",	GROUP="scanner"

# USB devices
BUS="usb", KERNEL="legousbtower*", MODE="0666"

# serial devices
SUBSYSTEM="tty",	GROUP="dialout"
SUBSYSTEM="capi",	GROUP="dialout"

# vc devices (all members of the tty subsystem)
KERNEL="ptmx",		MODE="0666", GROUP="root"
KERNEL="console",	MODE="0600", GROUP="root"
KERNEL="tty",		MODE="0666", GROUP="root"
KERNEL="tty[0-9]*",	GROUP="root"

# video devices
SUBSYSTEM="video4linux", GROUP="video"
SUBSYSTEM="dvb",	GROUP="video"
SUBSYSTEM="graphics",	GROUP="video"
SUBSYSTEM="nvidia",	GROUP="video"
SUBSYSTEM="drm",	GROUP="video"

# 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="agpgart",	GROUP="video"
KERNEL="nvram",		GROUP="nvram"
KERNEL="rtc",		MODE="0660", GROUP="audio"

KERNEL="cdemu[0-9]*",	GROUP="cdrom"
KERNEL="pktcdvd[0-9]*",	GROUP="cdrom"
KERNEL="pktcdvd",	MODE="0644"

# printers and parallel devices
SUBSYSTEM="printer",	GROUP="lp"
SUBSYSTEM="ppdev",	GROUP="lp"
KERNEL="pt[0-9]*",	GROUP="tape"
KERNEL="pht[0-9]*",	GROUP="tape"

# sound devices
SUBSYSTEM="sound",	GROUP="audio"

# input devices
KERNEL="event[0-9]*",	PROGRAM="/etc/udev/scripts/inputdev.sh %k", \
			RESULT="inputdev", MODE="0664", GROUP="video"
KERNEL="js[0-9]*",	MODE="0664"

# AOE character devices
SUBSYSTEM="aoe",		MODE="0220", GROUP="disk"
SUBSYSTEM="aoe", KERNEL="err",	MODE="0440"


[-- Attachment #1.3: devfs.rules --]
[-- Type: text/plain, Size: 4621 bytes --]

# There are a number of modifiers that are allowed to be used in some
# of the different fields. They provide the following subsitutions:
#
# %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.
# %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.
#

# 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 *", \
  OPTIONS="all_partitions", NAME="%k"

# 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="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="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/%k",
KERNEL="agpgart",	NAME="misc/%k"
KERNEL="nvram",		NAME="misc/%k"
KERNEL="psaux",		NAME="misc/%k"
KERNEL="rtc",		NAME="misc/%k"
KERNEL="hw_random",	NAME="hwrng"

# printers and parallel devices
KERNEL="lp[0-9]*",	NAME="printers/%n"
KERNEL="parport[0-9]*",	NAME="parports/%n"

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="cpu[0-9]*",	NAME="cpu/%n/cpuid"
KERNEL="msr[0-9]*",	NAME="cpu/%n/msr"
KERNEL="microcode",	NAME="cpu/microcode"

KERNEL="umad*",		NAME="infiniband/%k"
KERNEL="issm*",		NAME="infiniband/%k"

KERNEL="tap[0-9]*",	NAME="net/%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"

# 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"

# 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]*",	OPTIONS="ignore_device"
KERNEL="device-mapper",	NAME="mapper/control"


[-- Attachment #1.4: udev.rules --]
[-- Type: text/plain, Size: 2884 bytes --]

# There are a number of modifiers that are allowed to be used in some
# of the different fields. They provide the following subsitutions:
#
# %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.
# %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.
#

# 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 *", \
  OPTIONS="all_partitions", NAME="%k"

# SCSI devices
BUS="scsi", KERNEL="sr[0-9]*",	NAME="scd%n", SYMLINK="sr%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"
BUS="usb", KERNEL="dabusb*",	NAME="usb/%k"
BUS="usb", KERNEL="cpad[0-9]*",	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="capi",		NAME="capi20", SYMLINK="isdn/capi20"
KERNEL="capi[0-9]*",	NAME="capi/%n"

# video devices
KERNEL="dvb*",		PROGRAM="/etc/udev/scripts/dvb.sh %k", NAME="%c"
KERNEL="card[0-9]*",	NAME="dri/%k"

# misc devices
KERNEL="hw_random",	NAME="hwrng"

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="umad*",		NAME="infiniband/%k"
KERNEL="issm*",		NAME="infiniband/%k"

KERNEL="tap[0-9]*",	NAME="net/%k"
KERNEL="tun",		NAME="net/%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"

# 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"

# 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]*",	OPTIONS="ignore_device"
KERNEL="device-mapper",	NAME="mapper/control"


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-04-10 11:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-04-09 17:32 an SUBSYSTEM-based approach to rules Marco d'Itri
2005-04-10  2:01 ` Alexander E. Patrakov
2005-04-10 11:34 ` Kay Sievers
2005-04-10 11:36 ` Marco d'Itri

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).