xref: /dflybsd-src/share/man/man9/EVENTHANDLER.9 (revision acc24b690ed6d89cb2611bb8ee46800d01acaa84)
1e778f5eeSSascha Wildner.\"
2e778f5eeSSascha Wildner.\" Copyright (c) 2004 Joseph Koshy
3e778f5eeSSascha Wildner.\" All rights reserved.
4e778f5eeSSascha Wildner.\"
5e778f5eeSSascha Wildner.\" Redistribution and use in source and binary forms, with or without
6e778f5eeSSascha Wildner.\" modification, are permitted provided that the following conditions
7e778f5eeSSascha Wildner.\" are met:
8e778f5eeSSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
9e778f5eeSSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
10e778f5eeSSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
11e778f5eeSSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
12e778f5eeSSascha Wildner.\"    documentation and/or other materials provided with the distribution.
13e778f5eeSSascha Wildner.\"
14e778f5eeSSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15e778f5eeSSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16e778f5eeSSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17e778f5eeSSascha Wildner.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18e778f5eeSSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19e778f5eeSSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20e778f5eeSSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21e778f5eeSSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22e778f5eeSSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23e778f5eeSSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24e778f5eeSSascha Wildner.\" SUCH DAMAGE.
25e778f5eeSSascha Wildner.\"
26e778f5eeSSascha Wildner.\" $FreeBSD: src/share/man/man9/EVENTHANDLER.9,v 1.4 2005/10/11 16:05:35 keramida Exp $
27e778f5eeSSascha Wildner.\"
28fcddd1b6SAaron LI.Dd June 25, 2018
29e778f5eeSSascha Wildner.Dt EVENTHANDLER 9
30e778f5eeSSascha Wildner.Os
31e778f5eeSSascha Wildner.Sh NAME
32e778f5eeSSascha Wildner.Nm EVENTHANDLER_DECLARE ,
33e778f5eeSSascha Wildner.Nm EVENTHANDLER_INVOKE ,
34e778f5eeSSascha Wildner.Nm EVENTHANDLER_REGISTER ,
35e778f5eeSSascha Wildner.Nm EVENTHANDLER_DEREGISTER ,
36e778f5eeSSascha Wildner.Nm eventhandler_register ,
37e778f5eeSSascha Wildner.Nm eventhandler_deregister ,
38e778f5eeSSascha Wildner.Nm eventhandler_find_list
39e778f5eeSSascha Wildner.Nd kernel event handling functions
40e778f5eeSSascha Wildner.Sh SYNOPSIS
41e778f5eeSSascha Wildner.In sys/eventhandler.h
42e778f5eeSSascha Wildner.Fn EVENTHANDLER_DECLARE name type
43e778f5eeSSascha Wildner.Fn EVENTHANDLER_INVOKE name ...
44e778f5eeSSascha Wildner.Ft eventhandler_tag
45e778f5eeSSascha Wildner.Fn EVENTHANDLER_REGISTER name func arg priority
46e778f5eeSSascha Wildner.Fn EVENTHANDLER_DEREGISTER name tag
47e778f5eeSSascha Wildner.Ft eventhandler_tag
48e778f5eeSSascha Wildner.Fo eventhandler_register
49e778f5eeSSascha Wildner.Fa "struct eventhandler_list *list"
50e778f5eeSSascha Wildner.Fa "const char *name"
51e778f5eeSSascha Wildner.Fa "void *func"
52e778f5eeSSascha Wildner.Fa "void *arg"
53e778f5eeSSascha Wildner.Fa "int priority"
54e778f5eeSSascha Wildner.Fc
55e778f5eeSSascha Wildner.Ft void
56e778f5eeSSascha Wildner.Fo eventhandler_deregister
57e778f5eeSSascha Wildner.Fa "struct eventhandler_list *list"
58e778f5eeSSascha Wildner.Fa "eventhandler_tag tag"
59e778f5eeSSascha Wildner.Fc
60e778f5eeSSascha Wildner.Ft "struct eventhandler_list *"
61e778f5eeSSascha Wildner.Fn eventhandler_find_list "const char *name"
62e778f5eeSSascha Wildner.Sh DESCRIPTION
63e778f5eeSSascha WildnerThe
64e778f5eeSSascha Wildner.Nm
65e778f5eeSSascha Wildnermechanism provides a way for kernel subsystems to register interest in
66e778f5eeSSascha Wildnerkernel events and have their callback functions invoked when these
67e778f5eeSSascha Wildnerevents occur.
68e778f5eeSSascha Wildner.Pp
69e778f5eeSSascha WildnerThe normal way to use this subsystem is via the macro interface.
70e778f5eeSSascha WildnerThe macros that can be used for working with event handlers and callback
71e778f5eeSSascha Wildnerfunction lists are:
72e778f5eeSSascha Wildner.Bl -tag -width indent
73e778f5eeSSascha Wildner.It Fn EVENTHANDLER_DECLARE
74e778f5eeSSascha WildnerThis macro declares an event handler named by argument
75e778f5eeSSascha Wildner.Fa name
76e778f5eeSSascha Wildnerwith callback functions of type
77e778f5eeSSascha Wildner.Fa type .
78e778f5eeSSascha Wildner.It Fn EVENTHANDLER_REGISTER
79e778f5eeSSascha WildnerThis macro registers a callback function
80e778f5eeSSascha Wildner.Fa func
81e778f5eeSSascha Wildnerwith event handler
82e778f5eeSSascha Wildner.Fa name .
83e778f5eeSSascha WildnerWhen invoked, function
84e778f5eeSSascha Wildner.Fa func
85e778f5eeSSascha Wildnerwill be invoked with argument
86e778f5eeSSascha Wildner.Fa arg
87e778f5eeSSascha Wildneras its first parameter along with any additional parameters passed in
88e778f5eeSSascha Wildnervia macro
89e778f5eeSSascha Wildner.Fn EVENTHANDLER_INVOKE
90e778f5eeSSascha Wildner(see below).
91e778f5eeSSascha WildnerCallback functions are invoked in order of priority.
92e778f5eeSSascha WildnerThe relative priority of each callback among other callbacks
93e778f5eeSSascha Wildnerassociated with an event is given by argument
94e778f5eeSSascha Wildner.Fa priority ,
95e778f5eeSSascha Wildnerwhich is an integer ranging from
96e778f5eeSSascha Wildner.Dv EVENTHANDLER_PRI_FIRST
97e778f5eeSSascha Wildner(highest priority), to
98e778f5eeSSascha Wildner.Dv EVENTHANDLER_PRI_LAST
99e778f5eeSSascha Wildner(lowest priority).
100e778f5eeSSascha WildnerThe symbol
101e778f5eeSSascha Wildner.Dv EVENTHANDLER_PRI_ANY
102e778f5eeSSascha Wildnermay be used if the handler does not have a specific priority
103e778f5eeSSascha Wildnerassociated with it.
104e778f5eeSSascha WildnerIf registration is successful,
105e778f5eeSSascha Wildner.Fn EVENTHANDLER_REGISTER
106e778f5eeSSascha Wildnerreturns a cookie of type
107e778f5eeSSascha Wildner.Vt eventhandler_tag .
108e778f5eeSSascha Wildner.It Fn EVENTHANDLER_DEREGISTER
109e778f5eeSSascha WildnerThis macro removes a previously registered callback associated with tag
110e778f5eeSSascha Wildner.Fa tag
111e778f5eeSSascha Wildnerfrom the event handler named by argument
112e778f5eeSSascha Wildner.Fa name .
113e778f5eeSSascha Wildner.It Fn EVENTHANDLER_INVOKE
114e778f5eeSSascha WildnerThis macro is used to invoke all the callbacks associated with event
115e778f5eeSSascha Wildnerhandler
116e778f5eeSSascha Wildner.Fa name .
117e778f5eeSSascha WildnerThis macro is a variadic one.
118e778f5eeSSascha WildnerAdditional arguments to the macro after the
119e778f5eeSSascha Wildner.Fa name
120e778f5eeSSascha Wildnerparameter are passed as the second and subsequent arguments to each
121e778f5eeSSascha Wildnerregistered callback function.
122e778f5eeSSascha Wildner.El
123e778f5eeSSascha Wildner.Pp
124e778f5eeSSascha WildnerThe macros are implemented using the following functions:
125e778f5eeSSascha Wildner.Bl -tag -width indent
126e778f5eeSSascha Wildner.It Fn eventhandler_register
127e778f5eeSSascha WildnerThe
128e778f5eeSSascha Wildner.Fn eventhandler_register
129e778f5eeSSascha Wildnerfunction is used to register a callback with a given event.
130e778f5eeSSascha WildnerThe arguments expected by this function are:
131e778f5eeSSascha Wildner.Bl -tag -width ".Fa priority"
132e778f5eeSSascha Wildner.It Fa list
133e778f5eeSSascha WildnerA pointer to an existing event handler list, or
134e778f5eeSSascha Wildner.Dv NULL .
135e778f5eeSSascha WildnerIf
136e778f5eeSSascha Wildner.Fa list
137e778f5eeSSascha Wildneris
138e778f5eeSSascha Wildner.Dv NULL ,
139e778f5eeSSascha Wildnerthe event handler list corresponding to argument
140e778f5eeSSascha Wildner.Fa name
141e778f5eeSSascha Wildneris used.
142e778f5eeSSascha Wildner.It Fa name
143e778f5eeSSascha WildnerThe name of the event handler list.
144e778f5eeSSascha Wildner.It Fa func
145e778f5eeSSascha WildnerA pointer to a callback function.
146e778f5eeSSascha WildnerArgument
147e778f5eeSSascha Wildner.Fa arg
148e778f5eeSSascha Wildneris passed to the callback function
149e778f5eeSSascha Wildner.Fa func
150e778f5eeSSascha Wildneras its first argument when it is invoked.
151e778f5eeSSascha Wildner.It Fa priority
152e778f5eeSSascha WildnerThe relative priority of this callback among all the callbacks
153e778f5eeSSascha Wildnerregistered for this event.
154e778f5eeSSascha WildnerValid values are those in the range
155e778f5eeSSascha Wildner.Dv EVENTHANDLER_PRI_FIRST
156e778f5eeSSascha Wildnerto
157e778f5eeSSascha Wildner.Dv EVENTHANDLER_PRI_LAST .
158e778f5eeSSascha Wildner.El
159e778f5eeSSascha Wildner.Pp
160e778f5eeSSascha WildnerThe
161e778f5eeSSascha Wildner.Fn eventhandler_register
162e778f5eeSSascha Wildnerfunction returns a
163e778f5eeSSascha Wildner.Fa tag
164e778f5eeSSascha Wildnerthat can later be used with
165e778f5eeSSascha Wildner.Fn eventhandler_deregister
166e778f5eeSSascha Wildnerto remove the particular callback function.
167e778f5eeSSascha Wildner.It Fn eventhandler_deregister
168e778f5eeSSascha WildnerThe
169e778f5eeSSascha Wildner.Fn eventhandler_deregister
170e778f5eeSSascha Wildnerfunction removes the callback associated with tag
171e778f5eeSSascha Wildner.Fa tag
172e778f5eeSSascha Wildnerfrom the event handler list pointed to by
173e778f5eeSSascha Wildner.Fa list .
174e778f5eeSSascha WildnerThis function is safe to call from inside an event handler
175e778f5eeSSascha Wildnercallback.
176e778f5eeSSascha Wildner.It Fn eventhandler_find_list
177e778f5eeSSascha WildnerThe
178e778f5eeSSascha Wildner.Fn eventhandler_find_list
179e778f5eeSSascha Wildnerfunction returns a pointer to event handler list structure corresponding
180e778f5eeSSascha Wildnerto event
181e778f5eeSSascha Wildner.Fa name .
182e778f5eeSSascha Wildner.El
183e778f5eeSSascha Wildner.Ss Kernel Event Handlers
184e778f5eeSSascha WildnerThe following event handlers are present in the kernel:
185e778f5eeSSascha Wildner.Bl -tag -width indent
186e778f5eeSSascha Wildner.It Vt acpi_sleep_event
187e778f5eeSSascha WildnerCallbacks invoked when the system is being sent to sleep.
188e778f5eeSSascha Wildner.It Vt acpi_wakeup_event
189e778f5eeSSascha WildnerCallbacks invoked when the system is being woken up.
190e826117eSAaron LI.It Vt bpf_track
191e826117eSAaron LICallbacks invoked when a BPF listener attaches to/detaches from network
192e826117eSAaron LIinterface.
193233c8570SAaron LI.It Vt group_attach_event
194233c8570SAaron LICallbacks invoked when a new interface group has been created.
195233c8570SAaron LI.It Vt group_change_event
196233c8570SAaron LICallbacks invoked when the members of an interface group have changed.
197233c8570SAaron LI.It Vt group_detach_event
198233c8570SAaron LICallbacks invoked when an interface group has been removed due to no members.
1990de0168fSAaron LI.It Vt if_clone_event
2000de0168fSAaron LICallbacks invoked when a new interface cloner is attached.
201e778f5eeSSascha Wildner.It Vt ifaddr_event
202e778f5eeSSascha WildnerCallbacks invoked when an address is set up on a network interface.
203*acc24b69SAaron LI.It Vt iflladdr_event
204*acc24b69SAaron LICallbacks invoked when an if link layer address event has happened.
205e778f5eeSSascha Wildner.It Vt ifnet_attach_event
206e778f5eeSSascha WildnerCallbacks invoked when a new network interface appears.
207e778f5eeSSascha Wildner.It Vt ifnet_detach_event
208e778f5eeSSascha WildnerCallbacks invoked when a network interface is removed.
209fcddd1b6SAaron LI.It Vt ifnet_event
210fcddd1b6SAaron LICallbacks invoked when a network interface is brought up or down.
211bc1a39e2SAaron LI.It Vt ifnet_link_event
212bc1a39e2SAaron LICallbacks invoked when the link state of an interface has changed.
213*acc24b69SAaron LI.It Vt mountroot
214*acc24b69SAaron LICallbacks invoked when root has been mounted.
215e778f5eeSSascha Wildner.It Vt power_profile_change
216e778f5eeSSascha WildnerCallbacks invoked when the power profile of the system changes.
217e778f5eeSSascha Wildner.It Vt shutdown_pre_sync
218e778f5eeSSascha WildnerCallbacks invoked at shutdown time, before file systems are synchronized.
219e778f5eeSSascha Wildner.It Vt shutdown_post_sync
220e778f5eeSSascha WildnerCallbacks invoked at shutdown time, after all file systems are synchronized.
221e778f5eeSSascha Wildner.It Vt shutdown_final
222e778f5eeSSascha WildnerCallbacks invoked just before halting the system.
223*acc24b69SAaron LI.It Vt usb_dev_configured
224*acc24b69SAaron LICallbacks invoked when a USB device is configured.
225e778f5eeSSascha Wildner.El
226e778f5eeSSascha Wildner.Sh RETURN VALUES
227e778f5eeSSascha WildnerThe macro
228e778f5eeSSascha Wildner.Fn EVENTHANDLER_REGISTER
229e778f5eeSSascha Wildnerand function
230e778f5eeSSascha Wildner.Fn eventhandler_register
231e778f5eeSSascha Wildnerreturn a cookie of type
232e778f5eeSSascha Wildner.Vt eventhandler_tag ,
233e778f5eeSSascha Wildnerwhich may be used in a subsequent call to
234e778f5eeSSascha Wildner.Fn EVENTHANDLER_DEREGISTER
235e778f5eeSSascha Wildneror
236e778f5eeSSascha Wildner.Fn eventhandler_deregister .
237e778f5eeSSascha Wildner.Pp
238e778f5eeSSascha WildnerThe
239e778f5eeSSascha Wildner.Fn eventhandler_find_list
240e778f5eeSSascha Wildnerfunction
241e778f5eeSSascha Wildnerreturns a pointer to an event handler list corresponding to parameter
242e778f5eeSSascha Wildner.Fa name ,
243e778f5eeSSascha Wildneror
244e778f5eeSSascha Wildner.Dv NULL
245e778f5eeSSascha Wildnerif no such list was found.
246e778f5eeSSascha Wildner.Sh HISTORY
247e778f5eeSSascha WildnerThe
248e778f5eeSSascha Wildner.Nm
249e778f5eeSSascha Wildnerfacility first appeared in
250e778f5eeSSascha Wildner.Fx 4.0 .
251e778f5eeSSascha Wildner.Sh AUTHORS
252e778f5eeSSascha WildnerThis manual page was written by
253c616d378SFranco Fichtner.An Joseph Koshy Aq Mt jkoshy@FreeBSD.org .
254