]>
Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
1fddf4ba PNA |
2 | /* |
3 | * (C) 2016 by Pablo Neira Ayuso <pablo@netfilter.org> | |
1fddf4ba PNA |
4 | */ |
5 | ||
6 | #include <linux/module.h> | |
7 | #include <linux/spinlock.h> | |
8 | #include <linux/skbuff.h> | |
9 | #include <linux/ip.h> | |
10 | #include <net/route.h> | |
11 | ||
12 | #include <linux/netfilter.h> | |
13 | #include <net/netfilter/nf_log.h> | |
14 | ||
15 | static void nf_log_netdev_packet(struct net *net, u_int8_t pf, | |
16 | unsigned int hooknum, | |
17 | const struct sk_buff *skb, | |
18 | const struct net_device *in, | |
19 | const struct net_device *out, | |
20 | const struct nf_loginfo *loginfo, | |
21 | const char *prefix) | |
22 | { | |
673ab46f LZ |
23 | nf_log_l2packet(net, pf, skb->protocol, hooknum, skb, in, out, |
24 | loginfo, prefix); | |
1fddf4ba PNA |
25 | } |
26 | ||
27 | static struct nf_logger nf_netdev_logger __read_mostly = { | |
28 | .name = "nf_log_netdev", | |
29 | .type = NF_LOG_TYPE_LOG, | |
30 | .logfn = nf_log_netdev_packet, | |
31 | .me = THIS_MODULE, | |
32 | }; | |
33 | ||
34 | static int __net_init nf_log_netdev_net_init(struct net *net) | |
35 | { | |
36 | return nf_log_set(net, NFPROTO_NETDEV, &nf_netdev_logger); | |
37 | } | |
38 | ||
39 | static void __net_exit nf_log_netdev_net_exit(struct net *net) | |
40 | { | |
41 | nf_log_unset(net, &nf_netdev_logger); | |
42 | } | |
43 | ||
44 | static struct pernet_operations nf_log_netdev_net_ops = { | |
45 | .init = nf_log_netdev_net_init, | |
46 | .exit = nf_log_netdev_net_exit, | |
47 | }; | |
48 | ||
49 | static int __init nf_log_netdev_init(void) | |
50 | { | |
51 | int ret; | |
52 | ||
53 | /* Request to load the real packet loggers. */ | |
54 | nf_logger_request_module(NFPROTO_IPV4, NF_LOG_TYPE_LOG); | |
55 | nf_logger_request_module(NFPROTO_IPV6, NF_LOG_TYPE_LOG); | |
56 | nf_logger_request_module(NFPROTO_ARP, NF_LOG_TYPE_LOG); | |
57 | ||
58 | ret = register_pernet_subsys(&nf_log_netdev_net_ops); | |
59 | if (ret < 0) | |
60 | return ret; | |
61 | ||
62 | nf_log_register(NFPROTO_NETDEV, &nf_netdev_logger); | |
63 | return 0; | |
64 | } | |
65 | ||
66 | static void __exit nf_log_netdev_exit(void) | |
67 | { | |
68 | unregister_pernet_subsys(&nf_log_netdev_net_ops); | |
69 | nf_log_unregister(&nf_netdev_logger); | |
70 | } | |
71 | ||
72 | module_init(nf_log_netdev_init); | |
73 | module_exit(nf_log_netdev_exit); | |
74 | ||
75 | MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>"); | |
76 | MODULE_DESCRIPTION("Netfilter netdev packet logging"); | |
77 | MODULE_LICENSE("GPL"); | |
78 | MODULE_ALIAS_NF_LOGGER(5, 0); /* NFPROTO_NETDEV */ |