ACCEPT_FILTER(9) | Kernel Developer's Manual | ACCEPT_FILTER(9) |
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/sysctl.h>
#include <sys/signalvar.h>
#include <sys/socketvar.h>
#include <netinet/accept_filter.h>
int
accept_filt_add(struct accept_filter *filt);
int
accept_filt_del(char *name);
int
accept_filt_generic_mod_event(module_t mod, int event, void *data);
struct accept_filter *
accept_filt_get(char *name);
struct accept_filter { char accf_name[16]; void (*accf_callback)(struct socket *so, void *arg, int waitflag); void * (*accf_create)(struct socket *so, char *arg); void (*accf_destroy)(struct socket *so); SLIST_ENTRY(accept_filter) accf_next; /* next on the list */ };
The module should register it with the function accept_filt_add(), passing a pointer to a struct accept_filter, allocated with malloc(9).
The accept filters currently provided with NetBSD (accf_data(9) and accf_http(9)) are implemented as pseudo-devices, but an accept filter may use any supported means of initializing and registering itself at system startup or later, including the module framework if supported by the running kernel.
The fields of struct accept_filter are as follows:
The accept_filt_del() function passed the same string used in accept_filter.accf_name during registration with accept_filt_add(), the kernel will then disallow and further userland use of the filter.
The accept_filt_get() function is used internally to locate which accept filter to use via the setsockopt(2) system call.
The accept_filt_generic_mod_event() function can be used by accept filters which are loadable kernel modules to add and delete themselves.
The accept filter concept was pioneered by
at Yahoo! and refined to be a loadable module system by .November 12, 2008 | NetBSD 6.1 |