datapath-windows: Enable failure after restarting extension
authorSorin Vinturis <svinturis@cloudbasesolutions.com>
Wed, 15 Jul 2015 14:50:15 +0000 (14:50 +0000)
committerBen Pfaff <blp@nicira.com>
Fri, 28 Aug 2015 17:58:42 +0000 (10:58 -0700)
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 <svinturis@cloudbasesolutions.com>
Reported-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/96
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
datapath-windows/ovsext/TunnelFilter.c

index 7865451..00e57c3 100644 (file)
@@ -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;