Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DEVD.CONF(5)		  FreeBSD File Formats Manual		  DEVD.CONF(5)

NAME
     devd.conf -- configuration	file for devd(8)

DESCRIPTION
   General Syntax
     A devd(8) configuration consists of two general features, statements and
     comments.	All statements end with	a semicolon.  Many statements can con-
     tain substatements, which are also	terminated with	a semicolon.

     The following statements are supported:

     attach   Specifies	various	matching criteria and actions to perform when
	      a	newly attached device matches said criteria.

     detach   Specifies	various	matching criteria and actions to perform when
	      a	newly detached device matches said criteria.

     nomatch  Specifies	various	matching criteria and actions to perform when
	      no device	driver currently loaded	in the kernel claims a (new)
	      device.

     notify   Specifies	various	matching criteria and actions to perform when
	      the kernel sends an event	notification to	userland.

     options  Specifies	various	options	and parameters for the operation of
	      devd(8).

     Statements	may occur in any order in the configuration file, and may be
     repeated as often as required.  Further details on	the syntax and meaning
     of	each statement and their substatements are explained below.

     Each statement, except options has	a priority (an arbitrary number) asso-
     ciated with it, where `0' is defined as the lowest	priority.  If two
     statements	match the same event, only the action of the statement with
     highest priority will be executed.	 In this way generic statements	can be
     overridden	for devices or notifications that require special attention.

     The general syntax	of a statement is:

	   statement priority {
		   substatement	"value";
		   ...
		   substatement	"value";
	   };

   Sub-statements
     The following sub-statements are supported	within the options statement.

     directory "/some/path";
		Adds the given directory to the	list of	directories from which
		devd(8)	will read all files named "*.conf" as further configu-
		ration files.  Any number of directory statements can be used.

     pid-file "/var/run/devd.pid";
		Specifies PID file.

     set regexp-name "(some|regexp)";
		Creates	a regular expression and assigns it to the variable
		regexp-name.  The variable is available	throughout the rest of
		the configuration file.	 If the	string begins with `!',	it
		matches	if the regular expression formed by the	rest of	the
		string does not	match.	All regular expressions	have an	im-
		plicit `^$' around them.

     The following sub-statements are supported	within the attach and detach
     statements.

     action "command";
		Command	to execute upon	a successful match.  Example
		"/etc/pccard_ether $device-name	start".

     class "string";
		This is	shorthand for "match "class" "string"".

     device-name "string";
		This is	shorthand for "match "device-name" "string"".  This
		matches	a device named string, which is	allowed	to be a	regu-
		lar expression or a variable previously	created	containing a
		regular	expression.  The "device-name" variable	is available
		for later use with the action statement.

     match "variable" "value";
		Matches	the content of value against variable; the content of
		value may be a regular expression.  Not	required during	attach
		nor detach events since	the device-name	statement takes	care
		of all device matching.	 For a partial list of variables, see
		below.

     media-type	"string";
		For network devices, media-type	will match devices that	have
		the given media	type.  Valid media types are: "Ethernet",
		"Tokenring", "FDDI", "802.11", and "ATM".

     subdevice "string";
		This is	shorthand for "match "subdevice" "string"".

     The following sub-statements are supported	within the nomatch statement.

     action "command";
		Same as	above.

     match "variable" "value";
		Matches	the content of value against variable; the content of
		value may be a regular expression.  For	a partial list of
		variables, see below.

     The following sub-statements are supported	within the notify statement.
     The "notify" variable is available	inside this statement and contains, a
     value, depending on which system and subsystem that delivered the event.

     action "command";
		Command	to execute upon	a successful match.  Example
		"/etc/rc.d/power_profile $notify".

     match "system | subsystem | type |	notify"	"value";
		Any number of match statements can exist within	a notify
		statement; value can be	either a fixed string or a regular ex-
		pression.  Below is a list of available	systems, subsystems,
		and types.

     media-type	"string";
		See above.

   Variables that can be used with the match statement
     A partial list of variables and their possible values that	can be used
     together with the match statement.	 The variables are published by	the
     bus based on characteristics of the device	that generated the event (for
     device events).  Variables	for other classes of events are	dependent on
     those events.

     Variable	   Description
     *		   The entire message from the current event.
     _		   The entire message from the current event, after the	ini-
		   tial	type character.
     timestamp	   The time this event was processed, in seconds since 1970
		   dot fraction.
     bus	   Device name of parent bus.
     cdev	   Device node path if one is created by the devfs(5) filesys-
		   tem.
     class	   Device class.
     comm	   Executable name (kernel).
     core	   Path	to core	file (kernel).
     device	   Device ID.
     devclass	   Device Class	(USB).
     devsubclass   Device Sub-class (USB).
     device-name   Name	of attached/detached device.
     endpoints	   Endpoint count (USB).
     function	   Card	functions.
     interface	   Interface ID	(USB).
     intclass	   Interface Class (USB).
     intprotocol   Interface Protocol (USB).
     intsubclass   Interface Sub-class (USB).
     jail	   Jail	name for the process triggering	the rule (RCTL).
     mode	   Peripheral mode (USB).
     notify	   Match the value of the "notify" variable.
     parent	   Parent device.
     pid	   PID of the process triggering the rule (RCTL).
     port	   Hub port number (USB).
     product	   Product ID (USB).
     release	   Hardware revision (USB).
     ruid	   Real	UID of the process triggering the rule (RCTL).
     rule	   Rule	(RCTL).
     sernum	   Serial Number (USB).
     slot	   Card	slot.
     subvendor	   Sub-vendor ID (PCI).
     subdevice	   Sub-device ID (PCI).
     subsystem	   Matches a subsystem of a system, see	below.
     system	   Matches a system type, see below.
     type	   Type	of notification, see below.
     vendor	   Vendor ID.

   Notify matching
     A partial list of systems,	subsystems, and	types used within the notify
     mechanism.

     System    Subsystem    Type       Description
     ACPI			       Events related to the ACPI Subsystem.
     ACPI      ACAD		       AC line state ($notify=0x00 is offline,
				       0x01 is online).
     ACPI      Button		       Button state ($notify=0x00 is power,
				       0x01 is sleep).
     ACPI      CMBAT		       Battery events.
     ACPI      Dock		       Dock state ($notify=0x00	is undocked,
				       0x01 is docked).
     ACPI      Lid		       Lid state ($notify=0x00 is closed, 0x01
				       is open).
     ACPI      PROCESSOR	       Processor state/configuration ($no-
				       tify=0x81 is a change in	available Cx
				       states).
     ACPI      Resume		       Resume notification.
     ACPI      Suspend		       Suspend notification.
     ACPI      Thermal		       Thermal zone events.

     System    Subsystem    Type       Description
     AEON      power	    press      The power button	on an Amiga has	been
				       pressed.

     System    Subsystem    Type       Description
     CAM			       Events related to the cam(4) system.
     CAM       periph		       Events related to peripheral devices.
     CAM       periph	    error      Generic errors.
     CAM       periph	    timeout    Command timeouts.

     System    Subsystem    Type       Description
     CARP			       Events related to the carp(4) protocol.
     CARP      vhid@inet	       The "subsystem" contains	the actual
				       CARP vhid and the name of the network
				       interface on which the event took
				       place.
     CARP      vhid@inet    MASTER     Node become the master for a virtual
				       host.
     CARP      vhid@inet    BACKUP     Node become the backup for a virtual
				       host.

     System    Subsystem    Type       Description
     coretemp			       Events related to the coretemp(4) de-
				       vice.
     coretemp  Thermal		       Notification that the CPU core has
				       reached critical	temperature.
     coretemp  Thermal	    temperatureString containing the temperature of
				       the core	that has become	too hot.

     System    Subsystem    Type       Description
     DEVFS
     DEVFS     CDEV	    CREATE     The devfs(5) node is created.
     DEVFS     CDEV	    DESTROY    The devfs(5) node is destroyed.

     System    Subsystem    Type       Description
     ETHERNET  inet	    IFATTACH   Notification when the default VNET in-
				       stance of the inet interface is at-
				       tached.

     System    Subsystem    Type       Description
     GEOM			       Events related to the geom(4) frame-
				       work.  The difference compared to DEVFS
				       is that GEOM only includes disk-like
				       devices.
     GEOM      DEV	    CREATE     A geom(4) provider is created.
     GEOM      DEV	    DESTROY    A geom(4) provider is destroyed.
     GEOM      DEV	    GEOM::physpathThe physical path of a device	has
				       changed.
     GEOM      DEV	    GEOM::rotation_rateThe rotation rate of the	disk
				       has changed.
     GEOM      DEV	    MEDIACHANGEPhysical	media has changed.
     GEOM      DEV	    SIZECHANGE A geom(4) provider size has changed.

     System    Subsystem    Type       Description
     IFNET
     IFNET     inet		       The "subsystem" is the actual name of
				       the network interface on	which the
				       event took place.
     IFNET     inet	    LINK_UP    Carrier status changed to UP.
     IFNET     inet	    LINK_DOWN  Carrier status changed to DOWN.
     IFNET     inet	    ATTACH     The network interface is	attached to
				       the system.
     IFNET     inet	    DETACH     The network interface is	detached from
				       the system.

     System    Subsystem    Type       Description
     kern      power	    resume     Notification that the system has	woken
				       from the	suspended state.  Note:	this
				       notification is deprecated and will be
				       removed in FreeBSD 14.0.

     System    Subsystem    Type       Description
     kernel    signal	    coredump   Notification that a process has crashed
				       and dumped core.
     kernel    power	    resume     Notification that the system has	woken
				       from the	suspended state.

     System    Subsystem    Type       Description
     PMU			       Notification of events from various
				       types of	Power Management Units.
     PMU       AC		       Notifications of	AC power related
				       events.
     PMU       AC	    overvoltageAn over-voltage condition was detected
				       on the AC power line.
     PMU       AC	    plugged    Power has been applied to the AC	power
				       line.
     PMU       AC	    unplugged  Power has been removed from the AC
				       power line.
     PMU       Battery
     PMU       Battery	    absent     Battery is no longer absent.
     PMU       Battery	    charged    The battery has become charged.
     PMU       Battery	    charging   The battery has started charging.
     PMU       Battery	    disconnectedThe battery has	been disconnected.
     PMU       Battery	    high-temp  The battery reported a temperature over
				       the limit.
     PMU       Battery	    low-temp   The battery reported a temperature un-
				       der the limit.
     PMU       Battery	    plugged    The battery has become plugged (eg con-
				       nected).
     PMU       Battery	    shutdown-thresholdThe power	in the battery has
				       fallen below the	shutdown threshold.
     PMU       Battery	    warning-thresholdThe power in the battery has
				       fallen below the	warn the user thresh-
				       old.
     PMU       Button	    pressed    A button	on a adb(4) or pmu(4) has been
				       pressed.
     PMU       keys		       One of the keys on the adb(4) keyboard
				       has been	pressed.
     PMU       keys	    brightness A brightness level change has been re-
				       quested.	 Direction is in the $notify
				       variable.
     PMU       keys	    mute       The mute	key
     PMU       keys	    volume     A volume	level change has been re-
				       quested.	 Direction is in the $notify
				       variable.
     PMU       keys	    eject      An ejection has been requested.
     PMU       lid	    close      The pmc(4) device has detected the lid
				       closing.
     PMU       lid	    open       The pmc(4) device has detected the lid
				       openinging.
     PMU       POWER	    ACLINE     The pmc(4) device has deteted an	AC
				       line state ($notify=0x00	is offline,
				       0x01 is online).
     PMU       USB	    overvoltageAn over-voltage condition on the	power
				       lines for the USB power pins.
     PMU       USB	    plugged    A device	has been plugged into a	USB
				       device.
     PMU       USB	    undervoltageAn under-voltage condition on the
				       power lines for the USB power pins.
     PMU       USB	    unplugged  A device	has been unplugged into	a USB
				       device.

     System    Subsystem    Type       Description
     RCTL			       Events related to the rctl(8) frame-
				       work.
     RCTL      rule	    matched    A rule with action specified as "de-
				       vctl" was triggered.

     System    Subsystem    Type       Description
     USB			       Events related to the USB subsystem.
     USB       DEVICE	    ATTACH     USB device is attached to the system.
     USB       DEVICE	    DETACH     USB device is detached to the system.
     USB       INTERFACE    ATTACH     USB interface is	attached to a device.
     USB       INTERFACE    DETACH     USB interface is	detached from a	de-
				       vice.

     System    Subsystem    Type       Description
     VFS			       Events from the vfs system.
     VFS       FS		       Events that change what is mounted to
				       the system.
     VFS       FS	    MOUNT      Notification of a filesystem is mounted
				       for the first time.
     VFS       FS	    REMOUNT    Notification of a filesystem is re-
				       mounted (whether	or not the options ac-
				       tually change).
     VFS       FS	    UNMOUNT    Notification of a filesystem being un-
				       mounted.

     System    Subsystem    Type       Description
     VT	       BELL	    RING       Notification that the console bell has
				       rung.  See vt(4)	for details.

     System    Subsystem    Type       Description
     ZFS       ZFS		       Events about the	ZFS subsystem.	See
				       zfsd(8) and /etc/devd/zfs.conf for de-
				       tails.

     A link state change to UP on the interface	"fxp0" would result in the
     following notify event:

	   system=IFNET	subsystem=fxp0 type=LINK_UP

     An	AC line	state change to	"offline" would	result in the following	event:

	   system=ACPI subsystem=ACAD notify=0x00

   Comments
     Comments may appear anywhere that whitespace may appear in	a configura-
     tion file.	 To appeal to programmers of all kinds,	they can be written in
     C,	C++, or	shell/Perl constructs.

     C-style comments start with the two characters `/*' (slash, star) and end
     with `*/' (star, slash).  Because they are	completely delimited with
     these characters, they can	be used	to comment only	a portion of a line or
     to	span multiple lines.

     C-style comments cannot be	nested.	 For example, the following is not
     valid because the entire comment ends with	the first `*/':

	   /* This is the start	of a comment.
	      This is still part of the	comment.
	   /* This is an incorrect attempt at nesting a	comment. */
	      This is no longer	in any comment.	*/

     C++-style comments	start with the two characters `//' (slash, slash) and
     continue to the end of the	physical line.	They cannot be continued
     across multiple physical lines; to	have one logical comment span multiple
     lines, each line must use the `//'	pair.  For example:

	   // This is the start	of a comment.  The next	line
	   // is a new comment,	even though it is logically
	   // part of the previous comment.

   Notes on Variable Expansion
     To	prevent	issues with special shell characters, the following happens
     for each variable $foo.

     1.	  The characters "$'" are inserted.

     2.	  The string "$foo" is removed.

     3.	  The value of the foo variable	is inserted into the buffer with all
	  single quote characters prefixed by a	backslash.

     See sh(1) for what	this construct means.  It is safe in all context, ex-
     cept one: inside single quotes.  If foo=meta and bar=var, then a rule
     like the following:
	   action "echo	'$foo $bar'";
     will be presented to the shell via	system(3) as
	   echo	'$'meta' $'var''
     which produces the	following output:
	   $meta $var
     as	its output.  This is an	unanticipated result.  A future	version	of
     this software will	change this behavior.  Users are discouraged from us-
     ing single	quotes inside action value without due care.

     The above should be written as
	   action "echo	$foo' '$bar"
     to	produce	a single argument to echo.  Given the above expansion, juxta-
     posing bare variables with	single quote expressions will produce the
     right output, regardless of the value of the variable.

FILES
     /etc/devd.conf  The devd(8) configuration file.

EXAMPLES
     #
     # This will catch link down events	on the interfaces fxp0 and ath0
     #
     notify 0 {
	     match "system"		     "IFNET";
	     match "subsystem"		     "(fxp0|ath0)";
	     match "type"		     "LINK_DOWN";
	     action "logger $subsystem is DOWN";
     };

     #
     # Match lid open/close events
     # These can be combined to	a single event,	by passing the
     # value of	$notify	to the external	script.
     #
     notify 0 {
	     match "system"		     "ACPI";
	     match "subsystem"		     "Lid";
	     match "notify"		     "0x00";
	     action "logger Lid	closed,	we can sleep now!";
     };

     notify 0 {
	     match "system"		     "ACPI";
	     match "subsystem"		     "Lid";
	     match "notify"		     "0x01";
	     action "logger Lid	opened,	the sleeper must awaken!";
     };

     #
     # Match a USB device type
     #
     notify 0 {
	     match "system"		     "USB";
	     match "subsystem"		     "INTERFACE";
	     match "type"		     "ATTACH";
	     match "intclass"		     "0x0e";
	     action "logger USB	video device attached";
     };

     #
     # Try to configure	ath and	iwn devices with pccard_ether
     # as they are attached.
     #
     attach 0 {
	     device-name "(ath|iwn)[0-9]+";
	     action "/etc/pccard_ether $device-name start";
     };

     #
     # Stop ath	and iwn	devices	as they	are detached from
     # the system.
     #
     detach 0 {
	     device-name "(ath|iwn)[0-9]+";
	     action "/etc/pccard_ether $device-name stop";
     };

     The installed /etc/devd.conf has many additional examples.

SEE ALSO
     cam(4), coretemp(4), devfs(5), re_format(7), devd(8)

BUGS
     The variable expansion's interaction with single quotes is	suboptimal and
     surprising.

FreeBSD	13.0		       November	3, 2021			  FreeBSD 13.0

NAME | DESCRIPTION | FILES | EXAMPLES | SEE ALSO | BUGS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=devd.conf&sektion=5&manpath=FreeBSD+13.1-RELEASE+and+Ports>

home | help