#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/atomic.h>
#include <linux/refcount.h>
#include <linux/netlink.h>
#include <linux/rculist.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <net/netlink.h>
#include <net/sock.h>
#include <net/netns/generic.h>
#include <linux/netfilter.h>
#include <linux/netfilter/nfnetlink.h>
#include <linux/netfilter/nfnetlink_acct.h>
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
struct nf_acct { … };
struct nfacct_filter { … };
struct nfnl_acct_net { … };
static unsigned int nfnl_acct_net_id __read_mostly;
static inline struct nfnl_acct_net *nfnl_acct_pernet(struct net *net)
{ … }
#define NFACCT_F_QUOTA …
#define NFACCT_OVERQUOTA_BIT …
static int nfnl_acct_new(struct sk_buff *skb, const struct nfnl_info *info,
const struct nlattr * const tb[])
{ … }
static int
nfnl_acct_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type,
int event, struct nf_acct *acct)
{ … }
static int
nfnl_acct_dump(struct sk_buff *skb, struct netlink_callback *cb)
{ … }
static int nfnl_acct_done(struct netlink_callback *cb)
{ … }
static const struct nla_policy filter_policy[NFACCT_FILTER_MAX + 1] = …;
static int nfnl_acct_start(struct netlink_callback *cb)
{ … }
static int nfnl_acct_get(struct sk_buff *skb, const struct nfnl_info *info,
const struct nlattr * const tb[])
{ … }
static int nfnl_acct_try_del(struct nf_acct *cur)
{ … }
static int nfnl_acct_del(struct sk_buff *skb, const struct nfnl_info *info,
const struct nlattr * const tb[])
{ … }
static const struct nla_policy nfnl_acct_policy[NFACCT_MAX+1] = …;
static const struct nfnl_callback nfnl_acct_cb[NFNL_MSG_ACCT_MAX] = …;
static const struct nfnetlink_subsystem nfnl_acct_subsys = …;
MODULE_ALIAS_NFNL_SUBSYS(…);
struct nf_acct *nfnl_acct_find_get(struct net *net, const char *acct_name)
{ … }
EXPORT_SYMBOL_GPL(…);
void nfnl_acct_put(struct nf_acct *acct)
{ … }
EXPORT_SYMBOL_GPL(…);
void nfnl_acct_update(const struct sk_buff *skb, struct nf_acct *nfacct)
{ … }
EXPORT_SYMBOL_GPL(…);
static void nfnl_overquota_report(struct net *net, struct nf_acct *nfacct)
{ … }
int nfnl_acct_overquota(struct net *net, struct nf_acct *nfacct)
{ … }
EXPORT_SYMBOL_GPL(…);
static int __net_init nfnl_acct_net_init(struct net *net)
{ … }
static void __net_exit nfnl_acct_net_exit(struct net *net)
{ … }
static struct pernet_operations nfnl_acct_ops = …;
static int __init nfnl_acct_init(void)
{ … }
static void __exit nfnl_acct_exit(void)
{ … }
module_init(…) …;
module_exit(nfnl_acct_exit);