diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-06-20 21:17:43 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-06-20 21:17:43 +0200 |
commit | b524c764aba149018fa83dec742c21dc8116838e (patch) | |
tree | be9d180f154ecd55c0c48baaab82c5e119482c6d /src/queue.c | |
parent | 4cfc8533743a766db0b2c8ae27b7bba312eb3ec0 (diff) | |
download | conntrack-tools-b524c764aba149018fa83dec742c21dc8116838e.tar.gz conntrack-tools-b524c764aba149018fa83dec742c21dc8116838e.zip |
conntrackd: add `-s queue' to display queue statistics
This patch re-introduces `-s queue' but now it displays generic
queue statistics.
# conntrackd -s queue
active queue objects: 0
queue txqueue:
current elements: 0
maximum elements: 2147483647
not enough space errors: 0
queue rsqueue:
current elements: 72
maximum elements: 128
not enough space errors: 0
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/queue.c')
-rw-r--r-- | src/queue.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/queue.c b/src/queue.c index e5dc307..6f5707f 100644 --- a/src/queue.c +++ b/src/queue.c @@ -20,8 +20,12 @@ #include "event.h" #include <errno.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/socket.h> + +static LIST_HEAD(queue_list); /* list of existing queues */ struct queue * queue_create(const char *name, int max_objects, unsigned int flags) @@ -45,17 +49,37 @@ queue_create(const char *name, int max_objects, unsigned int flags) } strncpy(b->name, name, QUEUE_NAMELEN); b->name[QUEUE_NAMELEN-1]='\0'; + list_add(&b->list, &queue_list); return b; } void queue_destroy(struct queue *b) { + list_del(&b->list); if (b->flags & QUEUE_F_EVFD) destroy_evfd(b->evfd); free(b); } +void queue_stats_show(int fd) +{ + struct queue *this; + int size = 0; + char buf[512]; + + list_for_each_entry(this, &queue_list, list) { + size += snprintf(buf+size, sizeof(buf), + "queue %s:\n" + "current elements:\t\t%12u\n" + "maximum elements:\t\t%12u\n\n", + this->name, + this->num_elems, + this->max_elems); + } + send(fd, buf, size, 0); +} + void queue_node_init(struct queue_node *n, int type) { INIT_LIST_HEAD(&n->head); |