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>
{
NTSTATUS status = STATUS_SUCCESS;
{
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);