October 23, 2002 KFILTER_REGISTER 9

### NAME

kfilter_register, kfilter_unregister - add or remove kernel event filters

### SYNOPSIS

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

### AUTHORS

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