1/* 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, 31 const struct xt_target *target, 32 const void *targinfo) 33{ 34 const struct xt_NFQ_info *tinfo = targinfo; 35 36 return NF_QUEUE_NR(tinfo->queuenum); 37} 38 39static struct xt_target xt_nfqueue_target[] = { 40 { 41 .name = "NFQUEUE", 42 .family = AF_INET, 43 .target = target, 44 .targetsize = sizeof(struct xt_NFQ_info), 45 .me = THIS_MODULE, 46 }, 47 { 48 .name = "NFQUEUE", 49 .family = AF_INET6, 50 .target = target, 51 .targetsize = sizeof(struct xt_NFQ_info), 52 .me = THIS_MODULE, 53 }, 54 { 55 .name = "NFQUEUE", 56 .family = NF_ARP, 57 .target = target, 58 .targetsize = sizeof(struct xt_NFQ_info), 59 .me = THIS_MODULE, 60 }, 61}; 62 63static int __init xt_nfqueue_init(void) 64{ 65 return xt_register_targets(xt_nfqueue_target, 66 ARRAY_SIZE(xt_nfqueue_target)); 67} 68 69static void __exit xt_nfqueue_fini(void) 70{ 71 xt_unregister_targets(xt_nfqueue_target, ARRAY_SIZE(xt_nfqueue_target)); 72} 73 74module_init(xt_nfqueue_init); 75module_exit(xt_nfqueue_fini); 76