aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libcharon/plugins/lookip/lookip_listener.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/libcharon/plugins/lookip/lookip_listener.c b/src/libcharon/plugins/lookip/lookip_listener.c
index 3a67eae08..f1f630f37 100644
--- a/src/libcharon/plugins/lookip/lookip_listener.c
+++ b/src/libcharon/plugins/lookip/lookip_listener.c
@@ -227,6 +227,18 @@ METHOD(listener_t, ike_updown, bool,
return TRUE;
}
+METHOD(listener_t, ike_rekey, bool,
+ private_lookip_listener_t *this, ike_sa_t *old, ike_sa_t *new)
+{
+ /* During IKE_SA rekey, the unique identifier changes. Fire update events
+ * and update the cached entry. During the invocation of this hook, the
+ * virutal IPs have been migrated to new, hence remove that entry. */
+ remove_entry(this, new);
+ add_entry(this, new);
+
+ return TRUE;
+}
+
METHOD(lookip_listener_t, lookup, int,
private_lookip_listener_t *this, host_t *vip,
lookip_callback_t cb, void *user)
@@ -299,6 +311,7 @@ lookip_listener_t *lookip_listener_create()
.listener = {
.message = _message_hook,
.ike_updown = _ike_updown,
+ .ike_rekey = _ike_rekey,
},
.lookup = _lookup,
.add_listener = _add_listener,