~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to net/netfilter/xt_NFLOG.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2006 Patrick McHardy <kaber@trash.net>
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License version 2 as
 
6
 * published by the Free Software Foundation.
 
7
 */
 
8
 
 
9
#include <linux/module.h>
 
10
#include <linux/init.h>
 
11
#include <linux/skbuff.h>
 
12
 
 
13
#include <linux/netfilter/x_tables.h>
 
14
#include <linux/netfilter/xt_NFLOG.h>
 
15
#include <net/netfilter/nf_log.h>
 
16
#include <net/netfilter/nfnetlink_log.h>
 
17
 
 
18
MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
 
19
MODULE_DESCRIPTION("Xtables: packet logging to netlink using NFLOG");
 
20
MODULE_LICENSE("GPL");
 
21
MODULE_ALIAS("ipt_NFLOG");
 
22
MODULE_ALIAS("ip6t_NFLOG");
 
23
 
 
24
static unsigned int
 
25
nflog_tg(struct sk_buff *skb, const struct xt_action_param *par)
 
26
{
 
27
        const struct xt_nflog_info *info = par->targinfo;
 
28
        struct nf_loginfo li;
 
29
 
 
30
        li.type              = NF_LOG_TYPE_ULOG;
 
31
        li.u.ulog.copy_len   = info->len;
 
32
        li.u.ulog.group      = info->group;
 
33
        li.u.ulog.qthreshold = info->threshold;
 
34
 
 
35
        nfulnl_log_packet(par->family, par->hooknum, skb, par->in,
 
36
                          par->out, &li, info->prefix);
 
37
        return XT_CONTINUE;
 
38
}
 
39
 
 
40
static int nflog_tg_check(const struct xt_tgchk_param *par)
 
41
{
 
42
        const struct xt_nflog_info *info = par->targinfo;
 
43
 
 
44
        if (info->flags & ~XT_NFLOG_MASK)
 
45
                return -EINVAL;
 
46
        if (info->prefix[sizeof(info->prefix) - 1] != '\0')
 
47
                return -EINVAL;
 
48
        return 0;
 
49
}
 
50
 
 
51
static struct xt_target nflog_tg_reg __read_mostly = {
 
52
        .name       = "NFLOG",
 
53
        .revision   = 0,
 
54
        .family     = NFPROTO_UNSPEC,
 
55
        .checkentry = nflog_tg_check,
 
56
        .target     = nflog_tg,
 
57
        .targetsize = sizeof(struct xt_nflog_info),
 
58
        .me         = THIS_MODULE,
 
59
};
 
60
 
 
61
static int __init nflog_tg_init(void)
 
62
{
 
63
        return xt_register_target(&nflog_tg_reg);
 
64
}
 
65
 
 
66
static void __exit nflog_tg_exit(void)
 
67
{
 
68
        xt_unregister_target(&nflog_tg_reg);
 
69
}
 
70
 
 
71
module_init(nflog_tg_init);
 
72
module_exit(nflog_tg_exit);