adding new virtual ip before deleting old one to keep IP on reauthentication
authorMartin Willi <martin@strongswan.org>
Thu, 25 Oct 2007 07:50:23 +0000 (07:50 -0000)
committerMartin Willi <martin@strongswan.org>
Thu, 25 Oct 2007 07:50:23 +0000 (07:50 -0000)
src/charon/sa/ike_sa.c

index 9d7a17e..72996ce 100644 (file)
@@ -681,17 +681,17 @@ static void set_virtual_ip(private_ike_sa_t *this, bool local, host_t *ip)
 {
        if (local)
        {
-               if (this->my_virtual_ip)
-               {               
-                       DBG1(DBG_IKE, "removing old virtual IP %H", this->my_virtual_ip);
-                       charon->kernel_interface->del_ip(charon->kernel_interface,
-                                                                                        this->my_virtual_ip);
-                       this->my_virtual_ip->destroy(this->my_virtual_ip);
-               }
                DBG1(DBG_IKE, "installing new virtual IP %H", ip);
                if (charon->kernel_interface->add_ip(charon->kernel_interface, ip,
                                                                                         this->my_host) == SUCCESS)
                {
+                       if (this->my_virtual_ip)
+                       {
+                               DBG1(DBG_IKE, "removing old virtual IP %H", this->my_virtual_ip);
+                               charon->kernel_interface->del_ip(charon->kernel_interface,
+                                                                                                this->my_virtual_ip);
+                       }
+                       DESTROY_IF(this->my_virtual_ip);
                        this->my_virtual_ip = ip->clone(ip);
                }
                else