linux/include/net/netfilter/nf_conntrack_acct.h
<<
>>
Prefs
   1/*
   2 * (C) 2008 Krzysztof Piotr Oledzki <ole@ans.pl>
   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#ifndef _NF_CONNTRACK_ACCT_H
  10#define _NF_CONNTRACK_ACCT_H
  11#include <net/net_namespace.h>
  12#include <linux/netfilter/nf_conntrack_common.h>
  13#include <linux/netfilter/nf_conntrack_tuple_common.h>
  14#include <net/netfilter/nf_conntrack.h>
  15#include <net/netfilter/nf_conntrack_extend.h>
  16
  17struct nf_conn_counter {
  18        atomic64_t packets;
  19        atomic64_t bytes;
  20};
  21
  22struct nf_conn_acct {
  23        struct nf_conn_counter counter[IP_CT_DIR_MAX];
  24};
  25
  26static inline
  27struct nf_conn_acct *nf_conn_acct_find(const struct nf_conn *ct)
  28{
  29        return nf_ct_ext_find(ct, NF_CT_EXT_ACCT);
  30}
  31
  32static inline
  33struct nf_conn_acct *nf_ct_acct_ext_add(struct nf_conn *ct, gfp_t gfp)
  34{
  35        struct net *net = nf_ct_net(ct);
  36        struct nf_conn_acct *acct;
  37
  38        if (!net->ct.sysctl_acct)
  39                return NULL;
  40
  41        acct = nf_ct_ext_add(ct, NF_CT_EXT_ACCT, gfp);
  42        if (!acct)
  43                pr_debug("failed to add accounting extension area");
  44
  45
  46        return acct;
  47};
  48
  49unsigned int seq_print_acct(struct seq_file *s, const struct nf_conn *ct,
  50                            int dir);
  51
  52/* Check if connection tracking accounting is enabled */
  53static inline bool nf_ct_acct_enabled(struct net *net)
  54{
  55        return net->ct.sysctl_acct != 0;
  56}
  57
  58/* Enable/disable connection tracking accounting */
  59static inline void nf_ct_set_acct(struct net *net, bool enable)
  60{
  61        net->ct.sysctl_acct = enable;
  62}
  63
  64int nf_conntrack_acct_pernet_init(struct net *net);
  65void nf_conntrack_acct_pernet_fini(struct net *net);
  66
  67int nf_conntrack_acct_init(void);
  68void nf_conntrack_acct_fini(void);
  69#endif /* _NF_CONNTRACK_ACCT_H */
  70