From: Tobias Brunner Date: Thu, 4 Jul 2013 17:14:44 +0000 (+0200) Subject: ikev1: Reestablish IKE_SA/CHILD_SAs if it gets deleted by the peer X-Git-Tag: 5.1.0rc1~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a9ffb48f2132780f72a525bfd061afa8c1d8afe4;p=thirdparty%2Fstrongswan.git ikev1: Reestablish IKE_SA/CHILD_SAs if it gets deleted by the peer We call ike_sa_t.reestablish() so the IKE_SA is only recreated if any CHILD_SA requires it. --- diff --git a/src/libcharon/sa/ikev1/tasks/isakmp_delete.c b/src/libcharon/sa/ikev1/tasks/isakmp_delete.c index 0640d13b17..a44f3c4a9c 100644 --- a/src/libcharon/sa/ikev1/tasks/isakmp_delete.c +++ b/src/libcharon/sa/ikev1/tasks/isakmp_delete.c @@ -85,6 +85,11 @@ METHOD(task_t, process_r, status_t, this->ike_sa->get_other_host(this->ike_sa), this->ike_sa->get_other_id(this->ike_sa)); + if (this->ike_sa->get_state(this->ike_sa) == IKE_ESTABLISHED) + { + this->ike_sa->set_state(this->ike_sa, IKE_DELETING); + this->ike_sa->reestablish(this->ike_sa); + } this->ike_sa->set_state(this->ike_sa, IKE_DELETING); charon->bus->ike_updown(charon->bus, this->ike_sa, FALSE); return DESTROY_ME;