accept_filter(9)
NAME
- accept_filter, accept_filt_add, accept_filt_del, accept_filt_generic_mod_event, accept_filt_get - filter in
- coming connections
SYNOPSIS
#include <sys/types.h> #include <sys/module.h> #include <sys/socket.h> #define ACCEPT_FILTER_MOD #include <sys/socketvar.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);
DESCRIPTION
- Accept filters allow an application to request that the ker
- nel pre-process incoming connections. An accept filter is requested
- via the
setsockopt(2) system call, passing in an optname of SO_AC - CEPTFILTER.
IMPLEMENTATION NOTES
- A module that wants to be an accept filter must provide a
- struct
accept_filter to the system: - 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 mal
- loc(9).
- The fields of struct accept_filter are as follows:
- accf_name Name of the filter; this is how it will
- be accessed
- from userland.
- accf_callback The callback that the kernel will do once
- the connec
- tion is established. It is the same as a
- socket
upcall and will be called when the con - nection is
established and whenever new data arrives - on the
socket, unless the callback modifies the - socket's
flags. - accf_create Called whenever a setsockopt(2) installs
- the filter
- onto a listening socket.
- accf_destroy Called whenever the user removes the ac
- cept filter on
- the socket.
- 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 provides a sim
- ple way to
avoid duplication of code for accept filters which do not - use the argument field to load and unload themselves. This function can
- be used in
the moduledata_t struct for the DECLARE_MODULE(9) macro.
SEE ALSO
setsockopt(2), accf_data(9), accf_http(9), malloc(9)
HISTORY
The accept filter mechanism was introduced in FreeBSD 4.0.
AUTHORS
- This manual page was written by Alfred Perlstein, Sheldon
- Hearn and
Jeroen Ruigrok van der Werven. - The accept filter concept was pioneered by David Filo at Ya
- hoo! and
refined to be a loadable module system by Alfred Perlstein. - BSD June 25, 2000