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 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 Subsystem.
       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 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)	proto-
					 col.
       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
					 instance 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.
       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
       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  de-
					 tected	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
					 under the limit.
       PMU	 Battery      plugged	 The  battery  has  become plugged (eg
					 connected).
       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
					 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)  key-
					 board has been	pressed.
       PMU	 keys	      brightness A  brightness	level  change has been
					 requested.  Direction is in the  $no-
					 tify 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 detected	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  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.

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

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.2		       December	1, 2022			  DEVD.CONF(5)

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+14.0-RELEASE+and+Ports>

home | help