diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-02-15 15:40:47 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-02-15 15:40:47 +0100 |
commit | c4ef74420bc09b82146190870186fb067ac163e9 (patch) | |
tree | 48a54a159968119991d1d294af7ce613fa471c7d /src | |
parent | fe42b4085b7dab5847bb29155ebc70b4d7880ebe (diff) | |
download | conntrack-tools-c4ef74420bc09b82146190870186fb067ac163e9.tar.gz conntrack-tools-c4ef74420bc09b82146190870186fb067ac163e9.zip |
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 <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 23 | ||||
-rw-r--r-- | src/stats-mode.c | 1 | ||||
-rw-r--r-- | src/sync-mode.c | 10 |
3 files changed, 32 insertions, 2 deletions
@@ -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; |