1 #ifndef _NF_CONNTRACK_COUNT_H 2 #define _NF_CONNTRACK_COUNT_H 3 4 #include <linux/list.h> 5 6 struct nf_conncount_data; 7 8 enum nf_conncount_list_add { 9 NF_CONNCOUNT_ADDED, /* list add was ok */ 10 NF_CONNCOUNT_ERR, /* -ENOMEM, must drop skb */ 11 NF_CONNCOUNT_SKIP, /* list is already reclaimed by gc */ 12 }; 13 14 struct nf_conncount_list { 15 spinlock_t list_lock; 16 struct list_head head; /* connections with the same filtering key */ 17 unsigned int count; /* length of list */ 18 bool dead; 19 }; 20 21 struct nf_conncount_data *nf_conncount_init(struct net *net, unsigned int family, 22 unsigned int keylen); 23 void nf_conncount_destroy(struct net *net, unsigned int family, 24 struct nf_conncount_data *data); 25 26 unsigned int nf_conncount_count(struct net *net, 27 struct nf_conncount_data *data, 28 const u32 *key, 29 const struct nf_conntrack_tuple *tuple, 30 const struct nf_conntrack_zone *zone); 31 32 void nf_conncount_lookup(struct net *net, struct nf_conncount_list *list, 33 const struct nf_conntrack_tuple *tuple, 34 const struct nf_conntrack_zone *zone, 35 bool *addit); 36 37 void nf_conncount_list_init(struct nf_conncount_list *list); 38 39 enum nf_conncount_list_add 40 nf_conncount_add(struct nf_conncount_list *list, 41 const struct nf_conntrack_tuple *tuple, 42 const struct nf_conntrack_zone *zone); 43 44 bool nf_conncount_gc_list(struct net *net, 45 struct nf_conncount_list *list); 46 47 void nf_conncount_cache_free(struct nf_conncount_list *list); 48 49 #endif 50