IPQ_MESSAGE_TYPE 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual"

Copyright (c) 2000-2001 Netfilter Core Team

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


NAME
ipq_message_type, ipq_get_packet, ipq_getmsgerr \(em 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).