KFILTER_REGISTER(9) | Kernel Developer's Manual | KFILTER_REGISTER(9)

# NAME

`kfilter_register`, `kfilter_unregister` —
add or remove kernel event filters

# SYNOPSIS

`#include <sys/event.h>`

int
`kfilter_register`(const char *name, struct filterops *filtops, int *retfilter);

int
`kfilter_unregister`(const char *name);

# DESCRIPTION

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 */
    };

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.

# RETURN VALUES

`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.

# SEE ALSO

kqueue(2), free(9), knote(9), malloc(9)

# HISTORY

The `kfilter_register`() and `kfilter_unregister`() functions first appeared in NetBSD 2.0.

# AUTHORS

The `kfilter_register`() and `kfilter_unregister`() functions were implemented by Luke Mewburn ⟨lukem@NetBSD.org⟩.

October 23, 2002 | NetBSD 9.0