]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
kernel-pfroute: Raise tun event when creating/destroying TUN devices for virtual IPs
authorTobias Brunner <tobias@strongswan.org>
Thu, 13 Jun 2013 15:51:16 +0000 (17:51 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 21 Jun 2013 15:03:21 +0000 (17:03 +0200)
src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c

index 6c0b457c5e6331d8d6dbfbc6e86603e1cdead304..520f52a6cf40cf286b2a81b2a200a455961106e7 100644 (file)
@@ -878,7 +878,10 @@ METHOD(kernel_net_t, add_ip, status_t,
                }
        }
        ifaces->destroy(ifaces);
-
+       /* lets do this while holding the lock, thus preventing another thread
+        * from deleting the TUN device concurrently, hopefully listeneres are quick
+        * and cause no deadlocks */
+       hydra->kernel_interface->tun(hydra->kernel_interface, tun, TRUE);
        this->lock->unlock(this->lock);
 
        return SUCCESS;
@@ -901,6 +904,8 @@ METHOD(kernel_net_t, del_ip, status_t,
                if (addr && addr->ip_equals(addr, vip))
                {
                        this->tuns->remove_at(this->tuns, enumerator);
+                       hydra->kernel_interface->tun(hydra->kernel_interface, tun,
+                                                                                FALSE);
                        tun->destroy(tun);
                        found = TRUE;
                        break;