aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-10-08 11:59:20 +0200
committerMartin Willi <martin@revosec.ch>2012-10-24 11:34:31 +0200
commitf9332e0a8b4541d294974dd69f7982c45a29adfe (patch)
tree9d56f24a2b13c8db65ee4c27db9b83ddba356233 /src
parent2232d88569bb58e8a6579dd301b45097ceaf4738 (diff)
downloadstrongswan-f9332e0a8b4541d294974dd69f7982c45a29adfe.tar.bz2
strongswan-f9332e0a8b4541d294974dd69f7982c45a29adfe.tar.xz
Add a print method for stroke counters
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/plugins/stroke/stroke_counter.c22
-rw-r--r--src/libcharon/plugins/stroke/stroke_counter.h7
2 files changed, 29 insertions, 0 deletions
diff --git a/src/libcharon/plugins/stroke/stroke_counter.c b/src/libcharon/plugins/stroke/stroke_counter.c
index d12009870..6e30a9f02 100644
--- a/src/libcharon/plugins/stroke/stroke_counter.c
+++ b/src/libcharon/plugins/stroke/stroke_counter.c
@@ -199,6 +199,27 @@ METHOD(listener_t, message_hook, bool,
return TRUE;
}
+METHOD(stroke_counter_t, print, void,
+ private_stroke_counter_t *this, FILE *out)
+{
+ u_int64_t counter[COUNTER_MAX];
+ int i;
+
+ /* Take a snapshot to have congruent results, */
+ this->lock->lock(this->lock);
+ for (i = 0; i < countof(this->counter); i++)
+ {
+ counter[i] = this->counter[i];
+ }
+ this->lock->unlock(this->lock);
+
+ /* but do blocking write without the lock. */
+ for (i = 0; i < countof(this->counter); i++)
+ {
+ fprintf(out, "%-18N %12llu\n", stroke_counter_type_names, i, counter[i]);
+ }
+}
+
METHOD(stroke_counter_t, destroy, void,
private_stroke_counter_t *this)
{
@@ -221,6 +242,7 @@ stroke_counter_t *stroke_counter_create()
.child_rekey = _child_rekey,
.message = _message_hook,
},
+ .print = _print,
.destroy = _destroy,
},
.lock = spinlock_create(),
diff --git a/src/libcharon/plugins/stroke/stroke_counter.h b/src/libcharon/plugins/stroke/stroke_counter.h
index fecdce4fa..efaae0d6f 100644
--- a/src/libcharon/plugins/stroke/stroke_counter.h
+++ b/src/libcharon/plugins/stroke/stroke_counter.h
@@ -84,6 +84,13 @@ struct stroke_counter_t {
listener_t listener;
/**
+ * Print counter values to an output stream.
+ *
+ * @param out output stream to write to
+ */
+ void (*print)(stroke_counter_t *this, FILE *out);
+
+ /**
* Destroy a stroke_counter_t.
*/
void (*destroy)(stroke_counter_t *this);