]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
ikev2: Enable path probing for currently active MOBIKE task
authorTobias Brunner <tobias@strongswan.org>
Mon, 28 Jul 2014 10:25:01 +0000 (12:25 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 12 Sep 2014 08:29:36 +0000 (10:29 +0200)
This might not be the case if e.g. an address appeared but the old one
is still available but not actually usable.  Without this the MOBIKE
task would eventually time out even though we might be able to switch
to a working address.

src/libcharon/sa/ikev2/task_manager_v2.c

index 630c902f4c35325067e5050b7c359e511539f3f9..cd663dd81cf6010ca41dfb585d1f4d2cc8f865d7 100644 (file)
@@ -1373,7 +1373,25 @@ METHOD(task_manager_t, queue_mobike, void,
        mobike = ike_mobike_create(this->ike_sa, TRUE);
        if (roam)
        {
+               enumerator_t *enumerator;
+               task_t *current;
+
                mobike->roam(mobike, address);
+
+               /* enable path probing for a currently active MOBIKE task.  This might
+                * not be the case if an address appeared on a new interface while the
+                * current address is not working but has not yet disappeared. */
+               enumerator = array_create_enumerator(this->active_tasks);
+               while (enumerator->enumerate(enumerator, &current))
+               {
+                       if (current->get_type(current) == TASK_IKE_MOBIKE)
+                       {
+                               ike_mobike_t *active = (ike_mobike_t*)current;
+                               active->enable_probing(active);
+                               break;
+                       }
+               }
+               enumerator->destroy(enumerator);
        }
        else
        {