libnetfilter_log 1.0.2
|
Functions | |
int | nflog_fd (struct nflog_handle *h) |
int | nflog_callback_register (struct nflog_g_handle *gh, nflog_callback *cb, void *data) |
int | nflog_handle_packet (struct nflog_handle *h, char *buf, int len) |
struct nflog_g_handle * | nflog_bind_group (struct nflog_handle *h, uint16_t num) |
int | nflog_unbind_group (struct nflog_g_handle *gh) |
int | nflog_set_mode (struct nflog_g_handle *gh, uint8_t mode, uint32_t range) |
int | nflog_set_timeout (struct nflog_g_handle *gh, uint32_t timeout) |
int | nflog_set_qthresh (struct nflog_g_handle *gh, uint32_t qthresh) |
int | nflog_set_nlbufsiz (struct nflog_g_handle *gh, uint32_t nlbufsiz) |
int | nflog_set_flags (struct nflog_g_handle *gh, uint16_t flags) |
Once libnetfilter_log library has been initialised (See LibrarySetup), it is possible to bind the program to a specific group. This can be done using nflog_bind_group().
The group can then be tuned via nflog_set_mode() among many others.
Here's a little code snippet that binds to the group 100:
printf("binding this socket to group 100\n"); gh = nflog_bind_group(h, 100); if (!gh) { fprintf(stderr, "no handle for group 100\n"); exit(1); } printf("setting copy_packet mode\n"); if (nflog_set_mode(gh, NFULNL_COPY_PACKET, 0xffff) < 0) { fprintf(stderr, "can't set packet copy mode\n"); exit(1); }
Next step is the handling of incoming packets which can be done via a loop:
fd = nflog_fd(h); while ((rv = recv(fd, buf, sizeof(buf), 0)) && rv >= 0) { printf("pkt received (len=%u)\n", rv); nflog_handle_packet(h, buf, rv); }
Data and information about the packet can be fetched by using message parsing functions (See Parsing).
struct nflog_g_handle * nflog_bind_group | ( | struct nflog_handle * | h, |
uint16_t | num | ||
) |
nflog_bind_group - bind a new handle to a specific group number.
h | Netfilter log handle obtained via call to nflog_open() |
num | the number of the group to bind to |
Definition at line 464 of file libnetfilter_log.c.
int nflog_callback_register | ( | struct nflog_g_handle * | gh, |
nflog_callback * | cb, | ||
void * | data | ||
) |
nflog_callback_register - register function to process packets
gh | Netfilter log group handle obtained by call to nflog_bind_group() |
cb | callback function to call for each logged packet |
data | custom data to pass to the callback function |
Definition at line 343 of file libnetfilter_log.c.
int nflog_fd | ( | struct nflog_handle * | h | ) |
nflog_fd - get the file descriptor associated with the nflog handler
h | handler obtained via call to nflog_open() |
Definition at line 245 of file libnetfilter_log.c.
int nflog_handle_packet | ( | struct nflog_handle * | h, |
char * | buf, | ||
int | len | ||
) |
nflog_handle_packet - handle a packet received from the nflog subsystem
h | Netfilter log handle obtained via call to nflog_open() |
buf | nflog data received from the kernel |
len | length of packet data in buffer |
Triggers an associated callback for each packet contained in buf. Data can be read from the queue using nflog_fd() and recv(). See example code in the Detailed Description.
Definition at line 366 of file libnetfilter_log.c.
int nflog_set_flags | ( | struct nflog_g_handle * | gh, |
uint16_t | flags | ||
) |
nflog_set_flags - set the nflog flags for this group
gh | Netfilter log group handle obtained by call to nflog_bind_group(). |
flags | Flags that you want to set |
There are two existing flags:
- NFULNL_CFG_F_SEQ: This enables local nflog sequence numbering. - NFULNL_CFG_F_SEQ_GLOBAL: This enables global nflog sequence numbering. - NFULNL_CFG_F_CONNTRACK: This enables to acquire related conntrack.
Definition at line 664 of file libnetfilter_log.c.
int nflog_set_mode | ( | struct nflog_g_handle * | gh, |
uint8_t | mode, | ||
uint32_t | range | ||
) |
nflog_set_mode - set the amount of packet data that nflog copies to userspace
gh | Netfilter log group handle obtained by call to nflog_bind_group(). |
mode | the part of the packet that we are interested in |
range | size of the packet that we want to get |
Sets the amount of data to be copied to userspace for each packet logged to the given group.
Definition at line 534 of file libnetfilter_log.c.
int nflog_set_nlbufsiz | ( | struct nflog_g_handle * | gh, |
uint32_t | nlbufsiz | ||
) |
nflog_set_nlbufsiz - set the size of the nflog buffer for this group
gh | Netfilter log group handle obtained by call to nflog_bind_group(). |
nlbufsiz | Size of the nflog buffer |
This function sets the size (in bytes) of the buffer that is used to stack log messages in nflog.
Definition at line 627 of file libnetfilter_log.c.
int nflog_set_qthresh | ( | struct nflog_g_handle * | gh, |
uint32_t | qthresh | ||
) |
nflog_set_qthresh - set the maximum amount of logs in buffer for this group
gh | Netfilter log group handle obtained by call to nflog_bind_group(). |
qthresh | Maximum number of log entries |
This function determines the maximum number of log entries in the buffer until it is pushed to userspace.
Definition at line 596 of file libnetfilter_log.c.
int nflog_set_timeout | ( | struct nflog_g_handle * | gh, |
uint32_t | timeout | ||
) |
nflog_set_timeout - set the maximum time to push log buffer for this group
gh | Netfilter log group handle obtained by call to nflog_bind_group(). |
timeout | Time to wait until the log buffer is pushed to userspace |
This function allows one to set the maximum time that nflog waits until it pushes the log buffer to userspace if no new logged packets have occured. Basically, nflog implements a buffer to reduce the computational cost of delivering the log message to userspace.
Definition at line 569 of file libnetfilter_log.c.
int nflog_unbind_group | ( | struct nflog_g_handle * | gh | ) |
nflog_unbind_group - unbind a group handle.
gh | Netfilter log group handle obtained via nflog_bind_group() |
Definition at line 506 of file libnetfilter_log.c.