| KFILTER_REGISTER(9) | Kernel Developer's Manual | KFILTER_REGISTER(9) |
kfilter_register,
kfilter_unregister — add or
remove kernel event filters
#include
<sys/event.h>
int
kfilter_register(const
char *name, struct
filterops *filtops, int
*retfilter);
int
kfilter_unregister(const
char *name);
The
kfilter_register()
function adds a new kernel event filter (kfilter) to the system, for use by
callers of kqueue(2) and
kevent(2).
name is the name of the new filter (which must not
already exist), and filtops is a pointer to a
filterops structure which describes the filter
operations. Both name and
filtops will be copied to an internal data structure,
and a new filter number will be allocated. If
retfilter is not NULL, then
the new filter number will be returned in the address pointed at by
retfilter.
The
kfilter_unregister()
function removes a kfilter named name that was
previously registered with kfilter_register(). If a
filter with the same name is later reregistered with
kfilter_register(), it will get a different filter
number (i.e., filter numbers are not recycled). It is not possible to
unregister the system filters (i.e., those that start with
“EVFILT_” and are documented in
kqueue(2)).
The filterops structure is defined as follows:
struct filterops {
int f_isfd; /* true if ident == filedescriptor */
int (*f_attach)(struct knote *kn);
/* called when knote is ADDed */
void (*f_detach)(struct knote *kn);
/* called when knote is DELETEd */
int (*f_event)(struct knote *kn, long hint);
/* called when event is triggered */
void (*f_touch)(struct knote *kn, struct kevent *kev, long hint);
/* called during registration and event
* processing to provide custom handling
* of event fflags and data
*/
};
If the filter operation is for a file descriptor, f_isfd should be non-zero, otherwise it should be zero. This controls where the kqueue(2) system stores the knotes for an object.
kfilter_register() returns 0 on success,
EINVAL if there's an invalid argument, or
EEXIST if the filter already exists,
kfilter_unregister() returns 0 on success,
EINVAL if there's an invalid argument, or
ENOENT if the filter doesn't exist.
The kfilter_register() and
kfilter_unregister() functions first appeared in
NetBSD 2.0.
The kfilter_register() and
kfilter_unregister() functions were implemented by
Luke Mewburn ⟨lukem@NetBSD.org⟩.
| October 31, 2020 | NetBSD 11.0 |