Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

ipq_read(3) [linux man page]

IPQ_READ(3)						     Linux Programmer's Manual						       IPQ_READ(3)

NAME
ipq_read -- read queue messages from ip_queue and read into supplied buffer SYNOPSIS
#include <linux/netfilter.h> #include <libipq.h> ssize_t ipq_read(const struct ipq_handle *h, unsigned char *buf, size_t len, int timeout); DESCRIPTION
The ipq_read function reads a queue message from the kernel and copies it to the memory pointed to by buf to a maximum length of len. The h parameter is a context handle which must previously have been returned successfully from a call to ipq_create_handle. The caller is responsible for ensuring that the memory pointed to by buf is large enough to contain len bytes. The timeout parameter may be used to set a timeout for the operation, specified in microseconds. This is implemented internally by the library via the select system call. A value of zero provides normal, backwards-compatible blocking behaviour with no timeout. A negative value causes the function to return immediately. Data returned via buf should not be accessed directly. Use the ipq_message_type, ipq_get_packet, and ipq_get_msgerr functions to access the queue message in the buffer. RETURN VALUE
On failure, -1 is returned. On success, a non-zero positive value is returned when no timeout value is specified. On success with a timeout value specified, zero is returned if no data was available to read, or if a non-blocked signal was caught. In the latter case, the global errno value will be set to EINTR. ERRORS
On error, a descriptive error message will be available via the ipq_errstr function. DIAGNOSTICS
While the ipq_read function may return successfully, the queue message copied to the buffer may itself be an error message from a higher level kernel component. Use ipq_message_type to determine if it is an error message, and ipq_get_msgerr to access the value of the mes- sage. BUGS
None known. AUTHOR
James Morris <jmorris@intercode.com.au> COPYRIGHT
Copyright (c) 2000-2001 Netfilter Core Team. Distributed under the GNU General Public License. CREDITS
Joost Remijn implemented the timeout feature, which appeared in the 1.2.4 release of iptables. SEE ALSO
iptables(8), libipq(3), select(2). Linux iptables 1.2 16 October 2001 IPQ_READ(3)

Check Out this Related Man Page

IPQ_MESSAGE_TYPE(3)					     Linux Programmer's Manual					       IPQ_MESSAGE_TYPE(3)

NAME
ipq_message_type, ipq_get_packet, ipq_getmsgerr -- query queue messages SYNOPSIS
#include <linux/netfilter.h> #include <libipq.h> int ipq_message_type(const unsigned char *buf); ipq_packet_msg_t *ipq_get_packet(const unsigned char *buf); int ipq_get_msgerr(const unsigned char *buf); DESCRIPTION
The ipq_message_type function returns the type of queue message returned to userspace via ipq_read. ipq_message_type should always be called following a successful call to ipq_read to determine whether the message is a packet message or an error message. The buf parameter should be the same data obtained from the previous call to ipq_read. ipq_message_type will return one of the following values: NLMSG_ERROR An error message generated by the Netlink transport. IPQM_PACKET A packet message containing packet metadata and optional packet payload data. The ipq_get_packet function should be called if ipq_message_type returns IPQM_PACKET. The buf parameter should point to the same data used for the call to ipq_message_type. The pointer returned by ipq_get_packet points to a packet message, which is declared as follows: typedef struct ipq_packet_msg { unsigned long packet_id; /* ID of queued packet */ unsigned long mark; /* Netfilter mark value */ long timestamp_sec; /* Packet arrival time (seconds) */ long timestamp_usec; /* Packet arrvial time (+useconds) */ unsigned int hook; /* Netfilter hook we rode in on */ char indev_name[IFNAMSIZ]; /* Name of incoming interface */ char outdev_name[IFNAMSIZ]; /* Name of outgoing interface */ unsigned short hw_protocol; /* Hardware protocol (network order) */ unsigned short hw_type; /* Hardware type */ unsigned char hw_addrlen; /* Hardware address length */ unsigned char hw_addr[8]; /* Hardware address */ size_t data_len; /* Length of packet data */ unsigned char payload[0]; /* Optional packet data */ } ipq_packet_msg_t; Each of these fields may be read by the application. If the queue mode is IPQ_COPY_PACKET and the data_len value is greater than zero, the packet payload contents may be accessed in the memory following the ipq_packet_msg_t structure to a range of data_len. The packet_id field contains a packet identifier to be used when calling ipq_set_verdict. The ipq_get_msgerr function should be called if ipq_message_type returns NLMSG_ERROR. The buf parameter should point to the same data used for the call to ipq_message_type. The value returned by ipq_get_msgerr is set by higher level kernel code and corresponds to standard errno values. BUGS
None known. AUTHOR
James Morris <jmorris@intercode.com.au> COPYRIGHT
Copyright (c) 2000-2001 Netfilter Core Team. Distributed under the GNU General Public License. SEE ALSO
iptables(8), libipq(3). Linux iptables 1.2 16 October 2001 IPQ_MESSAGE_TYPE(3)
Man Page