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