2 * (C) 2016 by Pablo Neira Ayuso <pablo@netfilter.org>
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.
9 #include <linux/module.h>
10 #include <linux/spinlock.h>
11 #include <linux/skbuff.h>
13 #include <net/route.h>
15 #include <linux/netfilter.h>
16 #include <net/netfilter/nf_log.h>
18 static void nf_log_netdev_packet(struct net
*net
, u_int8_t pf
,
20 const struct sk_buff
*skb
,
21 const struct net_device
*in
,
22 const struct net_device
*out
,
23 const struct nf_loginfo
*loginfo
,
26 nf_log_l2packet(net
, pf
, skb
->protocol
, hooknum
, skb
, in
, out
,
30 static struct nf_logger nf_netdev_logger __read_mostly
= {
31 .name
= "nf_log_netdev",
32 .type
= NF_LOG_TYPE_LOG
,
33 .logfn
= nf_log_netdev_packet
,
37 static int __net_init
nf_log_netdev_net_init(struct net
*net
)
39 return nf_log_set(net
, NFPROTO_NETDEV
, &nf_netdev_logger
);
42 static void __net_exit
nf_log_netdev_net_exit(struct net
*net
)
44 nf_log_unset(net
, &nf_netdev_logger
);
47 static struct pernet_operations nf_log_netdev_net_ops
= {
48 .init
= nf_log_netdev_net_init
,
49 .exit
= nf_log_netdev_net_exit
,
52 static int __init
nf_log_netdev_init(void)
56 /* Request to load the real packet loggers. */
57 nf_logger_request_module(NFPROTO_IPV4
, NF_LOG_TYPE_LOG
);
58 nf_logger_request_module(NFPROTO_IPV6
, NF_LOG_TYPE_LOG
);
59 nf_logger_request_module(NFPROTO_ARP
, NF_LOG_TYPE_LOG
);
61 ret
= register_pernet_subsys(&nf_log_netdev_net_ops
);
65 nf_log_register(NFPROTO_NETDEV
, &nf_netdev_logger
);
69 static void __exit
nf_log_netdev_exit(void)
71 unregister_pernet_subsys(&nf_log_netdev_net_ops
);
72 nf_log_unregister(&nf_netdev_logger
);
75 module_init(nf_log_netdev_init
);
76 module_exit(nf_log_netdev_exit
);
78 MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
79 MODULE_DESCRIPTION("Netfilter netdev packet logging");
80 MODULE_LICENSE("GPL");
81 MODULE_ALIAS_NF_LOGGER(5, 0); /* NFPROTO_NETDEV */