1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _NF_CONNTRACK_COMMON_H
3 #define _NF_CONNTRACK_COMMON_H
4 
5 #include <linux/refcount.h>
6 #include <uapi/linux/netfilter/nf_conntrack_common.h>
7 
8 struct ip_conntrack_stat {
9 	unsigned int found;
10 	unsigned int invalid;
11 	unsigned int insert;
12 	unsigned int insert_failed;
13 	unsigned int clash_resolve;
14 	unsigned int drop;
15 	unsigned int early_drop;
16 	unsigned int error;
17 	unsigned int expect_new;
18 	unsigned int expect_create;
19 	unsigned int expect_delete;
20 	unsigned int search_restart;
21 	unsigned int chaintoolong;
22 };
23 
24 #define NFCT_INFOMASK	7UL
25 #define NFCT_PTRMASK	~(NFCT_INFOMASK)
26 
27 struct nf_conntrack {
28 	refcount_t use;
29 };
30 
31 void nf_conntrack_destroy(struct nf_conntrack *nfct);
32 
33 /* like nf_ct_put, but without module dependency on nf_conntrack */
nf_conntrack_put(struct nf_conntrack * nfct)34 static inline void nf_conntrack_put(struct nf_conntrack *nfct)
35 {
36 	if (nfct && refcount_dec_and_test(&nfct->use))
37 		nf_conntrack_destroy(nfct);
38 }
nf_conntrack_get(struct nf_conntrack * nfct)39 static inline void nf_conntrack_get(struct nf_conntrack *nfct)
40 {
41 	if (nfct)
42 		refcount_inc(&nfct->use);
43 }
44 
45 #endif /* _NF_CONNTRACK_COMMON_H */
46