diff options
author | Sorin Vinturis <svinturis@cloudbasesolutions.com> | 2015-07-15 14:50:15 +0000 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2015-08-28 10:58:42 -0700 |
commit | 32e35d7ddfcc04bef7e69706bf0fec4d304337e3 (patch) | |
tree | 8da49a12247371c5cb0d0bd6d633146b7c7d3597 /datapath-windows/ovsext/TunnelFilter.c | |
parent | 21a719d658b44c4a49ba0e46846691cfb7078599 (diff) | |
download | openvswitch-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.c | 28 |
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; |