From 8956dcecd4f123da03993fcb22ea874610ca82f7 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 28 Jul 2014 13:46:16 +0200 Subject: [PATCH] ike-mobike: Allow calling transmit() even when not currently path probing Path probing is enabled if the current path is not available anymore. --- src/libcharon/sa/ikev2/tasks/ike_mobike.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/libcharon/sa/ikev2/tasks/ike_mobike.c b/src/libcharon/sa/ikev2/tasks/ike_mobike.c index 65679016c..d91fa5862 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_mobike.c +++ b/src/libcharon/sa/ikev2/tasks/ike_mobike.c @@ -316,9 +316,25 @@ METHOD(ike_mobike_t, transmit, bool, int family = AF_UNSPEC; bool found = FALSE; + me_old = this->ike_sa->get_my_host(this->ike_sa); + other_old = this->ike_sa->get_other_host(this->ike_sa); + ike_cfg = this->ike_sa->get_ike_cfg(this->ike_sa); + if (!this->check) { - return TRUE; + me = hydra->kernel_interface->get_source_addr(hydra->kernel_interface, + other_old, me_old); + if (me) + { + if (me->ip_equals(me, me_old)) + { + charon->sender->send(charon->sender, packet->clone(packet)); + me->destroy(me); + return TRUE; + } + me->destroy(me); + } + this->check = TRUE; } switch (charon->socket->supported_families(charon->socket)) @@ -334,10 +350,6 @@ METHOD(ike_mobike_t, transmit, bool, break; } - me_old = this->ike_sa->get_my_host(this->ike_sa); - other_old = this->ike_sa->get_other_host(this->ike_sa); - ike_cfg = this->ike_sa->get_ike_cfg(this->ike_sa); - enumerator = this->ike_sa->create_peer_address_enumerator(this->ike_sa); while (enumerator->enumerate(enumerator, (void**)&other)) {