blob: 2455fe5f4e016938a68c63f1626ea633bde1a46e [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 */
11
12 NFQNL_MSG_MAX
13};
14
15struct nfqnl_msg_packet_hdr {
Al Viro98a4a862006-11-08 00:26:51 -080016 __be32 packet_id; /* unique ID of packet in queue */
17 __be16 hw_protocol; /* hw protocol (network order) */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010018 __u8 hook; /* netfilter hook */
Harald Welte7af4cc32005-08-09 19:44:15 -070019} __attribute__ ((packed));
20
21struct nfqnl_msg_packet_hw {
Al Viro98a4a862006-11-08 00:26:51 -080022 __be16 hw_addrlen;
Arnd Bergmann60c195c2009-02-26 00:51:43 +010023 __u16 _pad;
24 __u8 hw_addr[8];
Patrick McHardy53e26652006-08-22 00:43:20 -070025};
Harald Welte7af4cc32005-08-09 19:44:15 -070026
27struct nfqnl_msg_packet_timestamp {
Al Viro98a4a862006-11-08 00:26:51 -080028 aligned_be64 sec;
29 aligned_be64 usec;
Patrick McHardy53e26652006-08-22 00:43:20 -070030};
Harald Welte7af4cc32005-08-09 19:44:15 -070031
32enum nfqnl_attr_type {
33 NFQA_UNSPEC,
34 NFQA_PACKET_HDR,
35 NFQA_VERDICT_HDR, /* nfqnl_msg_verdict_hrd */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010036 NFQA_MARK, /* __u32 nfmark */
Harald Welte7af4cc32005-08-09 19:44:15 -070037 NFQA_TIMESTAMP, /* nfqnl_msg_packet_timestamp */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010038 NFQA_IFINDEX_INDEV, /* __u32 ifindex */
39 NFQA_IFINDEX_OUTDEV, /* __u32 ifindex */
40 NFQA_IFINDEX_PHYSINDEV, /* __u32 ifindex */
41 NFQA_IFINDEX_PHYSOUTDEV, /* __u32 ifindex */
Harald Welte7af4cc32005-08-09 19:44:15 -070042 NFQA_HWADDR, /* nfqnl_msg_packet_hw */
43 NFQA_PAYLOAD, /* opaque data payload */
44
45 __NFQA_MAX
46};
47#define NFQA_MAX (__NFQA_MAX - 1)
48
49struct nfqnl_msg_verdict_hdr {
Al Viro98a4a862006-11-08 00:26:51 -080050 __be32 verdict;
51 __be32 id;
Patrick McHardy53e26652006-08-22 00:43:20 -070052};
Harald Welte7af4cc32005-08-09 19:44:15 -070053
54
55enum nfqnl_msg_config_cmds {
56 NFQNL_CFG_CMD_NONE,
57 NFQNL_CFG_CMD_BIND,
58 NFQNL_CFG_CMD_UNBIND,
59 NFQNL_CFG_CMD_PF_BIND,
60 NFQNL_CFG_CMD_PF_UNBIND,
61};
62
63struct nfqnl_msg_config_cmd {
Arnd Bergmann60c195c2009-02-26 00:51:43 +010064 __u8 command; /* nfqnl_msg_config_cmds */
65 __u8 _pad;
Al Viro98a4a862006-11-08 00:26:51 -080066 __be16 pf; /* AF_xxx for PF_[UN]BIND */
Patrick McHardy53e26652006-08-22 00:43:20 -070067};
Harald Welte7af4cc32005-08-09 19:44:15 -070068
69enum nfqnl_config_mode {
70 NFQNL_COPY_NONE,
71 NFQNL_COPY_META,
72 NFQNL_COPY_PACKET,
73};
74
75struct nfqnl_msg_config_params {
Al Viro98a4a862006-11-08 00:26:51 -080076 __be32 copy_range;
Arnd Bergmann60c195c2009-02-26 00:51:43 +010077 __u8 copy_mode; /* enum nfqnl_config_mode */
Harald Welte7af4cc32005-08-09 19:44:15 -070078} __attribute__ ((packed));
79
80
81enum nfqnl_attr_config {
82 NFQA_CFG_UNSPEC,
83 NFQA_CFG_CMD, /* nfqnl_msg_config_cmd */
84 NFQA_CFG_PARAMS, /* nfqnl_msg_config_params */
Arnd Bergmann60c195c2009-02-26 00:51:43 +010085 NFQA_CFG_QUEUE_MAXLEN, /* __u32 */
Harald Welte7af4cc32005-08-09 19:44:15 -070086 __NFQA_CFG_MAX
87};
Harald Welte838ab632005-08-09 19:50:45 -070088#define NFQA_CFG_MAX (__NFQA_CFG_MAX-1)
Harald Welte7af4cc32005-08-09 19:44:15 -070089
90#endif /* _NFNETLINK_QUEUE_H */