diff options
| author | Martin Willi <martin@revosec.ch> | 2013-03-15 10:55:22 +0100 |
|---|---|---|
| committer | Martin Willi <martin@revosec.ch> | 2013-03-15 10:55:22 +0100 |
| commit | cf729248b28473b9651e347741d351cf0d34892f (patch) | |
| tree | ffa05dd5a68b0fec088d779323fec34b36c45f33 /src/libcharon/plugins/stroke | |
| parent | d022322bed29e0b6d1ca09edb891402d7e2cc73f (diff) | |
| download | strongswan-cf729248b28473b9651e347741d351cf0d34892f.tar.bz2 strongswan-cf729248b28473b9651e347741d351cf0d34892f.tar.xz | |
Add a "resetcounters" command to ipsec, clearing global or connection counters
Diffstat (limited to 'src/libcharon/plugins/stroke')
| -rw-r--r-- | src/libcharon/plugins/stroke/stroke_counter.c | 22 | ||||
| -rw-r--r-- | src/libcharon/plugins/stroke/stroke_counter.h | 7 | ||||
| -rw-r--r-- | src/libcharon/plugins/stroke/stroke_socket.c | 10 |
3 files changed, 38 insertions, 1 deletions
diff --git a/src/libcharon/plugins/stroke/stroke_counter.c b/src/libcharon/plugins/stroke/stroke_counter.c index e64415f5d..ff4746bf4 100644 --- a/src/libcharon/plugins/stroke/stroke_counter.c +++ b/src/libcharon/plugins/stroke/stroke_counter.c @@ -336,6 +336,27 @@ METHOD(stroke_counter_t, print, void, } } +METHOD(stroke_counter_t, reset, void, + private_stroke_counter_t *this, char *name) +{ + this->lock->lock(this->lock); + if (name) + { + entry_t *entry; + + entry = this->conns->remove(this->conns, name); + if (entry) + { + destroy_entry(entry); + } + } + else + { + memset(&this->counter, 0, sizeof(this->counter)); + } + this->lock->unlock(this->lock); +} + METHOD(stroke_counter_t, destroy, void, private_stroke_counter_t *this) { @@ -370,6 +391,7 @@ stroke_counter_t *stroke_counter_create() .message = _message_hook, }, .print = _print, + .reset = _reset, .destroy = _destroy, }, .conns = hashtable_create((hashtable_hash_t)hash, diff --git a/src/libcharon/plugins/stroke/stroke_counter.h b/src/libcharon/plugins/stroke/stroke_counter.h index b39fcb8dd..fecf39f56 100644 --- a/src/libcharon/plugins/stroke/stroke_counter.h +++ b/src/libcharon/plugins/stroke/stroke_counter.h @@ -92,6 +92,13 @@ struct stroke_counter_t { void (*print)(stroke_counter_t *this, FILE *out, char *name); /** + * Reset global or connection specific counters. + * + * @param name name of connection counters to reset, NULL for global + */ + void (*reset)(stroke_counter_t *this, char *name); + + /** * Destroy a stroke_counter_t. */ void (*destroy)(stroke_counter_t *this); diff --git a/src/libcharon/plugins/stroke/stroke_socket.c b/src/libcharon/plugins/stroke/stroke_socket.c index ebb3c723d..7d41682fb 100644 --- a/src/libcharon/plugins/stroke/stroke_socket.c +++ b/src/libcharon/plugins/stroke/stroke_socket.c @@ -509,7 +509,14 @@ static void stroke_counters(private_stroke_socket_t *this, { pop_string(msg, &msg->counters.name); - this->counter->print(this->counter, out, msg->counters.name); + if (msg->counters.reset) + { + this->counter->reset(this->counter, msg->counters.name); + } + else + { + this->counter->print(this->counter, out, msg->counters.name); + } } /** @@ -675,6 +682,7 @@ static job_requeue_t process(stroke_job_context_t *ctx) break; case STR_COUNTERS: stroke_counters(this, msg, out); + break; default: DBG1(DBG_CFG, "received unknown stroke"); break; |
