1 // SPDX-License-Identifier: GPL-2.0-only
3 * (C) 2016 by Pablo Neira Ayuso <pablo@netfilter.org>
6 #include <linux/module.h>
7 #include <linux/spinlock.h>
8 #include <linux/skbuff.h>
10 #include <net/route.h>
12 #include <linux/netfilter.h>
13 #include <net/netfilter/nf_log.h>
15 static void nf_log_netdev_packet(struct net
*net
, u_int8_t pf
,
17 const struct sk_buff
*skb
,
18 const struct net_device
*in
,
19 const struct net_device
*out
,
20 const struct nf_loginfo
*loginfo
,
23 nf_log_l2packet(net
, pf
, skb
->protocol
, hooknum
, skb
, in
, out
,
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
,
34 static int __net_init
nf_log_netdev_net_init(struct net
*net
)
36 return nf_log_set(net
, NFPROTO_NETDEV
, &nf_netdev_logger
);
39 static void __net_exit
nf_log_netdev_net_exit(struct net
*net
)
41 nf_log_unset(net
, &nf_netdev_logger
);
44 static struct pernet_operations nf_log_netdev_net_ops
= {
45 .init
= nf_log_netdev_net_init
,
46 .exit
= nf_log_netdev_net_exit
,
49 static int __init
nf_log_netdev_init(void)
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
);
58 ret
= register_pernet_subsys(&nf_log_netdev_net_ops
);
62 nf_log_register(NFPROTO_NETDEV
, &nf_netdev_logger
);
66 static void __exit
nf_log_netdev_exit(void)
68 unregister_pernet_subsys(&nf_log_netdev_net_ops
);
69 nf_log_unregister(&nf_netdev_logger
);
72 module_init(nf_log_netdev_init
);
73 module_exit(nf_log_netdev_exit
);
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 */