/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef _IP_QUEUE_H
#define _IP_QUEUE_H

#include <net/if.h>

typedef struct ipq_packet_msg {
 unsigned long packet_id;
 unsigned long mark;
 long timestamp_sec;
 long timestamp_usec;
 unsigned int hook;
 char indev_name[IFNAMSIZ];
 char outdev_name[IFNAMSIZ];
 unsigned short hw_protocol;
 unsigned short hw_type;
 unsigned char hw_addrlen;
 unsigned char hw_addr[8];
 size_t data_len;
 unsigned char payload[0];
} ipq_packet_msg_t;

typedef struct ipq_mode_msg {
 unsigned char value;
 size_t range;
} ipq_mode_msg_t;

typedef struct ipq_verdict_msg {
 unsigned int value;
 unsigned long id;
 size_t data_len;
 unsigned char payload[0];
} ipq_verdict_msg_t;

typedef struct ipq_peer_msg {
 union {
 ipq_verdict_msg_t verdict;
 ipq_mode_msg_t mode;
 } msg;
} ipq_peer_msg_t;

enum {
 IPQ_COPY_NONE,
 IPQ_COPY_META,
 IPQ_COPY_PACKET
};
#define IPQ_COPY_MAX IPQ_COPY_PACKET

#define IPQM_BASE 0x10
#define IPQM_MODE (IPQM_BASE + 1)
#define IPQM_VERDICT (IPQM_BASE + 2)
#define IPQM_PACKET (IPQM_BASE + 3)
#define IPQM_MAX (IPQM_BASE + 4)

#endif
