diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-01-17 18:03:50 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-01-17 18:03:50 +0100 |
commit | b1d00262f999a597fa24af3298195db9cf52b790 (patch) | |
tree | 1d4219c35ff62fa663339e0c6a514f954f60f8b4 /include | |
parent | 786f37040cdcb64b24eb0b437307ed5e208f717f (diff) | |
download | conntrack-tools-b1d00262f999a597fa24af3298195db9cf52b790.tar.gz conntrack-tools-b1d00262f999a597fa24af3298195db9cf52b790.zip |
sync: enqueue state updates to tx_queue
With this patch, all the states updates are enqueued in the
tx_queue. Thus, there's a single output path. This patch adds a
simple refcounting mechanism to note when an object is sitting in
the txqueue. This patch also removes the alarm that is required by
the ftfw approach.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/cache.h | 7 | ||||
-rw-r--r-- | include/sync.h | 2 |
2 files changed, 5 insertions, 4 deletions
diff --git a/include/cache.h b/include/cache.h index fd8e05f..03b6822 100644 --- a/include/cache.h +++ b/include/cache.h @@ -4,7 +4,6 @@ #include <stdint.h> #include <stddef.h> #include "hash.h" -#include "alarm.h" /* cache features */ enum { @@ -36,7 +35,7 @@ struct cache_object { struct nf_conntrack *ct; struct cache *cache; int status; - struct alarm_block alarm; + int refcnt; char data[0]; }; @@ -106,12 +105,14 @@ void cache_destroy(struct cache *e); struct cache_object *cache_object_new(struct cache *c, struct nf_conntrack *ct); void cache_object_free(struct cache_object *obj); +void cache_object_get(struct cache_object *obj); +int cache_object_put(struct cache_object *obj); +void cache_object_set_status(struct cache_object *obj, int status); int cache_add(struct cache *c, struct cache_object *obj, int id); void cache_update(struct cache *c, struct cache_object *obj, int id, struct nf_conntrack *ct); struct cache_object *cache_update_force(struct cache *c, struct nf_conntrack *ct); void cache_del(struct cache *c, struct cache_object *obj); -int cache_del_timer(struct cache *c, struct cache_object *obj, int timeout); struct cache_object *cache_find(struct cache *c, struct nf_conntrack *ct, int *pos); void cache_stats(const struct cache *c, int fd); void cache_stats_extended(const struct cache *c, int fd); diff --git a/include/sync.h b/include/sync.h index bced1cc..51f8f5b 100644 --- a/include/sync.h +++ b/include/sync.h @@ -17,7 +17,7 @@ struct sync_mode { void (*kill)(void); int (*local)(int fd, int type, void *data); int (*recv)(const struct nethdr *net); - void (*send)(struct nethdr *net, struct cache_object *obj); + void (*enqueue)(struct cache_object *obj, int type); void (*xmit)(void); }; |