summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
authorEric Leblond <eric@regit.org>2012-08-01 11:27:12 +0000
committerPablo Neira Ayuso <pablo@netfilter.org>2012-08-03 11:21:59 +0200
commit3f4b3658f2323af1e4335186985e6608b49ac9ef (patch)
treeb997c4d0c9fe062af73e74cd6e5a91c6c152b12b /input
parent3d83e7db437e264b8066da55b7120b795320f0d7 (diff)
nfacct: add variable to not zero counter after read
The default nfacct input plugin zeroes counter after each read. This is a limitation as other software can't use the counter at the same time as ulogd2. This patch adds the zerocounter variable to the NFACCT input plugin. If set to zero, the counters are not zeroed. Signed-off-by: Eric Leblond <eric@regit.org> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'input')
-rw-r--r--input/sum/ulogd_inpflow_NFACCT.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/input/sum/ulogd_inpflow_NFACCT.c b/input/sum/ulogd_inpflow_NFACCT.c
index f3b936f..46767b7 100644
--- a/input/sum/ulogd_inpflow_NFACCT.c
+++ b/input/sum/ulogd_inpflow_NFACCT.c
@@ -40,10 +40,17 @@ static struct config_keyset nfacct_kset = {
.options = CONFIG_OPT_NONE,
.u.value = 0,
},
+ {
+ .key = "zerocounter",
+ .type = CONFIG_TYPE_INT,
+ .options = CONFIG_OPT_NONE,
+ .u.value = 1,
+ }
},
- .num_ces = 1,
+ .num_ces = 2,
};
#define pollint_ce(x) (x->ces[0])
+#define zerocounter_ce(x) (x->ces[1])
enum ulogd_nfacct_keys {
ULOGD_NFACCT_NAME,
@@ -145,14 +152,21 @@ static int nfacct_read_cb(int fd, unsigned int what, void *param)
return ret;
}
-static int nfacct_send_request(struct nfacct_pluginstance *cpi)
+static int nfacct_send_request(struct ulogd_pluginstance *upi)
{
+ struct nfacct_pluginstance *cpi =
+ (struct nfacct_pluginstance *)upi->private;
struct nlmsghdr *nlh;
char buf[MNL_SOCKET_BUFFER_SIZE];
+ int flushctr;
+
+ if (zerocounter_ce(upi->config_kset).u.value != 0)
+ flushctr = NFNL_MSG_ACCT_GET_CTRZERO;
+ else
+ flushctr = NFNL_MSG_ACCT_GET;
cpi->seq = time(NULL);
- nlh = nfacct_nlmsg_build_hdr(buf, NFNL_MSG_ACCT_GET_CTRZERO,
- NLM_F_DUMP, cpi->seq);
+ nlh = nfacct_nlmsg_build_hdr(buf, flushctr, NLM_F_DUMP, cpi->seq);
if (mnl_socket_sendto(cpi->nl, nlh, nlh->nlmsg_len) < 0) {
ulogd_log(ULOGD_ERROR, "Cannot send netlink message\n");
@@ -167,7 +181,7 @@ static void polling_timer_cb(struct ulogd_timer *t, void *data)
struct nfacct_pluginstance *cpi =
(struct nfacct_pluginstance *)upi->private;
- nfacct_send_request(cpi);
+ nfacct_send_request(upi);
ulogd_add_timer(&cpi->timer, pollint_ce(upi->config_kset).u.value);
}
@@ -234,12 +248,9 @@ static int destructor_nfacct(struct ulogd_pluginstance *upi)
static void signal_nfacct(struct ulogd_pluginstance *upi, int signal)
{
- struct nfacct_pluginstance *cpi =
- (struct nfacct_pluginstance *)upi->private;
-
switch (signal) {
case SIGUSR2:
- nfacct_send_request(cpi);
+ nfacct_send_request(upi);
break;
}
}