1 #ifndef _NF_CONNTRACK_COUNT_H
2 #define _NF_CONNTRACK_COUNT_H
3 
4 #include <linux/list.h>
5 #include <linux/spinlock.h>
6 #include <net/netfilter/nf_conntrack_tuple.h>
7 #include <net/netfilter/nf_conntrack_zones.h>
8 
9 struct nf_conncount_data;
10 
11 struct nf_conncount_list {
12 	spinlock_t list_lock;
13 	struct list_head head;	/* connections with the same filtering key */
14 	unsigned int count;	/* length of list */
15 };
16 
17 struct nf_conncount_data *nf_conncount_init(struct net *net, unsigned int family,
18 					    unsigned int keylen);
19 void nf_conncount_destroy(struct net *net, unsigned int family,
20 			  struct nf_conncount_data *data);
21 
22 unsigned int nf_conncount_count(struct net *net,
23 				struct nf_conncount_data *data,
24 				const u32 *key,
25 				const struct nf_conntrack_tuple *tuple,
26 				const struct nf_conntrack_zone *zone);
27 
28 int nf_conncount_add(struct net *net, struct nf_conncount_list *list,
29 		     const struct nf_conntrack_tuple *tuple,
30 		     const struct nf_conntrack_zone *zone);
31 
32 void nf_conncount_list_init(struct nf_conncount_list *list);
33 
34 bool nf_conncount_gc_list(struct net *net,
35 			  struct nf_conncount_list *list);
36 
37 void nf_conncount_cache_free(struct nf_conncount_list *list);
38 
39 #endif
40