netfilter: conntrack: add nf_ct_acct_add()
authorwenxu <wenxu@ucloud.cn>
Sat, 28 Mar 2020 00:57:53 +0000 (08:57 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 30 Mar 2020 00:05:39 +0000 (02:05 +0200)
Add nf_ct_acct_add function to update the conntrack counter
with packets and bytes.

Signed-off-by: wenxu <wenxu@ucloud.cn>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_conntrack_acct.h
net/netfilter/nf_conntrack_core.c

index df198c5..7f44a77 100644 (file)
@@ -65,7 +65,16 @@ static inline void nf_ct_set_acct(struct net *net, bool enable)
 #endif
 }
 
-void nf_ct_acct_update(struct nf_conn *ct, u32 dir, unsigned int bytes);
+void nf_ct_acct_add(struct nf_conn *ct, u32 dir, unsigned int packets,
+                   unsigned int bytes);
+
+static inline void nf_ct_acct_update(struct nf_conn *ct, u32 dir,
+                                    unsigned int bytes)
+{
+#if IS_ENABLED(CONFIG_NF_CONNTRACK)
+       nf_ct_acct_add(ct, dir, 1, bytes);
+#endif
+}
 
 void nf_conntrack_acct_pernet_init(struct net *net);
 
index 7ded6d2..c4582eb 100644 (file)
@@ -865,7 +865,8 @@ out:
 }
 EXPORT_SYMBOL_GPL(nf_conntrack_hash_check_insert);
 
-void nf_ct_acct_update(struct nf_conn *ct, u32 dir, unsigned int bytes)
+void nf_ct_acct_add(struct nf_conn *ct, u32 dir, unsigned int packets,
+                   unsigned int bytes)
 {
        struct nf_conn_acct *acct;
 
@@ -873,11 +874,11 @@ void nf_ct_acct_update(struct nf_conn *ct, u32 dir, unsigned int bytes)
        if (acct) {
                struct nf_conn_counter *counter = acct->counter;
 
-               atomic64_inc(&counter[dir].packets);
+               atomic64_add(packets, &counter[dir].packets);
                atomic64_add(bytes, &counter[dir].bytes);
        }
 }
-EXPORT_SYMBOL_GPL(nf_ct_acct_update);
+EXPORT_SYMBOL_GPL(nf_ct_acct_add);
 
 static void nf_ct_acct_merge(struct nf_conn *ct, enum ip_conntrack_info ctinfo,
                             const struct nf_conn *loser_ct)