]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
kernel-iph: Implicitly enable IP forwarding when installing routes
authorMartin Willi <martin@revosec.ch>
Tue, 24 Dec 2013 09:40:09 +0000 (10:40 +0100)
committerMartin Willi <martin@revosec.ch>
Wed, 4 Jun 2014 14:32:11 +0000 (16:32 +0200)
src/libcharon/plugins/kernel_iph/kernel_iph_net.c

index 71c595ba751b9c1308d107e259d316dc8b0776ae..68b753792f3ed8e2d3d394640af445797b2a5074 100644 (file)
@@ -50,6 +50,11 @@ struct private_kernel_iph_net_t {
         */
        HANDLE changes;
 
+       /**
+        * EnableRouter() OVERLAPPED
+        */
+       OVERLAPPED router;
+
        /**
         * Mutex to access interface list
         */
@@ -677,6 +682,23 @@ static status_t manage_route(private_kernel_iph_net_t *this, bool add,
                DBG1(DBG_KNL, "%sing route failed: 0x%08lx", add ? "add" : "remov", ret);
                return FAILED;
        }
+
+       if (add)
+       {
+               ret = EnableRouter(NULL, &this->router);
+               if (ret != ERROR_IO_PENDING)
+               {
+                       DBG1(DBG_KNL, "EnableRouter router failed: 0x%08lx", ret);
+               }
+       }
+       else
+       {
+               ret = UnenableRouter(&this->router, NULL);
+               if (ret != NO_ERROR)
+               {
+                       DBG1(DBG_KNL, "UnenableRouter router failed: 0x%08lx", ret);
+               }
+       }
        return SUCCESS;
 }
 
@@ -701,6 +723,7 @@ METHOD(kernel_net_t, destroy, void,
        {
                CancelMibChangeNotify2(this->changes);
        }
+       CloseHandle(this->router.hEvent);
        this->mutex->destroy(this->mutex);
        this->ifaces->destroy_function(this->ifaces, (void*)iface_destroy);
        free(this);
@@ -728,6 +751,9 @@ kernel_iph_net_t *kernel_iph_net_create()
                                .destroy = _destroy,
                        },
                },
+               .router = {
+                       .hEvent = CreateEvent(NULL, FALSE, FALSE, NULL),
+               },
                .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
                .ifaces = linked_list_create(),
        );