blob: 24b32e6c009e773f60a445228917740bd25f73b6 [file] [log] [blame]
Harald Welte7af4cc32005-08-09 19:44:15 -07001#ifndef _NFNETLINK_QUEUE_H
2#define _NFNETLINK_QUEUE_H
3
Harald Welte0ba2c6e2005-08-13 13:55:44 -07004#include <linux/types.h>
Harald Welte7af4cc32005-08-09 19:44:15 -07005#include <linux/netfilter/nfnetlink.h>
6
7enum nfqnl_msg_types {
8 NFQNL_MSG_PACKET, /* packet from kernel to userspace */
9 NFQNL_MSG_VERDICT, /* verdict from userspace to kernel */
10 NFQNL_MSG_CONFIG, /* connect to a particular queue */
Florian Westphal97d32cf2011-07-19 11:46:33 +020011 NFQNL_MSG_VERDICT_BATCH, /* batchv from userspace to kernel */
Harald Welte7af4cc32005-08-09 19:44:15 -070012
13 NFQNL_MSG_MAX
14};
15
16struct nfqnl_msg_packet_hdr {
Al Viro98a4a862006-11-08 00:26:51 -080017 __be32 packet_id; /* unique ID of packet in queue */
18 __be16 hw_protocol; /* hw protocol (network order) */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010019 __u8 hook; /* netfilter hook */
Harald Welte7af4cc32005-08-09 19:44:15 -070020} __attribute__ ((packed));
21
22struct nfqnl_msg_packet_hw {
Al Viro98a4a862006-11-08 00:26:51 -080023 __be16 hw_addrlen;
Arnd Bergmann60c195c2009-02-26 00:51:43 +010024 __u16 _pad;
25 __u8 hw_addr[8];
Patrick McHardy53e26652006-08-22 00:43:20 -070026};
Harald Welte7af4cc32005-08-09 19:44:15 -070027
28struct nfqnl_msg_packet_timestamp {
Mike Frysingerb51bdad2011-03-18 08:50:37 +000029 __aligned_be64 sec;
30 __aligned_be64 usec;
Patrick McHardy53e26652006-08-22 00:43:20 -070031};
Harald Welte7af4cc32005-08-09 19:44:15 -070032
33enum nfqnl_attr_type {
34 NFQA_UNSPEC,
35 NFQA_PACKET_HDR,
36 NFQA_VERDICT_HDR, /* nfqnl_msg_verdict_hrd */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010037 NFQA_MARK, /* __u32 nfmark */
Harald Welte7af4cc32005-08-09 19:44:15 -070038 NFQA_TIMESTAMP, /* nfqnl_msg_packet_timestamp */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010039 NFQA_IFINDEX_INDEV, /* __u32 ifindex */
40 NFQA_IFINDEX_OUTDEV, /* __u32 ifindex */
41 NFQA_IFINDEX_PHYSINDEV, /* __u32 ifindex */
42 NFQA_IFINDEX_PHYSOUTDEV, /* __u32 ifindex */
Harald Welte7af4cc32005-08-09 19:44:15 -070043 NFQA_HWADDR, /* nfqnl_msg_packet_hw */
44 NFQA_PAYLOAD, /* opaque data payload */
45
46 __NFQA_MAX
47};
48#define NFQA_MAX (__NFQA_MAX - 1)
49
50struct nfqnl_msg_verdict_hdr {
Al Viro98a4a862006-11-08 00:26:51 -080051 __be32 verdict;
52 __be32 id;
Patrick McHardy53e26652006-08-22 00:43:20 -070053};
Harald Welte7af4cc32005-08-09 19:44:15 -070054
55
56enum nfqnl_msg_config_cmds {
57 NFQNL_CFG_CMD_NONE,
58 NFQNL_CFG_CMD_BIND,
59 NFQNL_CFG_CMD_UNBIND,
60 NFQNL_CFG_CMD_PF_BIND,
61 NFQNL_CFG_CMD_PF_UNBIND,
62};
63
64struct nfqnl_msg_config_cmd {
Arnd Bergmann60c195c2009-02-26 00:51:43 +010065 __u8 command; /* nfqnl_msg_config_cmds */
66 __u8 _pad;
Al Viro98a4a862006-11-08 00:26:51 -080067 __be16 pf; /* AF_xxx for PF_[UN]BIND */
Patrick McHardy53e26652006-08-22 00:43:20 -070068};
Harald Welte7af4cc32005-08-09 19:44:15 -070069
70enum nfqnl_config_mode {
71 NFQNL_COPY_NONE,
72 NFQNL_COPY_META,
73 NFQNL_COPY_PACKET,
74};
75
76struct nfqnl_msg_config_params {
Al Viro98a4a862006-11-08 00:26:51 -080077 __be32 copy_range;
Arnd Bergmann60c195c2009-02-26 00:51:43 +010078 __u8 copy_mode; /* enum nfqnl_config_mode */
Harald Welte7af4cc32005-08-09 19:44:15 -070079} __attribute__ ((packed));
80
81
82enum nfqnl_attr_config {
83 NFQA_CFG_UNSPEC,
84 NFQA_CFG_CMD, /* nfqnl_msg_config_cmd */
85 NFQA_CFG_PARAMS, /* nfqnl_msg_config_params */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010086 NFQA_CFG_QUEUE_MAXLEN, /* __u32 */
Harald Welte7af4cc32005-08-09 19:44:15 -070087 __NFQA_CFG_MAX
88};
Harald Welte838ab632005-08-09 19:50:45 -070089#define NFQA_CFG_MAX (__NFQA_CFG_MAX-1)
Harald Welte7af4cc32005-08-09 19:44:15 -070090
91#endif /* _NFNETLINK_QUEUE_H */