summaryrefslogtreecommitdiffstats
path: root/etc/devd.conf
blob: 6968a8b8daeb9eb4717a53131f095ef7e737162b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# $FreeBSD$
#
# Refer to devd.conf(5) and devd(8) man pages for the details on how to
# run and configure devd.
#

# NB: All regular expressions have an implicit ^$ around them.
# NB: device-name is shorthand for 'match device-name'

options {
	# Each directory directive adds a directory the list of directories
	# that we scan for files.  Files are read-in in the order that they
	# are returned from readdir(3).  The rule-sets are combined to
	# create a DFA that's used to match events to actions.
	directory "/etc/devd";
	directory "/usr/local/etc/devd";
	pid-file "/var/run/devd.pid";

	# Setup some shorthand for regex that we use later in the file.
	set ethernet-nic-regex
		"(an|ar|ath|aue|awi|axe|bfe|bge|cdce|cm|cnw|cs|cue|dc|de|ed|el|em|\
		ep|ex|fe|fxp|gem|hme|ie|kue|lge|lnc|my|nge|pcn|ray|re|rl|rue|\
		sf|sis|sk|sn|snc|ste|ti|tl|tx|txp|udav|vge|vr|vx|wb|wi|xe|xl)\
		[0-9]+";
	set scsi-controller-regex
		"(aac|adv|adw|aha|ahb|ahc|ahd|aic|amd|amr|asr|bt|ciss|ct|dpt|\
		esp|ida|iir|ips|isp|mlx|mly|mpt|ncr|ncv|nsp|stg|sym|trm|wds)\
		[0-9]+";
};

# Note that the attach/detach with the highest value wins, so that one can
# override these general rules.

#
# For ethernet like devices start configuring the interface.  Due to
# a historical accident, this script is called pccard_ether.
#
attach 0 {
	device-name "$ethernet-nic-regex";
	action "/etc/pccard_ether $device-name start";
};

detach 0 {
	device-name "$ethernet-nic-regex";
	action "/etc/pccard_ether $device-name stop";
};

#
# Try to start dhclient on Ethernet like interfaces when the link comes
# up.  Only devices that are configured to support DHCP will actually
# run it.  No link down rule exists because dhclient automaticly exits
# when the link goes down.
#
notify 0 {
	match "system"		"IFNET";
	match "subsystem"	"$ethernet-nic-regex";
	match "type"		"LINK_UP";
	action "/etc/rc.d/dhclient start $subsystem";
};

# An entry like this might be in a different file, but is included here
# as an example of how to override things.  Normally 'ed50' would match
# the above attach/detach stuff, but the value of 100 makes it
# hard wired to 1.2.3.4.
attach 100 {
	device-name "ed50";
	action "ifconfig $device-name inet 1.2.3.4 netmask 0xffff0000";
};
detach 100 {
	device-name "ed50";
};

# When a USB keyboard arrives, attach it as the console keyboard.
attach 100 {
	device-name "ukbd0";
	action "kbdcontrol -k /dev/ukbd0 < /dev/console && /etc/rc.d/syscons restart";
};
detach 100 {
	device-name "ukbd0";
	action "kbdcontrol -k /dev/kbd0 < /dev/console";
};

# The entry below starts moused when a mouse is plugged in. Moused
# stops automatically (actually it bombs :) when the device disappears.
attach 100 {
	device-name "ums[0-9]+";
	action "/etc/rc.d/moused start $device-name";
};

#
# Rescan scsi device-names on attach, but not detach.
#
attach 0 {
	device-name "$scsi-controller-regex";
//	action "camcontrol rescan all";
};

# Don't even try to second guess what to do about drivers that don't
# match here.  Instead, pass it off to syslog.  Commented out for the
# moment, as pnpinfo isn't set in devd yet.
nomatch 0 {
#	action "logger Unknown device: $pnpinfo $location $bus";
};

# Switch power profiles when the AC line state changes.
notify 10 {
	match "system"		"ACPI";
	match "subsystem"	"ACAD";
	action "/etc/rc.d/power_profile $notify";
};

# Notify all users before beginning emergency shutdown when we get
# a _CRT or _HOT thermal event and we're going to power down the system
# very soon.
notify 10 {
	match "system"		"ACPI";
	match "subsystem"	"Thermal";
	match "notify"		"0xcc";
	action "logger -p kern.emerg 'WARNING: system temperature too high, shutting down soon!'";
};

/* EXAMPLES TO END OF FILE

# The following might be an example of something that a vendor might
# install if you were to add their device.  This might reside in
# /usr/local/etc/devd/deqna.conf.  A deqna is, in this hypothetical
# example, a pccard ethernet-like device.  Students of history may
# know other devices by this name, and will get the in-jokes in this
# entry.
nomatch 10 {
	match "bus" "pccard[0-9]+";
	match "manufacturer" "0x1234";
	match "product" "0x2323";
	action "kldload if_deqna";
};
attach 10 {
	device-name "deqna[0-9]+";
	action "/etc/pccard_ether $device-name start";
};
detach 10 {
	device-name "deqna[0-9]+";
	action "/etc/pccard_ether $device-name stop";
};

# Examples of notify hooks.  A notify is a generic way for a kernel
# subsystem to send event notification to userland.
#
# Here are some examples of ACPI notify handlers.  ACPI subsystems that
# generate notifies include the AC adapter, power/sleep buttons,
# control method batteries, lid switch, and thermal zones.
#
# Information returned is not always the same as the ACPI notify
# events.  See the ACPI specification for more information about
# notifies.  Here is the information returned for each subsystem:
#
# ACAD:		AC line state (0 is offline, 1 is online)
# Button:	Button pressed (0 for power, 1 for sleep)
# CMBAT:	ACPI battery events
# Lid:		Lid state (0 is closed, 1 is open)
# Thermal:	ACPI thermal zone events
#
# This example calls a script when the AC state changes, passing the
# notify value as the first argument.  If the state is 0x00, it might
# call some sysctls to implement economy mode.  If 0x01, it might set
# the mode to performance.
notify 10 {
	match "system"		"ACPI";
	match "subsystem"	"ACAD";
	action			"/etc/acpi_ac $notify";
};
*/
OpenPOWER on IntegriCloud