From 07a3a6fe92c98e251a464a5744421ce211030003 Mon Sep 17 00:00:00 2001 From: "/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org" Date: Wed, 16 Apr 2008 15:37:39 +0000 Subject: add more verbose error notification when the injection of a conntrack fails --- src/cache_iterators.c | 2 ++ src/cache_wt.c | 13 ++++++++++--- src/log.c | 28 ++++++++++++++++++++-------- src/stats-mode.c | 2 +- 4 files changed, 33 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/cache_iterators.c b/src/cache_iterators.c index 92b7b7f..c26d349 100644 --- a/src/cache_iterators.c +++ b/src/cache_iterators.c @@ -98,6 +98,8 @@ static int do_commit(void *data1, void *data2) c->commit_exist++; break; default: + dlog(LOG_ERR, "commit: %s", strerror(errno)); + dlog_ct(STATE(log), u->ct, NFCT_O_PLAIN); c->commit_fail++; break; } diff --git a/src/cache_wt.c b/src/cache_wt.c index 65eb3fe..65a1fc4 100644 --- a/src/cache_wt.c +++ b/src/cache_wt.c @@ -35,16 +35,21 @@ static void add_wt(struct us_conntrack *u) switch (ret) { case -1: dlog(LOG_ERR, "cache_wt problem: %s", strerror(errno)); + dlog_ct(STATE(log), u->ct, NFCT_O_PLAIN); break; case 0: memcpy(ct, u->ct, nfct_maxsize()); - if (nl_create_conntrack(ct) == -1) + if (nl_create_conntrack(ct) == -1) { dlog(LOG_ERR, "cache_wt create: %s", strerror(errno)); + dlog_ct(STATE(log), u->ct, NFCT_O_PLAIN); + } break; case 1: memcpy(ct, u->ct, nfct_maxsize()); - if (nl_update_conntrack(ct) == -1) + if (nl_update_conntrack(ct) == -1) { dlog(LOG_ERR, "cache_wt crt-upd: %s", strerror(errno)); + dlog_ct(STATE(log), u->ct, NFCT_O_PLAIN); + } break; } } @@ -56,8 +61,10 @@ static void upd_wt(struct us_conntrack *u) memcpy(ct, u->ct, nfct_maxsize()); - if (nl_update_conntrack(ct) == -1) + if (nl_update_conntrack(ct) == -1) { dlog(LOG_ERR, "cache_wt update:%s", strerror(errno)); + dlog_ct(STATE(log), u->ct, NFCT_O_PLAIN); + } } static void writethrough_add(struct us_conntrack *u, void *data) diff --git a/src/log.c b/src/log.c index 51e757f..d97a69f 100644 --- a/src/log.c +++ b/src/log.c @@ -104,18 +104,30 @@ void dlog(int priority, const char *format, ...) } } -void dlog_ct(struct nf_conntrack *ct) +void dlog_ct(FILE *fd, struct nf_conntrack *ct, unsigned int type) { - FILE *fd = STATE(stats_log); time_t t; char buf[1024]; char *tmp; - - t = time(NULL); - ctime_r(&t, buf); - tmp = buf + strlen(buf); - buf[strlen(buf)-1]='\t'; - nfct_snprintf(buf+strlen(buf), 1024-strlen(buf), ct, 0, 0, 0); + unsigned int flags = 0; + + buf[0]='\0'; + + switch(type) { + case NFCT_O_PLAIN: + t = time(NULL); + ctime_r(&t, buf); + tmp = buf + strlen(buf); + buf[strlen(buf)-1]='\t'; + break; + case NFCT_O_XML: + tmp = buf; + flags |= NFCT_OF_TIME; + break; + default: + return; + } + nfct_snprintf(buf+strlen(buf), 1024-strlen(buf), ct, 0, type, flags); if (fd) { snprintf(buf+strlen(buf), 1024-strlen(buf), "\n"); diff --git a/src/stats-mode.c b/src/stats-mode.c index 3773feb..5808320 100644 --- a/src/stats-mode.c +++ b/src/stats-mode.c @@ -170,7 +170,7 @@ static int event_destroy_stats(struct nf_conntrack *ct) if (cache_del(STATE_STATS(cache), ct)) { debug_ct(ct, "cache destroy"); - dlog_ct(ct); + dlog_ct(STATE(stats_log), ct, NFCT_O_PLAIN); return 1; } else { debug_ct(ct, "can't destroy!"); -- cgit v1.2.3