summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/TunnelFilter.c
diff options
context:
space:
mode:
authorSorin Vinturis <svinturis@cloudbasesolutions.com>2015-07-15 14:50:15 +0000
committerBen Pfaff <blp@nicira.com>2015-08-28 10:58:42 -0700
commit32e35d7ddfcc04bef7e69706bf0fec4d304337e3 (patch)
tree8da49a12247371c5cb0d0bd6d633146b7c7d3597 /datapath-windows/ovsext/TunnelFilter.c
parent21a719d658b44c4a49ba0e46846691cfb7078599 (diff)
downloadopenvswitch-32e35d7ddfcc04bef7e69706bf0fec4d304337e3.tar.gz
datapath-windows: Enable failure after restarting extension
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>
Diffstat (limited to 'datapath-windows/ovsext/TunnelFilter.c')
-rw-r--r--datapath-windows/ovsext/TunnelFilter.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/datapath-windows/ovsext/TunnelFilter.c b/datapath-windows/ovsext/TunnelFilter.c
index 786545186..00e57c325 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;