From: Pablo Neira Ayuso <pablo@netfilter.org>
To: netfilter-devel@vger.kernel.org
Subject: [PATCH 6/6] NFCT: fix reset counters via SIGUSR2 signal
Date: Wed, 13 Jan 2010 12:44:24 +0100 [thread overview]
Message-ID: <20100113114424.12994.6470.stgit@decadence> (raw)
In-Reply-To: <20100113114009.12994.26386.stgit@decadence>
This patch fixes a feature that allows to force the logging of
the existing entries and reset the counters.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
input/flow/ulogd_inpflow_NFCT.c | 55 +++++++++++++++++++++++++++++++++++++--
1 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/input/flow/ulogd_inpflow_NFCT.c b/input/flow/ulogd_inpflow_NFCT.c
index 8e01feb..b52c5b6 100644
--- a/input/flow/ulogd_inpflow_NFCT.c
+++ b/input/flow/ulogd_inpflow_NFCT.c
@@ -874,13 +874,62 @@ static int read_cb_ovh(int fd, unsigned int what, void *param)
return 0;
}
-static int get_ctr_zero(struct ulogd_pluginstance *upi)
+static int
+dump_reset_handler(enum nf_conntrack_msg_type type,
+ struct nf_conntrack *ct, void *data)
{
- int family = 0; /* any */
+ struct ulogd_pluginstance *upi = data;
struct nfct_pluginstance *cpi =
(struct nfct_pluginstance *)upi->private;
+ int ret = NFCT_CB_CONTINUE, rc, id;
+ struct ct_timestamp *ts;
+
+ switch(type) {
+ case NFCT_T_UPDATE:
+ id = hashtable_hash(cpi->ct_active, ct);
+ ts = (struct ct_timestamp *)
+ hashtable_find(cpi->ct_active, ct, id);
+ if (ts)
+ nfct_copy(ts->ct, ct, NFCT_CP_META);
+ else {
+ ts = calloc(sizeof(struct ct_timestamp), 1);
+ if (ts == NULL)
+ return NFCT_CB_CONTINUE;
+
+ ts->ct = ct;
+ gettimeofday(&ts->time[START], NULL);
+
+ rc = hashtable_add(cpi->ct_active, &ts->hashnode, id);
+ if (rc < 0) {
+ free(ts);
+ return NFCT_CB_CONTINUE;
+ }
+ ret = NFCT_CB_STOLEN;
+ }
+ do_propagate_ct(upi, ct, type, ts);
+ break;
+ default:
+ ulogd_log(ULOGD_NOTICE, "unknown netlink message type\n");
+ break;
+ }
+ return ret;
+}
+
+static void get_ctr_zero(struct ulogd_pluginstance *upi)
+{
+ struct nfct_handle *h;
+ int family = AF_UNSPEC;
+
+ h = nfct_open(CONNTRACK, 0);
+ if (h == NULL) {
+ ulogd_log(ULOGD_FATAL, "Cannot dump and reset counters\n");
+ return;
+ }
+ nfct_callback_register(h, NFCT_T_ALL, &dump_reset_handler, upi);
+ if (nfct_query(h, NFCT_Q_DUMP_RESET, &family) == -1)
+ ulogd_log(ULOGD_FATAL, "Cannot dump and reset counters\n");
- return nfct_query(cpi->cth, NFCT_Q_DUMP_RESET, &family);
+ nfct_close(h);
}
static void polling_timer_cb(struct ulogd_timer *t, void *data)
prev parent reply other threads:[~2010-01-13 11:49 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-13 11:42 [PATCH 0/6] ulogd2 updates for NFCT Pablo Neira Ayuso
2010-01-13 11:42 ` [PATCH 1/6] NFCT: cleanup constructor and destructor functions Pablo Neira Ayuso
2010-01-13 11:42 ` [PATCH 2/6] NFCT: change `pollinterval' behaviour Pablo Neira Ayuso
2010-01-13 11:43 ` [PATCH 3/6] NFCT: use new hashtable implementation for better performance Pablo Neira Ayuso
2010-01-13 11:43 ` [PATCH 4/6] NFCT: split event handler if hashtable is used or not Pablo Neira Ayuso
2010-01-13 11:44 ` [PATCH 5/6] NFCT: fix number of options (missing one) Pablo Neira Ayuso
2010-01-13 11:44 ` Pablo Neira Ayuso [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100113114424.12994.6470.stgit@decadence \
--to=pablo@netfilter.org \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).