| KFILTER_REGISTER(9) | Kernel Developer's Manual | KFILTER_REGISTER(9) | 
kfilter_register,
  kfilter_unregister —
#include <sys/event.h>
int
  
  kfilter_register(const
    char *name, struct
    filterops *filtops, int
    *retfilter);
int
  
  kfilter_unregister(const
    char *name);
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.
kfilter_register() and
  kfilter_unregister() functions first appeared in
  NetBSD 2.0.
kfilter_register() and
  kfilter_unregister() functions were implemented by
  Luke Mewburn ⟨lukem@NetBSD.org⟩.
| October 31, 2020 | NetBSD 10.0 |