Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 1 | /* |
| 2 | * ebt_nflog |
| 3 | * |
| 4 | * Author: |
| 5 | * Peter Warasin <peter@endian.com> |
| 6 | * |
| 7 | * February, 2008 |
| 8 | * |
| 9 | * Based on: |
| 10 | * xt_NFLOG.c, (C) 2006 by Patrick McHardy <kaber@trash.net> |
| 11 | * ebt_ulog.c, (C) 2004 by Bart De Schuymer <bdschuym@pandora.be> |
| 12 | * |
| 13 | */ |
| 14 | |
| 15 | #include <linux/module.h> |
| 16 | #include <linux/spinlock.h> |
Jan Engelhardt | 18219d3 | 2008-10-08 11:35:13 +0200 | [diff] [blame] | 17 | #include <linux/netfilter/x_tables.h> |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 18 | #include <linux/netfilter_bridge/ebtables.h> |
| 19 | #include <linux/netfilter_bridge/ebt_nflog.h> |
| 20 | #include <net/netfilter/nf_log.h> |
| 21 | |
Jan Engelhardt | 2d06d4a | 2008-10-08 11:35:15 +0200 | [diff] [blame] | 22 | static unsigned int |
Jan Engelhardt | 7eb3558 | 2008-10-08 11:35:19 +0200 | [diff] [blame] | 23 | ebt_nflog_tg(struct sk_buff *skb, const struct xt_target_param *par) |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 24 | { |
Jan Engelhardt | 7eb3558 | 2008-10-08 11:35:19 +0200 | [diff] [blame] | 25 | const struct ebt_nflog_info *info = par->targinfo; |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 26 | struct nf_loginfo li; |
| 27 | |
| 28 | li.type = NF_LOG_TYPE_ULOG; |
| 29 | li.u.ulog.copy_len = info->len; |
| 30 | li.u.ulog.group = info->group; |
| 31 | li.u.ulog.qthreshold = info->threshold; |
| 32 | |
Jan Engelhardt | 7eb3558 | 2008-10-08 11:35:19 +0200 | [diff] [blame] | 33 | nf_log_packet(PF_BRIDGE, par->hooknum, skb, par->in, par->out, |
| 34 | &li, "%s", info->prefix); |
Jan Engelhardt | 0ac6ab1 | 2008-10-08 11:35:13 +0200 | [diff] [blame] | 35 | return EBT_CONTINUE; |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 36 | } |
| 37 | |
Jan Engelhardt | 135367b | 2010-03-19 17:16:42 +0100 | [diff] [blame] | 38 | static int ebt_nflog_tg_check(const struct xt_tgchk_param *par) |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 39 | { |
Jan Engelhardt | af5d6dc | 2008-10-08 11:35:19 +0200 | [diff] [blame] | 40 | struct ebt_nflog_info *info = par->targinfo; |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 41 | |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 42 | if (info->flags & ~EBT_NFLOG_MASK) |
Jan Engelhardt | d6b00a5 | 2010-03-25 16:34:45 +0100 | [diff] [blame^] | 43 | return -EINVAL; |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 44 | info->prefix[EBT_NFLOG_PREFIX_SIZE - 1] = '\0'; |
Jan Engelhardt | d6b00a5 | 2010-03-25 16:34:45 +0100 | [diff] [blame^] | 45 | return 0; |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 46 | } |
| 47 | |
Jan Engelhardt | 043ef46 | 2008-10-08 11:35:15 +0200 | [diff] [blame] | 48 | static struct xt_target ebt_nflog_tg_reg __read_mostly = { |
| 49 | .name = "nflog", |
| 50 | .revision = 0, |
| 51 | .family = NFPROTO_BRIDGE, |
| 52 | .target = ebt_nflog_tg, |
Jan Engelhardt | 2d06d4a | 2008-10-08 11:35:15 +0200 | [diff] [blame] | 53 | .checkentry = ebt_nflog_tg_check, |
Florian Westphal | fc0e3df | 2010-02-15 18:16:26 +0100 | [diff] [blame] | 54 | .targetsize = sizeof(struct ebt_nflog_info), |
Jan Engelhardt | 043ef46 | 2008-10-08 11:35:15 +0200 | [diff] [blame] | 55 | .me = THIS_MODULE, |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 56 | }; |
| 57 | |
| 58 | static int __init ebt_nflog_init(void) |
| 59 | { |
Jan Engelhardt | 043ef46 | 2008-10-08 11:35:15 +0200 | [diff] [blame] | 60 | return xt_register_target(&ebt_nflog_tg_reg); |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 61 | } |
| 62 | |
| 63 | static void __exit ebt_nflog_fini(void) |
| 64 | { |
Jan Engelhardt | 043ef46 | 2008-10-08 11:35:15 +0200 | [diff] [blame] | 65 | xt_unregister_target(&ebt_nflog_tg_reg); |
Peter Warasin | e7bfd0a | 2008-04-14 11:15:54 +0200 | [diff] [blame] | 66 | } |
| 67 | |
| 68 | module_init(ebt_nflog_init); |
| 69 | module_exit(ebt_nflog_fini); |
| 70 | MODULE_LICENSE("GPL"); |
| 71 | MODULE_AUTHOR("Peter Warasin <peter@endian.com>"); |
| 72 | MODULE_DESCRIPTION("ebtables NFLOG netfilter logging module"); |