From c4ef74420bc09b82146190870186fb067ac163e9 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Sun, 15 Feb 2009 15:40:47 +0100 Subject: conntrackd: add `-f internal' and `-f external' options This patch allows flushing the internal and/or the external cache. The `-f' with no extra parameters still works to flush both the internal and the external cache. Signed-off-by: Pablo Neira Ayuso --- src/main.c | 23 +++++++++++++++++++++-- src/stats-mode.c | 1 + src/sync-mode.c | 10 ++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 8f75904..82f0d27 100644 --- a/src/main.c +++ b/src/main.c @@ -38,7 +38,7 @@ static const char usage_daemon_commands[] = static const char usage_client_commands[] = "Client mode commands:\n" " -c, commit external cache to conntrack table\n" - " -f, flush internal and external cache\n" + " -f [|internal|external], flush internal and external cache\n" " -F, flush kernel conntrack table\n" " -i, display content of the internal cache\n" " -e, display the content of the external cache\n" @@ -144,7 +144,26 @@ int main(int argc, char *argv[]) break; case 'f': set_operation_mode(&type, REQUEST, argv); - action = FLUSH_CACHE; + if (i+1 < argc && argv[i+1][0] != '-') { + if (strncmp(argv[i+1], "internal", + strlen(argv[i+1])) == 0) { + action = FLUSH_INT_CACHE; + i++; + } else if (strncmp(argv[i+1], "external", + strlen(argv[i+1])) == 0) { + action = FLUSH_EXT_CACHE; + i++; + } else { + fprintf(stderr, "ERROR: unknown " + "parameter `%s' for " + "option `-f'\n", + argv[i+1]); + exit(EXIT_FAILURE); + } + } else { + /* default to general flushing */ + action = FLUSH_CACHE; + } break; case 'R': set_operation_mode(&type, REQUEST, argv); diff --git a/src/stats-mode.c b/src/stats-mode.c index d561409..94fc45b 100644 --- a/src/stats-mode.c +++ b/src/stats-mode.c @@ -66,6 +66,7 @@ static int local_handler_stats(int fd, int type, void *data) cache_dump(STATE_STATS(cache), fd, NFCT_O_XML); break; case FLUSH_CACHE: + case FLUSH_INT_CACHE: dlog(LOG_NOTICE, "flushing caches"); cache_flush(STATE_STATS(cache)); break; diff --git a/src/sync-mode.c b/src/sync-mode.c index 74eb36e..866b313 100644 --- a/src/sync-mode.c +++ b/src/sync-mode.c @@ -466,6 +466,16 @@ static int local_handler_sync(int fd, int type, void *data) cache_flush(STATE_SYNC(internal)); cache_flush(STATE_SYNC(external)); break; + case FLUSH_INT_CACHE: + /* inmediate flush, remove pending flush scheduled if any */ + del_alarm(&STATE_SYNC(reset_cache_alarm)); + dlog(LOG_NOTICE, "flushing internal cache"); + cache_flush(STATE_SYNC(internal)); + break; + case FLUSH_EXT_CACHE: + dlog(LOG_NOTICE, "flushing external cache"); + cache_flush(STATE_SYNC(external)); + break; case KILL: killer(0); break; -- cgit v1.2.3