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