If the extension was previously enabled and running, after issuing a
restart, stop+start, the extension fails to be enabled. This happens
because the extension's DeviceObject is not yet initialized before the
FilterAttach routine is called.

This patch addresses this issue.

Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com>
Reported-by: Sorin Vinturis <svintu...@cloudbasesolutions.com>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/96
---
This patch is for both master and 2.4 branch.
---
 datapath-windows/ovsext/TunnelFilter.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/datapath-windows/ovsext/TunnelFilter.c 
b/datapath-windows/ovsext/TunnelFilter.c
index 231750e..5466fe4 100644
--- a/datapath-windows/ovsext/TunnelFilter.c
+++ b/datapath-windows/ovsext/TunnelFilter.c
@@ -825,20 +825,24 @@ OvsInitTunnelFilter(PDRIVER_OBJECT driverObject, PVOID 
deviceObject)
 {
     NTSTATUS status = STATUS_SUCCESS;
 
-    status = OvsSubscribeTunnelInitBfeStateChanges(driverObject, deviceObject);
-    if (NT_SUCCESS(status)) {
-        if (FWPM_SERVICE_RUNNING == FwpmBfeStateGet()) {
-            status = OvsTunnelFilterInitialize(driverObject);
-            if (!NT_SUCCESS(status)) {
-                /* XXX: We need to decide what actions to take in case of
-                 * failure to initialize tunnel filter. */
-                ASSERT(status == NDIS_STATUS_SUCCESS);
-                OVS_LOG_ERROR(
-                    "Failed to initialize tunnel filter, status: %x.",
-                    status);
+    if (deviceObject) {
+        status = OvsSubscribeTunnelInitBfeStateChanges(driverObject, 
deviceObject);
+        if (NT_SUCCESS(status)) {
+            if (FWPM_SERVICE_RUNNING == FwpmBfeStateGet()) {
+                status = OvsTunnelFilterInitialize(driverObject);
+                if (!NT_SUCCESS(status)) {
+                    /* XXX: We need to decide what actions to take in case of
+                     * failure to initialize tunnel filter. */
+                    ASSERT(status == NDIS_STATUS_SUCCESS);
+                    OVS_LOG_ERROR(
+                        "Failed to initialize tunnel filter, status: %x.",
+                        status);
+                }
+                OvsUnsubscribeTunnelInitBfeStateChanges();
             }
-            OvsUnsubscribeTunnelInitBfeStateChanges();
         }
+    } else {
+        status = OvsTunnelFilterInitialize(driverObject);
     }
 
     return status;
-- 
1.9.0.msysgit.0
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to