eventhandler(9)
NAME
EVENTHANDLER - kernel event handling functions
SYNOPSIS
#include <sys/eventhandler.h> EVENTHANDLER_DECLARE(name, type); EVENTHANDLER_INVOKE(name, ...); eventhandler_tag EVENTHANDLER_REGISTER(name, func, arg, priority); EVENTHANDLER_DEREGISTER(name, tag); eventhandler_tag eventhandler_register(struct eventhandler_list *list, const char *name, void *func, void *arg, int priority); void eventhandler_deregister(struct eventhandler_list *list, eventhandler_tag tag); struct eventhandler_list * eventhandler_find_list(const char *name); void eventhandler_prune_list(struct eventhandler_list *list);
DESCRIPTION
- The EVENTHANDLER mechanism provides a way for kernel subsys
- tems to register interest in kernel events and have their callback func
- tions invoked
when these events occur. - The normal way to use this subsystem is via the macro inter
- face. The
macros that can be used for working with event handlers and - callback
function lists are: - EVENTHANDLER_DECLARE()
- This macro declares an event handler named by argu
- ment name with
callback functions of type type. - EVENTHANDLER_REGISTER()
- This macro registers a callback function func with
- event handler
name. When invoked, function func will be invoked - with argument
arg as its first parameter along with any additional - parameters
passed in via macro EVENTHANDLER_INVOKE() (see be - low). Callback
functions are invoked in order of priority. The - relative priority of each callback among other callbacks associat
- ed with an
event is given by argument priority, which is an in - teger ranging
from EVENTHANDLER_PRI_FIRST (highest priority), to
EVENTHANDLER_PRI_LAST (lowest priority). The symbol
EVENTHANDLER_PRI_ANY may be used if the handler does - not have a
specific priority associated with it. If registra - tion is successful, EVENTHANDLER_REGISTER() returns a cookie of
- type
eventhandler_tag. - EVENTHANDLER_DEREGISTER()
- This macro removes a previously registered callback
- associated
with tag tag from the event handler named by argu - ment name.
- EVENTHANDLER_INVOKE()
- This macro is used to invoke all the callbacks asso
- ciated with
event handler name. This macro is a variadic one. - Additional
arguments to the macro after the name parameter are - passed as the
second and subsequent arguments to each registered - callback function.
- The macros are implemented using the following functions:
- eventhandler_register()
- The eventhandler_register() function is used to reg
- ister a callback with a given event. The arguments expected by
- this function
are: - list A pointer to an existing event handler
- list, or
NULL. If list is NULL, the event handler list corresponding to argument name is used.
- name The name of the event handler list.
- func A pointer to a callback function. Ar
- gument arg is
- a passed to the callback function func
- as its first
argument when it is invoked. - priority The relative priority of this callback
- among all
- the callbacks registered for this
- event. Valid
values are those in the range
EVENTHANDLER_PRI_FIRST to EVEN - THANDLER_PRI_LAST.
- The eventhandler_register() function returns a tag
- that can later
be used with eventhandler_deregister() to remove the - particular
callback function. - eventhandler_deregister()
- The eventhandler_deregister() function removes the
- callback associated with tag tag from the event handler list
- pointed to by
list. This function is safe to call from inside an - event handler
callback. - eventhandler_find_list()
- The eventhandler_find_list() function returns a
- pointer to event
handler list structure corresponding to event name. - eventhandler_prune_list()
- The eventhandler_prune_list() function removes all
- deregistered
callbacks from the event list list. - Kernel Event Handlers
- The following event handlers are present in the kernel:
- acpi_sleep_event
Callbacks invoked when the system is being sent tosleep.
- acpi_wakeup_event
- Callbacks invoked when the system is being woken up.
- dev_clone
- Callbacks invoked when a new entry is created under
- /dev.
- ifaddr_event
- Callbacks invoked when an address is set up on a
- network interface.
- if_clone_event
- Callbacks invoked when an interface is cloned.
- ifnet_arrival_event
- Callbacks invoked when a new network interface ap
- pears.
- ifnet_departure_event
- Callbacks invoked when a network interface is taken
- down.
- power_profile_change
- Callbacks invoked when the power profile of the sys
- tem changes.
- process_exec
- Callbacks invoked when a process performs an exec()
- operation.
- process_exit
- Callbacks invoked when a process exits.
- process_fork
- Callbacks invoked when a process forks a child.
- shutdown_pre_sync
- Callbacks invoked at shutdown time, before file sys
- tems are synchronized.
- shutdown_post_sync
- Callbacks invoked at shutdown time, after all file
- systems are
synchronized. - shutdown_final
- Callbacks invoked just before halting the system.
- vm_lowmem
- Callbacks invoked when virtual memory is low.
- watchdog_list
- Callbacks invoked when the system watchdog timer is
- reinitialized.
RETURN VALUES
- The macro EVENTHANDLER_REGISTER() and function
- eventhandler_register()
return a cookie of type eventhandler_tag, which may be used - in a subsequent call to EVENTHANDLER_DEREGISTER() or
- eventhandler_deregister().
- The eventhandler_find_list() function returns a pointer to
- an event handler list corresponding to parameter name, or NULL if no
- such list was
found.
HISTORY
The EVENTHANDLER facility first appeared in FreeBSD 4.0.
AUTHORS
- This manual page was written by Joseph Koshy <jkoshy@FreeB
- SD.org>.
- BSD January 7, 2005