summaryrefslogtreecommitdiffstats
path: root/main/strongswan/0003-vici-add-support-rekeying-events-and-individual-sa-s.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/strongswan/0003-vici-add-support-rekeying-events-and-individual-sa-s.patch')
-rw-r--r--main/strongswan/0003-vici-add-support-rekeying-events-and-individual-sa-s.patch213
1 files changed, 213 insertions, 0 deletions
diff --git a/main/strongswan/0003-vici-add-support-rekeying-events-and-individual-sa-s.patch b/main/strongswan/0003-vici-add-support-rekeying-events-and-individual-sa-s.patch
new file mode 100644
index 000000000..635e75fee
--- /dev/null
+++ b/main/strongswan/0003-vici-add-support-rekeying-events-and-individual-sa-s.patch
@@ -0,0 +1,213 @@
+From 228bfd9f9c0fb27a6802f5d4dc8d747cf4644a1d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Thu, 30 Apr 2015 10:58:15 +0300
+Subject: [PATCH 3/4] vici: add support rekeying events, and individual sa
+ state changes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Useful for monitoring and tracking full SA.
+
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+---
+ src/libcharon/plugins/vici/vici_query.c | 160 ++++++++++++++++++++++++++++++++
+ 1 file changed, 160 insertions(+)
+
+diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c
+index 3d461f7..ade181c 100644
+--- a/src/libcharon/plugins/vici/vici_query.c
++++ b/src/libcharon/plugins/vici/vici_query.c
+@@ -1065,7 +1065,13 @@ static void manage_commands(private_vici_query_t *this, bool reg)
+ this->dispatcher->manage_event(this->dispatcher, "list-conn", reg);
+ this->dispatcher->manage_event(this->dispatcher, "list-cert", reg);
+ this->dispatcher->manage_event(this->dispatcher, "ike-updown", reg);
++ this->dispatcher->manage_event(this->dispatcher, "ike-rekey", reg);
++ this->dispatcher->manage_event(this->dispatcher, "ike-state-established", reg);
++ this->dispatcher->manage_event(this->dispatcher, "ike-state-destroying", reg);
+ this->dispatcher->manage_event(this->dispatcher, "child-updown", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-rekey", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-installed", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-destroying", reg);
+ manage_command(this, "list-sas", list_sas, reg);
+ manage_command(this, "list-policies", list_policies, reg);
+ manage_command(this, "list-conns", list_conns, reg);
+@@ -1100,6 +1106,77 @@ METHOD(listener_t, ike_updown, bool,
+ return TRUE;
+ }
+
++METHOD(listener_t, ike_rekey, bool,
++ private_vici_query_t *this, ike_sa_t *old, ike_sa_t *new)
++{
++ vici_builder_t *b;
++ time_t now;
++
++ if (!this->dispatcher->has_event_listeners(this->dispatcher, "ike-rekey"))
++ {
++ return TRUE;
++ }
++
++ now = time_monotonic(NULL);
++
++ b = vici_builder_create();
++ b->begin_section(b, old->get_name(old));
++ list_ike(this, b, old, now, TRUE);
++ b->begin_section(b, "child-sas");
++ b->end_section(b);
++ b->end_section(b);
++
++ b->begin_section(b, new->get_name(new));
++ list_ike(this, b, new, now, TRUE);
++ b->begin_section(b, "child-sas");
++ b->end_section(b);
++ b->end_section(b);
++
++ this->dispatcher->raise_event(this->dispatcher,
++ "ike-rekey", 0, b->finalize(b));
++
++ return TRUE;
++}
++
++METHOD(listener_t, ike_state_change, bool,
++ private_vici_query_t *this, ike_sa_t *ike_sa, ike_sa_state_t state)
++{
++ char *event;
++ vici_builder_t *b;
++ time_t now;
++
++ switch (state)
++ {
++ case IKE_ESTABLISHED:
++ event = "ike-state-established";
++ break;
++ case IKE_DESTROYING:
++ event = "ike-state-destroying";
++ break;
++ default:
++ return TRUE;
++ }
++
++ if (!this->dispatcher->has_event_listeners(this->dispatcher, event))
++ {
++ return TRUE;
++ }
++
++ now = time_monotonic(NULL);
++
++ b = vici_builder_create();
++ b->begin_section(b, ike_sa->get_name(ike_sa));
++ list_ike(this, b, ike_sa, now, state != IKE_DESTROYING);
++ b->begin_section(b, "child-sas");
++ b->end_section(b);
++ b->end_section(b);
++
++ this->dispatcher->raise_event(this->dispatcher,
++ event, 0, b->finalize(b));
++
++ return TRUE;
++}
++
+ METHOD(listener_t, child_updown, bool,
+ private_vici_query_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, bool up)
+ {
+@@ -1131,6 +1208,85 @@ METHOD(listener_t, child_updown, bool,
+ return TRUE;
+ }
+
++METHOD(listener_t, child_rekey, bool,
++ private_vici_query_t *this, ike_sa_t *ike_sa, child_sa_t *old, child_sa_t *new)
++{
++ vici_builder_t *b;
++ time_t now;
++
++ if (!this->dispatcher->has_event_listeners(this->dispatcher, "child-rekey"))
++ {
++ return TRUE;
++ }
++
++ now = time_monotonic(NULL);
++ b = vici_builder_create();
++
++ b->begin_section(b, ike_sa->get_name(ike_sa));
++ list_ike(this, b, ike_sa, now, TRUE);
++ b->begin_section(b, "child-sas");
++
++ b->begin_section(b, old->get_name(old));
++ list_child(this, b, old, now);
++ b->end_section(b);
++
++ b->begin_section(b, new->get_name(new));
++ list_child(this, b, new, now);
++ b->end_section(b);
++
++ b->end_section(b);
++ b->end_section(b);
++
++ this->dispatcher->raise_event(this->dispatcher,
++ "child-rekey", 0, b->finalize(b));
++
++ return TRUE;
++}
++
++METHOD(listener_t, child_state_change, bool,
++ private_vici_query_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, child_sa_state_t state)
++{
++ char *event;
++ vici_builder_t *b;
++ time_t now;
++
++ switch (state)
++ {
++ case CHILD_INSTALLED:
++ event = "child-state-installed";
++ break;
++ case CHILD_DESTROYING:
++ event = "child-state-destroying";
++ break;
++ default:
++ return TRUE;
++ }
++
++ if (!this->dispatcher->has_event_listeners(this->dispatcher, event))
++ {
++ return TRUE;
++ }
++
++ now = time_monotonic(NULL);
++
++ b = vici_builder_create();
++ b->begin_section(b, ike_sa->get_name(ike_sa));
++ list_ike(this, b, ike_sa, now, state != CHILD_DESTROYING);
++ b->begin_section(b, "child-sas");
++
++ b->begin_section(b, child_sa->get_name(child_sa));
++ list_child(this, b, child_sa, now);
++ b->end_section(b);
++
++ b->end_section(b);
++ b->end_section(b);
++
++ this->dispatcher->raise_event(this->dispatcher,
++ event, 0, b->finalize(b));
++
++ return TRUE;
++}
++
+ METHOD(vici_query_t, destroy, void,
+ private_vici_query_t *this)
+ {
+@@ -1149,7 +1305,11 @@ vici_query_t *vici_query_create(vici_dispatcher_t *dispatcher)
+ .public = {
+ .listener = {
+ .ike_updown = _ike_updown,
++ .ike_rekey = _ike_rekey,
++ .ike_state_change = _ike_state_change,
+ .child_updown = _child_updown,
++ .child_rekey = _child_rekey,
++ .child_state_change = _child_state_change,
+ },
+ .destroy = _destroy,
+ },
+--
+2.4.2
+