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

FreeBSD Manual Pages

  
 
  

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

NAME
       devd.conf -- configuration file format 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 contain 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 mean-
       ing of each statement and their substatements are explained below.

       Each statement, except options has a priority (an arbitrary number) as-
       sociated	 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	atten-
       tion.

       The general syntax of a statement is:

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

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

       directory "/some/path";
		  Adds the given directory to the  list	 of  directories  from
		  which	 devd(8) will read all files named "*.conf" as further
		  configuration	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
		  implicit `^$'	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 reg-
		  ular	expression or a	variable previously created containing
		  a regular expression.	 The "device-name" variable is	avail-
		  able 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",
		  "802.11", and	"ATM".

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

       The following sub-statements are	supported within  the  nomatch	state-
       ment.

       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
		  expression.	Below  is a list of available systems, subsys-
		  tems,	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	depen-
       dent 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)
		     filesystem.
       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  Subsys-
					  tem.
       ACPI	 ACAD			  AC  line  state ($notify=0x00	is of-
					  fline, 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   un-
					  docked, 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  de-
					  vices.
       CAM	 periph	      error	  Generic errors.
       CAM	 periph	      timeout	  Command timeouts.

       System	 Subsystem    Type	  Description
       CARP				  Events related to the	carp(4)	proto-
					  col.
       CARP	 vhid@inet		  The "subsystem" contains the	actual
					  CARP	vhid  and the name of the net-
					  work 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) device.
       coretemp	   Thermal		       Notification that the CPU  core
					       has  reached  critical tempera-
					       ture.
       coretemp	   Thermal	temperature    String containing the  tempera-
					       ture  of	 the core that has be-
					       come 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
					  instance  of	the  inet interface is
					  attached.

       System	 Subsystem    Type		     Description
       GEOM					     Events  related  to   the
						     geom(4)  framework.   The
						     difference	 compared   to
						     DEVFS  is	that GEOM only
						     includes  disk-like   de-
						     vices.
       GEOM	 DEV	      CREATE		     A	 geom(4)  provider  is
						     created.
       GEOM	 DEV	      DESTROY		     A geom(4) provider	is de-
						     stroyed.
       GEOM	 DEV	      GEOM::physpath	     The physical  path	 of  a
						     device has	changed.
       GEOM	 DEV	      GEOM::rotation_rate    The  rotation rate	of the
						     disk has changed.
       GEOM	 DEV	      MEDIACHANGE	     Physical	 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.
       IFNET	 inet	      RENAME	   The network interface is renamed.
       IFNET	 inet	      ADDR_ADD	   The	 network   interface   address
					   added.
       IFNET	 inet	      ADDR_DEL	   The	network	 interface address re-
					   moved.

       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
       nvme	 controller		     Controller	 events	 provide   the
					     controller	  name	(for  example,
					     nvme0) in $name.
       nvme	 controller   SMART_ERROR    A SMART  Critical	Warning	 State
					     change  has happened.  $state has
					     a hex bitmask of  the  bits  that
					     changed,  as  defined in the NVMe
					     Standard  for  Critical   Warning
					     field  of	log  page  2  "SMART /
					     Health Information	Log":

					     Bit Value	Meaning
					     0x1	Spare  capacity	 below
							threshold
					     0x2	Temperature    outside
							acceptable range
					     0x4	Reliability  of	 media
							degraded
					     0x8	Media	 placed	  into
							read-only mode
					     0x10	Volatime memory	backup
							failure
					     0x20	Persistent	memory
							read-only or degraded
       nvme	 controller   RESET	     A controller reset	event has hap-
					     pened.  $event is one of "start",
					     "success",	and "timed_out"	repre-
					     senting the start of a controller
					     reset,  the successful completion
					     of	a controller reset, or a time-
					     out while waiting	for  the  con-
					     troller to	reset, respectively.
       nvme	 controller   RECONNECT	     An	 NVMe  over  Fabrics  host has
					     disconnected and is requesting  a
					     reconnect.

       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	      overvoltage	    An 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  ab-
						    sent.
       PMU	 Battery      charged		    The	  battery  has	become
						    charged.
       PMU	 Battery      charging		    The	 battery  has  started
						    charging.
       PMU	 Battery      disconnected	    The	 battery has been dis-
						    connected.
       PMU	 Battery      high-temp		    The	 battery  reported   a
						    temperature	   over	   the
						    limit.
       PMU	 Battery      low-temp		    The	 battery  reported   a
						    temperature	   under   the
						    limit.
       PMU	 Battery      plugged		    The	 battery  has	become
						    plugged (eg	connected).
       PMU	 Battery      shutdown-threshold    The	 power	in the battery
						    has	fallen below the shut-
						    down threshold.
       PMU	 Battery      warning-threshold	    The	power in  the  battery
						    has	 fallen	below the warn
						    the	user threshold.
       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  requested.   Di-
						    rection  is	in the $notify
						    variable.
       PMU	 keys	      mute		    The	mute key
       PMU	 keys	      volume		    A volume level change  has
						    been requested.  Direction
						    is	in  the	 $notify vari-
						    able.
       PMU	 keys	      eject		    An ejection	has  been  re-
						    quested.
       PMU	 lid	      close		    The	 pmc(4)	device has de-
						    tected the lid closing.
       PMU	 lid	      open		    The	pmc(4) device has  de-
						    tected the lid openinging.
       PMU	 POWER	      ACLINE		    The	 pmc(4)	device has de-
						    tected an  AC  line	 state
						    ($notify=0x00  is offline,
						    0x01 is online).
       PMU	 USB	      overvoltage	    An 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	      undervoltage	    An under-voltage condition
						    on the power lines for the
						    USB	power pins.
       PMU	 USB	      unplugged		    A  device  has  been   un-
						    plugged from 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 sys-
					  tem.
       USB	 DEVICE	      DETACH	  USB device is	detached to  the  sys-
					  tem.
       USB	 INTERFACE    ATTACH	  USB  interface  is attached to a de-
					  vice.
       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
					  actually change).
       VFS	 FS	      UNMOUNT	  Notification of a  filesystem	 being
					  unmounted.

       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
					  details.

       System	 Subsystem    Type	 Description
       SND				 Events	 related  to the sound(4) dri-
					 ver.
       SND	 CONN	      IN	 Connected input device	 specified  in
					 cdev variable.
       SND	 CONN	      OUT	 Connected  output device specified in
					 cdev variable.

       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	multi-
       ple 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
       Variables are expanded by preceding them	by a "$" sign.	Any text imme-
       diately following that sign, starting with a letter, a minus sign  "-",
       an  underscore  "_", or an asterisk "*" is considered an	internal vari-
       able, and expanded accordingly.	If that	variable does  not  exist,  it
       silently	expands	to an empty string.  Consequently, if the intention is
       to pass a sh(1) variable, it must be surrounded by braces to prevent it
       from being considered an	internal variable.

       See "EXAMPLES" for a detailed example.

       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.

       4.   A final "'"	is inserted.

       See sh(1) for what this construct means.	 It is safe  in	 all  context,
       except 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
       using 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, jux-
       taposing	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.
       /etc/devd       A  directory that devd searches for additional configu-
		       ration files.
       /usr/local/etc/devd
		       A directory that	devd searches for additional  configu-
		       ration files.

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  following  example	illustrates the	difference betwen internal and
       shell variables:

       attach 20 {
	       device-name	       "umodem[0-9]+";
	       match "vendor"	       "0x2047";
	       match "product"	       "0x001(0|3|4)";
	       match "interface"       "0";
	       action "cd /dev;	p=$product; dn=$device-name; \
		       un=$(sysctl -n dev.umodem.${dn#umodem}.ttyname);	\
		       chmod 666 cua${un}; ln -sf cua${un} mspfet${p#0x}";
       };

       "product", and "device-name" are	internal  variables.   Their  contents
       are  initially assigned to shell	variables "p", and "dn", respectively.
       Then, variable "dn" is used inside a shell  command  substitution,  as-
       signing	to  shell variable "un".  Finally, this	shell variable is used
       in two other shell statements, where it needs to	be wrapped  in	braces
       in  order  to  prevent it from being considered in internal variable to
       devd.

       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	15.0			 July 9, 2025			  DEVD.CONF(5)

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

home | help