1e348c2adSSascha Wildner# $FreeBSD: head/etc/devd.conf 261894 2014-02-14 15:31:48Z avg $ 271fc104fSHasso Tepper# 371fc104fSHasso Tepper# Refer to devd.conf(5) and devd(8) man pages for the details on how to 471fc104fSHasso Tepper# run and configure devd. 571fc104fSHasso Tepper# 671fc104fSHasso Tepper 771fc104fSHasso Tepper# NB: All regular expressions have an implicit ^$ around them. 871fc104fSHasso Tepper# NB: device-name is shorthand for 'match device-name' 971fc104fSHasso Tepper 1071fc104fSHasso Tepperoptions { 11e348c2adSSascha Wildner # Each "directory" directive adds a directory to the list of 12e348c2adSSascha Wildner # directories that we scan for files. Files are loaded in the order 13e348c2adSSascha Wildner # that they are returned from readdir(3). The rule-sets are combined 14e348c2adSSascha Wildner # to create a DFA that's used to match events to actions. 1571fc104fSHasso Tepper directory "/etc/devd"; 1671fc104fSHasso Tepper directory "/usr/local/etc/devd"; 17e348c2adSSascha Wildner pid-file "/var/run/devd.pid"; 1871fc104fSHasso Tepper 1971fc104fSHasso Tepper # Setup some shorthand for regex that we use later in the file. 2071fc104fSHasso Tepper #XXX Yes, these are gross -- imp 2171fc104fSHasso Tepper set scsi-controller-regex 227efec73eSSascha Wildner "(aac|adv|adw|amd|amr|asr|bt|ciss|dpt|\ 23fd501800SSascha Wildner ida|iir|ips|isp|mlx|mly|mpr|mps|mpt|ncr|sym|trm)\ 2471fc104fSHasso Tepper [0-9]+"; 25cc419283SAaron LI set wifi-driver-regex 2624306955SDaniel Fojt "(ath|bwn|iwi|iwm|iwn|ral|rum|run|urtwn|wi|wpi)[0-9]+"; 2771fc104fSHasso Tepper}; 2871fc104fSHasso Tepper 2971fc104fSHasso Tepper# Note that the attach/detach with the highest value wins, so that one can 3071fc104fSHasso Tepper# override these general rules. 3171fc104fSHasso Tepper 3271fc104fSHasso Tepper# 3371fc104fSHasso Tepper# Configure the interface on attach. Due to a historical accident, this 3471fc104fSHasso Tepper# script is called pccard_ether. 3571fc104fSHasso Tepper# 36e348c2adSSascha Wildner# NB: DETACH events are ignored; the kernel should handle all cleanup 37e348c2adSSascha Wildner# (routes, arp cache). Beware of races against immediate create 38e348c2adSSascha Wildner# of a device with the same name; e.g. 39e348c2adSSascha Wildner# ifconfig bridge0 destroy; ifconfig bridge0 create 4071fc104fSHasso Tepper# 41dd9e3d2eSSascha Wildner#notify 0 { 42dd9e3d2eSSascha Wildner# match "system" "IFNET"; 43dd9e3d2eSSascha Wildner# match "subsystem" "!usbus[0-9]+"; 44dd9e3d2eSSascha Wildner# match "type" "ATTACH"; 45dd9e3d2eSSascha Wildner# action "/etc/pccard_ether $subsystem start"; 46dd9e3d2eSSascha Wildner#}; 4771fc104fSHasso Tepper 4871fc104fSHasso Tepper# 49817cf585SAaron LI# Try to start DHCP client on Ethernet-like interfaces when the link comes 5071fc104fSHasso Tepper# up. Only devices that are configured to support DHCP will actually 51817cf585SAaron LI# run it. No link down rule exists because DHCP client automatically exits 5271fc104fSHasso Tepper# when the link goes down. 5371fc104fSHasso Tepper# 54dd9e3d2eSSascha Wildner#notify 0 { 55dd9e3d2eSSascha Wildner# match "system" "IFNET"; 56dd9e3d2eSSascha Wildner# match "type" "LINK_UP"; 57dd9e3d2eSSascha Wildner# media-type "ethernet"; 58817cf585SAaron LI# action "/etc/rc.d/dhcp_client quietstart $subsystem"; 59dd9e3d2eSSascha Wildner#}; 6071fc104fSHasso Tepper 6171fc104fSHasso Tepper# 62cc419283SAaron LI# Like Ethernet devices, but separate because 802.11 requires spawning 63cc419283SAaron LI# wlan(4) interface. 6471fc104fSHasso Tepper# 65dd9e3d2eSSascha Wildner#attach 0 { 66cc419283SAaron LI# device-name "$wifi-driver-regex"; 67cc419283SAaron LI# action "/etc/pccard_ether $device-name startchildren"; 68cc419283SAaron LI#}; 69cc419283SAaron LI#detach 0 { 70cc419283SAaron LI# device-name "$wifi-driver-regex"; 71cc419283SAaron LI# action "/etc/pccard_ether $device-name stopchildren"; 72dd9e3d2eSSascha Wildner#}; 73dd9e3d2eSSascha Wildner#notify 0 { 74dd9e3d2eSSascha Wildner# match "system" "IFNET"; 75dd9e3d2eSSascha Wildner# match "type" "LINK_UP"; 76dd9e3d2eSSascha Wildner# media-type "802.11"; 77817cf585SAaron LI# action "/etc/rc.d/dhcp_client quietstart $subsystem"; 78dd9e3d2eSSascha Wildner#}; 79b7f82050SDaniel Fojtattach 0 { 80b7f82050SDaniel Fojt device-name "$wifi-driver-regex"; 81b7f82050SDaniel Fojt action "/etc/rc.d/netif wlanup $device-name"; 82b7f82050SDaniel Fojt}; 83b7f82050SDaniel Fojt 84b7f82050SDaniel Fojtdetach 0 { 85b7f82050SDaniel Fojt device-name "$wifi-driver-regex"; 86b7f82050SDaniel Fojt action "/etc/rc.d/netif wlandown $device-name"; 87b7f82050SDaniel Fojt}; 8871fc104fSHasso Tepper 8971fc104fSHasso Tepper# An entry like this might be in a different file, but is included here 9071fc104fSHasso Tepper# as an example of how to override things. Normally 'ed50' would match 9171fc104fSHasso Tepper# the above attach/detach stuff, but the value of 100 makes it 9271fc104fSHasso Tepper# hard wired to 1.2.3.4. 93e348c2adSSascha Wildnerattach 100 { 94e348c2adSSascha Wildner device-name "ed50"; 95e348c2adSSascha Wildner action "ifconfig $device-name inet 1.2.3.4 netmask 0xffff0000"; 96e348c2adSSascha Wildner}; 97e348c2adSSascha Wildnerdetach 100 { 98e348c2adSSascha Wildner device-name "ed50"; 99e348c2adSSascha Wildner}; 100e348c2adSSascha Wildner 101e348c2adSSascha Wildner# When a USB Bluetooth dongle appears, activate it 102dd9e3d2eSSascha Wildner#attach 100 { 103dd9e3d2eSSascha Wildner# device-name "ubt[0-9]+"; 104dd9e3d2eSSascha Wildner# action "/etc/rc.d/bluetooth quietstart $device-name"; 105dd9e3d2eSSascha Wildner#}; 106dd9e3d2eSSascha Wildner#detach 100 { 107dd9e3d2eSSascha Wildner# device-name "ubt[0-9]+"; 108dd9e3d2eSSascha Wildner# action "/etc/rc.d/bluetooth quietstop $device-name"; 109dd9e3d2eSSascha Wildner#}; 110e348c2adSSascha Wildner 111e348c2adSSascha Wildner# Firmware downloader for Atheros AR3011 based USB Bluetooth devices 11271fc104fSHasso Tepper#attach 100 { 113e348c2adSSascha Wildner# match "vendor" "0x0cf3"; 114e348c2adSSascha Wildner# match "product" "0x3000"; 115e348c2adSSascha Wildner# action "sleep 2 && /usr/sbin/ath3kfw -d $device-name -f /usr/local/etc/ath3k-1.fw"; 11671fc104fSHasso Tepper#}; 11771fc104fSHasso Tepper 11871fc104fSHasso Tepper# When a USB keyboard arrives, attach it as the console keyboard. 119dd9e3d2eSSascha Wildner#attach 100 { 120dd9e3d2eSSascha Wildner# device-name "ukbd0"; 121dd9e3d2eSSascha Wildner# action "/etc/rc.d/syscons setkeyboard /dev/ukbd0"; 122dd9e3d2eSSascha Wildner#}; 123dd9e3d2eSSascha Wildner#detach 100 { 124dd9e3d2eSSascha Wildner# device-name "ukbd0"; 125dd9e3d2eSSascha Wildner# action "/etc/rc.d/syscons setkeyboard /dev/kbd0"; 126dd9e3d2eSSascha Wildner#}; 127e348c2adSSascha Wildner 128dd9e3d2eSSascha Wildner#notify 100 { 129dd9e3d2eSSascha Wildner# match "system" "DEVFS"; 130dd9e3d2eSSascha Wildner# match "subsystem" "CDEV"; 131dd9e3d2eSSascha Wildner# match "type" "CREATE"; 132dd9e3d2eSSascha Wildner# match "cdev" "atp[0-9]+"; 133dd9e3d2eSSascha Wildner# 134dd9e3d2eSSascha Wildner# action "/etc/rc.d/moused quietstart $cdev"; 135dd9e3d2eSSascha Wildner#}; 136e348c2adSSascha Wildner 13762c0a8e4SMichael Neumannnotify 100 { 13862c0a8e4SMichael Neumann match "system" "DEVFS"; 13962c0a8e4SMichael Neumann match "subsystem" "CDEV"; 14062c0a8e4SMichael Neumann match "type" "CREATE"; 14162c0a8e4SMichael Neumann match "cdev" "ums[0-9]+"; 14262c0a8e4SMichael Neumann 14362c0a8e4SMichael Neumann action "/etc/rc.d/moused quietstart $cdev"; 14462c0a8e4SMichael Neumann}; 145e348c2adSSascha Wildner 146*47f1bb55SSascha Wildnernotify 100 { 147*47f1bb55SSascha Wildner match "system" "DEVFS"; 148*47f1bb55SSascha Wildner match "subsystem" "CDEV"; 149*47f1bb55SSascha Wildner match "type" "CREATE"; 150*47f1bb55SSascha Wildner match "cdev" "wsp[0-9]+"; 151*47f1bb55SSascha Wildner 152*47f1bb55SSascha Wildner action "/etc/rc.d/moused quietstart $cdev"; 153*47f1bb55SSascha Wildner}; 154e348c2adSSascha Wildner 15562c0a8e4SMichael Neumannnotify 100 { 15662c0a8e4SMichael Neumann match "system" "DEVFS"; 15762c0a8e4SMichael Neumann match "subsystem" "CDEV"; 15862c0a8e4SMichael Neumann match "type" "DESTROY"; 15962c0a8e4SMichael Neumann match "cdev" "ums[0-9]+"; 16062c0a8e4SMichael Neumann 16162c0a8e4SMichael Neumann action "/etc/rc.d/moused quietstop $cdev"; 16262c0a8e4SMichael Neumann}; 163e348c2adSSascha Wildner 164e348c2adSSascha Wildner# Firmware download into the ActiveWire board. After the firmware download is 165e348c2adSSascha Wildner# done, the device detaches and reappears as something new and shiny 166e348c2adSSascha Wildner# automatically. 167e348c2adSSascha Wildnerattach 100 { 168e348c2adSSascha Wildner match "vendor" "0x0854"; 169e348c2adSSascha Wildner match "product" "0x0100"; 170e348c2adSSascha Wildner match "release" "0x0000"; 171e348c2adSSascha Wildner action "/usr/local/bin/ezdownload -f /usr/local/share/usb/firmware/0854.0100.0_01.hex $device-name"; 172e348c2adSSascha Wildner}; 173e348c2adSSascha Wildner 174e348c2adSSascha Wildner# Firmware download for Entrega Serial DB25 adapter. 175e348c2adSSascha Wildnerattach 100 { 176e348c2adSSascha Wildner match "vendor" "0x1645"; 177e348c2adSSascha Wildner match "product" "0x8001"; 178e348c2adSSascha Wildner match "release" "0x0101"; 179e348c2adSSascha Wildner action "if ! kldstat -n usio > /dev/null 2>&1 ; then kldload usio; fi; /usr/sbin/ezdownload -v -f /usr/share/usb/firmware/1645.8001.0101 /dev/$device-name"; 180e348c2adSSascha Wildner}; 181e348c2adSSascha Wildner 182e348c2adSSascha Wildner# This entry starts the ColdSync tool in daemon mode. Make sure you have an up 183e348c2adSSascha Wildner# to date /usr/local/etc/palms. We override the 'listen' settings for port and 184e348c2adSSascha Wildner# type in /usr/local/etc/coldsync.conf. 185e348c2adSSascha Wildnernotify 100 { 186e348c2adSSascha Wildner match "system" "USB"; 187e348c2adSSascha Wildner match "subsystem" "DEVICE"; 188e348c2adSSascha Wildner match "type" "ATTACH"; 189e348c2adSSascha Wildner match "vendor" "0x082d"; 190e348c2adSSascha Wildner match "product" "0x0100"; 191e348c2adSSascha Wildner match "release" "0x0100"; 192e348c2adSSascha Wildner action "/usr/local/bin/coldsync -md -p /dev/$cdev -t usb"; 193e348c2adSSascha Wildner}; 19471fc104fSHasso Tepper 19571fc104fSHasso Tepper# 196e348c2adSSascha Wildner# Rescan SCSI device-names on attach, but not detach. However, it is 19771fc104fSHasso Tepper# disabled by default due to reports of problems. 19871fc104fSHasso Tepper# 199e348c2adSSascha Wildnerattach 0 { 200e348c2adSSascha Wildner device-name "$scsi-controller-regex"; 201e348c2adSSascha Wildner// action "camcontrol rescan all"; 202e348c2adSSascha Wildner}; 203e348c2adSSascha Wildner 20471fc104fSHasso Tepper# Don't even try to second guess what to do about drivers that don't 20571fc104fSHasso Tepper# match here. Instead, pass it off to syslog. Commented out for the 20671fc104fSHasso Tepper# moment, as the pnpinfo variable isn't set in devd yet. Individual 20771fc104fSHasso Tepper# variables within the bus supplied pnpinfo are set. 208e348c2adSSascha Wildnernomatch 0 { 20971fc104fSHasso Tepper# action "logger Unknown device: $pnpinfo $location $bus"; 210e348c2adSSascha Wildner}; 21171fc104fSHasso Tepper 21271fc104fSHasso Tepper# Various logging of unknown devices. 213e348c2adSSascha Wildnernomatch 10 { 214e348c2adSSascha Wildner match "bus" "uhub[0-9]+"; 215e348c2adSSascha Wildner action "logger Unknown USB device: vendor $vendor product $product \ 216e348c2adSSascha Wildner bus $bus"; 217e348c2adSSascha Wildner}; 21871fc104fSHasso Tepper 21971fc104fSHasso Tepper# Some PC-CARDs don't offer numerical manufacturer/product IDs, just 22071fc104fSHasso Tepper# show the CIS info there. 221e348c2adSSascha Wildnernomatch 20 { 222e348c2adSSascha Wildner match "bus" "pccard[0-9]+"; 223e348c2adSSascha Wildner match "manufacturer" "0xffffffff"; 224e348c2adSSascha Wildner match "product" "0xffffffff"; 225e348c2adSSascha Wildner action "logger Unknown PCCARD device: CISproduct $cisproduct \ 226e348c2adSSascha Wildner CIS-vendor $cisvendor bus $bus"; 227e348c2adSSascha Wildner}; 22871fc104fSHasso Tepper 229e348c2adSSascha Wildnernomatch 10 { 230e348c2adSSascha Wildner match "bus" "pccard[0-9]+"; 231e348c2adSSascha Wildner action "logger Unknown PCCARD device: manufacturer $manufacturer \ 232e348c2adSSascha Wildner product $product CISproduct $cisproduct CIS-vendor \ 233e348c2adSSascha Wildner $cisvendor bus $bus"; 234e348c2adSSascha Wildner}; 235e348c2adSSascha Wildner 236e348c2adSSascha Wildnernomatch 10 { 237e348c2adSSascha Wildner match "bus" "cardbus[0-9]+"; 238e348c2adSSascha Wildner action "logger Unknown Cardbus device: device $device class $class \ 239e348c2adSSascha Wildner vendor $vendor bus $bus"; 240e348c2adSSascha Wildner}; 241e348c2adSSascha Wildner 24271fc104fSHasso Tepper# Switch power profiles when the AC line state changes. 243dd9e3d2eSSascha Wildner#notify 10 { 244dd9e3d2eSSascha Wildner# match "system" "ACPI"; 245dd9e3d2eSSascha Wildner# match "subsystem" "ACAD"; 246dd9e3d2eSSascha Wildner# action "/etc/rc.d/power_profile $notify"; 247dd9e3d2eSSascha Wildner#}; 24871fc104fSHasso Tepper 24971fc104fSHasso Tepper# Notify all users before beginning emergency shutdown when we get 25071fc104fSHasso Tepper# a _CRT or _HOT thermal event and we're going to power down the system 25171fc104fSHasso Tepper# very soon. 252e348c2adSSascha Wildnernotify 10 { 253e348c2adSSascha Wildner match "system" "ACPI"; 254e348c2adSSascha Wildner match "subsystem" "Thermal"; 255e348c2adSSascha Wildner match "notify" "0xcc"; 256e348c2adSSascha Wildner action "logger -p kern.emerg 'WARNING: system temperature too high, shutting down soon!'"; 257e348c2adSSascha Wildner}; 25871fc104fSHasso Tepper 25971fc104fSHasso Tepper# User requested suspend, so perform preparation steps and then execute 26071fc104fSHasso Tepper# the actual suspend process. 261e348c2adSSascha Wildnernotify 10 { 262e348c2adSSascha Wildner match "system" "ACPI"; 263e348c2adSSascha Wildner match "subsystem" "Suspend"; 264e348c2adSSascha Wildner action "/etc/rc.suspend acpi $notify"; 265e348c2adSSascha Wildner}; 266e348c2adSSascha Wildnernotify 10 { 267e348c2adSSascha Wildner match "system" "ACPI"; 268e348c2adSSascha Wildner match "subsystem" "Resume"; 269e348c2adSSascha Wildner action "/etc/rc.resume acpi $notify"; 270e348c2adSSascha Wildner}; 27171fc104fSHasso Tepper 272e348c2adSSascha Wildner/* EXAMPLES TO END OF FILE 27371fc104fSHasso Tepper 274e348c2adSSascha Wildner# An example of something that a vendor might install if you were to 275e348c2adSSascha Wildner# add their device. This might reside in /usr/local/etc/devd/deqna.conf. 276e348c2adSSascha Wildner# A deqna is, in this hypothetical example, a pccard ethernet-like device. 277e348c2adSSascha Wildner# Students of history may know other devices by this name, and will get 278e348c2adSSascha Wildner# the in-jokes in this entry. 279e348c2adSSascha Wildnernomatch 10 { 280e348c2adSSascha Wildner match "bus" "pccard[0-9]+"; 281e348c2adSSascha Wildner match "manufacturer" "0x1234"; 282e348c2adSSascha Wildner match "product" "0x2323"; 283e348c2adSSascha Wildner action "kldload if_deqna"; 284e348c2adSSascha Wildner}; 285e348c2adSSascha Wildnerattach 10 { 286e348c2adSSascha Wildner device-name "deqna[0-9]+"; 287e348c2adSSascha Wildner action "/etc/pccard_ether $device-name start"; 288e348c2adSSascha Wildner}; 289e348c2adSSascha Wildnerdetach 10 { 290e348c2adSSascha Wildner device-name "deqna[0-9]+"; 291e348c2adSSascha Wildner action "/etc/pccard_ether $device-name stop"; 292e348c2adSSascha Wildner}; 29371fc104fSHasso Tepper 29471fc104fSHasso Tepper# Examples of notify hooks. A notify is a generic way for a kernel 29571fc104fSHasso Tepper# subsystem to send event notification to userland. 296e348c2adSSascha Wildner 29771fc104fSHasso Tepper# Here are some examples of ACPI notify handlers. ACPI subsystems that 29871fc104fSHasso Tepper# generate notifies include the AC adapter, power/sleep buttons, 29971fc104fSHasso Tepper# control method batteries, lid switch, and thermal zones. 30071fc104fSHasso Tepper# 30171fc104fSHasso Tepper# Information returned is not always the same as the ACPI notify 30271fc104fSHasso Tepper# events. See the ACPI specification for more information about 30371fc104fSHasso Tepper# notifies. Here is the information returned for each subsystem: 30471fc104fSHasso Tepper# 30571fc104fSHasso Tepper# ACAD: AC line state (0 is offline, 1 is online) 30671fc104fSHasso Tepper# Button: Button pressed (0 for power, 1 for sleep) 30771fc104fSHasso Tepper# CMBAT: ACPI battery events 30871fc104fSHasso Tepper# Lid: Lid state (0 is closed, 1 is open) 309e348c2adSSascha Wildner# RCTL: Resource limits 31071fc104fSHasso Tepper# Suspend, Resume: Suspend and resume notification 31171fc104fSHasso Tepper# Thermal: ACPI thermal zone events 31271fc104fSHasso Tepper# 31371fc104fSHasso Tepper# This example calls a script when the AC state changes, passing the 31471fc104fSHasso Tepper# notify value as the first argument. If the state is 0x00, it might 31571fc104fSHasso Tepper# call some sysctls to implement economy mode. If 0x01, it might set 31671fc104fSHasso Tepper# the mode to performance. 317e348c2adSSascha Wildnernotify 10 { 318e348c2adSSascha Wildner match "system" "ACPI"; 319e348c2adSSascha Wildner match "subsystem" "ACAD"; 320e348c2adSSascha Wildner action "/etc/acpi_ac $notify"; 321e348c2adSSascha Wildner}; 322e348c2adSSascha Wildner 323e348c2adSSascha Wildner# This example works around a memory leak in PostgreSQL, restarting 324e348c2adSSascha Wildner# it when the "user:pgsql:swap:devctl=1G" rctl(8) rule gets triggered. 325e348c2adSSascha Wildnernotify 0 { 326e348c2adSSascha Wildner match "system" "RCTL"; 327e348c2adSSascha Wildner match "rule" "user:70:swap:.*"; 328e348c2adSSascha Wildner action "/usr/local/etc/rc.d/postgresql restart"; 329e348c2adSSascha Wildner}; 330e348c2adSSascha Wildner 331e348c2adSSascha Wildner*/ 332