blob: 86ccceb61fdde78b06d27d6c12dc4686849f7046 [file] [log] [blame]
Harald Welte2e4e6a12006-01-12 13:30:04 -08001/* iptables module for using new netfilter netlink queue
2 *
3 * (C) 2005 by Harald Welte <laforge@netfilter.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 */
10
11#include <linux/module.h>
12#include <linux/skbuff.h>
13
14#include <linux/netfilter.h>
15#include <linux/netfilter_arp.h>
16#include <linux/netfilter/x_tables.h>
17#include <linux/netfilter/xt_NFQUEUE.h>
18
19MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
20MODULE_DESCRIPTION("[ip,ip6,arp]_tables NFQUEUE target");
21MODULE_LICENSE("GPL");
22MODULE_ALIAS("ipt_NFQUEUE");
23MODULE_ALIAS("ip6t_NFQUEUE");
24MODULE_ALIAS("arpt_NFQUEUE");
25
26static unsigned int
27target(struct sk_buff **pskb,
28 const struct net_device *in,
29 const struct net_device *out,
30 unsigned int hooknum,
Patrick McHardyc4986732006-03-20 18:02:56 -080031 const struct xt_target *target,
Harald Welte2e4e6a12006-01-12 13:30:04 -080032 const void *targinfo,
33 void *userinfo)
34{
35 const struct xt_NFQ_info *tinfo = targinfo;
36
37 return NF_QUEUE_NR(tinfo->queuenum);
38}
39
Harald Welte2e4e6a12006-01-12 13:30:04 -080040static struct xt_target ipt_NFQ_reg = {
41 .name = "NFQUEUE",
42 .target = target,
Patrick McHardy5d04bff2006-03-20 18:01:58 -080043 .targetsize = sizeof(struct xt_NFQ_info),
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080044 .family = AF_INET,
Harald Welte2e4e6a12006-01-12 13:30:04 -080045 .me = THIS_MODULE,
46};
47
48static struct xt_target ip6t_NFQ_reg = {
49 .name = "NFQUEUE",
50 .target = target,
Patrick McHardy5d04bff2006-03-20 18:01:58 -080051 .targetsize = sizeof(struct xt_NFQ_info),
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080052 .family = AF_INET6,
Harald Welte2e4e6a12006-01-12 13:30:04 -080053 .me = THIS_MODULE,
54};
55
56static struct xt_target arpt_NFQ_reg = {
57 .name = "NFQUEUE",
58 .target = target,
Patrick McHardy5d04bff2006-03-20 18:01:58 -080059 .targetsize = sizeof(struct xt_NFQ_info),
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080060 .family = NF_ARP,
Harald Welte2e4e6a12006-01-12 13:30:04 -080061 .me = THIS_MODULE,
62};
63
Andrew Morton65b4b4e2006-03-28 16:37:06 -080064static int __init xt_nfqueue_init(void)
Harald Welte2e4e6a12006-01-12 13:30:04 -080065{
66 int ret;
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080067 ret = xt_register_target(&ipt_NFQ_reg);
Harald Welte2e4e6a12006-01-12 13:30:04 -080068 if (ret)
69 return ret;
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080070 ret = xt_register_target(&ip6t_NFQ_reg);
Harald Welte2e4e6a12006-01-12 13:30:04 -080071 if (ret)
72 goto out_ip;
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080073 ret = xt_register_target(&arpt_NFQ_reg);
Harald Welte2e4e6a12006-01-12 13:30:04 -080074 if (ret)
75 goto out_ip6;
76
77 return ret;
78out_ip6:
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080079 xt_unregister_target(&ip6t_NFQ_reg);
Harald Welte2e4e6a12006-01-12 13:30:04 -080080out_ip:
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080081 xt_unregister_target(&ipt_NFQ_reg);
Harald Welte2e4e6a12006-01-12 13:30:04 -080082
83 return ret;
84}
85
Andrew Morton65b4b4e2006-03-28 16:37:06 -080086static void __exit xt_nfqueue_fini(void)
Harald Welte2e4e6a12006-01-12 13:30:04 -080087{
Pablo Neira Ayusoa45049c2006-03-22 13:55:40 -080088 xt_unregister_target(&arpt_NFQ_reg);
89 xt_unregister_target(&ip6t_NFQ_reg);
90 xt_unregister_target(&ipt_NFQ_reg);
Harald Welte2e4e6a12006-01-12 13:30:04 -080091}
92
Andrew Morton65b4b4e2006-03-28 16:37:06 -080093module_init(xt_nfqueue_init);
94module_exit(xt_nfqueue_fini);