diff options
| author | Alexander Wirt <formorer@debian.org> | 2012-06-03 08:49:55 +0200 |
|---|---|---|
| committer | Alexander Wirt <formorer@debian.org> | 2012-06-03 08:49:55 +0200 |
| commit | ceecc8855af313c14e8a164f1cd0399716174398 (patch) | |
| tree | 0d58f5cf7075dea5ff7ddeff6f9a3c89d9eb6352 /include/queue.h | |
| parent | 10f2c00aa6ef875e7998838c200681c6ea5eeebe (diff) | |
| parent | ea27bb406e3d8fe9466ba274af38e6f540ff5bfc (diff) | |
| download | conntrack-tools-ceecc8855af313c14e8a164f1cd0399716174398.tar.gz conntrack-tools-ceecc8855af313c14e8a164f1cd0399716174398.zip | |
Merge tag 'upstream/1.2.1'
Upstream version 1.2.1
Diffstat (limited to 'include/queue.h')
| -rw-r--r-- | include/queue.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/include/queue.h b/include/queue.h new file mode 100644 index 0000000..188e106 --- /dev/null +++ b/include/queue.h @@ -0,0 +1,62 @@ +#ifndef _QUEUE_H_ +#define _QUEUE_H_ + +#include <stdint.h> +#include "linux_list.h" + +struct queue_node { + struct list_head head; + uint32_t type; + struct queue *owner; + size_t size; +}; + +enum { + Q_ELEM_OBJ = 0, + Q_ELEM_CTL = 1, + Q_ELEM_ERR = 2, +}; + +void queue_node_init(struct queue_node *n, int type); +void *queue_node_data(struct queue_node *n); + +struct queue_object { + struct queue_node qnode; + char data[0]; +}; + +struct queue_object *queue_object_new(int type, size_t size); +void queue_object_free(struct queue_object *obj); + +struct evfd; + +#define QUEUE_NAMELEN 16 + +struct queue { + struct list_head list; + unsigned int max_elems; + unsigned int num_elems; + uint32_t enospc_err; + uint32_t flags; + struct list_head head; + struct evfd *evfd; + char name[QUEUE_NAMELEN]; +}; + +#define QUEUE_F_EVFD (1U << 0) + +struct queue *queue_create(const char *name, + int max_objects, unsigned int flags); +void queue_destroy(struct queue *b); +void queue_stats_show(int fd); +unsigned int queue_len(const struct queue *b); +int queue_add(struct queue *b, struct queue_node *n); +int queue_del(struct queue_node *n); +struct queue_node *queue_del_head(struct queue *b); +int queue_in(struct queue *b, struct queue_node *n); +void queue_iterate(struct queue *b, + const void *data, + int (*iterate)(struct queue_node *n, const void *data2)); +int queue_get_eventfd(struct queue *b); + +#endif |
