Add blueprint wiring for elanmanager 79/38979/21
authorAlexis de Talhouët <adetalhouet@inocybe.com>
Tue, 17 May 2016 14:49:21 +0000 (10:49 -0400)
committerStephen Kitt <skitt@redhat.com>
Wed, 10 Aug 2016 14:22:42 +0000 (16:22 +0200)
Change-Id: I1274ef299469602cd8fa4722bc037e4e2785e1ea
Signed-off-by: Alexis de Talhouët <adetalhouet@inocybe.com>
Signed-off-by: Alexis de Talhouët <alexis.de.t@gmail.com>
Signed-off-by: Stephen Kitt <skitt@redhat.com>
43 files changed:
vpnservice/elanmanager/elanmanager-api/src/main/java/org/opendaylight/netvirt/elanmanager/utils/ElanL2GwCacheUtils.java
vpnservice/elanmanager/elanmanager-api/src/main/yang/elanmanager-api.yang [deleted file]
vpnservice/elanmanager/elanmanager-impl/src/main/config/default-config.xml [deleted file]
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/cli/etree/EtreeInterfaceDelete.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/cli/etree/EtreeInterfaceGet.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanDpnInterfaceClusteredListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInstanceManager.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceManager.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceStateChangeListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceStateClusteredListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanNodeListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanPacketInHandler.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanServiceProvider.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanSmacFlowEventListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/internal/ElanL2GatewayProvider.java [deleted file]
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/jobs/AssociateHwvtepToElanJob.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/jobs/DisAssociateHwvtepFromElanJob.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/jobs/HwvtepDeviceMcastMacUpdateJob.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/jobs/LogicalSwitchAddedJob.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/listeners/HwvtepLocalUcastMacListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/listeners/HwvtepLogicalSwitchListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/listeners/HwvtepPhysicalSwitchListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/listeners/HwvtepRemoteMcastMacListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/listeners/HwvtepTerminationPointListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/listeners/L2GatewayConnectionListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayMulticastUtils.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayUtils.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/L2GatewayConnectionUtils.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/statisitcs/ElanStatisticsImpl.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/statusanddiag/ElanStatusMonitor.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/utils/CacheElanInstanceListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/utils/CacheElanInterfaceListener.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanClusterUtils.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanForwardingEntriesHandler.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/elanservice/impl/rev150216/ElanServiceImplModule.java [deleted file]
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/elanservice/impl/rev150216/ElanServiceImplModuleFactory.java [deleted file]
vpnservice/elanmanager/elanmanager-impl/src/main/resources/org/opendaylight/blueprint/commands.xml [moved from vpnservice/elanmanager/elanmanager-impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml with 94% similarity]
vpnservice/elanmanager/elanmanager-impl/src/main/resources/org/opendaylight/blueprint/elanmanager.xml [new file with mode: 0644]
vpnservice/elanmanager/elanmanager-impl/src/main/yang/elanservice-impl.yang [deleted file]
vpnservice/features/pom.xml
vpnservice/features/src/main/features/features.xml
vpnservice/statemanager/impl/src/main/java/org/opendaylight/netvirt/statemanager/ConfigStateManager.java

index c15a545307ebfa58766c62115c6bc673c15ff2af..4aead746ad56a9ba58ccff1f162a90466c639286 100644 (file)
@@ -20,10 +20,8 @@ public class ElanL2GwCacheUtils {
     private static final ConcurrentHashMap<String, L2GatewayDevice> EMPTY_MAP = new ConcurrentHashMap<>();
     public static final String L2GATEWAY_CONN_CACHE_NAME = "L2GWCONN";
 
-    public static void createElanL2GwDeviceCache() {
-        if (CacheUtil.getCache(ElanL2GwCacheUtils.L2GATEWAY_CONN_CACHE_NAME) == null) {
-            CacheUtil.createCache(ElanL2GwCacheUtils.L2GATEWAY_CONN_CACHE_NAME);
-        }
+    static {
+        CacheUtil.createCache(ElanL2GwCacheUtils.L2GATEWAY_CONN_CACHE_NAME);
     }
 
     public static void addL2GatewayDeviceToCache(String elanName, L2GatewayDevice l2GwDevice) {
diff --git a/vpnservice/elanmanager/elanmanager-api/src/main/yang/elanmanager-api.yang b/vpnservice/elanmanager/elanmanager-api/src/main/yang/elanmanager-api.yang
deleted file mode 100644 (file)
index 0f03ec4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-module elanmanager-api {
-    yang-version 1;
-    namespace "urn:opendaylight:params:xml:ns:yang:elanmanager:api";
-    prefix "elanmanager-api";
-
-    import config { prefix config; revision-date 2013-04-05; }
-
-    description
-        "Service definition for elanmanager project";
-
-    revision "2015-07-07" {
-        description
-            "Initial revision";
-    }
-
-    identity elanmanager-api {
-        base "config:service-type";
-        config:java-class "org.opendaylight.netvirt.elanmanager.api.IElanService";
-    }
-}
\ No newline at end of file
diff --git a/vpnservice/elanmanager/elanmanager-impl/src/main/config/default-config.xml b/vpnservice/elanmanager/elanmanager-impl/src/main/config/default-config.xml
deleted file mode 100644 (file)
index 2db833e..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
-Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
-
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<snapshot>
-    <required-capabilities>
-        <capability>urn:opendaylight:params:xml:ns:yang:elanservice:impl?module=elanservice-impl&amp;revision=2015-02-16</capability>
-        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
-        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&amp;revision=2013-10-28</capability>
-        <capability>urn:opendaylight:genius:mdsalutil?module=odl-mdsalutil&amp;revision=2016-04-06</capability>
-        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service?module=opendaylight-entity-ownership-service&amp;revision=2015-08-10</capability>
-        <capability>urn:opendaylight:genius:itm?module=itm&amp;revision=2016-04-06</capability>
-        <capability>urn:opendaylight:genius:interfacemanager?module=odl-interface&amp;revision=2016-04-06</capability>
-    </required-capabilities>
-    <configuration>
-
-        <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-            <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-                <module>
-                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:elanservice:impl">prefix:elanservice-impl</type>
-                    <name>elanservice-default</name>
-                    <broker>
-                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
-                        <name>binding-osgi-broker</name>
-                    </broker>
-                    <rpcregistry>
-                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
-                        <name>binding-rpc-broker</name>
-                    </rpcregistry>
-                    <mdsalutil>
-                        <type xmlns:mdsalutil="urn:opendaylight:genius:mdsalutil">mdsalutil:odl-mdsalutil</type>
-                        <name>mdsalutil-service</name>
-                    </mdsalutil>
-                    <odlinterface>
-                        <type xmlns:odlif="urn:opendaylight:genius:interfacemanager">odlif:odl-interface</type>
-                        <name>interfacemgr-service</name>
-                    </odlinterface>
-                    <itmmanager>
-                        <type xmlns:itm="urn:opendaylight:genius:itm">itm:itm</type>
-                        <name>itm</name>
-                    </itmmanager>
-                    <notification-service>
-                        <type xmlns:bindingimpl="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">bindingimpl:binding-new-notification-service</type>
-                        <name>binding-notification-adapter</name>
-                    </notification-service>
-                    <entity-ownership-service>
-                        <type xmlns:entity-ownership="urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service">entity-ownership:entity-ownership-service</type>
-                        <name>entity-ownership-service</name>
-                    </entity-ownership-service>
-                    <int-bridge-gen-mac>true</int-bridge-gen-mac>
-                </module>
-            </modules>
-            <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-                <service>
-                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:elanmanager:api">prefix:elanmanager-api</type>
-                    <instance>
-                        <name>elanmanager</name>
-                        <provider>/modules/module[type='elanservice-impl'][name='elanservice-default']</provider>
-                    </instance>
-                </service>
-            </services>
-        </data>
-    </configuration>
-</snapshot>
index 1d63d56b8c4caf9b084d15fcd20270cae1519542..a674e735ed1cc3e4288f2f07f4c90f1f5cd0cab8 100644 (file)
@@ -26,16 +26,21 @@ public class EtreeInterfaceDelete extends OsgiCommandSupport {
     private String interfaceName;
     private static final Logger logger = LoggerFactory.getLogger(EtreeInterfaceDelete.class);
     private IElanService elanProvider;
+    private ElanUtils elanUtils;
 
     public void setElanProvider(IElanService elanServiceProvider) {
         this.elanProvider = elanServiceProvider;
     }
 
+    public void setElanUtils(ElanUtils elanUtils) {
+        this.elanUtils = elanUtils;
+    }
+
     @Override
     protected Object doExecute() {
         try {
             logger.debug("Deleting EtreeInterface command" + "\t" + etreeName + "\t" + interfaceName + "\t");
-            ElanInterface existingInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+            ElanInterface existingInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
             if (existingInterface == null || existingInterface.getAugmentation(EtreeInterface.class) == null) {
                 System.out.println("Etree interface doesn't exist or isn't configured as etree: " + interfaceName);
             }
index fef98e1db8ec3893693aae5bf85a2212b742c6ec..934b34f5efbaaf6e5394010d26d231049c31d570 100644 (file)
@@ -32,6 +32,7 @@ public class EtreeInterfaceGet extends OsgiCommandSupport {
     private IInterfaceManager interfaceManager;
     public static int MAX_LENGTH = 31;
     private IElanService elanProvider;
+    private ElanUtils elanUtils;
     public static boolean isDisplay = true;
 
     public void setElanProvider(IElanService elanServiceProvider) {
@@ -42,6 +43,10 @@ public class EtreeInterfaceGet extends OsgiCommandSupport {
         this.interfaceManager = interfaceManager;
     }
 
+    public void setElanUtils(ElanUtils elanUtils) {
+        this.elanUtils = elanUtils;
+    }
+
     @Override
     protected Object doExecute() {
         try {
@@ -94,7 +99,7 @@ public class EtreeInterfaceGet extends OsgiCommandSupport {
         if (!interfaceList.isEmpty()) {
             for (String elanInterface : interfaceList) {
                 InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(elanInterface);
-                EtreeInterface etreeInterface = ElanUtils.getEtreeInterfaceByElanInterfaceName(elanInterface);
+                EtreeInterface etreeInterface = elanUtils.getEtreeInterfaceByElanInterfaceName(elanInterface);
                 if (interfaceInfo != null) {
                     System.out.println(String.format(ElanCLIUtils.ETREE_INTERFACE_CLI_FORMAT,
                             elanInstance.getElanInstanceName() + "/" + elanInstance.getElanTag(),
index 4fa87cd29437cc99150aba85da9e38c0808aab07..d1a1d301f28595924a15f36486f978d684f1a422 100644 (file)
@@ -12,7 +12,7 @@ import java.util.concurrent.Callable;
 
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayMulticastUtils;
@@ -23,7 +23,7 @@ import org.opendaylight.genius.datastoreutils.AsyncClusteredDataChangeListenerBa
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanDpnInterfaces;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.dpn.interfaces.ElanDpnInterfacesList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.dpn.interfaces.elan.dpn.interfaces.list.DpnInterfaces;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,37 +34,26 @@ import com.google.common.util.concurrent.ListenableFuture;
 public class ElanDpnInterfaceClusteredListener
     extends AsyncClusteredDataChangeListenerBase<DpnInterfaces, ElanDpnInterfaceClusteredListener>
     implements AutoCloseable {
-    private ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanDpnInterfaceClusteredListener elanDpnInterfaceClusteredListener = null;
-    private ListenerRegistration<DataChangeListener> listenerRegistration;
 
     private static final Logger LOG = LoggerFactory.getLogger(ElanDpnInterfaceClusteredListener.class);
 
+    private final DataBroker broker;
+    private final EntityOwnershipService entityOwnershipService;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
 
-    public ElanDpnInterfaceClusteredListener(ElanServiceProvider elanServiceProvider) {
+    public ElanDpnInterfaceClusteredListener(DataBroker broker, EntityOwnershipService entityOwnershipService,
+                                             ElanL2GatewayUtils elanL2GatewayUtils,
+                                             ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils) {
         super(DpnInterfaces.class, ElanDpnInterfaceClusteredListener.class);
-        this.elanServiceProvider = elanServiceProvider;
-        registerListener(elanServiceProvider.getBroker());
+        this.broker = broker;
+        this.entityOwnershipService = entityOwnershipService;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
     }
 
-    public static ElanDpnInterfaceClusteredListener getElanDpnInterfaceClusteredListener(
-        ElanServiceProvider elanServiceProvider) {
-        if (elanDpnInterfaceClusteredListener == null) {
-            synchronized (ElanDpnInterfaceClusteredListener.class) {
-                if (elanDpnInterfaceClusteredListener == null) {
-                    elanDpnInterfaceClusteredListener = new ElanDpnInterfaceClusteredListener(elanServiceProvider);
-                }
-            }
-        }
-        return elanDpnInterfaceClusteredListener;
-    }
-    private void registerListener(final DataBroker db) {
-        try {
-            listenerRegistration = elanServiceProvider.getBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
-                getWildCardPath(), ElanDpnInterfaceClusteredListener.this, AsyncDataBroker.DataChangeScope.BASE);
-        } catch (final Exception e) {
-            LOG.error("DpnInterfaces DataChange listener registration fail!", e);
-        }
+    public void init() {
+        registerListener(LogicalDatastoreType.OPERATIONAL, this.broker);
     }
 
     @Override
@@ -90,12 +79,12 @@ public class ElanDpnInterfaceClusteredListener
                 dpnInterfaces.getDpId());
             return;
         }
-        ElanClusterUtils.runOnlyInLeaderNode(elanName, "updating mcast mac upon tunnel event",
+        ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, elanName, "updating mcast mac upon tunnel event",
             new Callable<List<ListenableFuture<Void>>>() {
                 @Override
                 public List<ListenableFuture<Void>> call() throws Exception {
                     return Lists.newArrayList(
-                        ElanL2GatewayMulticastUtils.updateRemoteMcastMacOnElanL2GwDevices(elanName));
+                        elanL2GatewayMulticastUtils.updateRemoteMcastMacOnElanL2GwDevices(elanName));
                 }
             });
     }
@@ -112,16 +101,16 @@ public class ElanDpnInterfaceClusteredListener
                 dpnInterfaces.getDpId());
             return;
         }
-        ElanClusterUtils.runOnlyInLeaderNode(elanName, "handling ElanDpnInterface removed",
+        ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, elanName, "handling ElanDpnInterface removed",
             new Callable<List<ListenableFuture<Void>>>() {
                 @Override
                 public List<ListenableFuture<Void>> call() throws Exception {
                     // deleting Elan L2Gw Devices UcastLocalMacs From Dpn
-                    ElanL2GatewayUtils.deleteElanL2GwDevicesUcastLocalMacsFromDpn(elanName,
+                    elanL2GatewayUtils.deleteElanL2GwDevicesUcastLocalMacsFromDpn(elanName,
                         dpnInterfaces.getDpId());
                     // updating remote mcast mac on l2gw devices
                     return Lists.newArrayList(
-                        ElanL2GatewayMulticastUtils.updateRemoteMcastMacOnElanL2GwDevices(elanName));
+                        elanL2GatewayMulticastUtils.updateRemoteMcastMacOnElanL2GwDevices(elanName));
                 }
             });
     }
index acf4a74a300131bbe749e0a22f97f6e247b6e0e4..49e16ff2e972ee1e6f8b7feea0ed2434e71f6ac2 100644 (file)
@@ -21,6 +21,9 @@ import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
 import org.opendaylight.netvirt.elan.utils.ElanConstants;
 import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.etree.rev160614.EtreeInstance;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanDpnInterfaces;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInstances;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.dpn.interfaces.ElanDpnInterfacesList;
@@ -37,24 +40,27 @@ import org.slf4j.LoggerFactory;
 public class ElanInstanceManager extends AsyncDataTreeChangeListenerBase<ElanInstance, ElanInstanceManager>
         implements AutoCloseable {
 
-    private ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanInstanceManager elanInstanceManager = null;
     private static final Logger logger = LoggerFactory.getLogger(ElanInstanceManager.class);
 
-    private ElanInstanceManager(ElanServiceProvider elanServiceProvider) {
+    private final DataBroker broker;
+    private final IdManagerService idManager;
+    private final ElanInterfaceManager elanInterfaceManager;
+    private final IInterfaceManager interfaceManager;
+    private final ElanUtils elanUtils;
+
+    public ElanInstanceManager(final DataBroker dataBroker, final IdManagerService managerService,
+                               final ElanInterfaceManager elanInterfaceManager,
+                               final IInterfaceManager interfaceManager, ElanUtils elanUtils) {
         super(ElanInstance.class, ElanInstanceManager.class);
-        this.elanServiceProvider = elanServiceProvider;
+        this.broker = dataBroker;
+        this.idManager = managerService;
+        this.elanInterfaceManager = elanInterfaceManager;
+        this.interfaceManager = interfaceManager;
+        this.elanUtils = elanUtils;
     }
 
-    public static ElanInstanceManager getElanInstanceManager(ElanServiceProvider elanServiceProvider) {
-        if (elanInstanceManager == null) {
-            synchronized (ElanInstanceManager.class) {
-                if (elanInstanceManager == null) {
-                    elanInstanceManager = new ElanInstanceManager(elanServiceProvider);
-                }
-            }
-        }
-        return elanInstanceManager;
+    public void init() {
+        registerListener(LogicalDatastoreType.CONFIGURATION, broker);
     }
 
     @Override
@@ -63,32 +69,31 @@ public class ElanInstanceManager extends AsyncDataTreeChangeListenerBase<ElanIns
         List<ListenableFuture<Void>> futures = new ArrayList<>();
         String elanName = deletedElan.getElanInstanceName();
         // check the elan Instance present in the Operational DataStore
-        Elan existingElan = ElanUtils.getElanByName(elanName);
+        Elan existingElan = elanUtils.getElanByName(elanName);
         long elanTag = deletedElan.getElanTag();
         // Cleaning up the existing Elan Instance
         if (existingElan != null) {
             List<String> elanInterfaces = existingElan.getElanInterfaces();
             if (elanInterfaces != null && !elanInterfaces.isEmpty()) {
                 for (String elanInterfaceName : elanInterfaces) {
-                    InstanceIdentifier<ElanInterface> elanInterfaceId = ElanUtils
+                    InstanceIdentifier<ElanInterface> elanInterfaceId = elanUtils
                             .getElanInterfaceConfigurationDataPathId(elanInterfaceName);
-                    InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager()
-                            .getInterfaceInfo(elanInterfaceName);
-                    elanServiceProvider.getElanInterfaceManager().removeElanInterface(futures, deletedElan, elanInterfaceName,
+                    InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(elanInterfaceName);
+                    elanInterfaceManager.removeElanInterface(futures, deletedElan, elanInterfaceName,
                             interfaceInfo, false);
-                    ElanUtils.delete(elanServiceProvider.getBroker(), LogicalDatastoreType.CONFIGURATION,
+                    elanUtils.delete(broker, LogicalDatastoreType.CONFIGURATION,
                             elanInterfaceId);
                 }
             }
-            ElanUtils.delete(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL,
-                    ElanUtils.getElanInstanceOperationalDataPath(elanName));
-            ElanUtils.delete(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL,
+            elanUtils.delete(broker, LogicalDatastoreType.OPERATIONAL,
+                    elanUtils.getElanInstanceOperationalDataPath(elanName));
+            elanUtils.delete(broker, LogicalDatastoreType.OPERATIONAL,
                     getElanDpnOperationDataPath(elanName));
-            ElanUtils.delete(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL,
-                    ElanUtils.getElanInfoEntriesOperationalDataPath(elanTag));
+            elanUtils.delete(broker, LogicalDatastoreType.OPERATIONAL,
+                    elanUtils.getElanInfoEntriesOperationalDataPath(elanTag));
         }
         // Release tag
-        ElanUtils.releaseId(elanServiceProvider.getIdManager(), ElanConstants.ELAN_ID_POOL_NAME, elanName);
+        elanUtils.releaseId(idManager, ElanConstants.ELAN_ID_POOL_NAME, elanName);
         if (deletedElan.getAugmentation(EtreeInstance.class) != null) {
             removeEtreeInstance(deletedElan);
         }
@@ -96,11 +101,11 @@ public class ElanInstanceManager extends AsyncDataTreeChangeListenerBase<ElanIns
 
     private void removeEtreeInstance(ElanInstance deletedElan) {
         // Release leaves tag
-        ElanUtils.releaseId(elanServiceProvider.getIdManager(), ElanConstants.ELAN_ID_POOL_NAME,
+        elanUtils.releaseId(idManager, ElanConstants.ELAN_ID_POOL_NAME,
                 deletedElan.getElanInstanceName() + ElanConstants.LEAVES_POSTFIX);
 
-        ElanUtils.delete(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL,
-                ElanUtils.getElanInfoEntriesOperationalDataPath(
+        elanUtils.delete(broker, LogicalDatastoreType.OPERATIONAL,
+                elanUtils.getElanInfoEntriesOperationalDataPath(
                 deletedElan.getAugmentation(EtreeInstance.class).getEtreeLeafTagVal().getValue()));
     }
 
@@ -111,29 +116,29 @@ public class ElanInstanceManager extends AsyncDataTreeChangeListenerBase<ElanIns
             return;
         } else if (update.getElanTag() == null) {
             // update the elan-Instance with new properties
-            WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-            ElanUtils.updateOperationalDataStore(elanServiceProvider.getBroker(), elanServiceProvider.getIdManager(),
+            WriteTransaction tx = broker.newWriteOnlyTransaction();
+            elanUtils.updateOperationalDataStore(broker, idManager,
                     update, new ArrayList<String>(), tx);
-            ElanUtils.waitForTransactionToComplete(tx);
+            elanUtils.waitForTransactionToComplete(tx);
             return;
         }
-        elanServiceProvider.getElanInterfaceManager().handleunprocessedElanInterfaces(update);
+        elanInterfaceManager.handleunprocessedElanInterfaces(update);
     }
 
     @Override
     protected void add(InstanceIdentifier<ElanInstance> identifier, ElanInstance elanInstanceAdded) {
-        Elan elanInfo = ElanUtils.getElanByName(elanInstanceAdded.getElanInstanceName());
+        Elan elanInfo = elanUtils.getElanByName(elanInstanceAdded.getElanInstanceName());
         if (elanInfo == null) {
-            WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-            ElanUtils.updateOperationalDataStore(elanServiceProvider.getBroker(), elanServiceProvider.getIdManager(),
+            WriteTransaction tx = broker.newWriteOnlyTransaction();
+            elanUtils.updateOperationalDataStore(broker, idManager,
                     elanInstanceAdded, new ArrayList<String>(), tx);
-            ElanUtils.waitForTransactionToComplete(tx);
+            elanUtils.waitForTransactionToComplete(tx);
         }
     }
 
     public ElanInstance getElanInstanceByName(String elanInstanceName) {
         InstanceIdentifier<ElanInstance> elanIdentifierId = getElanInstanceConfigurationDataPath(elanInstanceName);
-        Optional<ElanInstance> elanInstance = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanInstance> elanInstance = elanUtils.read(broker,
                 LogicalDatastoreType.CONFIGURATION, elanIdentifierId);
         if (elanInstance.isPresent()) {
             return elanInstance.get();
@@ -143,7 +148,7 @@ public class ElanInstanceManager extends AsyncDataTreeChangeListenerBase<ElanIns
 
     public List<DpnInterfaces> getElanDPNByName(String elanInstanceName) {
         InstanceIdentifier<ElanDpnInterfacesList> elanIdentifier = getElanDpnOperationDataPath(elanInstanceName);
-        Optional<ElanDpnInterfacesList> elanInstance = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanDpnInterfacesList> elanInstance = elanUtils.read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanIdentifier);
         if (elanInstance.isPresent()) {
             ElanDpnInterfacesList elanDPNs = elanInstance.get();
@@ -171,5 +176,4 @@ public class ElanInstanceManager extends AsyncDataTreeChangeListenerBase<ElanIns
     protected ElanInstanceManager getDataTreeChangeListener() {
         return this;
     }
-
 }
index 0386daf40966fc438bdcfdebf6a0464a6659e590..0b4ed49ed6a015fdf2df7e06421bda3d46a97c90 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.netvirt.elan.internal;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ListenableFuture;
-
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -22,13 +21,14 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ConcurrentMap;
-
 import org.apache.commons.lang3.StringUtils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
 import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
+import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.itm.globals.ITMConstants;
 import org.opendaylight.genius.mdsalutil.ActionInfo;
 import org.opendaylight.genius.mdsalutil.ActionType;
@@ -40,9 +40,11 @@ import org.opendaylight.genius.mdsalutil.MatchFieldType;
 import org.opendaylight.genius.mdsalutil.MatchInfo;
 import org.opendaylight.genius.mdsalutil.MetaDataUtil;
 import org.opendaylight.genius.mdsalutil.NwConstants;
+import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.genius.utils.ServiceIndex;
 import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayUtils;
 import org.opendaylight.netvirt.elan.utils.ElanConstants;
+import org.opendaylight.netvirt.elan.utils.ElanForwardingEntriesHandler;
 import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.netvirt.elanmanager.utils.ElanL2GwCacheUtils;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
@@ -53,6 +55,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.Fl
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.BoundServices;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
@@ -99,32 +102,38 @@ import org.slf4j.LoggerFactory;
 public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanInterface, ElanInterfaceManager>
         implements AutoCloseable {
 
-    private ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanInterfaceManager elanInterfaceManager = null;
-    private static long waitTimeForSyncInstall;
+    private final DataBroker broker;
+    private final IMdsalApiManager mdsalManager;
+    private final IInterfaceManager interfaceManager;
+    private final IdManagerService idManager;
+    private final ElanForwardingEntriesHandler elanForwardingEntriesHandler;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final ElanUtils elanUtils;
+
+    private static final long waitTimeForSyncInstall = Long.getLong("wait.time.sync.install", 300L);
+
     private Map<String, ConcurrentLinkedQueue<ElanInterface>> unProcessedElanInterfaces = new ConcurrentHashMap<>();
 
     private static final Logger logger = LoggerFactory.getLogger(ElanInterfaceManager.class);
 
-    public ElanInterfaceManager(ElanServiceProvider elanServiceProvider) {
+    public ElanInterfaceManager(final DataBroker dataBroker,
+                                final IdManagerService managerService,
+                                final IMdsalApiManager mdsalApiManager,
+                                IInterfaceManager interfaceManager,
+                                final ElanForwardingEntriesHandler elanForwardingEntriesHandler,
+                                final ElanL2GatewayUtils elanL2GatewayUtils, ElanUtils elanUtils) {
         super(ElanInterface.class, ElanInterfaceManager.class);
-        this.elanServiceProvider = elanServiceProvider;
+        this.broker = dataBroker;
+        this.idManager = managerService;
+        this.mdsalManager = mdsalApiManager;
+        this.interfaceManager = interfaceManager;
+        this.elanForwardingEntriesHandler = elanForwardingEntriesHandler;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.elanUtils = elanUtils;
     }
 
-    public static ElanInterfaceManager getElanInterfaceManager(ElanServiceProvider elanServiceProvider) {
-        if (elanInterfaceManager == null) {
-            synchronized (ElanInterfaceManager.class) {
-                if (elanInterfaceManager == null) {
-                    elanInterfaceManager = new ElanInterfaceManager(elanServiceProvider);
-                    Long waitTime = Long.getLong("wait.time.sync.install");
-                    if (waitTime == null) {
-                        waitTime = 300L;
-                    }
-                    waitTimeForSyncInstall = waitTime;
-                }
-            }
-        }
-        return elanInterfaceManager;
+    public void init() {
+        registerListener(LogicalDatastoreType.CONFIGURATION, broker);
     }
 
     @Override
@@ -135,7 +144,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     @Override
     protected void remove(InstanceIdentifier<ElanInterface> identifier, ElanInterface del) {
         String interfaceName = del.getName();
-        ElanInstance elanInfo = ElanUtils.getElanInstanceByName(del.getElanInstanceName());
+        ElanInstance elanInfo = elanUtils.getElanInstanceByName(del.getElanInstanceName());
         /*
          * Handling in case the elan instance is deleted.If the Elan instance is
          * deleted, there is no need to explicitly delete the elan interfaces
@@ -143,7 +152,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         if (elanInfo == null) {
             return;
         }
-        InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager().getInterfaceInfo(interfaceName);
+        InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
         String elanInstanceName = elanInfo.getElanInstanceName();
         DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
         InterfaceRemoveWorkerOnElan configWorker = new InterfaceRemoveWorkerOnElan(elanInstanceName, elanInfo,
@@ -156,8 +165,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         String elanName = elanInfo.getElanInstanceName();
         boolean isLastElanInterface = false;
         long elanTag = elanInfo.getElanTag();
-        WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-        WriteTransaction deleteFlowGroupTx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        WriteTransaction deleteFlowGroupTx = broker.newWriteOnlyTransaction();
         Elan elanState = removeElanStateForInterface(elanInfo, interfaceName, tx);
         if (elanState == null) {
             return;
@@ -201,7 +210,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
     private void removeEtreeUnknownDmacFlow(BigInteger dpId, ElanInstance elanInfo,
             WriteTransaction deleteFlowGroupTx) {
-        EtreeLeafTagName etreeLeafTag = ElanUtils.getEtreeLeafTagByElanTag(elanInfo.getElanTag());
+        EtreeLeafTagName etreeLeafTag = elanUtils.getEtreeLeafTagByElanTag(elanInfo.getElanTag());
         if (etreeLeafTag != null) {
             long leafTag = etreeLeafTag.getEtreeLeafTag().getValue();
             removeUnknownDmacFlow(dpId, elanInfo, deleteFlowGroupTx, leafTag);
@@ -226,7 +235,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                     MDSALUtil.buildBucketLists(listBuckets));
             logger.trace("deleted the localBroadCast Group:{}", group);
-            elanServiceProvider.getMdsalManager().removeGroupToTx(dpnId, group, deleteFlowGroupTx);
+            mdsalManager.removeGroupToTx(dpnId, group, deleteFlowGroupTx);
         }
     }
 
@@ -251,13 +260,13 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                     MDSALUtil.buildBucketLists(listBuckets));
             logger.trace("deleting the remoteBroadCast group:{}", group);
-            elanServiceProvider.getMdsalManager().removeGroupToTx(dpnId, group, deleteFlowGroupTx);
+            mdsalManager.removeGroupToTx(dpnId, group, deleteFlowGroupTx);
         }
     }
 
     private Elan removeElanStateForInterface(ElanInstance elanInfo, String interfaceName, WriteTransaction tx) {
         String elanName = elanInfo.getElanInstanceName();
-        Elan elanState = ElanUtils.getElanByName(elanName);
+        Elan elanState = elanUtils.getElanByName(elanName);
         if (elanState == null) {
             return elanState;
         }
@@ -280,7 +289,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     private void deleteElanInterfaceFromConfigDS(String interfaceName, WriteTransaction tx) {
         // removing the ElanInterface from the config data_store if interface is
         // not present in Interface config DS
-        if (elanServiceProvider.getInterfaceManager().getInterfaceInfoFromConfigDataStore(interfaceName) == null) {
+        if (interfaceManager.getInterfaceInfoFromConfigDataStore(interfaceName) == null) {
             tx.delete(LogicalDatastoreType.CONFIGURATION,
                     ElanUtils.getElanInterfaceConfigurationDataPathId(interfaceName));
         }
@@ -289,13 +298,13 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     void removeEntriesForElanInterface(List<ListenableFuture<Void>> futures, ElanInstance elanInfo, InterfaceInfo interfaceInfo, String interfaceName,
             boolean isInterfaceStateRemoved, boolean isLastElanInterface) {
         String elanName = elanInfo.getElanInstanceName();
-        WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-        WriteTransaction deleteFlowGroupTx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        WriteTransaction deleteFlowGroupTx = broker.newWriteOnlyTransaction();
         InstanceIdentifier<ElanInterfaceMac> elanInterfaceId = ElanUtils
                 .getElanInterfaceMacEntriesOperationalDataPath(interfaceName);
         logger.debug("Removing the Interface:{} from elan:{}", interfaceName, elanName);
         if (interfaceInfo != null) {
-            Optional<ElanInterfaceMac> existingElanInterfaceMac = ElanUtils.read(elanServiceProvider.getBroker(),
+            Optional<ElanInterfaceMac> existingElanInterfaceMac = elanUtils.read(broker,
                     LogicalDatastoreType.OPERATIONAL, elanInterfaceId);
             if (existingElanInterfaceMac.isPresent()) {
                 List<PhysAddress> macAddresses = new ArrayList<PhysAddress>();
@@ -312,14 +321,14 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                             tx.delete(LogicalDatastoreType.OPERATIONAL,
                                     ElanUtils.getMacEntryOperationalDataPath(elanName, macEntry.getMacAddress()));
                         }
-                        ElanUtils.deleteMacFlows(elanInfo, interfaceInfo, macEntry, deleteFlowGroupTx);
+                        elanUtils.deleteMacFlows(elanInfo, interfaceInfo, macEntry, deleteFlowGroupTx);
                         macAddresses.add(macEntry.getMacAddress());
                     }
 
                     // Removing all those MACs from External Devices belonging
                     // to this ELAN
                     if (ElanUtils.isVxlan(elanInfo)) {
-                        ElanL2GatewayUtils.removeMacsFromElanExternalDevices(elanInfo, macAddresses);
+                        elanL2GatewayUtils.removeMacsFromElanExternalDevices(elanInfo, macAddresses);
                     }
                 }
             }
@@ -328,7 +337,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         } else {
             // Interface does not exist in ConfigDS, so lets remove everything
             // about that interface related to Elan
-            ElanInterfaceMac elanInterfaceMac = ElanUtils.getElanInterfaceMacByInterfaceName(interfaceName);
+            ElanInterfaceMac elanInterfaceMac = elanUtils.getElanInterfaceMacByInterfaceName(interfaceName);
             if (elanInterfaceMac != null && elanInterfaceMac.getMacEntry() != null) {
                 List<MacEntry> macEntries = elanInterfaceMac.getMacEntry();
                 for (MacEntry macEntry : macEntries) {
@@ -348,7 +357,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
     private DpnInterfaces removeElanDpnInterfaceFromOperationalDataStore(String elanName, BigInteger dpId,
             String interfaceName, long elanTag, WriteTransaction tx) {
-        DpnInterfaces dpnInterfaces = ElanUtils.getElanInterfaceInfoByElanDpn(elanName, dpId);
+        DpnInterfaces dpnInterfaces = elanUtils.getElanInterfaceInfoByElanDpn(elanName, dpId);
         if (dpnInterfaces != null) {
             List<String> interfaceLists = dpnInterfaces.getInterfaces();
             interfaceLists.remove(interfaceName);
@@ -364,12 +373,12 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     }
 
     private void deleteAllRemoteMacsInADpn(String elanName, BigInteger dpId, long elanTag) {
-        List<DpnInterfaces> dpnInterfaces = ElanUtils.getInvolvedDpnsInElan(elanName);
+        List<DpnInterfaces> dpnInterfaces = elanUtils.getInvolvedDpnsInElan(elanName);
         for (DpnInterfaces dpnInterface : dpnInterfaces) {
             BigInteger currentDpId = dpnInterface.getDpId();
             if (!currentDpId.equals(dpId)) {
                 for (String elanInterface : dpnInterface.getInterfaces()) {
-                    ElanInterfaceMac macs = ElanUtils.getElanInterfaceMacByInterfaceName(elanInterface);
+                    ElanInterfaceMac macs = elanUtils.getElanInterfaceMacByInterfaceName(elanInterface);
                     if (macs == null || macs.getMacEntry() == null) {
                         continue;
                     }
@@ -383,14 +392,14 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     }
 
     private void removeEtreeMacFlowInTheDPN(BigInteger dpId, long elanTag, BigInteger currentDpId, MacEntry mac) {
-        EtreeLeafTagName etreeLeafTag = ElanUtils.getEtreeLeafTagByElanTag(elanTag);
+        EtreeLeafTagName etreeLeafTag = elanUtils.getEtreeLeafTagByElanTag(elanTag);
         if (etreeLeafTag != null) {
             removeTheMacFlowInTheDPN(dpId, etreeLeafTag.getEtreeLeafTag().getValue(), currentDpId, mac);
         }
     }
 
     private void removeTheMacFlowInTheDPN(BigInteger dpId, long elanTag, BigInteger currentDpId, MacEntry mac) {
-        elanServiceProvider.getMdsalManager()
+        mdsalManager
                 .removeFlow(dpId,
                         MDSALUtil.buildFlow(NwConstants.ELAN_DMAC_TABLE,
                                 ElanUtils.getKnownDynamicmacFlowRef(NwConstants.ELAN_DMAC_TABLE, dpId, currentDpId,
@@ -421,16 +430,16 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             if (updatedPhysAddress.size() > 0) {
                 for (PhysAddress physAddress : updatedPhysAddress) {
                     InstanceIdentifier<MacEntry> macId = getMacEntryOperationalDataPath(elanName, physAddress);
-                    Optional<MacEntry> existingMacEntry = ElanUtils.read(elanServiceProvider.getBroker(),
+                    Optional<MacEntry> existingMacEntry = elanUtils.read(broker,
                             LogicalDatastoreType.OPERATIONAL, macId);
-                    WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+                    WriteTransaction tx = broker.newWriteOnlyTransaction();
                     if (existingMacEntry.isPresent()) {
-                        elanServiceProvider.getElanForwardingEntriesHandler().updateElanInterfaceForwardingTablesList(
+                        elanForwardingEntriesHandler.updateElanInterfaceForwardingTablesList(
                                 elanName, interfaceName, existingMacEntry.get().getInterface(), existingMacEntry.get(),
                                 tx);
                     } else {
-                        elanServiceProvider.getElanForwardingEntriesHandler().addElanInterfaceForwardingTableList(
-                                ElanUtils.getElanInstanceByName(elanName), interfaceName, physAddress, tx);
+                        elanForwardingEntriesHandler.addElanInterfaceForwardingTableList(
+                                elanUtils.getElanInstanceByName(elanName), interfaceName, physAddress, tx);
                     }
                     ElanUtils.waitForTransactionToComplete(tx);
                 }
@@ -446,24 +455,24 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     protected void add(InstanceIdentifier<ElanInterface> identifier, ElanInterface elanInterfaceAdded) {
         String elanInstanceName = elanInterfaceAdded.getElanInstanceName();
         String interfaceName = elanInterfaceAdded.getName();
-        InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager().getInterfaceInfo(interfaceName);
+        InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
         if (interfaceInfo == null) {
             logger.warn("Interface {} is removed from Interface Oper DS due to port down ", interfaceName);
             return;
         }
-        ElanInstance elanInstance = ElanUtils.getElanInstanceByName(elanInstanceName);
+        ElanInstance elanInstance = elanUtils.getElanInstanceByName(elanInstanceName);
 
         if (elanInstance == null) {
             elanInstance = new ElanInstanceBuilder().setElanInstanceName(elanInstanceName)
                     .setDescription(elanInterfaceAdded.getDescription()).build();
             // Add the ElanInstance in the Configuration data-store
-            WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+            WriteTransaction tx = broker.newWriteOnlyTransaction();
             List<String> elanInterfaces = new ArrayList<String>();
             elanInterfaces.add(interfaceName);
-            ElanUtils.updateOperationalDataStore(elanServiceProvider.getBroker(), elanServiceProvider.getIdManager(),
+            ElanUtils.updateOperationalDataStore(broker, idManager,
                     elanInstance, elanInterfaces, tx);
             ElanUtils.waitForTransactionToComplete(tx);
-            elanInstance = ElanUtils.getElanInstanceByName(elanInstanceName);
+            elanInstance = elanUtils.getElanInstanceByName(elanInstanceName);
         }
 
         Long elanTag = elanInstance.getElanTag();
@@ -493,14 +502,14 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         }
         for (ElanInterface elanInterface : elanInterfaces) {
             String interfaceName = elanInterface.getName();
-            InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager().getInterfaceInfo(interfaceName);
+            InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
             addElanInterface(futures, elanInterface, interfaceInfo, elanInstance);
         }
     }
 
     void programRemoteDmacFlow(ElanInstance elanInstance, InterfaceInfo interfaceInfo,
             WriteTransaction writeFlowGroupTx) {
-        ElanDpnInterfacesList elanDpnInterfacesList = ElanUtils
+        ElanDpnInterfacesList elanDpnInterfacesList = elanUtils
                 .getElanDpnInterfacesList(elanInstance.getElanInstanceName());
         List<DpnInterfaces> dpnInterfaceLists = null;
         if (elanDpnInterfacesList != null) {
@@ -515,8 +524,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             }
             List<String> remoteElanInterfaces = dpnInterfaces.getInterfaces();
             for (String remoteIf : remoteElanInterfaces) {
-                ElanInterfaceMac elanIfMac = ElanUtils.getElanInterfaceMacByInterfaceName(remoteIf);
-                InterfaceInfo remoteInterface = elanServiceProvider.getInterfaceManager().getInterfaceInfo(remoteIf);
+                ElanInterfaceMac elanIfMac = elanUtils.getElanInterfaceMacByInterfaceName(remoteIf);
+                InterfaceInfo remoteInterface = interfaceManager.getInterfaceInfo(remoteIf);
                 if (elanIfMac == null) {
                     continue;
                 }
@@ -524,7 +533,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 if (remoteMacEntries != null) {
                     for (MacEntry macEntry : remoteMacEntries) {
                         PhysAddress physAddress = macEntry.getMacAddress();
-                        ElanUtils.setupRemoteDmacFlow(interfaceInfo.getDpId(), remoteInterface.getDpId(),
+                        elanUtils.setupRemoteDmacFlow(interfaceInfo.getDpId(), remoteInterface.getDpId(),
                                 remoteInterface.getInterfaceTag(), elanInstance.getElanTag(), physAddress.getValue(),
                                 elanInstance.getElanInstanceName(), writeFlowGroupTx, remoteIf);
                     }
@@ -541,12 +550,12 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         String interfaceName = elanInterface.getName();
         String elanInstanceName = elanInterface.getElanInstanceName();
 
-        Elan elanInfo = ElanUtils.getElanByName(elanInstanceName);
-        WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+        Elan elanInfo = elanUtils.getElanByName(elanInstanceName);
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
         if (elanInfo == null) {
             List<String> elanInterfaces = new ArrayList<String>();
             elanInterfaces.add(interfaceName);
-            ElanUtils.updateOperationalDataStore(elanServiceProvider.getBroker(), elanServiceProvider.getIdManager(),
+            ElanUtils.updateOperationalDataStore(broker, idManager,
                     elanInstance, elanInterfaces, tx);
         } else {
             createElanStateList(elanInstanceName, interfaceName, tx);
@@ -561,7 +570,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         if (dpId != null && !dpId.equals(ElanConstants.INVALID_DPN)) {
             InstanceIdentifier<DpnInterfaces> elanDpnInterfaces = ElanUtils
                     .getElanDpnInterfaceOperationalDataPath(elanInstanceName, dpId);
-            Optional<DpnInterfaces> existingElanDpnInterfaces = ElanUtils.read(elanServiceProvider.getBroker(),
+            Optional<DpnInterfaces> existingElanDpnInterfaces = elanUtils.read(broker,
                     LogicalDatastoreType.OPERATIONAL, elanDpnInterfaces);
             if (!existingElanDpnInterfaces.isPresent()) {
                 isFirstInterfaceInDpn = true;
@@ -572,12 +581,12 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 if (ElanUtils.isVxlan(elanInstance)) {
                     setExternalTunnelTable(dpId, elanInstance);
                 }
-                ElanL2GatewayUtils.installElanL2gwDevicesLocalMacsInDpn(dpId, elanInstance, interfaceName);
+                elanL2GatewayUtils.installElanL2gwDevicesLocalMacsInDpn(dpId, elanInstance, interfaceName);
             } else {
                 List<String> elanInterfaces = existingElanDpnInterfaces.get().getInterfaces();
                 elanInterfaces.add(interfaceName);
                 if (elanInterfaces.size() == 1) {// 1st dpn interface
-                    ElanL2GatewayUtils.installElanL2gwDevicesLocalMacsInDpn(dpId, elanInstance, interfaceName);
+                    elanL2GatewayUtils.installElanL2gwDevicesLocalMacsInDpn(dpId, elanInstance, interfaceName);
                 }
                 dpnInterfaces = updateElanDpnInterfacesList(elanInstanceName, dpId, elanInterfaces, tx);
             }
@@ -604,30 +613,30 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             InterfaceInfo interfaceInfo, boolean isFirstInterfaceInDpn) {
         String elanInstanceName = elanInstance.getElanInstanceName();
         String interfaceName = elanInterface.getName();
-        WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
         BigInteger dpId = interfaceInfo.getDpId();
-        WriteTransaction writeFlowGroupTx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+        WriteTransaction writeFlowGroupTx = broker.newWriteOnlyTransaction();
         installEntriesForElanInterface(elanInstance, interfaceInfo, isFirstInterfaceInDpn, tx, writeFlowGroupTx);
         List<PhysAddress> staticMacAddresses = elanInterface.getStaticMacEntries();
         if (staticMacAddresses != null) {
             boolean isInterfaceOperational = isOperational(interfaceInfo);
             for (PhysAddress physAddress : staticMacAddresses) {
                 InstanceIdentifier<MacEntry> macId = getMacEntryOperationalDataPath(elanInstanceName, physAddress);
-                Optional<MacEntry> existingMacEntry = ElanUtils.read(elanServiceProvider.getBroker(),
+                Optional<MacEntry> existingMacEntry = elanUtils.read(broker,
                         LogicalDatastoreType.OPERATIONAL, macId);
                 if (existingMacEntry.isPresent()) {
-                    elanServiceProvider.getElanForwardingEntriesHandler().updateElanInterfaceForwardingTablesList(
+                    elanForwardingEntriesHandler.updateElanInterfaceForwardingTablesList(
                             elanInstanceName, interfaceName, existingMacEntry.get().getInterface(),
                             existingMacEntry.get(), tx);
                 } else {
-                    elanServiceProvider.getElanForwardingEntriesHandler()
+                    elanForwardingEntriesHandler
                             .addElanInterfaceForwardingTableList(elanInstance, interfaceName, physAddress, tx);
                 }
 
                 if (isInterfaceOperational) {
                     // Setting SMAC, DMAC, UDMAC in this DPN and also in other
                     // DPNs
-                    ElanUtils.setupMacFlows(elanInstance, interfaceInfo, ElanConstants.STATIC_MAC_TIMEOUT,
+                    elanUtils.setupMacFlows(elanInstance, interfaceInfo, ElanConstants.STATIC_MAC_TIMEOUT,
                             physAddress.getValue(), writeFlowGroupTx);
                 }
             }
@@ -635,7 +644,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             if (isInterfaceOperational) {
                 // Add MAC in TOR's remote MACs via OVSDB. Outside of the loop
                 // on purpose.
-                ElanL2GatewayUtils.scheduleAddDpnMacInExtDevices(elanInstance.getElanInstanceName(), dpId,
+                elanL2GatewayUtils.scheduleAddDpnMacInExtDevices(elanInstance.getElanInstanceName(), dpId,
                         staticMacAddresses);
             }
         }
@@ -645,9 +654,9 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
     protected void removeInterfaceStaticMacEntires(String elanInstanceName, String interfaceName,
             PhysAddress physAddress) {
-        InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager().getInterfaceInfo(interfaceName);
+        InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
         InstanceIdentifier<MacEntry> macId = getMacEntryOperationalDataPath(elanInstanceName, physAddress);
-        Optional<MacEntry> existingMacEntry = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<MacEntry> existingMacEntry = elanUtils.read(broker,
                 LogicalDatastoreType.OPERATIONAL, macId);
 
         if (!existingMacEntry.isPresent()) {
@@ -656,10 +665,10 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
         MacEntry macEntry = new MacEntryBuilder().setMacAddress(physAddress).setInterface(interfaceName)
                 .setKey(new MacEntryKey(physAddress)).build();
-        WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-        elanServiceProvider.getElanForwardingEntriesHandler().deleteElanInterfaceForwardingEntries(
-                ElanUtils.getElanInstanceByName(elanInstanceName), interfaceInfo, macEntry, tx);
-        elanServiceProvider.getElanForwardingEntriesHandler().deleteElanInterfaceMacForwardingEntries(interfaceName,
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        elanForwardingEntriesHandler.deleteElanInterfaceForwardingEntries(
+                elanUtils.getElanInstanceByName(elanInstanceName), interfaceInfo, macEntry, tx);
+        elanForwardingEntriesHandler.deleteElanInterfaceMacForwardingEntries(interfaceName,
                 physAddress, tx);
         ElanUtils.waitForTransactionToComplete(tx);
     }
@@ -675,7 +684,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             return;
         }
         BigInteger dpId = interfaceInfo.getDpId();
-        ElanUtils.setupTermDmacFlows(interfaceInfo, elanServiceProvider.getMdsalManager(), writeFlowGroupTx);
+        elanUtils.setupTermDmacFlows(interfaceInfo, mdsalManager, writeFlowGroupTx);
         setupFilterEqualsTable(elanInstance, interfaceInfo, writeFlowGroupTx);
         if (isFirstInterfaceInDpn) {
             // Terminating Service , UnknownDMAC Table.
@@ -692,7 +701,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             programRemoteDmacFlow(elanInstance, interfaceInfo, writeFlowGroupTx);
         }
         // bind the Elan service to the Interface
-        bindService(elanInstance, ElanUtils.getElanInterfaceByElanInterfaceName(interfaceInfo.getInterfaceName()), tx);
+        bindService(elanInstance, elanUtils.getElanInterfaceByElanInterfaceName(interfaceInfo.getInterfaceName()), tx);
     }
 
     public void installEntriesForFirstInterfaceonDpn(ElanInstance elanInfo, InterfaceInfo interfaceInfo,
@@ -727,16 +736,16 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 getFlowRef(NwConstants.ELAN_FILTER_EQUALS_TABLE, ifTag), 9, elanInfo.getElanInstanceName(), 0, 0,
                 ElanConstants.COOKIE_ELAN_FILTER_EQUALS.add(BigInteger.valueOf(ifTag)),
                 getTunnelIdMatchForFilterEqualsLPortTag(ifTag),
-                ElanUtils.getInstructionsInPortForOutGroup(interfaceInfo.getInterfaceName()));
+                elanUtils.getInstructionsInPortForOutGroup(interfaceInfo.getInterfaceName()));
 
-        elanServiceProvider.getMdsalManager().addFlowToTx(interfaceInfo.getDpId(), flow, writeFlowGroupTx);
+        mdsalManager.addFlowToTx(interfaceInfo.getDpId(), flow, writeFlowGroupTx);
 
         Flow flowEntry = MDSALUtil.buildFlowNew(NwConstants.ELAN_FILTER_EQUALS_TABLE,
                 getFlowRef(NwConstants.ELAN_FILTER_EQUALS_TABLE, 1000 + ifTag), 10, elanInfo.getElanInstanceName(), 0,
                 0, ElanConstants.COOKIE_ELAN_FILTER_EQUALS.add(BigInteger.valueOf(ifTag)),
                 getMatchesForFilterEqualsLPortTag(ifTag), MDSALUtil.buildInstructionsDrop());
 
-        elanServiceProvider.getMdsalManager().addFlowToTx(interfaceInfo.getDpId(), flowEntry, writeFlowGroupTx);
+        mdsalManager.addFlowToTx(interfaceInfo.getDpId(), flowEntry, writeFlowGroupTx);
     }
 
     public void removeFilterEqualsTable(ElanInstance elanInfo, InterfaceInfo interfaceInfo,
@@ -746,16 +755,16 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 getFlowRef(NwConstants.ELAN_FILTER_EQUALS_TABLE, ifTag), 9, elanInfo.getElanInstanceName(), 0, 0,
                 ElanConstants.COOKIE_ELAN_FILTER_EQUALS.add(BigInteger.valueOf(ifTag)),
                 getTunnelIdMatchForFilterEqualsLPortTag(ifTag),
-                ElanUtils.getInstructionsInPortForOutGroup(interfaceInfo.getInterfaceName()));
+                elanUtils.getInstructionsInPortForOutGroup(interfaceInfo.getInterfaceName()));
 
-        elanServiceProvider.getMdsalManager().removeFlowToTx(interfaceInfo.getDpId(), flow, deleteFlowGroupTx);
+        mdsalManager.removeFlowToTx(interfaceInfo.getDpId(), flow, deleteFlowGroupTx);
 
         Flow flowEntity = MDSALUtil.buildFlowNew(NwConstants.ELAN_FILTER_EQUALS_TABLE,
                 getFlowRef(NwConstants.ELAN_FILTER_EQUALS_TABLE, 1000 + ifTag), 10, elanInfo.getElanInstanceName(), 0,
                 0, ElanConstants.COOKIE_ELAN_FILTER_EQUALS.add(BigInteger.valueOf(ifTag)),
                 getMatchesForFilterEqualsLPortTag(ifTag), MDSALUtil.buildInstructionsDrop());
 
-        elanServiceProvider.getMdsalManager().removeFlowToTx(interfaceInfo.getDpId(), flowEntity, deleteFlowGroupTx);
+        mdsalManager.removeFlowToTx(interfaceInfo.getDpId(), flowEntity, deleteFlowGroupTx);
     }
 
     private List<Bucket> getRemoteBCGroupBucketInfos(ElanInstance elanInfo, int bucketKeyStart,
@@ -766,7 +775,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     private List<Bucket> getRemoteBCGroupBuckets(ElanInstance elanInfo, DpnInterfaces dpnInterfaces, BigInteger dpnId,
             int bucketId, long elanTag) {
         List<Bucket> listBucketInfo = new ArrayList<Bucket>();
-        ElanDpnInterfacesList elanDpns = ElanUtils.getElanDpnInterfacesList(elanInfo.getElanInstanceName());
+        ElanDpnInterfacesList elanDpns = elanUtils.getElanDpnInterfacesList(elanInfo.getElanInstanceName());
         listBucketInfo.addAll(getRemoteBCGroupTunnelBuckets(elanDpns, dpnId, bucketId, elanTag));
         listBucketInfo.addAll(getRemoteBCGroupExternalPortBuckets(elanDpns, dpnInterfaces, dpnId, bucketId));
         listBucketInfo.addAll(getRemoteBCGroupBucketsOfElanL2GwDevices(elanInfo, dpnId, bucketId));
@@ -778,10 +787,10 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         List<Bucket> listBucketInfo = new ArrayList<Bucket>();
         if (elanDpns != null) {
             for (DpnInterfaces dpnInterface : elanDpns.getDpnInterfaces()) {
-                if (ElanUtils.isDpnPresent(dpnInterface.getDpId()) && dpnInterface.getDpId() != dpnId
+                if (elanUtils.isDpnPresent(dpnInterface.getDpId()) && dpnInterface.getDpId() != dpnId
                         && dpnInterface.getInterfaces() != null && !dpnInterface.getInterfaces().isEmpty()) {
                     try {
-                        List<Action> listActionInfo = ElanUtils.getInternalTunnelItmEgressAction(dpnId,
+                        List<Action> listActionInfo = elanUtils.getInternalTunnelItmEgressAction(dpnId,
                                 dpnInterface.getDpId(), elanTag);
                         if (listActionInfo.isEmpty()) {
                             continue;
@@ -802,15 +811,15 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     private List<Bucket> getRemoteBCGroupExternalPortBuckets(ElanDpnInterfacesList elanDpns,
             DpnInterfaces dpnInterfaces, BigInteger dpnId, int bucketId) {
         DpnInterfaces currDpnInterfaces = dpnInterfaces != null ? dpnInterfaces : getDpnInterfaces(elanDpns, dpnId);
-        if (currDpnInterfaces == null || !ElanUtils.isDpnPresent(currDpnInterfaces.getDpId())
+        if (currDpnInterfaces == null || !elanUtils.isDpnPresent(currDpnInterfaces.getDpId())
                 || currDpnInterfaces.getInterfaces() == null || currDpnInterfaces.getInterfaces().isEmpty()) {
             return Collections.emptyList();
         }
 
         List<Bucket> listBucketInfo = new ArrayList<Bucket>();
         for (String interfaceName : currDpnInterfaces.getInterfaces()) {
-            if (ElanUtils.isExternal(interfaceName)) {
-                List<Action> listActionInfo = ElanUtils.getExternalPortItmEgressAction(interfaceName);
+            if (elanUtils.isExternal(interfaceName)) {
+                List<Action> listActionInfo = elanUtils.getExternalPortItmEgressAction(interfaceName);
                 if (!listActionInfo.isEmpty()) {
                     listBucketInfo.add(MDSALUtil.buildBucket(listActionInfo, MDSALUtil.GROUP_WEIGHT, bucketId,
                             MDSALUtil.WATCH_PORT, MDSALUtil.WATCH_GROUP));
@@ -836,12 +845,12 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         long groupId = ElanUtils.getElanRemoteBCGID(elanTag);
         List<Bucket> listBucket = new ArrayList<Bucket>();
         int bucketId = 0;
-        ElanDpnInterfacesList elanDpns = ElanUtils.getElanDpnInterfacesList(elanInfo.getElanInstanceName());
+        ElanDpnInterfacesList elanDpns = elanUtils.getElanDpnInterfacesList(elanInfo.getElanInstanceName());
         if (elanDpns != null) {
             List<DpnInterfaces> dpnInterfaceses = elanDpns.getDpnInterfaces();
             for (DpnInterfaces dpnInterface : dpnInterfaceses) {
                 List<Bucket> remoteListBucketInfo = new ArrayList<Bucket>();
-                if (ElanUtils.isDpnPresent(dpnInterface.getDpId()) && !dpnInterface.getDpId().equals(dpId)
+                if (elanUtils.isDpnPresent(dpnInterface.getDpId()) && !dpnInterface.getDpId().equals(dpId)
                         && dpnInterface.getInterfaces() != null && !dpnInterface.getInterfaces().isEmpty()) {
                     List<Action> listAction = new ArrayList<Action>();
                     int actionKey = 0;
@@ -853,10 +862,10 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                     bucketId++;
                     remoteListBucketInfo.addAll(listBucket);
                     for (DpnInterfaces otherFes : dpnInterfaceses) {
-                        if (ElanUtils.isDpnPresent(otherFes.getDpId()) && otherFes.getDpId() != dpnInterface.getDpId()
+                        if (elanUtils.isDpnPresent(otherFes.getDpId()) && otherFes.getDpId() != dpnInterface.getDpId()
                                 && otherFes.getInterfaces() != null && !otherFes.getInterfaces().isEmpty()) {
                             try {
-                                List<Action> remoteListActionInfo = ElanUtils.getInternalTunnelItmEgressAction(
+                                List<Action> remoteListActionInfo = elanUtils.getInternalTunnelItmEgressAction(
                                         dpnInterface.getDpId(), otherFes.getDpId(), elanTag);
                                 if (!remoteListActionInfo.isEmpty()) {
                                     remoteListBucketInfo
@@ -882,7 +891,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                     }
                     Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                             MDSALUtil.buildBucketLists(remoteListBucketInfo));
-                    elanServiceProvider.getMdsalManager().addGroupToTx(dpnInterface.getDpId(), group, tx);
+                    mdsalManager.addGroupToTx(dpnInterface.getDpId(), group, tx);
                 }
             }
         }
@@ -943,13 +952,13 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     // Install DMAC entry on dst DPN
     public void installDMacAddressTables(ElanInstance elanInfo, InterfaceInfo interfaceInfo, BigInteger dstDpId) {
         String interfaceName = interfaceInfo.getInterfaceName();
-        ElanInterfaceMac elanInterfaceMac = ElanUtils.getElanInterfaceMacByInterfaceName(interfaceName);
+        ElanInterfaceMac elanInterfaceMac = elanUtils.getElanInterfaceMacByInterfaceName(interfaceName);
         if (elanInterfaceMac != null && elanInterfaceMac.getMacEntry() != null) {
-            WriteTransaction writeFlowTx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+            WriteTransaction writeFlowTx = broker.newWriteOnlyTransaction();
             List<MacEntry> macEntries = elanInterfaceMac.getMacEntry();
             for (MacEntry macEntry : macEntries) {
                 PhysAddress physAddress = macEntry.getMacAddress();
-                ElanUtils.setupDMacFlowonRemoteDpn(elanInfo, interfaceInfo, dstDpId, physAddress.getValue(),
+                elanUtils.setupDMacFlowonRemoteDpn(elanInfo, interfaceInfo, dstDpId, physAddress.getValue(),
                         writeFlowTx);
             }
             writeFlowTx.submit();
@@ -983,7 +992,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                 MDSALUtil.buildBucketLists(listBucket));
         logger.trace("Installing the remote BroadCast Group:{}", group);
-        elanServiceProvider.getMdsalManager().syncInstallGroup(dpnId, group, ElanConstants.DELAY_TIME_IN_MILLISECOND);
+        mdsalManager.syncInstallGroup(dpnId, group, ElanConstants.DELAY_TIME_IN_MILLISECOND);
     }
 
     public void setupLeavesEtreeBroadcastGroups(ElanInstance elanInfo, DpnInterfaces dpnInterfaces, BigInteger dpnId) {
@@ -1007,7 +1016,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                     MDSALUtil.buildBucketLists(listBucket));
             logger.trace("Installing the remote BroadCast Group:{}", group);
-            elanServiceProvider.getMdsalManager().syncInstallGroup(dpnId, group,
+            mdsalManager.syncInstallGroup(dpnId, group,
                     ElanConstants.DELAY_TIME_IN_MILLISECOND);
         }
     }
@@ -1039,13 +1048,13 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         for (String ifName : interfaces) {
             // In case if there is a InterfacePort in the cache which is not in
             // operational state, skip processing it
-            InterfaceInfo ifInfo = elanServiceProvider.getInterfaceManager()
+            InterfaceInfo ifInfo = interfaceManager
                     .getInterfaceInfoFromOperationalDataStore(ifName, interfaceInfo.getInterfaceType());
             if (!isOperational(ifInfo)) {
                 continue;
             }
 
-            if (!ElanUtils.isExternal(ifName)) {
+            if (!elanUtils.isExternal(ifName)) {
                 listBucket.add(MDSALUtil.buildBucket(getInterfacePortActions(ifInfo), MDSALUtil.GROUP_WEIGHT, bucketId,
                         MDSALUtil.WATCH_PORT, MDSALUtil.WATCH_GROUP));
                 bucketId++;
@@ -1055,7 +1064,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                 MDSALUtil.buildBucketLists(listBucket));
         logger.trace("installing the localBroadCast Group:{}", group);
-        elanServiceProvider.getMdsalManager().syncInstallGroup(interfaceInfo.getDpId(), group,
+        mdsalManager.syncInstallGroup(interfaceInfo.getDpId(), group,
                 ElanConstants.DELAY_TIME_IN_MILLISECOND);
     }
 
@@ -1076,13 +1085,13 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 // In case if there is a InterfacePort in the cache which is not
                 // in
                 // operational state, skip processing it
-                InterfaceInfo ifInfo = elanServiceProvider.getInterfaceManager()
+                InterfaceInfo ifInfo = interfaceManager
                         .getInterfaceInfoFromOperationalDataStore(ifName, interfaceInfo.getInterfaceType());
                 if (!isOperational(ifInfo)) {
                     continue;
                 }
 
-                if (!ElanUtils.isExternal(ifName)) {
+                if (!elanUtils.isExternal(ifName)) {
                     // only add root interfaces
                     bucketId = addInterfaceIfRootInterface(bucketId, ifName, listBucket, ifInfo);
                 }
@@ -1095,14 +1104,14 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                     MDSALUtil.buildBucketLists(listBucket));
             logger.trace("installing the localBroadCast Group:{}", group);
-            elanServiceProvider.getMdsalManager().syncInstallGroup(interfaceInfo.getDpId(), group,
+            mdsalManager.syncInstallGroup(interfaceInfo.getDpId(), group,
                     ElanConstants.DELAY_TIME_IN_MILLISECOND);
         }
     }
 
     private int addInterfaceIfRootInterface(int bucketId, String ifName, List<Bucket> listBucket,
             InterfaceInfo ifInfo) {
-        EtreeInterface etreeInterface = ElanUtils.getEtreeInterfaceByElanInterfaceName(ifName);
+        EtreeInterface etreeInterface = elanUtils.getEtreeInterfaceByElanInterfaceName(ifName);
         if (etreeInterface != null && etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) {
             listBucket.add(MDSALUtil.buildBucket(getInterfacePortActions(ifInfo), MDSALUtil.GROUP_WEIGHT, bucketId,
                     MDSALUtil.WATCH_PORT, MDSALUtil.WATCH_GROUP));
@@ -1123,7 +1132,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                 MDSALUtil.buildBucketLists(listBuckets));
         logger.trace("deleted the localBroadCast Group:{}", group);
-        elanServiceProvider.getMdsalManager().removeGroupToTx(dpnId, group, deleteFlowGroupTx);
+        mdsalManager.removeGroupToTx(dpnId, group, deleteFlowGroupTx);
     }
 
     public void removeElanBroadcastGroup(ElanInstance elanInfo, InterfaceInfo interfaceInfo,
@@ -1144,7 +1153,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         Group group = MDSALUtil.buildGroup(groupId, elanInfo.getElanInstanceName(), GroupTypes.GroupAll,
                 MDSALUtil.buildBucketLists(listBuckets));
         logger.trace("deleting the remoteBroadCast group:{}", group);
-        elanServiceProvider.getMdsalManager().removeGroupToTx(dpnId, group, deleteFlowGroupTx);
+        mdsalManager.removeGroupToTx(dpnId, group, deleteFlowGroupTx);
     }
 
     /**
@@ -1167,7 +1176,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 ITMConstants.COOKIE_ITM_EXTERNAL.add(BigInteger.valueOf(elanTag)),
                 buildMatchesForVni(elanInfo.getSegmentationId()), getInstructionsExtTunnelTable(elanTag));
 
-        elanServiceProvider.getMdsalManager().installFlow(flowEntity);
+        mdsalManager.installFlow(flowEntity);
     }
 
     /**
@@ -1190,7 +1199,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         FlowEntity flowEntity = new FlowEntity(dpnId);
         flowEntity.setTableId(NwConstants.EXTERNAL_TUNNEL_TABLE);
         flowEntity.setFlowId(flowId);
-        elanServiceProvider.getMdsalManager().removeFlow(flowEntity);
+        mdsalManager.removeFlow(flowEntity);
     }
 
     public void setupTerminateServiceTable(ElanInstance elanInfo, BigInteger dpId, WriteTransaction writeFlowGroupTx) {
@@ -1215,7 +1224,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 ElanUtils.getTunnelMatchesForServiceId((int) elanTag),
                 getInstructionsForOutGroup(ElanUtils.getElanLocalBCGID(elanTag)));
 
-        elanServiceProvider.getMdsalManager().addFlowToTx(dpId, flowEntity, writeFlowGroupTx);
+        mdsalManager.addFlowToTx(dpId, flowEntity, writeFlowGroupTx);
     }
 
     public void setupUnknownDMacTable(ElanInstance elanInfo, BigInteger dpId, WriteTransaction writeFlowGroupTx) {
@@ -1227,7 +1236,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
     private void setupEtreeUnknownDMacTable(ElanInstance elanInfo, BigInteger dpId, long elanTag,
             WriteTransaction writeFlowGroupTx) {
-        EtreeLeafTagName etreeLeafTag = ElanUtils.getEtreeLeafTagByElanTag(elanTag);
+        EtreeLeafTagName etreeLeafTag = elanUtils.getEtreeLeafTagByElanTag(elanTag);
         if (etreeLeafTag != null) {
             long leafTag = etreeLeafTag.getEtreeLeafTag().getValue();
             installRemoteUnknownFlow(elanInfo, dpId, leafTag, writeFlowGroupTx);
@@ -1245,7 +1254,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 getMatchesForElanTag(elanTag, /* SH flag */false),
                 getInstructionsForOutGroup(ElanUtils.getElanRemoteBCGID(elanTag)));
 
-        elanServiceProvider.getMdsalManager().addFlowToTx(dpId, flowEntity, writeFlowGroupTx);
+        mdsalManager.addFlowToTx(dpId, flowEntity, writeFlowGroupTx);
     }
 
     private void installRemoteUnknownFlow(ElanInstance elanInfo, BigInteger dpId, long elanTag,
@@ -1259,7 +1268,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                     ElanConstants.COOKIE_ELAN_UNKNOWN_DMAC.add(BigInteger.valueOf(elanTag)),
                     getMatchesForElanTag(elanTag, /* SH flag */true),
                     getInstructionsForOutGroup(ElanUtils.getElanLocalBCGID(elanTag)));
-            elanServiceProvider.getMdsalManager().addFlowToTx(dpId, flowEntity2, writeFlowGroupTx);
+            mdsalManager.addFlowToTx(dpId, flowEntity2, writeFlowGroupTx);
         }
     }
 
@@ -1268,18 +1277,18 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             long elanTag) {
         Flow flow = new FlowBuilder().setId(new FlowId(getUnknownDmacFlowRef(NwConstants.ELAN_UNKNOWN_DMAC_TABLE,
                 elanTag, /* SH flag */ false))).setTableId(NwConstants.ELAN_UNKNOWN_DMAC_TABLE).build();
-        elanServiceProvider.getMdsalManager().removeFlowToTx(dpId, flow, deleteFlowGroupTx);
+        mdsalManager.removeFlowToTx(dpId, flow, deleteFlowGroupTx);
 
         if (ElanUtils.isVxlan(elanInfo)) {
             Flow flow2 = new FlowBuilder().setId(new FlowId(getUnknownDmacFlowRef(NwConstants.ELAN_UNKNOWN_DMAC_TABLE,
                     elanTag, /* SH flag */ true))).setTableId(NwConstants.ELAN_UNKNOWN_DMAC_TABLE)
                     .build();
-            elanServiceProvider.getMdsalManager().removeFlowToTx(dpId, flow2, deleteFlowGroupTx);
+            mdsalManager.removeFlowToTx(dpId, flow2, deleteFlowGroupTx);
         }
     }
 
     private void removeDefaultTermFlow(BigInteger dpId, long elanTag) {
-        ElanUtils.removeTerminatingServiceAction(dpId, (int) elanTag);
+        elanUtils.removeTerminatingServiceAction(dpId, (int) elanTag);
     }
 
     private void bindService(ElanInstance elanInfo, ElanInterface elanInterface, WriteTransaction tx) {
@@ -1388,7 +1397,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     private void createElanInterfaceTablesList(String interfaceName, WriteTransaction tx) {
         InstanceIdentifier<ElanInterfaceMac> elanInterfaceMacTables = ElanUtils
                 .getElanInterfaceMacEntriesOperationalDataPath(interfaceName);
-        Optional<ElanInterfaceMac> interfaceMacTables = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanInterfaceMac> interfaceMacTables = elanUtils.read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanInterfaceMacTables);
         // Adding new Elan Interface Port to the operational DataStore without
         // Static-Mac Entries..
@@ -1403,7 +1412,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
     private void createElanStateList(String elanInstanceName, String interfaceName, WriteTransaction tx) {
         InstanceIdentifier<Elan> elanInstance = ElanUtils.getElanInstanceOperationalDataPath(elanInstanceName);
-        Optional<Elan> elanInterfaceLists = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<Elan> elanInterfaceLists = elanUtils.read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanInstance);
         // Adding new Elan Interface Port to the operational DataStore without
         // Static-Mac Entries..
@@ -1428,7 +1437,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     }
 
     public void handleInternalTunnelStateEvent(BigInteger srcDpId, BigInteger dstDpId) {
-        ElanDpnInterfaces dpnInterfaceLists = ElanUtils.getElanDpnInterfacesList();
+        ElanDpnInterfaces dpnInterfaceLists = elanUtils.getElanDpnInterfacesList();
         if (dpnInterfaceLists == null) {
             return;
         }
@@ -1447,15 +1456,15 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             }
             if (cnt == 2) {
                 logger.debug("Elan instance:{} is present b/w srcDpn:{} and dstDpn:{}", elanName, srcDpId, dstDpId);
-                ElanInstance elanInfo = ElanUtils.getElanInstanceByName(elanName);
+                ElanInstance elanInfo = elanUtils.getElanInstanceByName(elanName);
                 // update Remote BC Group
                 setupElanBroadcastGroups(elanInfo, srcDpId);
 
-                DpnInterfaces dpnInterface = ElanUtils.getElanInterfaceInfoByElanDpn(elanName, dstDpId);
+                DpnInterfaces dpnInterface = elanUtils.getElanInterfaceInfoByElanDpn(elanName, dstDpId);
                 Set<String> interfaceLists = new HashSet<>();
                 interfaceLists.addAll(dpnInterface.getInterfaces());
                 for (String ifName : interfaceLists) {
-                    InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager().getInterfaceInfo(ifName);
+                    InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(ifName);
                     if (isOperational(interfaceInfo)) {
                         installDMacAddressTables(elanInfo, interfaceInfo, srcDpId);
                     }
@@ -1493,16 +1502,16 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             return;
         }
 
-        ElanDpnInterfaces dpnInterfaceLists = ElanUtils.getElanDpnInterfacesList();
+        ElanDpnInterfaces dpnInterfaceLists = elanUtils.getElanDpnInterfacesList();
         if (dpnInterfaceLists == null) {
             return;
         }
         List<ElanDpnInterfacesList> elanDpnIf = dpnInterfaceLists.getElanDpnInterfacesList();
         for (ElanDpnInterfacesList elanDpns : elanDpnIf) {
             String elanName = elanDpns.getElanInstanceName();
-            ElanInstance elanInfo = ElanUtils.getElanInstanceByName(elanName);
+            ElanInstance elanInfo = elanUtils.getElanInstanceByName(elanName);
 
-            DpnInterfaces dpnInterfaces = ElanUtils.getElanInterfaceInfoByElanDpn(elanName, dpId);
+            DpnInterfaces dpnInterfaces = elanUtils.getElanInterfaceInfoByElanDpn(elanName, dpId);
             if (dpnInterfaces == null || dpnInterfaces.getInterfaces() == null
                     || dpnInterfaces.getInterfaces().isEmpty()) {
                 continue;
@@ -1511,9 +1520,9 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
             setupElanBroadcastGroups(elanInfo, dpId);
             // install L2gwDevices local macs in dpn.
-            ElanL2GatewayUtils.installL2gwDeviceMacsInDpn(dpId, externalNodeId, elanInfo, intrf.getName());
+            elanL2GatewayUtils.installL2gwDeviceMacsInDpn(dpId, externalNodeId, elanInfo, intrf.getName());
             // Install dpn macs on external device
-            ElanL2GatewayUtils.installDpnMacsInL2gwDevice(elanName, new HashSet<>(dpnInterfaces.getInterfaces()), dpId,
+            elanL2GatewayUtils.installDpnMacsInL2gwDevice(elanName, new HashSet<>(dpnInterfaces.getInterfaces()), dpId,
                     externalNodeId);
         }
         logger.info("Handled ExternalTunnelStateEvent for {}", externalTunnel);
@@ -1532,7 +1541,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         if (intrf.getOperStatus() == Interface.OperStatus.Up) {
             String srcDevice = externalTunnel.getDestinationDevice();
             String destDevice = externalTunnel.getSourceDevice();
-            ExternalTunnel otherEndPointExtTunnel = ElanUtils.getExternalTunnel(srcDevice, destDevice,
+            ExternalTunnel otherEndPointExtTunnel = elanUtils.getExternalTunnel(srcDevice, destDevice,
                     LogicalDatastoreType.CONFIGURATION);
             if (logger.isTraceEnabled()) {
                 logger.trace("Validating external tunnel state: src tunnel {}, dest tunnel {}", externalTunnel,
@@ -1540,7 +1549,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             }
             if (otherEndPointExtTunnel != null) {
                 boolean otherEndPointInterfaceOperational = ElanUtils.isInterfaceOperational(
-                        otherEndPointExtTunnel.getTunnelInterfaceName(), elanServiceProvider.getBroker());
+                        otherEndPointExtTunnel.getTunnelInterfaceName(), broker);
                 if (otherEndPointInterfaceOperational) {
                     return true;
                 } else {
@@ -1569,7 +1578,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     }
 
     public void updateRemoteBroadcastGroupForAllElanDpns(ElanInstance elanInfo) {
-        List<DpnInterfaces> dpns = ElanUtils.getInvolvedDpnsInElan(elanInfo.getElanInstanceName());
+        List<DpnInterfaces> dpns = elanUtils.getInvolvedDpnsInElan(elanInfo.getElanInstanceName());
         if (dpns == null) {
             return;
         }
@@ -1578,18 +1587,18 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         }
     }
 
-    public static List<Bucket> getRemoteBCGroupBucketsOfElanL2GwDevices(ElanInstance elanInfo, BigInteger dpnId,
+    public List<Bucket> getRemoteBCGroupBucketsOfElanL2GwDevices(ElanInstance elanInfo, BigInteger dpnId,
             int bucketId) {
         List<Bucket> listBucketInfo = new ArrayList<Bucket>();
         ConcurrentMap<String, L2GatewayDevice> map = ElanL2GwCacheUtils
                 .getInvolvedL2GwDevices(elanInfo.getElanInstanceName());
         for (L2GatewayDevice device : map.values()) {
-            String interfaceName = ElanL2GatewayUtils.getExternalTunnelInterfaceName(String.valueOf(dpnId),
+            String interfaceName = elanL2GatewayUtils.getExternalTunnelInterfaceName(String.valueOf(dpnId),
                     device.getHwvtepNodeId());
             if (interfaceName == null) {
                 continue;
             }
-            List<Action> listActionInfo = ElanUtils.buildTunnelItmEgressActions(interfaceName,
+            List<Action> listActionInfo = elanUtils.buildTunnelItmEgressActions(interfaceName,
                     elanInfo.getSegmentationId());
             listBucketInfo.add(MDSALUtil.buildBucket(listActionInfo, MDSALUtil.GROUP_WEIGHT, bucketId,
                     MDSALUtil.WATCH_PORT, MDSALUtil.WATCH_GROUP));
@@ -1598,14 +1607,6 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         return listBucketInfo;
     }
 
-    public ElanServiceProvider getElanServiceProvider() {
-        return elanServiceProvider;
-    }
-
-    public void setElanServiceProvider(ElanServiceProvider elanServiceProvider) {
-        this.elanServiceProvider = elanServiceProvider;
-    }
-
     @Override
     protected ElanInterfaceManager getDataTreeChangeListener() {
         return this;
index c966e7fef90af9e47a88d49899bad32ee3a1f1fc..bab7651afa4bf3da7752029cbf2769f7a7e329ad 100644 (file)
@@ -10,59 +10,54 @@ package org.opendaylight.netvirt.elan.internal;
 
 import java.math.BigInteger;
 import java.util.List;
-
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
 import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
+import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.netvirt.elan.utils.ElanConstants;
 import org.opendaylight.netvirt.elan.utils.ElanUtils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterface;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class ElanInterfaceStateChangeListener extends AsyncDataTreeChangeListenerBase<Interface,ElanInterfaceStateChangeListener> implements AutoCloseable {
 
-    private  ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanInterfaceStateChangeListener elanInterfaceStateChangeListener = null;
     private static final Logger logger = LoggerFactory.getLogger(ElanInterfaceStateChangeListener.class);
 
+    private final DataBroker broker;
+    private final ElanInterfaceManager elanInterfaceManager;
+    private final IInterfaceManager interfaceManager;
+    private final ElanUtils elanUtils;
 
-    private ElanInterfaceStateChangeListener(ElanServiceProvider elanServiceProvider) {
+    public ElanInterfaceStateChangeListener(final DataBroker db, final ElanInterfaceManager ifManager,
+                                            final IInterfaceManager interfaceManager, ElanUtils elanUtils) {
         super(Interface.class, ElanInterfaceStateChangeListener.class);
-        this.elanServiceProvider = elanServiceProvider;
-        registerListener(LogicalDatastoreType.OPERATIONAL,this.elanServiceProvider.getBroker());
-
+        broker = db;
+        elanInterfaceManager = ifManager;
+        this.interfaceManager = interfaceManager;
+        this.elanUtils = elanUtils;
     }
 
-    public static ElanInterfaceStateChangeListener getElanInterfaceStateChangeListener(
-        ElanServiceProvider elanServiceProvider) {
-        if (elanInterfaceStateChangeListener == null)
-            synchronized (ElanInterfaceStateChangeListener.class) {
-                if (elanInterfaceStateChangeListener == null)
-                {
-                    ElanInterfaceStateChangeListener elanInterfaceStateChangeListener = new ElanInterfaceStateChangeListener(elanServiceProvider);
-                    return elanInterfaceStateChangeListener;
-
-                }
-            }
-        return elanInterfaceStateChangeListener;
+    public void init() {
+        registerListener(LogicalDatastoreType.OPERATIONAL, broker);
     }
 
     @Override
     protected void remove(InstanceIdentifier<Interface> identifier, Interface delIf) {
         logger.trace("Received interface {} Down event", delIf);
         String interfaceName =  delIf.getName();
-        ElanInterface elanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+        ElanInterface elanInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
         if (elanInterface == null) {
             logger.debug("No Elan Interface is created for the interface:{} ", interfaceName);
             return;
@@ -74,10 +69,10 @@ public class ElanInterfaceStateChangeListener extends AsyncDataTreeChangeListene
         interfaceInfo.setInterfaceType(InterfaceInfo.InterfaceType.VLAN_INTERFACE);
         interfaceInfo.setInterfaceTag(delIf.getIfIndex());
         String elanInstanceName = elanInterface.getElanInstanceName();
-        ElanInstance elanInstance = ElanUtils.getElanInstanceByName(elanInstanceName);
+        ElanInstance elanInstance = elanUtils.getElanInstanceByName(elanInstanceName);
         DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
         InterfaceRemoveWorkerOnElan removeWorker = new InterfaceRemoveWorkerOnElan(elanInstanceName, elanInstance,
-            interfaceName, interfaceInfo, true, elanServiceProvider.getElanInterfaceManager());
+            interfaceName, interfaceInfo, true, elanInterfaceManager);
         coordinator.enqueueJob(elanInstanceName, removeWorker, ElanConstants.JOB_MAX_RETRIES);
     }
 
@@ -94,7 +89,7 @@ public class ElanInterfaceStateChangeListener extends AsyncDataTreeChangeListene
                 if (update.getOperStatus().equals(Interface.OperStatus.Up)) {
                     InternalTunnel internalTunnel = getTunnelState(interfaceName);
                     if (internalTunnel != null) {
-                        elanServiceProvider.getElanInterfaceManager().handleInternalTunnelStateEvent(internalTunnel.getSourceDPN(), internalTunnel.getDestinationDPN());
+                        elanInterfaceManager.handleInternalTunnelStateEvent(internalTunnel.getSourceDPN(), internalTunnel.getDestinationDPN());
                     }
                 }
             }
@@ -105,13 +100,13 @@ public class ElanInterfaceStateChangeListener extends AsyncDataTreeChangeListene
     protected void add(InstanceIdentifier<Interface> identifier, Interface intrf) {
         logger.trace("Received interface {} up event", intrf);
         String interfaceName =  intrf.getName();
-        ElanInterface elanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+        ElanInterface elanInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
         if (elanInterface == null) {
             if (intrf.getType() != null && intrf.getType().equals(Tunnel.class)) {
                 if (intrf.getOperStatus().equals(Interface.OperStatus.Up)) {
                     InternalTunnel internalTunnel = getTunnelState(interfaceName);
                     if (internalTunnel != null) {
-                        elanServiceProvider.getElanInterfaceManager().handleInternalTunnelStateEvent(internalTunnel.getSourceDPN(),
+                        elanInterfaceManager.handleInternalTunnelStateEvent(internalTunnel.getSourceDPN(),
                             internalTunnel.getDestinationDPN());
                     }
                 }
@@ -119,7 +114,7 @@ public class ElanInterfaceStateChangeListener extends AsyncDataTreeChangeListene
             return;
         }
         InstanceIdentifier<ElanInterface> elanInterfaceId = ElanUtils.getElanInterfaceConfigurationDataPathId(interfaceName);
-        elanServiceProvider.getElanInterfaceManager().add(elanInterfaceId, elanInterface);
+        elanInterfaceManager.add(elanInterfaceId, elanInterface);
     }
 
     @Override
@@ -129,7 +124,7 @@ public class ElanInterfaceStateChangeListener extends AsyncDataTreeChangeListene
 
     public  InternalTunnel getTunnelState(String interfaceName) {
         InternalTunnel internalTunnel = null;
-        TunnelList tunnelList = ElanUtils.buildInternalTunnel(elanServiceProvider.getBroker());
+        TunnelList tunnelList = elanUtils.buildInternalTunnel(broker);
         if (tunnelList != null && tunnelList.getInternalTunnel() != null) {
             List<InternalTunnel> internalTunnels = tunnelList.getInternalTunnel();
             for (InternalTunnel tunnel : internalTunnels) {
index 1b30afad17972de63a3dfc877879d9939c1dedf0..78307c469bab107262c11f77f9c893ba684dd787 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.netvirt.elan.internal;
 
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.netvirt.elan.utils.ElanClusterUtils;
@@ -19,54 +19,31 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.re
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnel;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class ElanInterfaceStateClusteredListener extends
     AsyncClusteredDataChangeListenerBase<Interface, ElanInterfaceStateClusteredListener> implements AutoCloseable {
-    public  ElanServiceProvider getElanServiceProvider() {
-        return elanServiceProvider;
-    }
-    public void setElanServiceProvider(ElanServiceProvider elanServiceProvider) {
-        this.elanServiceProvider = elanServiceProvider;
-    }
-
-    private  ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanInterfaceStateClusteredListener elanInterfaceStateClusteredListener = null;
-    private ListenerRegistration<DataChangeListener> listenerRegistration;
 
     private static final Logger logger = LoggerFactory.getLogger(ElanInterfaceStateClusteredListener.class);
 
+    private final DataBroker broker;
+    private final ElanInterfaceManager elanInterfaceManager;
+    private final ElanUtils elanUtils;
+    private final EntityOwnershipService entityOwnershipService;
 
-    public ElanInterfaceStateClusteredListener(ElanServiceProvider elanServiceProvider) {
+    public ElanInterfaceStateClusteredListener(DataBroker broker, ElanInterfaceManager elanInterfaceManager,
+                                               ElanUtils elanUtils, EntityOwnershipService entityOwnershipService) {
         super(Interface.class, ElanInterfaceStateClusteredListener.class);
-        this.elanServiceProvider = elanServiceProvider;
-        registerListener(this.elanServiceProvider.getBroker());
+        this.broker = broker;
+        this.elanInterfaceManager = elanInterfaceManager;
+        this.elanUtils = elanUtils;
+        this.entityOwnershipService = entityOwnershipService;
     }
-    public static ElanInterfaceStateClusteredListener getElanInterfaceStateClusteredListener(
-        ElanServiceProvider elanServiceProvider) {
-        if (elanInterfaceStateClusteredListener == null)
-            synchronized (ElanInterfaceStateClusteredListener.class) {
-                if (elanInterfaceStateClusteredListener == null)
-                {
-                    ElanInterfaceStateClusteredListener elanInterfaceStateClusteredListener = new ElanInterfaceStateClusteredListener(elanServiceProvider);
-                    return elanInterfaceStateClusteredListener;
 
-                }
-            }
-        return elanInterfaceStateClusteredListener;
-    }
-
-    private void registerListener(final DataBroker db) {
-        try {
-            listenerRegistration = elanServiceProvider.getBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
-                getWildCardPath(), ElanInterfaceStateClusteredListener.this, AsyncDataBroker.DataChangeScope.BASE);
-        } catch (final Exception e) {
-            logger.error("Elan Interfaces DataChange listener registration fail!", e);
-            throw new IllegalStateException("ElanInterface registration Listener failed.", e);
-        }
+    public void init() {
+        registerListener(LogicalDatastoreType.OPERATIONAL, broker);
     }
 
     @Override
@@ -99,7 +76,7 @@ public class ElanInterfaceStateClusteredListener extends
             if (intrf.getOperStatus().equals(Interface.OperStatus.Up)) {
                 final String interfaceName = intrf.getName();
 
-                ElanClusterUtils.runOnlyInLeaderNode(new Runnable() {
+                ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, new Runnable() {
                     @Override
                     public void run() {
                         logger.debug("running external tunnel update job for interface {} added", interfaceName);
@@ -111,11 +88,11 @@ public class ElanInterfaceStateClusteredListener extends
     }
 
     private void handleExternalTunnelUpdate(String interfaceName, Interface update) {
-        ExternalTunnel externalTunnel = ElanUtils.getExternalTunnel(interfaceName, LogicalDatastoreType.CONFIGURATION);
+        ExternalTunnel externalTunnel = elanUtils.getExternalTunnel(interfaceName, LogicalDatastoreType.CONFIGURATION);
         if (externalTunnel != null) {
             logger.debug("handling external tunnel update event for ext device dst {}  src {} ",
                 externalTunnel.getDestinationDevice(), externalTunnel.getSourceDevice());
-            elanServiceProvider.getElanInterfaceManager().handleExternalTunnelStateEvent(externalTunnel, update);
+            elanInterfaceManager.handleExternalTunnelStateEvent(externalTunnel, update);
         } else {
             logger.trace("External tunnel not found with interfaceName: {}", interfaceName);
         }
index 146318c7b8c248bd15aa4bdec913682ed4cd9ba0..94637cef8ba0255b51e358a394a243f6de4efc79 100644 (file)
@@ -7,14 +7,24 @@
  */
 package org.opendaylight.netvirt.elan.internal;
 
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.netvirt.elan.utils.ElanConstants;
 import org.opendaylight.genius.mdsalutil.AbstractDataChangeListener;
-import org.opendaylight.genius.mdsalutil.*;
+import org.opendaylight.genius.mdsalutil.ActionInfo;
+import org.opendaylight.genius.mdsalutil.ActionType;
+import org.opendaylight.genius.mdsalutil.FlowEntity;
+import org.opendaylight.genius.mdsalutil.InstructionInfo;
+import org.opendaylight.genius.mdsalutil.InstructionType;
+import org.opendaylight.genius.mdsalutil.MDSALUtil;
+import org.opendaylight.genius.mdsalutil.MatchInfo;
+import org.opendaylight.genius.mdsalutil.NwConstants;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
+import org.opendaylight.netvirt.elan.utils.ElanConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
@@ -23,33 +33,23 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-public class ElanNodeListener extends AbstractDataChangeListener<Node> {
+public class ElanNodeListener extends AbstractDataChangeListener<Node> implements AutoCloseable {
 
     private static final Logger logger = LoggerFactory.getLogger(ElanNodeListener.class);
-    private static volatile ElanNodeListener elanNodeListener = null;
-    private ElanServiceProvider elanServiceProvider = null;
+
+    private final DataBroker broker;
+    private final IMdsalApiManager mdsalManager;
+
     private ListenerRegistration<DataChangeListener> listenerRegistration;
-    public static ElanNodeListener getElanNodeListener(ElanServiceProvider elanServiceProvider) {
-        if (elanNodeListener == null)
-            synchronized (ElanNodeListener.class) {
-                if (elanNodeListener == null)
-                {
-                    ElanNodeListener elanNodeListener = new ElanNodeListener(elanServiceProvider);
-                    return elanNodeListener;
-
-                }
-            }
-        return elanNodeListener;
-    }
 
-    public ElanNodeListener(ElanServiceProvider elanServiceProvider) {
+    public ElanNodeListener(DataBroker dataBroker, IMdsalApiManager mdsalManager) {
         super(Node.class);
-        this.elanServiceProvider= elanServiceProvider;
-        registerListener(this.elanServiceProvider.getBroker());
+        this.broker = dataBroker;
+        this.mdsalManager = mdsalManager;
+    }
+
+    public void init() {
+        registerListener(broker);
     }
 
     private void registerListener(final DataBroker db) {
@@ -105,7 +105,7 @@ public class ElanNodeListener extends AbstractDataChangeListener<Node> {
         FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.ELAN_SMAC_TABLE, getTableMissFlowRef(NwConstants.ELAN_SMAC_TABLE),
             0, "ELAN sMac Table Miss Flow", 0, 0, ElanConstants.COOKIE_ELAN_KNOWN_SMAC,
             mkMatches, mkInstructions);
-        this.elanServiceProvider.getMdsalManager().installFlow(flowEntity);
+        mdsalManager.installFlow(flowEntity);
     }
 
     private void setupTableMissDmacFlow(BigInteger dpId) {
@@ -117,12 +117,18 @@ public class ElanNodeListener extends AbstractDataChangeListener<Node> {
         FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.ELAN_DMAC_TABLE, getTableMissFlowRef(NwConstants.ELAN_DMAC_TABLE),
             0, "ELAN dMac Table Miss Flow", 0, 0, ElanConstants.COOKIE_ELAN_KNOWN_DMAC,
             mkMatches, mkInstructions);
-        this.elanServiceProvider.getMdsalManager().installFlow(flowEntity);
+        mdsalManager.installFlow(flowEntity);
     }
 
     private String getTableMissFlowRef(long tableId) {
         return new StringBuffer().append(tableId).toString();
     }
 
+    @Override
+    public void close() throws Exception {
+        if (listenerRegistration != null) {
+            listenerRegistration.close();
+        }
 
+    }
 }
index 2db3c8b4ed0b764284dbbc5c1a56732ab86762af..56211d9c5f7b4901a8e177e330bec01f6cca4abc 100755 (executable)
@@ -11,9 +11,11 @@ import com.google.common.base.Optional;
 import java.math.BigInteger;
 import java.util.Arrays;
 import org.opendaylight.controller.liblldp.NetUtils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
+import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.mdsalutil.MetaDataUtil;
 import org.opendaylight.genius.mdsalutil.NWUtil;
@@ -39,25 +41,19 @@ import org.slf4j.LoggerFactory;
 @SuppressWarnings("deprecation")
 public class ElanPacketInHandler implements PacketProcessingListener {
 
-    private ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanPacketInHandler elanPacketInHandler = null;
     private static final Logger logger = LoggerFactory.getLogger(ElanPacketInHandler.class);
 
-    public ElanPacketInHandler(ElanServiceProvider elanServiceProvider) {
-        this.elanServiceProvider = elanServiceProvider;
-    }
-
-    public static ElanPacketInHandler getElanPacketInHandler(ElanServiceProvider elanServiceProvider) {
-        if (elanPacketInHandler == null) {
-            synchronized (ElanPacketInHandler.class) {
-                if (elanPacketInHandler == null) {
-                    ElanPacketInHandler elanPacketInHandler = new ElanPacketInHandler(elanServiceProvider);
-                    return elanPacketInHandler;
-
-                }
-            }
-        }
-        return elanPacketInHandler;
+    private final DataBroker broker;
+    private final IInterfaceManager interfaceManager;
+    private final ElanUtils elanUtils;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+
+    public ElanPacketInHandler(DataBroker dataBroker, final IInterfaceManager interfaceManager, ElanUtils elanUtils,
+                               ElanL2GatewayUtils elanL2GatewayUtils) {
+        broker = dataBroker;
+        this.interfaceManager = interfaceManager;
+        this.elanUtils = elanUtils;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
     }
 
     @Override
@@ -79,7 +75,7 @@ public class ElanPacketInHandler implements PacketProcessingListener {
 
                 long portTag = MetaDataUtil.getLportFromMetadata(metadata).intValue();
 
-                Optional<IfIndexInterface> interfaceInfoOp = ElanUtils.getInterfaceInfoByInterfaceTag(portTag);
+                Optional<IfIndexInterface> interfaceInfoOp = elanUtils.getInterfaceInfoByInterfaceTag(portTag);
                 if (!interfaceInfoOp.isPresent()) {
                     logger.warn("There is no interface for given portTag {}", portTag);
                     return;
@@ -87,13 +83,13 @@ public class ElanPacketInHandler implements PacketProcessingListener {
                 String interfaceName = interfaceInfoOp.get().getInterfaceName();
                 logger.debug("Received a packet with srcMac: {} ElanTag: {} PortTag: {} InterfaceName: {}", macAddress,
                         elanTag, portTag, interfaceName);
-                ElanTagName elanTagName = ElanUtils.getElanInfoByElanTag(elanTag);
+                ElanTagName elanTagName = elanUtils.getElanInfoByElanTag(elanTag);
                 if (elanTagName == null) {
                     logger.warn("not able to find elanTagName in elan-tag-name-map for elan tag {}", elanTag);
                     return;
                 }
                 String elanName = elanTagName.getName();
-                MacEntry macEntry = ElanUtils.getInterfaceMacEntriesOperationalDataPath(interfaceName, physAddress);
+                MacEntry macEntry = elanUtils.getInterfaceMacEntriesOperationalDataPath(interfaceName, physAddress);
                 if (macEntry != null && macEntry.getInterface() == interfaceName) {
                     BigInteger macTimeStamp = macEntry.getControllerLearnedForwardingEntryTimestamp();
                     if (System.currentTimeMillis() > macTimeStamp.longValue() + 2000) {
@@ -110,7 +106,7 @@ public class ElanPacketInHandler implements PacketProcessingListener {
                          */
                         InstanceIdentifier<MacEntry> macEntryId = ElanUtils
                                 .getInterfaceMacEntriesIdentifierOperationalDataPath(interfaceName, physAddress);
-                        ElanUtils.delete(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL, macEntryId);
+                        ElanUtils.delete(broker, LogicalDatastoreType.OPERATIONAL, macEntryId);
                     } else {
                         // Protection time running. Ignore packets for 2 seconds
                         return;
@@ -123,7 +119,7 @@ public class ElanPacketInHandler implements PacketProcessingListener {
 
                         InstanceIdentifier<MacEntry> macEntryId = ElanUtils
                                 .getInterfaceMacEntriesIdentifierOperationalDataPath(interfaceName, physAddress);
-                        ElanUtils.delete(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL, macEntryId);
+                        ElanUtils.delete(broker, LogicalDatastoreType.OPERATIONAL, macEntryId);
                         tryAndRemoveInvalidMacEntry(elanName, macEntry);
                     } else {
                         // New FEs flood their packets on all interfaces. This
@@ -140,21 +136,21 @@ public class ElanPacketInHandler implements PacketProcessingListener {
                         .setIsStaticAddress(false).build();
                 InstanceIdentifier<MacEntry> macEntryId = ElanUtils
                         .getInterfaceMacEntriesIdentifierOperationalDataPath(interfaceName, physAddress);
-                MDSALUtil.syncWrite(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL, macEntryId,
+                MDSALUtil.syncWrite(broker, LogicalDatastoreType.OPERATIONAL, macEntryId,
                         macEntry);
                 InstanceIdentifier<MacEntry> elanMacEntryId = ElanUtils.getMacEntryOperationalDataPath(elanName,
                         physAddress);
-                MDSALUtil.syncWrite(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL, elanMacEntryId,
+                MDSALUtil.syncWrite(broker, LogicalDatastoreType.OPERATIONAL, elanMacEntryId,
                         macEntry);
-                ElanInstance elanInstance = ElanUtils.getElanInstanceByName(elanName);
-                WriteTransaction flowWritetx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-                ElanUtils.setupMacFlows(elanInstance,
-                        elanServiceProvider.getInterfaceManager().getInterfaceInfo(interfaceName),
+                ElanInstance elanInstance = elanUtils.getElanInstanceByName(elanName);
+                WriteTransaction flowWritetx = broker.newWriteOnlyTransaction();
+                elanUtils.setupMacFlows(elanInstance,
+                        interfaceManager.getInterfaceInfo(interfaceName),
                         elanInstance.getMacTimeout(), macAddress, flowWritetx);
                 flowWritetx.submit();
 
-                BigInteger dpId = elanServiceProvider.getInterfaceManager().getDpnForInterface(interfaceName);
-                ElanL2GatewayUtils.scheduleAddDpnMacInExtDevices(elanInstance.getElanInstanceName(), dpId,
+                BigInteger dpId = interfaceManager.getDpnForInterface(interfaceName);
+                elanL2GatewayUtils.scheduleAddDpnMacInExtDevices(elanInstance.getElanInstanceName(), dpId,
                         Arrays.asList(physAddress));
             } catch (Exception e) {
                 logger.trace("Failed to decode packet: {}", e);
@@ -169,15 +165,14 @@ public class ElanPacketInHandler implements PacketProcessingListener {
      * Static MAC having been added on a wrong ELAN.
      */
     private void tryAndRemoveInvalidMacEntry(String elanName, MacEntry macEntry) {
-        ElanInstance elanInfo = ElanUtils.getElanInstanceByName(elanName);
+        ElanInstance elanInfo = elanUtils.getElanInstanceByName(elanName);
         if (elanInfo == null) {
             logger.warn(String.format("MAC %s is been added (either statically or dynamically) for an invalid Elan %s. "
                     + "Manual cleanup may be necessary", macEntry.getMacAddress(), elanName));
             return;
         }
 
-        InterfaceInfo oldInterfaceLport = elanServiceProvider.getInterfaceManager()
-                .getInterfaceInfo(macEntry.getInterface());
+        InterfaceInfo oldInterfaceLport = interfaceManager.getInterfaceInfo(macEntry.getInterface());
         if (oldInterfaceLport == null) {
             logger.warn(
                     String.format(
@@ -186,10 +181,10 @@ public class ElanPacketInHandler implements PacketProcessingListener {
                             macEntry.getMacAddress(), macEntry.getInterface()));
             return;
         }
-        WriteTransaction flowDeletetx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-        ElanUtils.deleteMacFlows(elanInfo, oldInterfaceLport, macEntry, flowDeletetx);
+        WriteTransaction flowDeletetx = broker.newWriteOnlyTransaction();
+        elanUtils.deleteMacFlows(elanInfo, oldInterfaceLport, macEntry, flowDeletetx);
         flowDeletetx.submit();
-        ElanL2GatewayUtils.removeMacsFromElanExternalDevices(elanInfo, Arrays.asList(macEntry.getMacAddress()));
+        elanL2GatewayUtils.removeMacsFromElanExternalDevices(elanInfo, Arrays.asList(macEntry.getMacAddress()));
     }
 
 }
index 6bd3fdf242afe7eb2980ee3e758ffaeddb406ede..e25de272a1828938fb1afebe1d2a5177e9acb194 100644 (file)
@@ -9,7 +9,6 @@
 package org.opendaylight.netvirt.elan.internal;
 
 import com.google.common.base.Optional;
-
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -21,25 +20,13 @@ import java.util.Set;
 import java.util.concurrent.Future;
 import java.util.function.BiFunction;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.NotificationService;
-import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
 import org.opendaylight.genius.interfacemanager.exceptions.InterfaceAlreadyExistsException;
 import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
-import org.opendaylight.genius.itm.api.IITMProvider;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
-import org.opendaylight.netvirt.elan.l2gw.internal.ElanL2GatewayProvider;
-import org.opendaylight.netvirt.elan.statisitcs.ElanStatisticsImpl;
 import org.opendaylight.netvirt.elan.statusanddiag.ElanStatusMonitor;
-import org.opendaylight.netvirt.elan.utils.CacheElanInstanceListener;
-import org.opendaylight.netvirt.elan.utils.CacheElanInterfaceListener;
-import org.opendaylight.netvirt.elan.utils.ElanClusterUtils;
 import org.opendaylight.netvirt.elan.utils.ElanConstants;
 import org.opendaylight.netvirt.elan.utils.ElanForwardingEntriesHandler;
 import org.opendaylight.netvirt.elan.utils.ElanUtils;
@@ -54,7 +41,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.etree.rev160614.EtreeInstance;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.etree.rev160614.EtreeInstanceBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.etree.rev160614.EtreeInterface;
@@ -72,161 +58,44 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterfaceKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.state.Elan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.statistics.rev150824.ElanStatisticsService;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ElanServiceProvider implements BindingAwareProvider, IElanService, AutoCloseable {
-
-    private IdManagerService idManager;
-    private IMdsalApiManager mdsalManager;
-    private IInterfaceManager interfaceManager;
-    private OdlInterfaceRpcService interfaceManagerRpcService;
-    private ElanInstanceManager elanInstanceManager;
-    private ElanForwardingEntriesHandler elanForwardingEntriesHandler;
-    private ElanBridgeManager bridgeMgr;
-
-    public IdManagerService getIdManager() {
-        return idManager;
-    }
-
-    public ElanForwardingEntriesHandler getElanForwardingEntriesHandler() {
-        return elanForwardingEntriesHandler;
-    }
-
-    public ElanPacketInHandler getElanPacketInHandler() {
-        return elanPacketInHandler;
-    }
-
-    public ElanSmacFlowEventListener getElanSmacFlowEventListener() {
-        return elanSmacFlowEventListener;
-    }
-
-    public ElanInterfaceStateChangeListener getElanInterfaceStateChangeListener() {
-        return elanInterfaceStateChangeListener;
-    }
-
-    public ElanInterfaceStateClusteredListener getInfStateChangeClusteredListener() {
-        return infStateChangeClusteredListener;
-    }
-
-    public ElanDpnInterfaceClusteredListener getElanDpnInterfaceClusteredListener() {
-        return elanDpnInterfaceClusteredListener;
-    }
-
-    public ElanNodeListener getElanNodeListener() {
-        return elanNodeListener;
-    }
-
-    public NotificationService getNotificationService() {
-        return notificationService;
-    }
-
-    public RpcProviderRegistry getRpcProviderRegistry() {
-        return rpcProviderRegistry;
-    }
-
-    public ElanL2GatewayProvider getElanL2GatewayProvider() {
-        return elanL2GatewayProvider;
-    }
+public class ElanServiceProvider implements IElanService {
 
-    public static ElanStatusMonitor getElanstatusmonitor() {
-        return elanStatusMonitor;
-    }
-
-    public ElanItmEventListener getElanItmEventListener() {
-        return elanItmEventListener;
-    }
-
-    public static Logger getLogger() {
-        return logger;
-    }
+    private static final Logger logger = LoggerFactory.getLogger(ElanServiceProvider.class);
 
-    private ElanInterfaceManager elanInterfaceManager;
-    private ElanPacketInHandler elanPacketInHandler;
-    private ElanSmacFlowEventListener elanSmacFlowEventListener;
-    private ElanInterfaceStateChangeListener elanInterfaceStateChangeListener;
-    private ElanInterfaceStateClusteredListener infStateChangeClusteredListener;
-    private ElanDpnInterfaceClusteredListener elanDpnInterfaceClusteredListener;
-    private ElanNodeListener elanNodeListener;
-    private NotificationService notificationService;
-    private RpcProviderRegistry rpcProviderRegistry;
-    private IITMProvider itmManager;
-    private ItmRpcService itmRpcService;
-    private DataBroker broker;
-    private ElanL2GatewayProvider elanL2GatewayProvider;
-    private ElanStatisticsService interfaceStatsService;
-    private EntityOwnershipService entityOwnershipService;
-    private CacheElanInstanceListener cacheElanInstanceListener;
-    private CacheElanInterfaceListener cacheElanInterfaceListener;
-    private static final ElanStatusMonitor elanStatusMonitor = ElanStatusMonitor.getInstance();
-    static DataStoreJobCoordinator dataStoreJobCoordinator;
-    private ElanOvsdbNodeListener elanOvsdbNodeListener;
+    private final IdManagerService idManager;
+    private final IInterfaceManager interfaceManager;
+    private final ElanInstanceManager elanInstanceManager;
+    private final ElanBridgeManager bridgeMgr;
+    private final DataBroker broker;
+    private final ElanStatusMonitor elanStatusMonitor;
+    private final ElanUtils elanUtils;
 
     private boolean generateIntBridgeMac = true;
 
-    public static void setDataStoreJobCoordinator(DataStoreJobCoordinator ds) {
-        dataStoreJobCoordinator = ds;
-    }
-
-    public void setBroker(DataBroker broker) {
+    public ElanServiceProvider(IdManagerService idManager, IInterfaceManager interfaceManager,
+                               ElanInstanceManager elanInstanceManager, ElanBridgeManager bridgeMgr, DataBroker broker,
+                               ElanStatusMonitor elanStatusMonitor, ElanUtils elanUtils) {
+        this.idManager = idManager;
+        this.interfaceManager = interfaceManager;
+        this.elanInstanceManager = elanInstanceManager;
+        this.bridgeMgr = bridgeMgr;
         this.broker = broker;
+        this.elanStatusMonitor = elanStatusMonitor;
+        this.elanUtils = elanUtils;
     }
 
-    public static DataStoreJobCoordinator getDataStoreJobCoordinator() {
-        if (dataStoreJobCoordinator == null) {
-            dataStoreJobCoordinator = DataStoreJobCoordinator.getInstance();
-        }
-        return dataStoreJobCoordinator;
-    }
-
-    public ElanServiceProvider(RpcProviderRegistry rpcRegistry) {
-        rpcProviderRegistry = rpcRegistry;
-        elanStatusMonitor.registerMbean();
-    }
-
-    // private ElanInterfaceStateChangeListener elanInterfaceEventListener;
-    private ElanItmEventListener elanItmEventListener;
-
-    private static final Logger logger = LoggerFactory.getLogger(ElanServiceProvider.class);
-
-    @Override
-    public void onSessionInitiated(ProviderContext session) {
+    public void init() {
+        logger.info("Starting ElnaServiceProvider");
         elanStatusMonitor.reportStatus("STARTING");
         try {
             createIdPool();
-            getDataStoreJobCoordinator();
-            broker = session.getSALService(DataBroker.class);
-
-            bridgeMgr = new ElanBridgeManager(broker);
-            elanOvsdbNodeListener = new ElanOvsdbNodeListener(broker, generateIntBridgeMac, bridgeMgr, this);
-            ElanUtils.setElanServiceProvider(this);
-            elanForwardingEntriesHandler = ElanForwardingEntriesHandler.getElanForwardingEntriesHandler(this);
-            elanInterfaceManager = ElanInterfaceManager.getElanInterfaceManager(this);
-            elanInstanceManager = ElanInstanceManager.getElanInstanceManager(this);
-            elanNodeListener = ElanNodeListener.getElanNodeListener(this);
-            elanPacketInHandler = ElanPacketInHandler.getElanPacketInHandler(this);
-            elanSmacFlowEventListener = ElanSmacFlowEventListener.getElanSmacFlowEventListener(this);
-            // Initialize statistics rpc provider for elan
-            interfaceStatsService = ElanStatisticsImpl.getElanStatisticsService(this);
-            rpcProviderRegistry.addRpcImplementation(ElanStatisticsService.class, interfaceStatsService);
-            elanInterfaceStateChangeListener = ElanInterfaceStateChangeListener
-                    .getElanInterfaceStateChangeListener(this);
-            infStateChangeClusteredListener = ElanInterfaceStateClusteredListener
-                    .getElanInterfaceStateClusteredListener(this);
-            elanDpnInterfaceClusteredListener = ElanDpnInterfaceClusteredListener
-                    .getElanDpnInterfaceClusteredListener(this);
-            ElanClusterUtils.setElanServiceProvider(this);
-            this.elanL2GatewayProvider = new ElanL2GatewayProvider(this);
-            cacheElanInstanceListener = new CacheElanInstanceListener(this);
-            cacheElanInterfaceListener = new CacheElanInterfaceListener(this);
-            elanInterfaceManager.registerListener(LogicalDatastoreType.CONFIGURATION, broker);
-            elanInstanceManager.registerListener(LogicalDatastoreType.CONFIGURATION, broker);
-            notificationService.registerNotificationListener(elanSmacFlowEventListener);
-            notificationService.registerNotificationListener(elanPacketInHandler);
+
             elanStatusMonitor.reportStatus("OPERATIONAL");
         } catch (Exception e) {
             logger.error("Error initializing services", e);
@@ -234,74 +103,6 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
         }
     }
 
-    public void setIdManager(IdManagerService idManager) {
-        this.idManager = idManager;
-    }
-
-    public void setMdsalManager(IMdsalApiManager mdsalManager) {
-        this.mdsalManager = mdsalManager;
-    }
-
-    public void setInterfaceManager(IInterfaceManager interfaceManager) {
-        this.interfaceManager = interfaceManager;
-    }
-
-    public void setEntityOwnershipService(EntityOwnershipService entityOwnershipService) {
-        this.entityOwnershipService = entityOwnershipService;
-    }
-
-    public IInterfaceManager getInterfaceManager() {
-        return this.interfaceManager;
-    }
-
-    public IMdsalApiManager getMdsalManager() {
-        return mdsalManager;
-    }
-
-    public IITMProvider getItmManager() {
-        return itmManager;
-    }
-
-    public DataBroker getBroker() {
-        return broker;
-    }
-
-    public void setNotificationService(NotificationService notificationService) {
-        this.notificationService = notificationService;
-    }
-
-    public void setInterfaceManagerRpcService(OdlInterfaceRpcService interfaceManager) {
-        this.interfaceManagerRpcService = interfaceManager;
-    }
-
-    public OdlInterfaceRpcService getInterfaceManagerRpcService() {
-        return interfaceManagerRpcService;
-    }
-
-    public void setItmManager(IITMProvider itmManager) {
-        this.itmManager = itmManager;
-    }
-
-    public void setItmRpcService(ItmRpcService itmRpcService) {
-        this.itmRpcService = itmRpcService;
-    }
-
-    public ItmRpcService getItmRpcService() {
-        return itmRpcService;
-    }
-
-    public ElanInstanceManager getElanInstanceManager() {
-        return elanInstanceManager;
-    }
-
-    public ElanInterfaceManager getElanInterfaceManager() {
-        return elanInterfaceManager;
-    }
-
-    public EntityOwnershipService getEntityOwnershipService() {
-        return entityOwnershipService;
-    }
-
     private void createIdPool() {
         CreateIdPoolInput createPool = new CreateIdPoolInputBuilder().setPoolName(ElanConstants.ELAN_ID_POOL_NAME)
                 .setLow(ElanConstants.ELAN_ID_LOW_VALUE).setHigh(ElanConstants.ELAN_ID_HIGH_VALUE).build();
@@ -458,7 +259,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
     @Override
     public void updateElanInterface(String elanInstanceName, String interfaceName,
             List<String> updatedStaticMacAddresses, String newDescription) {
-        ElanInterface existingElanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+        ElanInterface existingElanInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
         if (existingElanInterface == null) {
             return;
         }
@@ -483,7 +284,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     @Override
     public void deleteElanInterface(String elanInstanceName, String interfaceName) {
-        ElanInterface existingElanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+        ElanInterface existingElanInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
         if (existingElanInterface != null) {
             ElanUtils.delete(broker, LogicalDatastoreType.CONFIGURATION,
                     ElanUtils.getElanInterfaceConfigurationDataPathId(interfaceName));
@@ -493,7 +294,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     @Override
     public void addStaticMacAddress(String elanInstanceName, String interfaceName, String macAddress) {
-        ElanInterface existingElanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+        ElanInterface existingElanInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
         PhysAddress updateStaticMacAddress = new PhysAddress(macAddress);
         if (existingElanInterface != null) {
             List<PhysAddress> existingMacAddress = existingElanInterface.getStaticMacEntries();
@@ -513,7 +314,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
     @Override
     public void deleteStaticMacAddress(String elanInstanceName, String interfaceName, String macAddress)
             throws MacNotFoundException {
-        ElanInterface existingElanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+        ElanInterface existingElanInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
         PhysAddress physAddress = new PhysAddress(macAddress);
         if (existingElanInterface == null) {
             return;
@@ -534,7 +335,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     @Override
     public Collection<MacEntry> getElanMacTable(String elanInstanceName) {
-        Elan elanInfo = ElanUtils.getElanByName(elanInstanceName);
+        Elan elanInfo = elanUtils.getElanByName(elanInstanceName);
         List<MacEntry> macAddress = new ArrayList<>();
         if (elanInfo == null) {
             return macAddress;
@@ -542,7 +343,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
         List<String> elanInterfaces = elanInfo.getElanInterfaces();
         if (elanInterfaces != null && elanInterfaces.size() > 0) {
             for (String elanInterface : elanInterfaces) {
-                ElanInterfaceMac elanInterfaceMac = ElanUtils.getElanInterfaceMacByInterfaceName(elanInterface);
+                ElanInterfaceMac elanInterfaceMac = elanUtils.getElanInterfaceMacByInterfaceName(elanInterface);
                 if (elanInterfaceMac != null && elanInterfaceMac.getMacEntry() != null
                         && elanInterfaceMac.getMacEntry().size() > 0) {
                     macAddress.addAll(elanInterfaceMac.getMacEntry());
@@ -554,7 +355,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     @Override
     public void flushMACTable(String elanInstanceName) {
-        Elan elanInfo = ElanUtils.getElanByName(elanInstanceName);
+        Elan elanInfo = elanUtils.getElanByName(elanInstanceName);
         if (elanInfo == null) {
             return;
         }
@@ -563,7 +364,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
             return;
         }
         for (String elanInterface : elanInterfaces) {
-            ElanInterfaceMac elanInterfaceMac = ElanUtils.getElanInterfaceMacByInterfaceName(elanInterface);
+            ElanInterfaceMac elanInterfaceMac = elanUtils.getElanInterfaceMacByInterfaceName(elanInterface);
             if (elanInterfaceMac.getMacEntry() != null && elanInterfaceMac.getMacEntry().size() > 0) {
                 List<MacEntry> macEntries = elanInterfaceMac.getMacEntry();
                 for (MacEntry macEntry : macEntries) {
@@ -579,14 +380,6 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     }
 
-    @Override
-    public void close() throws Exception {
-        this.elanInstanceManager.close();
-        this.elanL2GatewayProvider.close();
-        this.cacheElanInstanceListener.close();
-        this.cacheElanInterfaceListener.close();
-    }
-
     public static List<PhysAddress> getPhysAddress(List<String> macAddress) {
         List<PhysAddress> physAddresses = new ArrayList<>();
         for (String mac : macAddress) {
@@ -610,7 +403,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     @Override
     public ElanInstance getElanInstance(String elanName) {
-        return ElanUtils.getElanInstanceByName(elanName);
+        return elanUtils.getElanInstanceByName(elanName);
     }
 
     @Override
@@ -618,7 +411,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
         List<ElanInstance> elanList = new ArrayList<>();
         InstanceIdentifier<ElanInstances> elanInstancesIdentifier = InstanceIdentifier.builder(ElanInstances.class)
                 .build();
-        Optional<ElanInstances> elansOptional = ElanUtils.read(broker, LogicalDatastoreType.CONFIGURATION,
+        Optional<ElanInstances> elansOptional = elanUtils.read(broker, LogicalDatastoreType.CONFIGURATION,
                 elanInstancesIdentifier);
         if (elansOptional.isPresent()) {
             elanList.addAll(elansOptional.get().getElanInstance());
@@ -631,7 +424,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
         List<String> elanInterfaces = new ArrayList<>();
         InstanceIdentifier<ElanInterfaces> elanInterfacesIdentifier = InstanceIdentifier.builder(ElanInterfaces.class)
                 .build();
-        Optional<ElanInterfaces> elanInterfacesOptional = ElanUtils.read(broker, LogicalDatastoreType.CONFIGURATION,
+        Optional<ElanInterfaces> elanInterfacesOptional = elanUtils.read(broker, LogicalDatastoreType.CONFIGURATION,
                 elanInterfacesIdentifier);
         if (!elanInterfacesOptional.isPresent()) {
             return elanInterfaces;
@@ -764,14 +557,14 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     @Override
     public String getExternalElanInterface(String elanInstanceName, BigInteger dpnId) {
-        DpnInterfaces dpnInterfaces = ElanUtils.getElanInterfaceInfoByElanDpn(elanInstanceName, dpnId);
+        DpnInterfaces dpnInterfaces = elanUtils.getElanInterfaceInfoByElanDpn(elanInstanceName, dpnId);
         if (dpnInterfaces == null || dpnInterfaces.getInterfaces() == null) {
             logger.trace("Elan {} does not have interfaces in DPN {}", elanInstanceName, dpnId);
             return null;
         }
 
         for (String dpnInterface : dpnInterfaces.getInterfaces()) {
-            if (ElanUtils.isExternal(dpnInterface)) {
+            if (elanUtils.isExternal(dpnInterface)) {
                 return dpnInterface;
             }
         }
@@ -790,7 +583,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
         Set<String> externalElanInterfaces = new HashSet<>();
         for (String elanInterface : elanInterfaces) {
-            if (ElanUtils.isExternal(elanInterface)) {
+            if (elanUtils.isExternal(elanInterface)) {
                 externalElanInterfaces.add(elanInterface);
             }
         }
@@ -800,7 +593,7 @@ public class ElanServiceProvider implements BindingAwareProvider, IElanService,
 
     @Override
     public boolean isExternalInterface(String interfaceName) {
-        return ElanUtils.isExternal(interfaceName);
+        return elanUtils.isExternal(interfaceName);
     }
 
     /**
index df426b1e8f9d9161b789a65c07e12d99aaf17b5c..cdc2425d75a74750cb37d7c39ad40b11e052a617 100644 (file)
@@ -7,18 +7,19 @@
  */
 package org.opendaylight.netvirt.elan.internal;
 
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import java.math.BigInteger;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.mdsalutil.NwConstants;
-import org.opendaylight.netvirt.elan.utils.ElanConstants;
 import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.mdsalutil.MetaDataUtil;
-import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAdded;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowRemoved;
@@ -26,44 +27,29 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.Flow
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeErrorNotification;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeExperimenterErrorNotification;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowListener;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SwitchFlowRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.tag.name.map.ElanTagName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._if.indexes._interface.map.IfIndexInterface;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-
 @SuppressWarnings("deprecation")
 public class ElanSmacFlowEventListener implements SalFlowListener {
 
-    private  ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanSmacFlowEventListener elanSmacFlowEventListener = null;
     private static final Logger logger = LoggerFactory.getLogger(ElanSmacFlowEventListener.class);
 
-    public ElanSmacFlowEventListener(ElanServiceProvider elanServiceProvider) {
-        this.elanServiceProvider = elanServiceProvider;
-    }
+    private final DataBroker broker;
+    private final IInterfaceManager interfaceManager;
+    private final ElanUtils elanUtils;
 
-    public static ElanSmacFlowEventListener getElanSmacFlowEventListener(ElanServiceProvider elanServiceProvider) {
-        if (elanSmacFlowEventListener == null)
-            synchronized (ElanPacketInHandler.class) {
-                if (elanSmacFlowEventListener == null) {
-                    elanSmacFlowEventListener = new ElanSmacFlowEventListener(elanServiceProvider);
-                }
-            }
-        return elanSmacFlowEventListener;
+    public ElanSmacFlowEventListener(DataBroker broker, IInterfaceManager interfaceManager, ElanUtils elanUtils) {
+        this.broker = broker;
+        this.interfaceManager = interfaceManager;
+        this.elanUtils = elanUtils;
     }
 
-
-    public void setMdSalApiManager(IMdsalApiManager mdsalManager) {
-    }
     @Override
     public void onFlowAdded(FlowAdded arg0) {
         // TODO Auto-generated method stub
@@ -76,7 +62,7 @@ public class ElanSmacFlowEventListener implements SalFlowListener {
         if (tableId == NwConstants.ELAN_SMAC_TABLE) {
             BigInteger metadata = flowRemoved.getMatch().getMetadata().getMetadata();
             long elanTag = MetaDataUtil.getElanTagFromMetadata(metadata);
-            ElanTagName elanTagInfo = ElanUtils.getElanInfoByElanTag(elanTag);
+            ElanTagName elanTagInfo = elanUtils.getElanInfoByElanTag(elanTag);
             if (elanTagInfo == null) {
                 return;
             }
@@ -87,7 +73,7 @@ public class ElanSmacFlowEventListener implements SalFlowListener {
                 logger.debug(String.format("Flow removed event on SMAC flow entry. But having port Tag as 0 "));
                 return;
             }
-            Optional<IfIndexInterface> existingInterfaceInfo = ElanUtils.getInterfaceInfoByInterfaceTag(portTag);
+            Optional<IfIndexInterface> existingInterfaceInfo = elanUtils.getInterfaceInfoByInterfaceTag(portTag);
             if (!existingInterfaceInfo.isPresent()) {
                 logger.debug("Interface is not available for port Tag {}", portTag);
                 return;
@@ -98,17 +84,17 @@ public class ElanSmacFlowEventListener implements SalFlowListener {
                 logger.error(String.format("LPort record not found for tag %d", portTag));
                 return;
             }
-            MacEntry macEntry = ElanUtils.getInterfaceMacEntriesOperationalDataPath(interfaceName, physAddress);
-            InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager().getInterfaceInfo(interfaceName);
+            MacEntry macEntry = elanUtils.getInterfaceMacEntriesOperationalDataPath(interfaceName, physAddress);
+            InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
             if (macEntry != null && interfaceInfo != null) {
-                WriteTransaction deleteFlowTx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-                ElanUtils.deleteMacFlows(ElanUtils.getElanInstanceByName(elanTagInfo.getName()), interfaceInfo, macEntry, deleteFlowTx);
+                WriteTransaction deleteFlowTx = broker.newWriteOnlyTransaction();
+                elanUtils.deleteMacFlows(elanUtils.getElanInstanceByName(elanTagInfo.getName()), interfaceInfo, macEntry, deleteFlowTx);
                 ListenableFuture<Void> result = deleteFlowTx.submit();
                 addCallBack(result, srcMacAddress);
             }
             InstanceIdentifier<MacEntry> macEntryIdForElanInterface =  ElanUtils.getInterfaceMacEntriesIdentifierOperationalDataPath(interfaceName, physAddress);
             InstanceIdentifier<MacEntry> macEntryIdForElanInstance  =  ElanUtils.getMacEntryOperationalDataPath(elanTagInfo.getName(), physAddress);
-            WriteTransaction tx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
+            WriteTransaction tx = broker.newWriteOnlyTransaction();
             tx.delete(LogicalDatastoreType.OPERATIONAL, macEntryIdForElanInterface);
             tx.delete(LogicalDatastoreType.OPERATIONAL, macEntryIdForElanInstance);
             ListenableFuture<Void> writeResult = tx.submit();
diff --git a/vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/internal/ElanL2GatewayProvider.java b/vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/internal/ElanL2GatewayProvider.java
deleted file mode 100644 (file)
index 77d9118..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.netvirt.elan.l2gw.internal;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.clustering.CandidateAlreadyRegisteredException;
-import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepLogicalSwitchListener;
-import org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepPhysicalSwitchListener;
-import org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepRemoteMcastMacListener;
-import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayMulticastUtils;
-import org.opendaylight.netvirt.elan.l2gw.utils.L2GatewayConnectionUtils;
-import org.opendaylight.netvirt.elan.internal.ElanInterfaceManager;
-import org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepLocalUcastMacListener;
-import org.opendaylight.netvirt.elan.l2gw.listeners.L2GatewayConnectionListener;
-import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayUtils;
-import org.opendaylight.netvirt.elan.internal.ElanInstanceManager;
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
-import org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepTerminationPointListener;
-import org.opendaylight.netvirt.elanmanager.utils.ElanL2GwCacheUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
-import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
-import org.opendaylight.genius.utils.clustering.EntityOwnerUtils;
-import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundConstants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Elan L2 Gateway provider class.
- */
-public class ElanL2GatewayProvider implements AutoCloseable {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ElanL2GatewayProvider.class);
-
-    private DataBroker broker;
-    private EntityOwnershipService entityOwnershipService;
-    private ItmRpcService itmRpcService;
-    private ElanInstanceManager elanInstanceManager;
-    private ElanInterfaceManager elanInterfaceManager;
-
-    private L2GatewayConnectionListener l2GwConnListener;
-    private HwvtepPhysicalSwitchListener hwvtepPhySwitchListener;
-    private HwvtepLocalUcastMacListener torMacsListener;
-    private HwvtepTerminationPointListener physicalLocatorListener;
-
-    static DataStoreJobCoordinator dataStoreJobCoordinator;
-
-    /**
-     * Instantiates a new elan l2 gateway provider.
-     *
-     * @param elanServiceProvider
-     *            the elan service provider
-     */
-    public ElanL2GatewayProvider(ElanServiceProvider elanServiceProvider) {
-        this.broker = elanServiceProvider.getBroker();
-        this.entityOwnershipService = elanServiceProvider.getEntityOwnershipService();
-        this.itmRpcService = elanServiceProvider.getItmRpcService();
-        this.elanInstanceManager = elanServiceProvider.getElanInstanceManager();
-        this.elanInterfaceManager = elanServiceProvider.getElanInterfaceManager();
-        dataStoreJobCoordinator = elanServiceProvider.getDataStoreJobCoordinator();
-        init();
-
-        LOG.info("ElanL2GatewayProvider Initialized");
-    }
-
-    /**
-     * Initialize Elan L2 Gateway.
-     */
-    private void init() {
-        ElanL2GwCacheUtils.createElanL2GwDeviceCache();
-        ElanL2GatewayUtils.setDataBroker(broker);
-        ElanL2GatewayUtils.setItmRpcService(itmRpcService);
-        ElanL2GatewayUtils.setDataStoreJobCoordinator(dataStoreJobCoordinator);
-
-        ElanL2GatewayMulticastUtils.setBroker(broker);
-        ElanL2GatewayMulticastUtils.setElanInstanceManager(elanInstanceManager);
-        ElanL2GatewayMulticastUtils.setElanInterfaceManager(elanInterfaceManager);
-        ElanL2GatewayMulticastUtils.setDataStoreJobCoordinator(dataStoreJobCoordinator);
-
-        L2GatewayConnectionUtils.setElanInstanceManager(elanInstanceManager);
-        L2GatewayConnectionUtils.setBroker(broker);
-        L2GatewayConnectionUtils.setDataStoreJobCoordinator(dataStoreJobCoordinator);
-
-        HwvtepRemoteMcastMacListener.setDataStoreJobCoordinator(dataStoreJobCoordinator);
-        HwvtepLogicalSwitchListener.setDataStoreJobCoordinator(dataStoreJobCoordinator);
-
-        this.torMacsListener = new HwvtepLocalUcastMacListener(broker);
-        this.l2GwConnListener = new L2GatewayConnectionListener(broker, elanInstanceManager);
-        this.hwvtepPhySwitchListener = new HwvtepPhysicalSwitchListener(broker, itmRpcService);
-        this.hwvtepPhySwitchListener.registerListener(LogicalDatastoreType.OPERATIONAL, broker);
-
-        physicalLocatorListener = new HwvtepTerminationPointListener(broker);
-        try {
-            EntityOwnerUtils.registerEntityCandidateForOwnerShip(entityOwnershipService,
-                    HwvtepSouthboundConstants.ELAN_ENTITY_TYPE, HwvtepSouthboundConstants.ELAN_ENTITY_TYPE,
-                    null/*listener*/);
-        } catch (CandidateAlreadyRegisteredException e) {
-            LOG.error("failed to register the entity");
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.AutoCloseable#close()
-     */
-    @Override
-    public void close() throws Exception {
-        this.torMacsListener.close();
-        this.l2GwConnListener.close();
-        this.hwvtepPhySwitchListener.close();
-        LOG.info("ElanL2GatewayProvider Closed");
-    }
-}
index 75083e4695d488c2d1bbce18fc16b319028de1c9..61d6953a74b1fb491b7551170ea64f56aaa9d298 100644 (file)
@@ -12,7 +12,9 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayMulticastUtils;
 import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayUtils;
+import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
 import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundUtils;
 import org.opendaylight.genius.utils.hwvtep.HwvtepUtils;
@@ -33,17 +35,26 @@ import com.google.common.util.concurrent.ListenableFuture;
 * Created by ekvsver on 4/15/2016.
 */
 public class AssociateHwvtepToElanJob implements Callable<List<ListenableFuture<Void>>> {
-    DataBroker broker;
-    L2GatewayDevice l2GatewayDevice;
-    ElanInstance elanInstance;
-    Devices l2Device;
-    Integer defaultVlan;
-    boolean createLogicalSwitch;
     private static final Logger LOG = LoggerFactory.getLogger(AssociateHwvtepToElanJob.class);
 
-    public AssociateHwvtepToElanJob(DataBroker broker, L2GatewayDevice l2GatewayDevice, ElanInstance elanInstance,
-            Devices l2Device, Integer defaultVlan, boolean createLogicalSwitch) {
+    private final DataBroker broker;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final ElanUtils elanUtils;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
+    private final L2GatewayDevice l2GatewayDevice;
+    private final ElanInstance elanInstance;
+    private final Devices l2Device;
+    private final Integer defaultVlan;
+    private final boolean createLogicalSwitch;
+
+    public AssociateHwvtepToElanJob(DataBroker broker, ElanL2GatewayUtils elanL2GatewayUtils, ElanUtils elanUtils,
+                                    ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils,
+                                    L2GatewayDevice l2GatewayDevice, ElanInstance elanInstance, Devices l2Device,
+                                    Integer defaultVlan, boolean createLogicalSwitch) {
         this.broker = broker;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.elanUtils = elanUtils;
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
         this.l2GatewayDevice = l2GatewayDevice;
         this.elanInstance = elanInstance;
         this.l2Device = l2Device;
@@ -74,8 +85,10 @@ public class AssociateHwvtepToElanJob implements Callable<List<ListenableFuture<
             String logicalSwitchName = ElanL2GatewayUtils.getLogicalSwitchFromElan(elanInstanceName);
             LOG.info("{} is already created in {}; adding remaining configurations", logicalSwitchName, hwvtepNodeId);
 
-            LogicalSwitchAddedJob logicalSwitchAddedJob = new LogicalSwitchAddedJob(logicalSwitchName, l2Device,
-                    l2GatewayDevice, defaultVlan);
+            LogicalSwitchAddedJob logicalSwitchAddedJob =
+                    new LogicalSwitchAddedJob(broker, elanL2GatewayUtils, elanUtils, elanL2GatewayMulticastUtils,
+                            logicalSwitchName, l2Device,
+                            l2GatewayDevice, defaultVlan);
             return logicalSwitchAddedJob.call();
         }
 
index a653cd77add65d70004dfb50ccbc95a84bfd289c..451a73a511b31fa25f4cd77959e524f448291f1e 100644 (file)
@@ -26,18 +26,24 @@ import java.util.concurrent.Callable;
 * Created by ekvsver on 4/15/2016.
 */
 public class DisAssociateHwvtepFromElanJob implements Callable<List<ListenableFuture<Void>>> {
-    DataBroker broker;
-    L2GatewayDevice l2GatewayDevice;
-    ElanInstance elanInstance;
-    Devices l2Device;
-    Integer defaultVlan;
-    boolean isLastL2GwConnDeleted;
-
     private static final Logger LOG = LoggerFactory.getLogger(DisAssociateHwvtepFromElanJob.class);
 
-    public DisAssociateHwvtepFromElanJob(DataBroker broker, L2GatewayDevice l2GatewayDevice, ElanInstance elanInstance,
+    private final DataBroker broker;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
+    private final L2GatewayDevice l2GatewayDevice;
+    private final ElanInstance elanInstance;
+    private final Devices l2Device;
+    private final Integer defaultVlan;
+    private final boolean isLastL2GwConnDeleted;
+
+    public DisAssociateHwvtepFromElanJob(DataBroker broker, ElanL2GatewayUtils elanL2GatewayUtils,
+                                         ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils,
+                                         L2GatewayDevice l2GatewayDevice, ElanInstance elanInstance,
                                          Devices l2Device, Integer defaultVlan, boolean isLastL2GwConnDeleted) {
         this.broker = broker;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
         this.l2GatewayDevice = l2GatewayDevice;
         this.elanInstance = elanInstance;
         this.l2Device = l2Device;
@@ -64,21 +70,21 @@ public class DisAssociateHwvtepFromElanJob implements Callable<List<ListenableFu
         // Once all above configurations are deleted, delete logical
         // switch
         LOG.info("delete vlan bindings for {} {}", elanName, strHwvtepNodeId);
-        futures.add(ElanL2GatewayUtils.deleteVlanBindingsFromL2GatewayDevice(hwvtepNodeId, l2Device, defaultVlan));
+        futures.add(elanL2GatewayUtils.deleteVlanBindingsFromL2GatewayDevice(hwvtepNodeId, l2Device, defaultVlan));
 
         if (isLastL2GwConnDeleted) {
             LOG.info("delete remote ucast macs {} {}", elanName, strHwvtepNodeId);
-            futures.add(ElanL2GatewayUtils.deleteElanMacsFromL2GatewayDevice(l2GatewayDevice, elanName));
+            futures.add(elanL2GatewayUtils.deleteElanMacsFromL2GatewayDevice(l2GatewayDevice, elanName));
 
             LOG.info("delete mcast mac for {} {}", elanName, strHwvtepNodeId);
-            futures.addAll(ElanL2GatewayMulticastUtils.handleMcastForElanL2GwDeviceDelete(elanInstance,
+            futures.addAll(elanL2GatewayMulticastUtils.handleMcastForElanL2GwDeviceDelete(elanInstance,
                     l2GatewayDevice));
 
             LOG.info("delete local ucast macs {} {}", elanName, strHwvtepNodeId);
-            futures.addAll(ElanL2GatewayUtils.deleteL2GwDeviceUcastLocalMacsFromElan(l2GatewayDevice, elanName));
+            futures.addAll(elanL2GatewayUtils.deleteL2GwDeviceUcastLocalMacsFromElan(l2GatewayDevice, elanName));
 
             LOG.info("scheduled delete logical switch {} {}", elanName, strHwvtepNodeId);
-            ElanL2GatewayUtils.scheduleDeleteLogicalSwitch(hwvtepNodeId,
+            elanL2GatewayUtils.scheduleDeleteLogicalSwitch(hwvtepNodeId,
                     ElanL2GatewayUtils.getLogicalSwitchFromElan(elanName));
         }
 
index 6552f0f3be026af682a41460f31d3d576200d033..0a26de944dbdd3eff25b5c63e929f3e5e924b558 100644 (file)
@@ -21,10 +21,13 @@ import com.google.common.util.concurrent.ListenableFuture;
 public class HwvtepDeviceMcastMacUpdateJob implements Callable<List<ListenableFuture<Void>>> {
     private static final Logger LOG = LoggerFactory.getLogger(HwvtepDeviceMcastMacUpdateJob.class);
 
-    String elanName;
-    L2GatewayDevice l2GatewayDevice;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
+    private final String elanName;
+    private final L2GatewayDevice l2GatewayDevice;
 
-    public HwvtepDeviceMcastMacUpdateJob(String elanName, L2GatewayDevice l2GatewayDevice) {
+    public HwvtepDeviceMcastMacUpdateJob(ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils, String elanName,
+                                         L2GatewayDevice l2GatewayDevice) {
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
         this.l2GatewayDevice = l2GatewayDevice;
         this.elanName = elanName;
     }
@@ -37,7 +40,7 @@ public class HwvtepDeviceMcastMacUpdateJob implements Callable<List<ListenableFu
         LOG.info("running update mcast mac entry job for {} {}",
                 elanName, l2GatewayDevice.getHwvtepNodeId());
         return Lists.newArrayList(
-                ElanL2GatewayMulticastUtils.updateRemoteMcastMacOnElanL2GwDevice(elanName, l2GatewayDevice));
+                elanL2GatewayMulticastUtils.updateRemoteMcastMacOnElanL2GwDevice(elanName, l2GatewayDevice));
     }
 
 }
index 4fea7ab651f4ac491327b194bedc75d271ecfbb2..57376664315a107162b304f77dc0ebc15a6aa009 100644 (file)
@@ -11,10 +11,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
 
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepRemoteMcastMacListener;
 import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayMulticastUtils;
-import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayUtils;
+import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.Devices;
@@ -43,8 +44,19 @@ public class LogicalSwitchAddedJob implements Callable<List<ListenableFuture<Voi
 
     private static final Logger LOG = LoggerFactory.getLogger(LogicalSwitchAddedJob.class);
 
-    public LogicalSwitchAddedJob(String logicalSwitchName, Devices physicalDevice, L2GatewayDevice l2GatewayDevice,
+    private final DataBroker broker;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final ElanUtils elanUtils;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
+
+    public LogicalSwitchAddedJob(DataBroker dataBroker, ElanL2GatewayUtils elanL2GatewayUtils, ElanUtils elanUtils,
+                                 ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils, String logicalSwitchName,
+                                 Devices physicalDevice, L2GatewayDevice l2GatewayDevice,
                                  Integer defaultVlanId) {
+        this.broker = dataBroker;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.elanUtils = elanUtils;
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
         this.logicalSwitchName = logicalSwitchName;
         this.physicalDevice = physicalDevice;
         this.elanL2GwDevice = l2GatewayDevice;
@@ -69,21 +81,21 @@ public class LogicalSwitchAddedJob implements Callable<List<ListenableFuture<Voi
             String elan = ElanL2GatewayUtils.getElanFromLogicalSwitch(logicalSwitchName);
 
             LOG.info("creating vlan bindings for {} {}", logicalSwitchName, elanL2GwDevice.getHwvtepNodeId());
-            futures.add(ElanL2GatewayUtils.updateVlanBindingsInL2GatewayDevice(
+            futures.add(elanL2GatewayUtils.updateVlanBindingsInL2GatewayDevice(
                 new NodeId(elanL2GwDevice.getHwvtepNodeId()), logicalSwitchName, physicalDevice, defaultVlanId));
             LOG.info("creating mast mac entries for {} {}", logicalSwitchName, elanL2GwDevice.getHwvtepNodeId());
-            futures.add(ElanL2GatewayMulticastUtils.handleMcastForElanL2GwDeviceAdd(logicalSwitchName, elanL2GwDevice));
+            futures.add(elanL2GatewayMulticastUtils.handleMcastForElanL2GwDeviceAdd(logicalSwitchName, elanL2GwDevice));
 
             List<IpAddress> expectedPhyLocatorIps = Lists.newArrayList();
-            HwvtepRemoteMcastMacListener list = new HwvtepRemoteMcastMacListener(ElanUtils.getElanServiceProvider().getBroker(),
-                logicalSwitchName, elanL2GwDevice, expectedPhyLocatorIps,
+            HwvtepRemoteMcastMacListener list = new HwvtepRemoteMcastMacListener(broker,
+                    elanUtils, logicalSwitchName, elanL2GwDevice, expectedPhyLocatorIps,
                 new Callable<List<ListenableFuture<Void>>>() {
                     @Override
                     public List<ListenableFuture<Void>> call() {
                         LOG.info("adding remote ucast macs for {} {}", logicalSwitchName,
                             elanL2GwDevice.getHwvtepNodeId());
                         List<ListenableFuture<Void>> futures = new ArrayList<>();
-                        futures.add(ElanL2GatewayUtils.installElanMacsInL2GatewayDevice(
+                        futures.add(elanL2GatewayUtils.installElanMacsInL2GatewayDevice(
                             logicalSwitchName, elanL2GwDevice));
                         return futures;
                     }
index af10c65e6a1304de038144abcd85bcde00ccc815..996923d907319ff9f2636e97aa95150a56ccd18a 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.netvirt.elan.l2gw.listeners;
 import com.google.common.collect.Lists;
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataChangeListenerBase;
@@ -21,7 +20,7 @@ import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacs;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,38 +38,20 @@ import org.slf4j.LoggerFactory;
 public class HwvtepLocalUcastMacListener extends
         AsyncClusteredDataChangeListenerBase<LocalUcastMacs, HwvtepLocalUcastMacListener> implements AutoCloseable {
 
-    private DataBroker broker;
-    private ListenerRegistration<DataChangeListener> lstnerRegistration;
-
     private static final Logger logger = LoggerFactory.getLogger(HwvtepLocalUcastMacListener.class);
 
-    public HwvtepLocalUcastMacListener(DataBroker broker) {
+    private final DataBroker broker;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+
+    public HwvtepLocalUcastMacListener(DataBroker broker, ElanL2GatewayUtils elanL2GatewayUtils) {
         super(LocalUcastMacs.class, HwvtepLocalUcastMacListener.class);
 
         this.broker = broker;
-        registerListener();
-    }
-
-    protected void registerListener() {
-        try {
-            lstnerRegistration = this.broker.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
-                    HwvtepUtils.getWildCardPathForLocalUcastMacs(), this, DataChangeScope.SUBTREE);
-        } catch (final Exception e) {
-            logger.error("Hwvtep LocalUcasMacs DataChange listener registration failed !", e);
-            throw new IllegalStateException("Hwvtep LocalUcasMacs DataChange listener registration failed .", e);
-        }
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
     }
 
-    @Override
-    public void close() throws Exception {
-        if (lstnerRegistration != null) {
-            try {
-                lstnerRegistration.close();
-            } catch (final Exception e) {
-                logger.error("Error when cleaning up DataChangeListener.", e);
-            }
-            lstnerRegistration = null;
-        }
+    public void init() {
+        registerListener(LogicalDatastoreType.OPERATIONAL, broker);
     }
 
     @Override
@@ -80,7 +61,7 @@ public class HwvtepLocalUcastMacListener extends
 
         logger.trace("LocalUcastMacs {} removed from {}", macAddress, hwvtepNodeId);
 
-        ElanInstance elan = ElanL2GatewayUtils.getElanInstanceForUcastLocalMac(macRemoved);
+        ElanInstance elan = elanL2GatewayUtils.getElanInstanceForUcastLocalMac(macRemoved);
         if (elan == null) {
             logger.warn("Could not find ELAN for mac {} being deleted", macAddress);
             return;
@@ -96,7 +77,7 @@ public class HwvtepLocalUcastMacListener extends
         // Remove MAC from cache
         elanL2GwDevice.removeUcastLocalMac(macRemoved);
 
-        ElanL2GatewayUtils.unInstallL2GwUcastMacFromElan(elan, elanL2GwDevice,
+        elanL2GatewayUtils.unInstallL2GwUcastMacFromElan(elan, elanL2GwDevice,
                 Lists.newArrayList(macRemoved.getMacEntryKey()));
     }
 
@@ -114,7 +95,7 @@ public class HwvtepLocalUcastMacListener extends
 
         logger.trace("LocalUcastMacs {} added to {}", macAddress, hwvtepNodeId);
 
-        ElanInstance elan = ElanL2GatewayUtils.getElanInstanceForUcastLocalMac(macAdded);
+        ElanInstance elan = elanL2GatewayUtils.getElanInstanceForUcastLocalMac(macAdded);
         if (elan == null) {
             logger.warn("Could not find ELAN for mac {} being added", macAddress);
             return;
@@ -130,12 +111,12 @@ public class HwvtepLocalUcastMacListener extends
         // Cache MAC for furthur processing later
         elanL2GwDevice.addUcastLocalMac(macAdded);
 
-        ElanL2GatewayUtils.installL2GwUcastMacInElan(elan, elanL2GwDevice, macAddress, null);
+        elanL2GatewayUtils.installL2GwUcastMacInElan(elan, elanL2GwDevice, macAddress, null);
     }
 
     @Override
     protected InstanceIdentifier<LocalUcastMacs> getWildCardPath() {
-        return InstanceIdentifier.create(LocalUcastMacs.class);
+        return HwvtepUtils.getWildCardPathForLocalUcastMacs();
     }
 
     @Override
index 855ea8e1a9aba4cc9b4e937f73df33cb7997412f..6bb83e3c3a4c07d78db4873f605adf77f8ca2944 100644 (file)
@@ -8,13 +8,17 @@
 package org.opendaylight.netvirt.elan.l2gw.listeners;
 
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataChangeListenerBase;
-import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
 import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundUtils;
 import org.opendaylight.netvirt.elan.l2gw.jobs.LogicalSwitchAddedJob;
+import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayMulticastUtils;
+import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayUtils;
 import org.opendaylight.netvirt.elan.l2gw.utils.L2GatewayConnectionUtils;
 import org.opendaylight.netvirt.elan.utils.ElanClusterUtils;
+import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.Devices;
@@ -55,29 +59,36 @@ public class HwvtepLogicalSwitchListener extends
     /** Id of L2 Gateway connection responsible for this logical switch creation */
     private Uuid l2GwConnId;
 
-    static DataStoreJobCoordinator dataStoreJobCoordinator;
-
-    public static void setDataStoreJobCoordinator(DataStoreJobCoordinator ds) {
-        dataStoreJobCoordinator = ds;
-    }
+    private final DataBroker broker;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final EntityOwnershipService entityOwnershipService;
+    private final ElanUtils elanUtils;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
 
     /**
      * Instantiates a new hardware vtep logical switch listener.
      *
-     * @param l2GatewayDevice
-     *            the l2 gateway device
-     * @param logicalSwitchName
-     *            the logical switch name
-     * @param physicalDevice
-     *            the physical device
-     * @param defaultVlanId
-     *            the default vlan id
+     * @param entityOwnershipService the entity ownership service
+     * @param elanUtils the ELAN utilities
+     * @param elanL2GatewayMulticastUtils
+     * @param l2GatewayDevice the l2 gateway device
+     * @param logicalSwitchName the logical switch name
+     * @param physicalDevice the physical device
+     * @param defaultVlanId the default vlan id
      * @param l2GwConnId
-     *            the l2 gateway connection id
      */
-    public HwvtepLogicalSwitchListener(L2GatewayDevice l2GatewayDevice, String logicalSwitchName,
-            Devices physicalDevice, Integer defaultVlanId, Uuid l2GwConnId) {
+    public HwvtepLogicalSwitchListener(DataBroker dataBroker, ElanL2GatewayUtils elanL2GatewayUtils,
+                                       EntityOwnershipService entityOwnershipService, ElanUtils elanUtils,
+                                       ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils,
+                                       L2GatewayDevice l2GatewayDevice,
+                                       String logicalSwitchName,
+                                       Devices physicalDevice, Integer defaultVlanId, Uuid l2GwConnId) {
         super(LogicalSwitches.class, HwvtepLogicalSwitchListener.class);
+        this.broker = dataBroker;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.entityOwnershipService = entityOwnershipService;
+        this.elanUtils = elanUtils;
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
         this.nodeId = new NodeId(l2GatewayDevice.getHwvtepNodeId());
         this.logicalSwitchName = logicalSwitchName;
         this.physicalDevice = physicalDevice;
@@ -169,9 +180,9 @@ public class HwvtepLogicalSwitchListener extends
             L2GatewayDevice elanDevice = L2GatewayConnectionUtils.addL2DeviceToElanL2GwCache(
                     logicalSwitchNew.getHwvtepNodeName().getValue(), l2GatewayDevice, l2GwConnId);
 
-            LogicalSwitchAddedJob logicalSwitchAddedWorker = new LogicalSwitchAddedJob(
-                    logicalSwitchName, physicalDevice, elanDevice, defaultVlanId);
-            ElanClusterUtils.runOnlyInLeaderNode(logicalSwitchAddedWorker.getJobKey() ,
+            LogicalSwitchAddedJob logicalSwitchAddedWorker = new LogicalSwitchAddedJob(broker, elanL2GatewayUtils,
+                    elanUtils, elanL2GatewayMulticastUtils, logicalSwitchName, physicalDevice, elanDevice, defaultVlanId);
+            ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, logicalSwitchAddedWorker.getJobKey() ,
                     "create vlan mappings and mcast configurations",
                     logicalSwitchAddedWorker);
         } catch (Exception e) {
index ebd9b7754c029401ca5ff9cb2eb1c8b0e46eebfa..380fe735b0c60c5e927814d3d6fcb186ce817003 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.netvirt.elan.l2gw.listeners;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -16,6 +15,7 @@ import java.util.concurrent.Callable;
 
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
@@ -28,11 +28,9 @@ import org.opendaylight.netvirt.elanmanager.utils.ElanL2GwCacheUtils;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.utils.L2GatewayCacheUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.L2gatewayConnections;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnection;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
+
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelIps;
@@ -45,7 +43,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Optional;
 import com.google.common.util.concurrent.ListenableFuture;
 
 /**
@@ -59,10 +56,15 @@ public class HwvtepPhysicalSwitchListener
     private static final Logger LOG = LoggerFactory.getLogger(HwvtepPhysicalSwitchListener.class);
 
     /** The data broker. */
-    private DataBroker dataBroker;
+    private final DataBroker dataBroker;
 
     /** The itm rpc service. */
-    private ItmRpcService itmRpcService;
+    private final ItmRpcService itmRpcService;
+
+    /** The entity ownership service. */
+    private final EntityOwnershipService entityOwnershipService;
+
+    private final L2GatewayConnectionUtils l2GatewayConnectionUtils;
 
     /**
      * Instantiates a new hwvtep physical switch listener.
@@ -70,12 +72,21 @@ public class HwvtepPhysicalSwitchListener
      * @param dataBroker
      *            the data broker
      * @param itmRpcService
-     *            the itm rpc service
+     * @param entityOwnershipService
+     * @param l2GatewayConnectionUtils
      */
-    public HwvtepPhysicalSwitchListener(final DataBroker dataBroker, ItmRpcService itmRpcService) {
+    public HwvtepPhysicalSwitchListener(final DataBroker dataBroker, ItmRpcService itmRpcService,
+                                        EntityOwnershipService entityOwnershipService,
+                                        L2GatewayConnectionUtils l2GatewayConnectionUtils) {
         super(PhysicalSwitchAugmentation.class, HwvtepPhysicalSwitchListener.class);
         this.dataBroker = dataBroker;
         this.itmRpcService = itmRpcService;
+        this.entityOwnershipService = entityOwnershipService;
+        this.l2GatewayConnectionUtils = l2GatewayConnectionUtils;
+    }
+
+    public void init() {
+        registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker);
     }
 
     /*
@@ -162,7 +173,7 @@ public class HwvtepPhysicalSwitchListener
         if (isTunnelIpNewlyConfigured(phySwitchBefore, phySwitchAfter)) {
             final L2GatewayDevice l2GwDevice = updateL2GatewayCache(psName, phySwitchAfter);
 
-            ElanClusterUtils.runOnlyInLeaderNode(HwvtepSouthboundConstants.ELAN_ENTITY_NAME,
+            ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, HwvtepSouthboundConstants.ELAN_ENTITY_NAME,
                     "handling Physical Switch add", new Callable<List<ListenableFuture<Void>>>() {
                         @Override
                         public List<ListenableFuture<Void>> call() throws Exception {
@@ -193,7 +204,7 @@ public class HwvtepPhysicalSwitchListener
 
         final L2GatewayDevice l2GwDevice = updateL2GatewayCache(psName, phySwitchAdded);
 
-        ElanClusterUtils.runOnlyInLeaderNode(HwvtepSouthboundConstants.ELAN_ENTITY_NAME, "handling Physical Switch add",
+        ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, HwvtepSouthboundConstants.ELAN_ENTITY_NAME, "handling Physical Switch add",
                 new Callable<List<ListenableFuture<Void>>>() {
                     @Override
                     public List<ListenableFuture<Void>> call() throws Exception {
@@ -236,7 +247,7 @@ public class HwvtepPhysicalSwitchListener
                             LOG.trace("L2GatewayConnection {} changes executed on physical switch {}",
                                     l2GwConn.getL2gatewayId(), psName);
 
-                            L2GatewayConnectionUtils.addL2GatewayConnection(l2GwConn, psName);
+                            l2GatewayConnectionUtils.addL2GatewayConnection(l2GwConn, psName);
                         }
                     }
                     // TODO handle deleted l2gw connections while the device is
index eb52479bf3c2eedadd564446de79d221f823bb8b..a8a791f6e2d0b7a583deacee1e2a0c65caa4509f 100644 (file)
@@ -51,7 +51,8 @@ public class HwvtepRemoteMcastMacListener
 
     private List<IpAddress> expectedPhyLocatorIps;
 
-    DataBroker broker;
+    private final DataBroker broker;
+    private final ElanUtils elanUtils;
 
     String logicalSwitchName;
 
@@ -59,31 +60,30 @@ public class HwvtepRemoteMcastMacListener
 
     Callable<List<ListenableFuture<Void>>> taskToRun;
 
-    static DataStoreJobCoordinator dataStoreJobCoordinator;
-
-    public static void setDataStoreJobCoordinator(DataStoreJobCoordinator ds) {
-        dataStoreJobCoordinator = ds;
-    }
+    private final DataStoreJobCoordinator dataStoreJobCoordinator = DataStoreJobCoordinator.getInstance();
 
     /**
      * Instantiates a new remote mcast mac listener.
      *
      * @param broker
      *            the mdsal databroker reference
-     * @param logicalSwitchName
+     * @param elanUtils
+     *@param logicalSwitchName
      *            the logical switch name
      * @param l2GatewayDevice
    *            the l2 gateway device
+ *            the l2 gateway device
      * @param expectedPhyLocatorIps
-     *            the expected phy locator ips
+*            the expected phy locator ips
      * @param task
-     *            the task to be run upon data presence
-     * @throws Exception
+*            the task to be run upon data presence     @throws Exception
      *             the exception
      */
-    public HwvtepRemoteMcastMacListener(DataBroker broker, String logicalSwitchName, L2GatewayDevice l2GatewayDevice,
-            List<IpAddress> expectedPhyLocatorIps, Callable<List<ListenableFuture<Void>>> task) throws Exception {
+    public HwvtepRemoteMcastMacListener(DataBroker broker, ElanUtils elanUtils, String logicalSwitchName,
+                                        L2GatewayDevice l2GatewayDevice,
+                                        List<IpAddress> expectedPhyLocatorIps,
+                                        Callable<List<ListenableFuture<Void>>> task) throws Exception {
         super(RemoteMcastMacs.class, HwvtepRemoteMcastMacListener.class);
+        this.elanUtils = elanUtils;
         this.nodeId = new NodeId(l2GatewayDevice.getHwvtepNodeId());
         this.broker = broker;
         this.taskToRun = task;
@@ -103,7 +103,7 @@ public class HwvtepRemoteMcastMacListener
     private boolean isDataPresentInOpDs(InstanceIdentifier<RemoteMcastMacs> path) throws Exception {
         Optional<RemoteMcastMacs> mac = null;
         try {
-            mac = ElanUtils.read(broker, LogicalDatastoreType.OPERATIONAL, path);
+            mac = elanUtils.read(broker, LogicalDatastoreType.OPERATIONAL, path);
         } catch (Throwable e) {
         }
         if (mac == null || !mac.isPresent()) {
index ae75e371707c7d7a2c1f50785e021b8c57a06582..0c51c36f70c92dd80f7df7629f229212710b44a4 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataChangeListenerBase;
@@ -59,15 +60,20 @@ import java.util.concurrent.ConcurrentHashMap;
 public class HwvtepTerminationPointListener extends
         AsyncClusteredDataChangeListenerBase<TerminationPoint, HwvtepTerminationPointListener> implements AutoCloseable {
 
+    private static final Logger logger = LoggerFactory.getLogger(HwvtepTerminationPointListener.class);
+
     private DataBroker broker;
     private ListenerRegistration<DataChangeListener> lstnerRegistration;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final EntityOwnershipService entityOwnershipService;
 
-    private static final Logger logger = LoggerFactory.getLogger(HwvtepTerminationPointListener.class);
-
-    public HwvtepTerminationPointListener(DataBroker broker) {
+    public HwvtepTerminationPointListener(DataBroker broker, ElanL2GatewayUtils elanL2GatewayUtils,
+                                          EntityOwnershipService entityOwnershipService) {
         super(TerminationPoint.class, HwvtepTerminationPointListener.class);
 
         this.broker = broker;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.entityOwnershipService = entityOwnershipService;
         registerListener();
         logger.debug("created HwvtepTerminationPointListener");
     }
@@ -133,7 +139,7 @@ public class HwvtepTerminationPointListener extends
                 add.getAugmentation(HwvtepPhysicalPortAugmentation.class);
         if (portAugmentation != null) {
             final NodeId nodeId = identifier.firstIdentifierOf(Node.class).firstKeyOf(Node.class).getNodeId();
-            ElanClusterUtils.runOnlyInLeaderNode(HwvtepSouthboundConstants.ELAN_ENTITY_NAME,
+            ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, HwvtepSouthboundConstants.ELAN_ENTITY_NAME,
                     "handling Physical Switch add", new Callable<List<ListenableFuture<Void>>>() {
                         @Override
                         public List<ListenableFuture<Void>> call() throws Exception {
@@ -191,7 +197,7 @@ public class HwvtepTerminationPointListener extends
                         NodeId hwvtepNodeId = new NodeId(l2GwDevice.getHwvtepNodeId());
                         List<VlanBindings> vlanBindings = getVlanBindings(l2GwConns, hwvtepNodeId, psName, newPortId);
                         List<ListenableFuture<Void>> futures = new ArrayList<>();
-                        futures.add(ElanL2GatewayUtils.updateVlanBindingsInL2GatewayDevice(hwvtepNodeId, psName,
+                        futures.add(elanL2GatewayUtils.updateVlanBindingsInL2GatewayDevice(hwvtepNodeId, psName,
                                 newPortId, vlanBindings));
                         return futures;
                     }
index ff1817d22321f6cc1fcebc69ad11a5a71724d146..f376297cab148fa3990f6a6f4ac330b606d6babf 100644 (file)
@@ -29,12 +29,15 @@ public class L2GatewayConnectionListener extends AsyncClusteredDataChangeListene
 
     private ListenerRegistration<DataChangeListener> listenerRegistration;
     private final DataBroker broker;
-    private ElanInstanceManager elanInstanceManager;
+    private final ElanInstanceManager elanInstanceManager;
+    private final L2GatewayConnectionUtils l2GatewayConnectionUtils;
 
-    public L2GatewayConnectionListener(final DataBroker db, ElanInstanceManager elanInstanceManager) {
+    public L2GatewayConnectionListener(final DataBroker db, ElanInstanceManager elanInstanceManager,
+                                       L2GatewayConnectionUtils l2GatewayConnectionUtils) {
         super(L2gatewayConnection.class, L2GatewayConnectionListener.class);
         broker = db;
         this.elanInstanceManager = elanInstanceManager;
+        this.l2GatewayConnectionUtils = l2GatewayConnectionUtils;
         registerListener(db);
     }
 
@@ -74,7 +77,7 @@ public class L2GatewayConnectionListener extends AsyncClusteredDataChangeListene
         // Create logical switch in each of the L2GwDevices part of L2Gw
         // Logical switch name is network UUID
         // Add L2GwDevices to ELAN
-        L2GatewayConnectionUtils.addL2GatewayConnection(input);
+        l2GatewayConnectionUtils.addL2GatewayConnection(input);
     }
 
     @Override
@@ -83,7 +86,7 @@ public class L2GatewayConnectionListener extends AsyncClusteredDataChangeListene
             LOG.trace("Removing L2gatewayConnection: {}", input);
         }
 
-        L2GatewayConnectionUtils.deleteL2GatewayConnection(input);
+        l2GatewayConnectionUtils.deleteL2GatewayConnection(input);
     }
 
     @Override
index eb583be3ed31aea40c47cebd71d9dbfa8a5c41b4..0168494936e49732d1bd26dec0b53682c858385c 100644 (file)
@@ -62,48 +62,26 @@ public class ElanL2GatewayMulticastUtils {
     private static final Logger LOG = LoggerFactory.getLogger(ElanL2GatewayMulticastUtils.class);
 
     /** The broker. */
-    private static DataBroker broker;
+    private final DataBroker broker;
 
     /** The elan instance manager. */
-    private static ElanInstanceManager elanInstanceManager;
+    private final ElanInstanceManager elanInstanceManager;
 
     /** The elan interface manager. */
-    private static ElanInterfaceManager elanInterfaceManager;
+    private final ElanInterfaceManager elanInterfaceManager;
 
-    static DataStoreJobCoordinator dataStoreJobCoordinator;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
 
-    public static void setDataStoreJobCoordinator(DataStoreJobCoordinator ds) {
-        dataStoreJobCoordinator = ds;
-    }
-
-    /**
-     * Sets the broker.
-     *
-     * @param broker
-     *            the new broker
-     */
-    public static void setBroker(DataBroker broker) {
-        ElanL2GatewayMulticastUtils.broker = broker;
-    }
-
-    /**
-     * Sets the elan instance manager.
-     *
-     * @param elanMgr
-     *            the new elan instance manager
-     */
-    public static void setElanInstanceManager(ElanInstanceManager elanMgr) {
-        ElanL2GatewayMulticastUtils.elanInstanceManager = elanMgr;
-    }
+    private final ElanUtils elanUtils;
 
-    /**
-     * Sets the elan interface manager.
-     *
-     * @param interfaceMgr
-     *            the new elan interface manager
-     */
-    public static void setElanInterfaceManager(ElanInterfaceManager interfaceMgr) {
-        elanInterfaceManager = interfaceMgr;
+    public ElanL2GatewayMulticastUtils(DataBroker broker, ElanInstanceManager elanInstanceManager,
+                                       ElanInterfaceManager elanInterfaceManager, ElanL2GatewayUtils elanL2GatewayUtils,
+                                       ElanUtils elanUtils) {
+        this.broker = broker;
+        this.elanInstanceManager = elanInstanceManager;
+        this.elanInterfaceManager = elanInterfaceManager;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.elanUtils = elanUtils;
     }
 
     /**
@@ -115,7 +93,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the device
      * @return the listenable future
      */
-    public static ListenableFuture<Void> handleMcastForElanL2GwDeviceAdd(String elanName, L2GatewayDevice device) {
+    public ListenableFuture<Void> handleMcastForElanL2GwDeviceAdd(String elanName, L2GatewayDevice device) {
         return updateMcastMacsForAllElanDevices(elanName, device, true/* updateThisDevice */);
     }
 
@@ -128,7 +106,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the elan to be updated
      * @return the listenable future
      */
-    public static ListenableFuture<Void> updateRemoteMcastMacOnElanL2GwDevices(String elanName) {
+    public ListenableFuture<Void> updateRemoteMcastMacOnElanL2GwDevices(String elanName) {
         SettableFuture<Void> future = SettableFuture.create();
         future.set(null);
         try {
@@ -143,9 +121,9 @@ public class ElanL2GatewayMulticastUtils {
         return future;
     }
 
-    public static void scheduleMcastMacUpdateJob(String elanName, L2GatewayDevice device) {
-        HwvtepDeviceMcastMacUpdateJob job = new HwvtepDeviceMcastMacUpdateJob(elanName,device);
-        dataStoreJobCoordinator.enqueueJob(job.getJobKey(), job);
+    public void scheduleMcastMacUpdateJob(String elanName, L2GatewayDevice device) {
+        HwvtepDeviceMcastMacUpdateJob job = new HwvtepDeviceMcastMacUpdateJob(this, elanName,device);
+        DataStoreJobCoordinator.getInstance().enqueueJob(job.getJobKey(), job);
     }
 
     /**
@@ -157,17 +135,17 @@ public class ElanL2GatewayMulticastUtils {
      *            the device
      * @return the listenable future
      */
-    public static ListenableFuture<Void> updateRemoteMcastMacOnElanL2GwDevice(String elanName, L2GatewayDevice device) {
+    public ListenableFuture<Void> updateRemoteMcastMacOnElanL2GwDevice(String elanName, L2GatewayDevice device) {
         WriteTransaction transaction = broker.newWriteOnlyTransaction();
         prepareRemoteMcastMacUpdateOnDevice(transaction, elanName, device);
         return transaction.submit();
     }
 
-    public static void prepareRemoteMcastMacUpdateOnDevice(WriteTransaction transaction,String elanName,
+    public void prepareRemoteMcastMacUpdateOnDevice(WriteTransaction transaction,String elanName,
                                                            L2GatewayDevice device) {
         ConcurrentMap<String, L2GatewayDevice> elanL2gwDevices = ElanL2GwCacheUtils
                 .getInvolvedL2GwDevices(elanName);
-        List<DpnInterfaces> dpns = ElanUtils.getInvolvedDpnsInElan(elanName);
+        List<DpnInterfaces> dpns = elanUtils.getInvolvedDpnsInElan(elanName);
         List<IpAddress> dpnsTepIps = getAllTepIpsOfDpns(device, dpns);
         List<IpAddress> l2GwDevicesTepIps = getAllTepIpsOfL2GwDevices(elanL2gwDevices);
         preapareRemoteMcastMacEntry(transaction, elanName, device, dpnsTepIps, l2GwDevicesTepIps);
@@ -186,7 +164,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the update this device
      * @return the listenable future
      */
-    public static ListenableFuture<Void> updateMcastMacsForAllElanDevices(String elanName, L2GatewayDevice device,
+    public ListenableFuture<Void> updateMcastMacsForAllElanDevices(String elanName, L2GatewayDevice device,
                                                                           boolean updateThisDevice) {
 
         SettableFuture<Void> ft = SettableFuture.create();
@@ -195,7 +173,7 @@ public class ElanL2GatewayMulticastUtils {
         ElanInstance elanInstance = elanInstanceManager.getElanInstanceByName(elanName);
         elanInterfaceManager.updateRemoteBroadcastGroupForAllElanDpns(elanInstance);
 
-        List<DpnInterfaces> dpns = ElanUtils.getInvolvedDpnsInElan(elanName);
+        List<DpnInterfaces> dpns = elanUtils.getInvolvedDpnsInElan(elanName);
 
         ConcurrentMap<String, L2GatewayDevice> devices = ElanL2GwCacheUtils
                 .getInvolvedL2GwDevices(elanName);
@@ -238,7 +216,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the l2 gw devices tep ips
      * @return the write transaction
      */
-    private static void preapareRemoteMcastMacEntry(WriteTransaction transaction, String elanName,
+    private void preapareRemoteMcastMacEntry(WriteTransaction transaction, String elanName,
                                                     L2GatewayDevice device, List<IpAddress> dpnsTepIps,
                                                     List<IpAddress> l2GwDevicesTepIps) {
         NodeId nodeId = new NodeId(device.getHwvtepNodeId());
@@ -312,10 +290,10 @@ public class ElanL2GatewayMulticastUtils {
      *            the dpns
      * @return the all tep ips of dpns and devices
      */
-    private static List<IpAddress> getAllTepIpsOfDpns(L2GatewayDevice l2GwDevice, List<DpnInterfaces> dpns) {
+    private List<IpAddress> getAllTepIpsOfDpns(L2GatewayDevice l2GwDevice, List<DpnInterfaces> dpns) {
         List<IpAddress> tepIps = new ArrayList<>();
         for (DpnInterfaces dpn : dpns) {
-            IpAddress internalTunnelIp = ElanL2GatewayUtils.getSourceDpnTepIp(dpn.getDpId(),
+            IpAddress internalTunnelIp = elanL2GatewayUtils.getSourceDpnTepIp(dpn.getDpId(),
                     new NodeId(l2GwDevice.getHwvtepNodeId()));
             if (internalTunnelIp != null) {
                 tepIps.add(internalTunnelIp);
@@ -348,7 +326,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the l2 gateway device
      * @return the listenable future
      */
-    public static List<ListenableFuture<Void>> handleMcastForElanL2GwDeviceDelete(ElanInstance elanInstance,
+    public List<ListenableFuture<Void>> handleMcastForElanL2GwDeviceDelete(ElanInstance elanInstance,
             L2GatewayDevice l2GatewayDevice) {
         ListenableFuture<Void> updateMcastMacsFuture = updateMcastMacsForAllElanDevices(elanInstance.getElanInstanceName(),
                 l2GatewayDevice, false/* updateThisDevice */);
@@ -366,7 +344,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the logical switch name
      * @return the listenable future
      */
-    private static ListenableFuture<Void> deleteRemoteMcastMac(NodeId nodeId, String logicalSwitchName) {
+    private ListenableFuture<Void> deleteRemoteMcastMac(NodeId nodeId, String logicalSwitchName) {
         InstanceIdentifier<LogicalSwitches> logicalSwitch = HwvtepSouthboundUtils
                 .createLogicalSwitchesInstanceIdentifier(nodeId, new HwvtepNodeName(logicalSwitchName));
         RemoteMcastMacsKey remoteMcastMacsKey = new RemoteMcastMacsKey(new HwvtepLogicalSwitchRef(logicalSwitch),
@@ -386,7 +364,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the elan instance name
      * @return the tep ip of designated switch for external tunnel
      */
-    public static IpAddress getTepIpOfDesignatedSwitchForExternalTunnel(L2GatewayDevice l2GwDevice,
+    public IpAddress getTepIpOfDesignatedSwitchForExternalTunnel(L2GatewayDevice l2GwDevice,
             String elanInstanceName) {
         IpAddress tepIp = null;
         if (l2GwDevice.getTunnelIp() == null) {
@@ -396,7 +374,7 @@ public class ElanL2GatewayMulticastUtils {
         DesignatedSwitchForTunnel desgSwitch = getDesignatedSwitchForExternalTunnel(l2GwDevice.getTunnelIp(),
                 elanInstanceName);
         if (desgSwitch != null) {
-            tepIp = ElanL2GatewayUtils.getSourceDpnTepIp(BigInteger.valueOf(desgSwitch.getDpId()),
+            tepIp = elanL2GatewayUtils.getSourceDpnTepIp(BigInteger.valueOf(desgSwitch.getDpId()),
                     new NodeId(l2GwDevice.getHwvtepNodeId()));
         }
         return tepIp;
@@ -411,7 +389,7 @@ public class ElanL2GatewayMulticastUtils {
      *            the elan instance name
      * @return the designated switch for external tunnel
      */
-    public static DesignatedSwitchForTunnel getDesignatedSwitchForExternalTunnel(IpAddress tunnelIp,
+    public DesignatedSwitchForTunnel getDesignatedSwitchForExternalTunnel(IpAddress tunnelIp,
             String elanInstanceName) {
         InstanceIdentifier<DesignatedSwitchForTunnel> instanceIdentifier = InstanceIdentifier
                 .builder(DesignatedSwitchesForExternalTunnels.class)
index 75ea164318d40d0fd85d3f9cd09135ab64a69d0f..e6e03535d89622ef6098426697c35bc353876990 100644 (file)
@@ -31,6 +31,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
 import org.opendaylight.genius.interfacemanager.IfmUtil;
@@ -98,43 +99,27 @@ import org.slf4j.LoggerFactory;
  *
  */
 public class ElanL2GatewayUtils {
-    private static DataBroker broker;
-    private static ItmRpcService itmRpcService;
-    private static DataStoreJobCoordinator dataStoreJobCoordinator;
-    private static Timer LogicalSwitchDeleteJobTimer = new Timer();
-    private static final int LOGICAL_SWITCH_DELETE_DELAY = 120000;
-    private static ConcurrentMap<Pair<NodeId, String>, TimerTask> LogicalSwitchDeletedTasks = new ConcurrentHashMap<>();
-
     private static final Logger LOG = LoggerFactory.getLogger(ElanL2GatewayUtils.class);
 
-    /**
-     * Sets the data broker.
-     *
-     * @param dataBroker
-     *            the new data broker
-     */
-    public static void setDataBroker(DataBroker dataBroker) {
-        broker = dataBroker;
-    }
+    private final DataBroker broker;
+    private final ItmRpcService itmRpcService;
+    private final ElanUtils elanUtils;
+    private final EntityOwnershipService entityOwnershipService;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
 
-    /**
-     * Sets the itm rpc service.
-     *
-     * @param itmRpc
-     *            the new itm rpc service
-     */
-    public static void setItmRpcService(ItmRpcService itmRpc) {
-        itmRpcService = itmRpc;
-    }
-
-    /**
-     * Sets DataStoreJobCoordinator
-     *
-     * @param dsJobCoordinator
-     *            the new dataStoreJobCoordinator
-     */
-    public static void setDataStoreJobCoordinator(DataStoreJobCoordinator dsJobCoordinator) {
-        dataStoreJobCoordinator = dsJobCoordinator;
+    private final DataStoreJobCoordinator dataStoreJobCoordinator = DataStoreJobCoordinator.getInstance();
+    private static Timer LogicalSwitchDeleteJobTimer = new Timer();
+    private static final int LOGICAL_SWITCH_DELETE_DELAY = 120000;
+    private final ConcurrentMap<Pair<NodeId, String>, TimerTask> logicalSwitchDeletedTasks = new ConcurrentHashMap<>();
+
+    public ElanL2GatewayUtils(DataBroker broker, ItmRpcService itmRpcService, ElanUtils elanUtils,
+                              EntityOwnershipService entityOwnershipService,
+                              ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils) {
+        this.broker = broker;
+        this.itmRpcService = itmRpcService;
+        this.elanUtils = elanUtils;
+        this.entityOwnershipService = entityOwnershipService;
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
     }
 
     /**
@@ -153,7 +138,7 @@ public class ElanL2GatewayUtils {
      * @param externalNodeId
      *            the external node id
      */
-    public static void installDpnMacsInL2gwDevice(String elanName, Set<String> lstElanInterfaceNames, BigInteger dpnId,
+    public void installDpnMacsInL2gwDevice(String elanName, Set<String> lstElanInterfaceNames, BigInteger dpnId,
             NodeId externalNodeId) {
         L2GatewayDevice elanL2GwDevice = ElanL2GwCacheUtils.getL2GatewayDeviceFromCache(elanName,
                 externalNodeId.getValue());
@@ -182,7 +167,7 @@ public class ElanL2GatewayUtils {
             scheduleAddDpnMacsInExtDevice(elanName, dpnId, staticMacs, elanL2GwDevice);
             return;
         }
-        ElanL2GatewayMulticastUtils.scheduleMcastMacUpdateJob(elanName, elanL2GwDevice);
+        elanL2GatewayMulticastUtils.scheduleMcastMacUpdateJob(elanName, elanL2GwDevice);
         scheduleAddDpnMacsInExtDevice(elanName, dpnId, staticMacs, elanL2GwDevice);
     }
 
@@ -193,10 +178,10 @@ public class ElanL2GatewayUtils {
      *            the lst elan interface names
      * @return the list
      */
-    private static List<PhysAddress> getElanDpnMacsFromInterfaces(Set<String> lstElanInterfaceNames) {
+    private List<PhysAddress> getElanDpnMacsFromInterfaces(Set<String> lstElanInterfaceNames) {
         List<PhysAddress> result = new ArrayList<>();
         for (String interfaceName : lstElanInterfaceNames) {
-            ElanInterfaceMac elanInterfaceMac = ElanUtils.getElanInterfaceMacByInterfaceName(interfaceName);
+            ElanInterfaceMac elanInterfaceMac = elanUtils.getElanInterfaceMacByInterfaceName(interfaceName);
             if (elanInterfaceMac != null && elanInterfaceMac.getMacEntry() != null) {
                 for (MacEntry macEntry : elanInterfaceMac.getMacEntry()) {
                     result.add(macEntry.getMacAddress());
@@ -247,7 +232,7 @@ public class ElanL2GatewayUtils {
      *            the datastore type
      * @return the remote mcast mac
      */
-    public static RemoteMcastMacs readRemoteMcastMac(NodeId nodeId, String logicalSwitchName,
+    public RemoteMcastMacs readRemoteMcastMac(NodeId nodeId, String logicalSwitchName,
             LogicalDatastoreType datastoreType) {
         InstanceIdentifier<LogicalSwitches> logicalSwitch = HwvtepSouthboundUtils
                 .createLogicalSwitchesInstanceIdentifier(nodeId, new HwvtepNodeName(logicalSwitchName));
@@ -267,7 +252,7 @@ public class ElanL2GatewayUtils {
      * @param macAddresses
      *            the mac addresses
      */
-    public static void removeMacsFromElanExternalDevices(ElanInstance elanInstance, List<PhysAddress> macAddresses) {
+    public void removeMacsFromElanExternalDevices(ElanInstance elanInstance, List<PhysAddress> macAddresses) {
         ConcurrentMap<String, L2GatewayDevice> elanL2GwDevices = ElanL2GwCacheUtils
                 .getInvolvedL2GwDevices(elanInstance.getElanInstanceName());
         for (L2GatewayDevice l2GatewayDevice : elanL2GwDevices.values()) {
@@ -286,7 +271,7 @@ public class ElanL2GatewayUtils {
      *            the mac addresses
      * @return the listenable future
      */
-    private static ListenableFuture<Void> removeRemoteUcastMacsFromExternalDevice(String deviceNodeId,
+    private ListenableFuture<Void> removeRemoteUcastMacsFromExternalDevice(String deviceNodeId,
             String logicalSwitchName, List<PhysAddress> macAddresses) {
         NodeId nodeId = new NodeId(deviceNodeId);
 
@@ -300,15 +285,15 @@ public class ElanL2GatewayUtils {
         return HwvtepUtils.deleteRemoteUcastMacs(broker, nodeId, logicalSwitchName, lstMac);
     }
 
-    public static ElanInstance getElanInstanceForUcastLocalMac(LocalUcastMacs localUcastMac) {
-        Optional<LogicalSwitches> lsOpc = ElanUtils.read(broker, LogicalDatastoreType.OPERATIONAL,
+    public ElanInstance getElanInstanceForUcastLocalMac(LocalUcastMacs localUcastMac) {
+        Optional<LogicalSwitches> lsOpc = elanUtils.read(broker, LogicalDatastoreType.OPERATIONAL,
                 (InstanceIdentifier<LogicalSwitches>) localUcastMac.getLogicalSwitchRef().getValue());
         if (lsOpc.isPresent()) {
             LogicalSwitches ls = lsOpc.get();
             if (ls != null) {
                 // Logical switch name is Elan name
                 String elanName = getElanFromLogicalSwitch(ls.getHwvtepNodeName().getValue());
-                return ElanUtils.getElanInstanceByName(elanName);
+                return elanUtils.getElanInstanceByName(elanName);
             } else {
                 String macAddress = localUcastMac.getMacEntryKey().getValue();
                 LOG.error("Could not find logical_switch for {} being added/deleted", macAddress);
@@ -328,7 +313,7 @@ public class ElanL2GatewayUtils {
      *            the elan
      * @param interfaceName
      */
-    public static void installL2gwDeviceMacsInDpn(BigInteger dpnId, NodeId l2gwDeviceNodeId, ElanInstance elan,
+    public void installL2gwDeviceMacsInDpn(BigInteger dpnId, NodeId l2gwDeviceNodeId, ElanInstance elan,
             String interfaceName) {
         L2GatewayDevice l2gwDevice = ElanL2GwCacheUtils.getL2GatewayDeviceFromCache(elan.getElanInstanceName(),
                 l2gwDeviceNodeId.getValue());
@@ -351,7 +336,7 @@ public class ElanL2GatewayUtils {
      *            the elan
      * @param interfaceName
      */
-    public static void installDmacFlowsOnDpn(BigInteger dpnId, L2GatewayDevice l2gwDevice, ElanInstance elan,
+    public void installDmacFlowsOnDpn(BigInteger dpnId, L2GatewayDevice l2gwDevice, ElanInstance elan,
             String interfaceName) {
         String elanName = elan.getElanInstanceName();
 
@@ -359,7 +344,7 @@ public class ElanL2GatewayUtils {
         if (l2gwDeviceLocalMacs != null && !l2gwDeviceLocalMacs.isEmpty()) {
             for (LocalUcastMacs localUcastMac : l2gwDeviceLocalMacs) {
                 // TODO batch these ops
-                ElanUtils.installDmacFlowsToExternalRemoteMac(dpnId, l2gwDevice.getHwvtepNodeId(), elan.getElanTag(),
+                elanUtils.installDmacFlowsToExternalRemoteMac(dpnId, l2gwDevice.getHwvtepNodeId(), elan.getElanTag(),
                         elan.getSegmentationId(), localUcastMac.getMacEntryKey().getValue(), elanName, interfaceName);
             }
             LOG.debug("Installing L2gw device [{}] local macs [size: {}] in dpn [{}] for elan [{}]",
@@ -376,7 +361,7 @@ public class ElanL2GatewayUtils {
      *            the elan
      * @param interfaceName
      */
-    public static void installElanL2gwDevicesLocalMacsInDpn(BigInteger dpnId, ElanInstance elan, String interfaceName) {
+    public void installElanL2gwDevicesLocalMacsInDpn(BigInteger dpnId, ElanInstance elan, String interfaceName) {
         ConcurrentMap<String, L2GatewayDevice> elanL2GwDevicesFromCache = ElanL2GwCacheUtils
                 .getInvolvedL2GwDevices(elan.getElanInstanceName());
         if (elanL2GwDevicesFromCache != null) {
@@ -388,7 +373,7 @@ public class ElanL2GatewayUtils {
         }
     }
 
-    public static void installL2GwUcastMacInElan(final ElanInstance elan, final L2GatewayDevice extL2GwDevice,
+    public void installL2GwUcastMacInElan(final ElanInstance elan, final L2GatewayDevice extL2GwDevice,
             final String macToBeAdded, String interfaceName) {
         final String extDeviceNodeId = extL2GwDevice.getHwvtepNodeId();
         final String elanInstanceName = elan.getElanInstanceName();
@@ -397,10 +382,10 @@ public class ElanL2GatewayUtils {
         // DMAC table.
         // Looping through all DPNs in order to add/remove mac flows in their
         // DMAC table
-        final List<DpnInterfaces> elanDpns = ElanUtils.getInvolvedDpnsInElan(elanInstanceName);
+        final List<DpnInterfaces> elanDpns = elanUtils.getInvolvedDpnsInElan(elanInstanceName);
         if (elanDpns != null && elanDpns.size() > 0) {
             String jobKey = elan.getElanInstanceName() + ":" + macToBeAdded;
-            ElanClusterUtils.runOnlyInLeaderNode(jobKey, "install l2gw macs in dmac table",
+            ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, jobKey, "install l2gw macs in dmac table",
                     new Callable<List<ListenableFuture<Void>>>() {
                         @Override
                         public List<ListenableFuture<Void>> call() throws Exception {
@@ -408,7 +393,7 @@ public class ElanL2GatewayUtils {
                             if (doesLocalUcastMacExistsInCache(extL2GwDevice, macToBeAdded)) {
                                 for (DpnInterfaces elanDpn : elanDpns) {
                                     // TODO batch the below call
-                                    fts.addAll(ElanUtils.installDmacFlowsToExternalRemoteMac(elanDpn.getDpId(),
+                                    fts.addAll(elanUtils.installDmacFlowsToExternalRemoteMac(elanDpn.getDpId(),
                                             extDeviceNodeId, elan.getElanTag(), elan.getSegmentationId(), macToBeAdded,
                                             elanInstanceName, interfaceName));
                                 }
@@ -425,7 +410,7 @@ public class ElanL2GatewayUtils {
         macList.add(new PhysAddress(macToBeAdded));
 
         String jobKey = "hwvtep:" + elan.getElanInstanceName() + ":" + macToBeAdded;
-        ElanClusterUtils.runOnlyInLeaderNode(jobKey, "install remote ucast macs in l2gw device",
+        ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, jobKey, "install remote ucast macs in l2gw device",
                 new Callable<List<ListenableFuture<Void>>>() {
                     @Override
                     public List<ListenableFuture<Void>> call() throws Exception {
@@ -496,7 +481,7 @@ public class ElanL2GatewayUtils {
      * @param macAddresses
      *            the mac addresses
      */
-    public static void unInstallL2GwUcastMacFromElan(final ElanInstance elan, final L2GatewayDevice l2GwDevice,
+    public void unInstallL2GwUcastMacFromElan(final ElanInstance elan, final L2GatewayDevice l2GwDevice,
             final List<MacAddress> macAddresses) {
         if (macAddresses == null || macAddresses.isEmpty()) {
             return;
@@ -507,10 +492,10 @@ public class ElanL2GatewayUtils {
         // DMAC table. Looping through all DPNs in order to add/remove mac flows
         // in their DMAC table
         for (final MacAddress mac : macAddresses) {
-            final List<DpnInterfaces> elanDpns = ElanUtils.getInvolvedDpnsInElan(elanName);
+            final List<DpnInterfaces> elanDpns = elanUtils.getInvolvedDpnsInElan(elanName);
             if (elanDpns != null && !elanDpns.isEmpty()) {
                 String jobKey = elanName + ":" + mac.getValue();
-                ElanClusterUtils.runOnlyInLeaderNode(jobKey, "delete l2gw macs from dmac table",
+                ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, jobKey, "delete l2gw macs from dmac table",
                         new Callable<List<ListenableFuture<Void>>>() {
                             @Override
                             public List<ListenableFuture<Void>> call() {
@@ -518,7 +503,7 @@ public class ElanL2GatewayUtils {
                                 for (DpnInterfaces elanDpn : elanDpns) {
                                     BigInteger dpnId = elanDpn.getDpId();
                                     // never batch deletes
-                                    fts.addAll(ElanUtils.deleteDmacFlowsToExternalMac(elan.getElanTag(), dpnId,
+                                    fts.addAll(elanUtils.deleteDmacFlowsToExternalMac(elan.getElanTag(), dpnId,
                                             l2GwDevice.getHwvtepNodeId(), mac.getValue()));
                                 }
                                 return fts;
@@ -529,7 +514,7 @@ public class ElanL2GatewayUtils {
 
         DeleteL2GwDeviceMacsFromElanJob job = new DeleteL2GwDeviceMacsFromElanJob(broker, elanName, l2GwDevice,
                 macAddresses);
-        ElanClusterUtils.runOnlyInLeaderNode(job.getJobKey(), "delete remote ucast macs in l2gw devices", job);
+        ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, job.getJobKey(), "delete remote ucast macs in l2gw devices", job);
     }
 
     /**
@@ -540,13 +525,13 @@ public class ElanL2GatewayUtils {
      * @param dpnId
      *            the dpn id
      */
-    public static void deleteElanL2GwDevicesUcastLocalMacsFromDpn(final String elanName, final BigInteger dpnId) {
+    public void deleteElanL2GwDevicesUcastLocalMacsFromDpn(final String elanName, final BigInteger dpnId) {
         ConcurrentMap<String, L2GatewayDevice> elanL2GwDevices = ElanL2GwCacheUtils.getInvolvedL2GwDevices(elanName);
         if (elanL2GwDevices == null || elanL2GwDevices.isEmpty()) {
             LOG.trace("No L2 gateway devices in Elan [{}] cache.", elanName);
             return;
         }
-        final ElanInstance elan = ElanUtils.getElanInstanceByName(elanName);
+        final ElanInstance elan = elanUtils.getElanInstanceByName(elanName);
         if (elan == null) {
             LOG.error("Could not find Elan by name: {}", elanName);
             return;
@@ -559,13 +544,13 @@ public class ElanL2GatewayUtils {
             if (localMacs != null && !localMacs.isEmpty()) {
                 for (final MacAddress mac : localMacs) {
                     String jobKey = elanName + ":" + mac.getValue();
-                    ElanClusterUtils.runOnlyInLeaderNode(jobKey, "delete l2gw macs from dmac table",
+                    ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, jobKey, "delete l2gw macs from dmac table",
                             new Callable<List<ListenableFuture<Void>>>() {
                                 @Override
                                 public List<ListenableFuture<Void>> call() {
                                     List<ListenableFuture<Void>> futures = Lists.newArrayList();
 
-                                    futures.addAll(ElanUtils.deleteDmacFlowsToExternalMac(elanTag, dpnId,
+                                    futures.addAll(elanUtils.deleteDmacFlowsToExternalMac(elanTag, dpnId,
                                             l2GwDevice.getHwvtepNodeId(), mac.getValue()));
                                     return futures;
                                 }
@@ -610,7 +595,7 @@ public class ElanL2GatewayUtils {
      *            the elan name
      * @return the listenable future
      */
-    public static ListenableFuture<Void> deleteElanMacsFromL2GatewayDevice(L2GatewayDevice l2GatewayDevice,
+    public ListenableFuture<Void> deleteElanMacsFromL2GatewayDevice(L2GatewayDevice l2GatewayDevice,
             String elanName) {
         String hwvtepNodeId = l2GatewayDevice.getHwvtepNodeId();
         String logicalSwitch = getLogicalSwitchFromElan(elanName);
@@ -659,7 +644,7 @@ public class ElanL2GatewayUtils {
      *            the datastore type
      * @return the remote ucast macs
      */
-    public static List<MacAddress> getRemoteUcastMacs(NodeId hwvtepNodeId, String logicalSwitch,
+    public List<MacAddress> getRemoteUcastMacs(NodeId hwvtepNodeId, String logicalSwitch,
             LogicalDatastoreType datastoreType) {
         List<MacAddress> lstMacs = Collections.emptyList();
         Node hwvtepNode = HwvtepUtils.getHwVtepNode(broker, datastoreType, hwvtepNodeId);
@@ -689,7 +674,7 @@ public class ElanL2GatewayUtils {
      *            the l2 gateway device which has to be configured
      * @return the listenable future
      */
-    public static ListenableFuture<Void> installElanMacsInL2GatewayDevice(String elanName,
+    public ListenableFuture<Void> installElanMacsInL2GatewayDevice(String elanName,
             L2GatewayDevice l2GatewayDevice) {
         String logicalSwitchName = getLogicalSwitchFromElan(elanName);
         NodeId hwVtepNodeId = new NodeId(l2GatewayDevice.getHwvtepNodeId());
@@ -782,18 +767,18 @@ public class ElanL2GatewayUtils {
      *            the logical switch name
      * @return the elan mac table entries as remote ucast macs
      */
-    public static List<RemoteUcastMacs> getElanMacTableEntriesMacs(String elanName,
+    public List<RemoteUcastMacs> getElanMacTableEntriesMacs(String elanName,
             L2GatewayDevice l2GatewayDeviceToBeConfigured, NodeId hwVtepNodeId, String logicalSwitchName) {
         List<RemoteUcastMacs> lstRemoteUcastMacs = new ArrayList<>();
 
-        MacTable macTable = ElanUtils.getElanMacTable(elanName);
+        MacTable macTable = elanUtils.getElanMacTable(elanName);
         if (macTable == null || macTable.getMacEntry() == null || macTable.getMacEntry().isEmpty()) {
             LOG.trace("MacTable is empty for elan: {}", elanName);
             return lstRemoteUcastMacs;
         }
 
         for (MacEntry macEntry : macTable.getMacEntry()) {
-            BigInteger dpnId = ElanUtils.getDpidFromInterface(macEntry.getInterface());
+            BigInteger dpnId = elanUtils.getDpidFromInterface(macEntry.getInterface());
             if (dpnId == null) {
                 LOG.error("DPN ID not found for interface {}", macEntry.getInterface());
                 continue;
@@ -826,7 +811,7 @@ public class ElanL2GatewayUtils {
      *            the dst node
      * @return the external tunnel interface name
      */
-    public static String getExternalTunnelInterfaceName(String sourceNode, String dstNode) {
+    public String getExternalTunnelInterfaceName(String sourceNode, String dstNode) {
         Class<? extends TunnelTypeBase> tunType = TunnelTypeVxlan.class;
         String tunnelInterfaceName = null;
         try {
@@ -858,7 +843,7 @@ public class ElanL2GatewayUtils {
      *            the dst hw vtep node id
      * @return the dpn tep ip
      */
-    public static IpAddress getSourceDpnTepIp(BigInteger srcDpnId, NodeId dstHwVtepNodeId) {
+    public IpAddress getSourceDpnTepIp(BigInteger srcDpnId, NodeId dstHwVtepNodeId) {
         IpAddress dpnTepIp = null;
         String tunnelInterfaceName = getExternalTunnelInterfaceName(String.valueOf(srcDpnId),
                 dstHwVtepNodeId.getValue());
@@ -889,7 +874,7 @@ public class ElanL2GatewayUtils {
      *            the default vlan id
      * @return the listenable future
      */
-    public static ListenableFuture<Void> updateVlanBindingsInL2GatewayDevice(NodeId nodeId, String logicalSwitchName,
+    public ListenableFuture<Void> updateVlanBindingsInL2GatewayDevice(NodeId nodeId, String logicalSwitchName,
             Devices hwVtepDevice, Integer defaultVlanId) {
         if (hwVtepDevice == null || hwVtepDevice.getInterfaces() == null || hwVtepDevice.getInterfaces().isEmpty()) {
             String errMsg = "HwVtepDevice is null or interfaces are empty.";
@@ -941,7 +926,7 @@ public class ElanL2GatewayUtils {
      *            the vlan bindings to be configured
      * @return the listenable future
      */
-    public static ListenableFuture<Void> updateVlanBindingsInL2GatewayDevice(NodeId nodeId, String psName,
+    public ListenableFuture<Void> updateVlanBindingsInL2GatewayDevice(NodeId nodeId, String psName,
             String interfaceName, List<VlanBindings> vlanBindings) {
         WriteTransaction transaction = broker.newWriteOnlyTransaction();
         HwvtepUtils.mergeVlanBindings(transaction, nodeId, psName, interfaceName, vlanBindings);
@@ -961,7 +946,7 @@ public class ElanL2GatewayUtils {
      *            the default vlan id
      * @return the listenable future
      */
-    public static ListenableFuture<Void> deleteVlanBindingsFromL2GatewayDevice(NodeId nodeId, Devices hwVtepDevice,
+    public ListenableFuture<Void> deleteVlanBindingsFromL2GatewayDevice(NodeId nodeId, Devices hwVtepDevice,
             Integer defaultVlanId) {
         if (hwVtepDevice == null || hwVtepDevice.getInterfaces() == null || hwVtepDevice.getInterfaces().isEmpty()) {
             String errMsg = "HwVtepDevice is null or interfaces are empty.";
@@ -1059,13 +1044,13 @@ public class ElanL2GatewayUtils {
      *            the elan name
      * @return the listenable future
      */
-    public static List<ListenableFuture<Void>> deleteL2GwDeviceUcastLocalMacsFromElan(L2GatewayDevice l2GatewayDevice,
+    public List<ListenableFuture<Void>> deleteL2GwDeviceUcastLocalMacsFromElan(L2GatewayDevice l2GatewayDevice,
             String elanName) {
         LOG.info("Deleting L2GatewayDevice [{}] UcastLocalMacs from elan [{}]", l2GatewayDevice.getHwvtepNodeId(),
                 elanName);
 
         List<ListenableFuture<Void>> futures = new ArrayList<>();
-        ElanInstance elan = ElanUtils.getElanInstanceByName(elanName);
+        ElanInstance elan = elanUtils.getElanInstanceByName(elanName);
         if (elan == null) {
             LOG.error("Could not find Elan by name: {}", elanName);
             return futures;
@@ -1099,7 +1084,7 @@ public class ElanL2GatewayUtils {
         return MDSALUtil.NODE_PREFIX + MDSALUtil.SEPARATOR + dpnId.toString();
     }
 
-    public static void scheduleAddDpnMacInExtDevices(String elanName, BigInteger dpId,
+    public void scheduleAddDpnMacInExtDevices(String elanName, BigInteger dpId,
             List<PhysAddress> staticMacAddresses) {
         ConcurrentMap<String, L2GatewayDevice> elanDevices = ElanL2GwCacheUtils.getInvolvedL2GwDevices(elanName);
         for (final L2GatewayDevice externalDevice : elanDevices.values()) {
@@ -1107,10 +1092,10 @@ public class ElanL2GatewayUtils {
         }
     }
 
-    public static void scheduleAddDpnMacsInExtDevice(final String elanName, BigInteger dpId,
+    public void scheduleAddDpnMacsInExtDevice(final String elanName, BigInteger dpId,
             final List<PhysAddress> staticMacAddresses, final L2GatewayDevice externalDevice) {
         NodeId nodeId = new NodeId(externalDevice.getHwvtepNodeId());
-        final IpAddress dpnTepIp = ElanL2GatewayUtils.getSourceDpnTepIp(dpId, nodeId);
+        final IpAddress dpnTepIp = getSourceDpnTepIp(dpId, nodeId);
         LOG.trace("Dpn Tep IP: {} for dpnId: {} and nodeId: {}", dpnTepIp, dpId, nodeId);
         if (dpnTepIp == null) {
             LOG.error("could not install dpn mac in l2gw TEP IP not found for dpnId {} and nodeId {}", dpId, nodeId);
@@ -1128,31 +1113,31 @@ public class ElanL2GatewayUtils {
         });
     }
 
-    public static void scheduleDeleteLogicalSwitch(final NodeId hwvtepNodeId, final String lsName) {
+    public void scheduleDeleteLogicalSwitch(final NodeId hwvtepNodeId, final String lsName) {
         TimerTask logicalSwitchDeleteTask = new TimerTask() {
             @Override
             public void run() {
                 Pair<NodeId, String> nodeIdLogicalSwitchNamePair = new ImmutablePair<NodeId, String>(hwvtepNodeId,
                         lsName);
-                LogicalSwitchDeletedTasks.remove(nodeIdLogicalSwitchNamePair);
+                logicalSwitchDeletedTasks.remove(nodeIdLogicalSwitchNamePair);
 
                 DeleteLogicalSwitchJob deleteLsJob = new DeleteLogicalSwitchJob(broker, hwvtepNodeId, lsName);
-                ElanL2GatewayUtils.dataStoreJobCoordinator.enqueueJob(deleteLsJob.getJobKey(), deleteLsJob,
+                dataStoreJobCoordinator.enqueueJob(deleteLsJob.getJobKey(), deleteLsJob,
                         SystemPropertyReader.getDataStoreJobCoordinatorMaxRetries());
             }
         };
         Pair<NodeId, String> nodeIdLogicalSwitchNamePair = new ImmutablePair<>(hwvtepNodeId, lsName);
-        LogicalSwitchDeletedTasks.put(nodeIdLogicalSwitchNamePair, logicalSwitchDeleteTask);
+        logicalSwitchDeletedTasks.put(nodeIdLogicalSwitchNamePair, logicalSwitchDeleteTask);
         LogicalSwitchDeleteJobTimer.schedule(logicalSwitchDeleteTask, LOGICAL_SWITCH_DELETE_DELAY);
     }
 
-    public static void cancelDeleteLogicalSwitch(final NodeId hwvtepNodeId, final String lsName) {
+    public void cancelDeleteLogicalSwitch(final NodeId hwvtepNodeId, final String lsName) {
         Pair<NodeId, String> nodeIdLogicalSwitchNamePair = new ImmutablePair<>(hwvtepNodeId, lsName);
-        TimerTask logicalSwitchDeleteTask = LogicalSwitchDeletedTasks.get(nodeIdLogicalSwitchNamePair);
+        TimerTask logicalSwitchDeleteTask = logicalSwitchDeletedTasks.get(nodeIdLogicalSwitchNamePair);
         if (logicalSwitchDeleteTask != null) {
             LOG.debug("Delete logical switch {} action on node {} cancelled", lsName, hwvtepNodeId);
             logicalSwitchDeleteTask.cancel();
-            LogicalSwitchDeletedTasks.remove(nodeIdLogicalSwitchNamePair);
+            logicalSwitchDeletedTasks.remove(nodeIdLogicalSwitchNamePair);
         }
     }
 }
index 1a962ac35d2fcd25d7b4b59f01ff4a29699ed7ea..28ea7ed088d0cfbc6951362516fac0831978e36a 100644 (file)
@@ -13,6 +13,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepLogicalSwitchListener;
 import org.opendaylight.netvirt.elan.l2gw.jobs.AssociateHwvtepToElanJob;
@@ -23,7 +24,6 @@ import org.opendaylight.netvirt.elan.l2gw.jobs.DisAssociateHwvtepFromElanJob;
 import org.opendaylight.netvirt.elanmanager.utils.ElanL2GwCacheUtils;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.utils.L2GatewayCacheUtils;
-import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.utils.hwvtep.HwvtepUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
@@ -46,21 +46,23 @@ import com.google.common.base.Optional;
 public class L2GatewayConnectionUtils {
     private static final Logger LOG = LoggerFactory.getLogger(L2GatewayConnectionUtils.class);
 
-    private static DataBroker broker;
-    private static ElanInstanceManager elanInstanceManager;
-
-    static DataStoreJobCoordinator dataStoreJobCoordinator;
-
-    public static void setDataStoreJobCoordinator(DataStoreJobCoordinator ds) {
-        dataStoreJobCoordinator = ds;
-    }
-
-    public static void setBroker(DataBroker broker) {
-        L2GatewayConnectionUtils.broker = broker;
-    }
-
-    public static void setElanInstanceManager(ElanInstanceManager elanInstanceManager) {
-        L2GatewayConnectionUtils.elanInstanceManager = elanInstanceManager;
+    private final DataBroker broker;
+    private final ElanInstanceManager elanInstanceManager;
+    private final ElanL2GatewayUtils elanL2GatewayUtils;
+    private final EntityOwnershipService entityOwnershipService;
+    private final ElanUtils elanUtils;
+    private final ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils;
+
+    public L2GatewayConnectionUtils(DataBroker dataBroker, ElanInstanceManager elanInstanceManager,
+                                    ElanL2GatewayUtils elanL2GatewayUtils,
+                                    EntityOwnershipService entityOwnershipService, ElanUtils elanUtils,
+                                    ElanL2GatewayMulticastUtils elanL2GatewayMulticastUtils) {
+        this.broker = dataBroker;
+        this.elanInstanceManager = elanInstanceManager;
+        this.elanL2GatewayUtils = elanL2GatewayUtils;
+        this.entityOwnershipService = entityOwnershipService;
+        this.elanUtils = elanUtils;
+        this.elanL2GatewayMulticastUtils = elanL2GatewayMulticastUtils;
     }
 
     public static boolean isGatewayAssociatedToL2Device(L2GatewayDevice l2GwDevice) {
@@ -123,11 +125,11 @@ public class L2GatewayConnectionUtils {
         return l2GwConnections;
     }
 
-    public static void addL2GatewayConnection(L2gatewayConnection input) {
+    public void addL2GatewayConnection(L2gatewayConnection input) {
         addL2GatewayConnection(input, null/*deviceName*/);
     }
 
-    public static void addL2GatewayConnection(L2gatewayConnection input, String l2GwDeviceName) {
+    public void addL2GatewayConnection(L2gatewayConnection input, String l2GwDeviceName) {
         LOG.info("Adding L2gateway Connection with ID: {}", input.getKey().getUuid());
 
         Uuid networkUuid = input.getNetworkId();
@@ -145,7 +147,7 @@ public class L2GatewayConnectionUtils {
         }
     }
 
-    public static void deleteL2GatewayConnection(L2gatewayConnection input) {
+    public void deleteL2GatewayConnection(L2gatewayConnection input) {
         LOG.info("Deleting L2gateway Connection with ID: {}", input.getKey().getUuid());
 
         Uuid networkUuid = input.getNetworkId();
@@ -163,7 +165,7 @@ public class L2GatewayConnectionUtils {
         }
     }
 
-    private static void disAssociateHwvtepsFromElan(ElanInstance elanInstance, L2gateway l2Gateway,
+    private void disAssociateHwvtepsFromElan(ElanInstance elanInstance, L2gateway l2Gateway,
             L2gatewayConnection input) {
         String elanName = elanInstance.getElanInstanceName();
         Integer defaultVlan = input.getSegmentId();
@@ -186,14 +188,16 @@ public class L2GatewayConnectionUtils {
                 elanL2GwDevice.removeL2GatewayId(l2GwConnId);
             }
 
-            DisAssociateHwvtepFromElanJob disAssociateHwvtepToElanJob = new DisAssociateHwvtepFromElanJob(broker,
-                    elanL2GwDevice, elanInstance, l2Device, defaultVlan, isLastL2GwConnDeleted);
-            ElanClusterUtils.runOnlyInLeaderNode(disAssociateHwvtepToElanJob.getJobKey(), "remove l2gw connection job ",
+            DisAssociateHwvtepFromElanJob disAssociateHwvtepToElanJob =
+                    new DisAssociateHwvtepFromElanJob(broker, elanL2GatewayUtils, elanL2GatewayMulticastUtils,
+                            elanL2GwDevice, elanInstance,
+                            l2Device, defaultVlan, isLastL2GwConnDeleted);
+            ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, disAssociateHwvtepToElanJob.getJobKey(), "remove l2gw connection job ",
                     disAssociateHwvtepToElanJob);
         }
     }
 
-    private static void associateHwvtepsToElan(ElanInstance elanInstance,
+    private void associateHwvtepsToElan(ElanInstance elanInstance,
             L2gateway l2Gateway, L2gatewayConnection input, String l2GwDeviceName) {
         String elanName = elanInstance.getElanInstanceName();
         Integer defaultVlan = input.getSegmentId();
@@ -220,7 +224,7 @@ public class L2GatewayConnectionUtils {
                 NodeId hwvtepNodeId = new NodeId(l2GatewayDevice.getHwvtepNodeId());
 
                 // Delete pending delete logical switch task if scheduled
-                ElanL2GatewayUtils.cancelDeleteLogicalSwitch(hwvtepNodeId,
+                elanL2GatewayUtils.cancelDeleteLogicalSwitch(hwvtepNodeId,
                         ElanL2GatewayUtils.getLogicalSwitchFromElan(elanName));
 
                 // Add L2 Gateway device to 'ElanL2GwDevice' cache
@@ -228,18 +232,20 @@ public class L2GatewayConnectionUtils {
                 LogicalSwitches logicalSwitch = HwvtepUtils.getLogicalSwitch(broker, LogicalDatastoreType.OPERATIONAL,
                         hwvtepNodeId, elanName);
                 if (logicalSwitch == null) {
-                    HwvtepLogicalSwitchListener hwVTEPLogicalSwitchListener = new HwvtepLogicalSwitchListener(
-                            l2GatewayDevice, elanName, l2Device, defaultVlan, l2GwConnId);
+                    HwvtepLogicalSwitchListener hwVTEPLogicalSwitchListener =
+                            new HwvtepLogicalSwitchListener(broker, elanL2GatewayUtils,
+                                    entityOwnershipService, elanUtils, elanL2GatewayMulticastUtils, l2GatewayDevice, elanName, l2Device, defaultVlan, l2GwConnId);
                     hwVTEPLogicalSwitchListener.registerListener(LogicalDatastoreType.OPERATIONAL, broker);
                     createLogicalSwitch = true;
                 } else {
                     addL2DeviceToElanL2GwCache(elanName, l2GatewayDevice, l2GwConnId);
                     createLogicalSwitch = false;
                 }
-                AssociateHwvtepToElanJob associateHwvtepToElanJob = new AssociateHwvtepToElanJob(broker,
-                        l2GatewayDevice, elanInstance, l2Device, defaultVlan, createLogicalSwitch);
+                AssociateHwvtepToElanJob associateHwvtepToElanJob =
+                        new AssociateHwvtepToElanJob(broker, elanL2GatewayUtils, elanUtils,
+                                elanL2GatewayMulticastUtils, l2GatewayDevice, elanInstance, l2Device, defaultVlan, createLogicalSwitch);
 
-                ElanClusterUtils.runOnlyInLeaderNode( associateHwvtepToElanJob.getJobKey() ,
+                ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService, associateHwvtepToElanJob.getJobKey() ,
                         "create logical switch in hwvtep topo",
                         associateHwvtepToElanJob);
 
index c1c83bef97ade80c791e9b8816c7c5399a8d4a93..0efbf54711ec342a1fc391087fd5108c1e385006 100755 (executable)
@@ -8,23 +8,20 @@
 package org.opendaylight.netvirt.elan.statisitcs;
 
 import com.google.common.util.concurrent.Futures;
-
+import java.math.BigInteger;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Future;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.genius.mdsalutil.NwConstants;
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
-import org.opendaylight.netvirt.elan.utils.ElanConstants;
-import org.opendaylight.netvirt.elan.utils.ElanUtils;
-//import org.opendaylight.genius.ericsson.mdsalutil.statistics.StatValue;
-//import org.opendaylight.genius.ericsson.mdsalutil.statistics.StatisticsInfo;
-import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceServiceUtil;
 import org.opendaylight.genius.interfacemanager.globals.VlanInterfaceInfo;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.mdsalutil.MatchInfo;
+import org.opendaylight.genius.mdsalutil.NwConstants;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.genius.utils.ServiceIndex;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.genius._interface.service.rev150602._interface.service.info.ServiceInfo;
+import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius._interface.statistics.rev150824.ResultCode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.ServicesInfo;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
@@ -40,32 +37,20 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.math.BigInteger;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Future;
-
 public class ElanStatisticsImpl implements ElanStatisticsService {
-    private ElanServiceProvider elanServiceProvider;
     private static final Logger logger = LoggerFactory.getLogger(ElanStatisticsImpl.class);
-    private static volatile ElanStatisticsImpl elanStatisticsImpl;
 
+    private final DataBroker dataBroker;
+    private final IInterfaceManager interfaceManager;
+    private final IMdsalApiManager mdsalMgr;
+    private final ElanUtils elanUtils;
 
-    private ElanStatisticsImpl(ElanServiceProvider elanServiceProvider) {
-        super();
-        this.elanServiceProvider = elanServiceProvider;
-
-
-    }
-
-    public static ElanStatisticsImpl getElanStatisticsService(ElanServiceProvider elanServiceProvider) {
-        if (elanStatisticsImpl == null)
-            synchronized (ElanStatisticsImpl.class) {
-                if (elanStatisticsImpl == null) {
-                    elanStatisticsImpl = new ElanStatisticsImpl(elanServiceProvider);
-                }
-            }
-        return elanStatisticsImpl;
+    public ElanStatisticsImpl(DataBroker dataBroker, IInterfaceManager interfaceManager, IMdsalApiManager mdsalMgr,
+                              ElanUtils elanUtils) {
+        this.dataBroker = dataBroker;
+        this.interfaceManager = interfaceManager;
+        this.mdsalMgr = mdsalMgr;
+        this.elanUtils = elanUtils;
     }
 
     @Override
@@ -78,15 +63,15 @@ public class ElanStatisticsImpl implements ElanStatisticsService {
             rpcResultBuilder = RpcResultBuilder.failed();
             return getFutureWithAppErrorMessage(rpcResultBuilder, "Interface name is not provided");
         }
-        ElanInterface elanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
+        ElanInterface elanInterface = elanUtils.getElanInterfaceByElanInterfaceName(interfaceName);
         if (elanInterface == null) {
             rpcResultBuilder = RpcResultBuilder.failed();
             return getFutureWithAppErrorMessage(rpcResultBuilder, String.format("Interface %s is not a ELAN interface", interfaceName));
         }
         String elanInstanceName = elanInterface.getElanInstanceName();
-        ElanInstance elanInfo = ElanUtils.getElanInstanceByName(elanInstanceName);
+        ElanInstance elanInfo = elanUtils.getElanInstanceByName(elanInstanceName);
         long elanTag = elanInfo.getElanTag();
-        InterfaceInfo interfaceInfo = elanServiceProvider.getInterfaceManager().getInterfaceInfo(interfaceName);
+        InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
         ServicesInfo serviceInfo = ElanUtils.getServiceInfo(elanInstanceName, elanTag, interfaceName);
         //FIXME [ELANBE] Get this API Later
         short tableId = 0;
@@ -115,7 +100,7 @@ public class ElanStatisticsImpl implements ElanStatisticsService {
         if (tableId == NwConstants.VLAN_INTERFACE_INGRESS_TABLE) {
             VlanInterfaceInfo vlanInterfaceInfo = (VlanInterfaceInfo)interfaceInfo;
             matches = InterfaceServiceUtil.getMatchInfoForVlanLPort(dpId, interfaceInfo.getPortNo(),
-                InterfaceServiceUtil.getVlanId(interfaceName, elanServiceProvider.getBroker()), vlanInterfaceInfo.isVlanTransparent());
+                InterfaceServiceUtil.getVlanId(interfaceName, dataBroker), vlanInterfaceInfo.isVlanTransparent());
         } else {
             matches = InterfaceServiceUtil.getLPortDispatcherMatches(ServiceIndex.getIndex(NwConstants.ELAN_SERVICE_NAME, NwConstants.ELAN_SERVICE_INDEX), 
                        interfaceInfo.getInterfaceTag());
index 19161a99ae5df5468087fe694cc66beb3d08aded..d683458e5b96e24d0b2576a9f06e11ec46c1245d 100644 (file)
@@ -22,18 +22,18 @@ import org.slf4j.LoggerFactory;
 public class ElanStatusMonitor implements ElanStatusMonitorMBean{
 
     private String serviceStatus;
-    private static ElanStatusMonitor elanStatusMonitor = new ElanStatusMonitor();
     private static final String JMX_ELAN_OBJ_NAME = "com.ericsson.sdncp.services.status:type=SvcElanService";
     private static final Logger log = LoggerFactory.getLogger(ElanStatusMonitor.class);
 
-    private ElanStatusMonitor () {
+    public void init() {
+        registerMbean();
     }
 
     public void registerMbean() {
         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
         try {
             ObjectName objName = new ObjectName(JMX_ELAN_OBJ_NAME);
-            mbs.registerMBean(elanStatusMonitor, objName);
+            mbs.registerMBean(this, objName);
             log.info("MXBean registration SUCCESSFUL!!! {}", JMX_ELAN_OBJ_NAME);
         } catch (InstanceAlreadyExistsException iaeEx) {
             log.error("MXBean registration FAILED with InstanceAlreadyExistsException", iaeEx);
@@ -46,10 +46,6 @@ public class ElanStatusMonitor implements ElanStatusMonitorMBean{
         }
     }
 
-    public static ElanStatusMonitor getInstance() {
-        return elanStatusMonitor;
-    }
-
     @Override
     public String acquireServiceStatus() {
         return serviceStatus;
index 1c1d70f719a03fb5ff0705460af20a244c1eb31e..1fb5aa52b8eb3111d6336a594ef35c8860be97db 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.netvirt.elan.utils;
 import java.util.Collection;
 
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInstances;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
@@ -24,12 +24,17 @@ import org.slf4j.LoggerFactory;
 
 public class CacheElanInstanceListener implements ClusteredDataTreeChangeListener<ElanInstance> {
 
-    private  ElanServiceProvider elanServiceProvider;
-    private ListenerRegistration<CacheElanInstanceListener> registration;
     private static final Logger logger = LoggerFactory.getLogger(CacheElanInstanceListener.class);
 
-    public CacheElanInstanceListener(ElanServiceProvider elanServiceProvider) {
-        this.elanServiceProvider = elanServiceProvider;
+    private final DataBroker broker;
+
+    private ListenerRegistration<CacheElanInstanceListener> registration;
+
+    public CacheElanInstanceListener(DataBroker dataBroker) {
+        this.broker = dataBroker;
+    }
+
+    public void init() {
         registerListener();
     }
 
@@ -38,11 +43,12 @@ public class CacheElanInstanceListener implements ClusteredDataTreeChangeListene
                 new DataTreeIdentifier<ElanInstance>(LogicalDatastoreType.CONFIGURATION, getWildcardPath());
         try {
             logger.trace("Registering on path: {}", treeId);
-            registration = elanServiceProvider.getBroker().registerDataTreeChangeListener(treeId, CacheElanInstanceListener.this);
+            registration = broker.registerDataTreeChangeListener(treeId, CacheElanInstanceListener.this);
         } catch (final Exception e) {
             logger.warn("CacheInterfaceConfigListener registration failed", e);
         }
     }
+
     protected InstanceIdentifier<ElanInstance> getWildcardPath() {
         return InstanceIdentifier.create(ElanInstances.class).child(ElanInstance.class);
     }
index 7afa2693ed6423f7bde15f8cf83a35ce78bd206d..c2c53b2678f4c1b77432f1973c71874810e2486b 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.netvirt.elan.utils;
 import java.util.Collection;
 
 import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInterfaces;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterface;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
@@ -24,12 +24,15 @@ import org.slf4j.LoggerFactory;
 
 public class CacheElanInterfaceListener implements ClusteredDataTreeChangeListener<ElanInterface> {
 
-    private  ElanServiceProvider elanServiceProvider;
     private ListenerRegistration<CacheElanInterfaceListener> registration;
     private static final Logger logger = LoggerFactory.getLogger(CacheElanInterfaceListener.class);
+    private final DataBroker broker;
 
-    public CacheElanInterfaceListener(ElanServiceProvider elanServiceProvider) {
-        this.elanServiceProvider = elanServiceProvider;
+    public CacheElanInterfaceListener(DataBroker dataBroker) {
+        this.broker = dataBroker;
+    }
+
+    public void init() {
         registerListener();
     }
 
@@ -38,7 +41,7 @@ public class CacheElanInterfaceListener implements ClusteredDataTreeChangeListen
                 new DataTreeIdentifier<ElanInterface>(LogicalDatastoreType.CONFIGURATION, getWildcardPath());
         try {
             logger.trace("Registering on path: {}", treeId);
-            registration = elanServiceProvider.getBroker().registerDataTreeChangeListener(treeId, CacheElanInterfaceListener.this);
+            registration = broker.registerDataTreeChangeListener(treeId, CacheElanInterfaceListener.this);
         } catch (final Exception e) {
             logger.warn("CacheInterfaceConfigListener registration failed", e);
         }
index 477f338616a6193521656de7ddb03ec2a66a7826..ecdf17322f22d84efd865a867d644b615ff4bf2b 100644 (file)
@@ -15,7 +15,6 @@ import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
 import org.opendaylight.genius.utils.SystemPropertyReader;
 import org.opendaylight.genius.utils.clustering.ClusteringUtils;
 import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundConstants;
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -25,18 +24,14 @@ import java.util.concurrent.Callable;
 public class ElanClusterUtils {
     private static final Logger logger = LoggerFactory.getLogger(ElanClusterUtils.class);
 
-    private  static ElanServiceProvider elanServiceProvider = null;
-    public static void setElanServiceProvider(ElanServiceProvider elanServiceProvider) {
-        ElanClusterUtils.elanServiceProvider = elanServiceProvider;
+    public static void runOnlyInLeaderNode(EntityOwnershipService entityOwnershipService, Runnable job) {
+        runOnlyInLeaderNode(entityOwnershipService, job, "");
     }
 
-    public static void runOnlyInLeaderNode(Runnable job) {
-        runOnlyInLeaderNode(job, "");
-    }
-
-    public static void runOnlyInLeaderNode(final Runnable job, final String jobDescription) {
+    public static void runOnlyInLeaderNode(EntityOwnershipService entityOwnershipService, final Runnable job,
+                                           final String jobDescription) {
         ListenableFuture<Boolean> checkEntityOwnerFuture = ClusteringUtils.checkNodeEntityOwner(
-            elanServiceProvider.getEntityOwnershipService(), HwvtepSouthboundConstants.ELAN_ENTITY_TYPE,
+            entityOwnershipService, HwvtepSouthboundConstants.ELAN_ENTITY_TYPE,
             HwvtepSouthboundConstants.ELAN_ENTITY_NAME);
         Futures.addCallback(checkEntityOwnerFuture, new FutureCallback<Boolean>() {
             @Override
@@ -54,21 +49,23 @@ public class ElanClusterUtils {
         });
     }
 
-    public static void runOnlyInLeaderNode(String jobKey, Callable<List<ListenableFuture<Void>>> dataStoreJob) {
-        runOnlyInLeaderNode(jobKey, "", dataStoreJob);
+    public static void runOnlyInLeaderNode(EntityOwnershipService entityOwnershipService, String jobKey,
+                                           Callable<List<ListenableFuture<Void>>> dataStoreJob) {
+        runOnlyInLeaderNode(entityOwnershipService, jobKey, "", dataStoreJob);
     }
 
-    public static void runOnlyInLeaderNode(final String jobKey, final String jobDescription,
+    public static void runOnlyInLeaderNode(EntityOwnershipService entityOwnershipService, final String jobKey,
+                                           final String jobDescription,
                                            final Callable<List<ListenableFuture<Void>>> dataStoreJob) {
         ListenableFuture<Boolean> checkEntityOwnerFuture = ClusteringUtils.checkNodeEntityOwner(
-            elanServiceProvider.getEntityOwnershipService(), HwvtepSouthboundConstants.ELAN_ENTITY_TYPE,
+            entityOwnershipService, HwvtepSouthboundConstants.ELAN_ENTITY_TYPE,
             HwvtepSouthboundConstants.ELAN_ENTITY_NAME);
         Futures.addCallback(checkEntityOwnerFuture, new FutureCallback<Boolean>() {
             @Override
             public void onSuccess(Boolean isOwner) {
                 if (isOwner) {
                     logger.trace("scheduling job {} ", jobDescription);
-                    elanServiceProvider.getDataStoreJobCoordinator().enqueueJob(jobKey, dataStoreJob,
+                    DataStoreJobCoordinator.getInstance().enqueueJob(jobKey, dataStoreJob,
                         SystemPropertyReader.getDataStoreJobCoordinatorMaxRetries());
                 } else {
                     logger.trace("job is not run as i m not cluster owner desc :{} ", jobDescription);
index 8e22369a0e925f6a7da48322eb2f697733dcda43..8fb6784de5e5fbe308282e107f70a474b9c17193 100644 (file)
@@ -11,22 +11,14 @@ package org.opendaylight.netvirt.elan.utils;
 
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
-import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
-import org.opendaylight.genius.mdsalutil.AbstractDataChangeListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInterfaces;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntryKey;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,31 +29,15 @@ import com.google.common.base.Optional;
 public class ElanForwardingEntriesHandler {
 
     private static final Logger logger = LoggerFactory.getLogger(ElanForwardingEntriesHandler.class);
-    private  ElanServiceProvider elanServiceProvider = null;
-    private static volatile ElanForwardingEntriesHandler elanForwardingEntriesHandler = null;
 
-    public  ElanServiceProvider getElanServiceProvider() {
-        return elanServiceProvider;
-    }
-    public void setElanServiceProvider(ElanServiceProvider elanServiceProvider) {
-        this.elanServiceProvider = elanServiceProvider;
-    }
+    private final DataBroker broker;
+    private final ElanUtils elanUtils;
 
-    public ElanForwardingEntriesHandler(ElanServiceProvider elanServiceProvider){
-        super();
-        this.elanServiceProvider = elanServiceProvider;
-    }
-    public static  ElanForwardingEntriesHandler getElanForwardingEntriesHandler(
-        ElanServiceProvider elanServiceProvider) {
-        if (elanForwardingEntriesHandler == null) {
-            synchronized (ElanForwardingEntriesHandler.class) {
-                if (elanForwardingEntriesHandler == null) {
-                    elanForwardingEntriesHandler = new ElanForwardingEntriesHandler(elanServiceProvider);
-                }
-            }
-        }
-        return elanForwardingEntriesHandler;
+    public ElanForwardingEntriesHandler(DataBroker dataBroker, ElanUtils elanUtils){
+        this.broker = dataBroker;
+        this.elanUtils = elanUtils;
     }
+
     public void updateElanInterfaceForwardingTablesList(String elanInstanceName, String interfaceName, String existingInterfaceName, MacEntry mac, WriteTransaction tx) {
         if (existingInterfaceName.equals(interfaceName)) {
             logger.error(String.format("Static MAC address %s has already been added for the same ElanInstance %s on the same Logical Interface Port %s."
@@ -86,7 +62,7 @@ public class ElanForwardingEntriesHandler {
 
     public void deleteElanInterfaceForwardingTablesList(String interfaceName, MacEntry mac, WriteTransaction tx) {
         InstanceIdentifier<MacEntry> existingMacEntryId = ElanUtils.getInterfaceMacEntriesIdentifierOperationalDataPath(interfaceName, mac.getMacAddress());
-        MacEntry existingInterfaceMacEntry = ElanUtils.getInterfaceMacEntriesOperationalDataPathFromId(existingMacEntryId);
+        MacEntry existingInterfaceMacEntry = elanUtils.getInterfaceMacEntriesOperationalDataPathFromId(existingMacEntryId);
         if (existingInterfaceMacEntry != null) {
             tx.delete(LogicalDatastoreType.OPERATIONAL, existingMacEntryId);
         }
@@ -94,7 +70,7 @@ public class ElanForwardingEntriesHandler {
 
     public void createElanInterfaceForwardingTablesList(String interfaceName, MacEntry mac, WriteTransaction tx) {
         InstanceIdentifier<MacEntry> existingMacEntryId = ElanUtils.getInterfaceMacEntriesIdentifierOperationalDataPath(interfaceName, mac.getMacAddress());
-        MacEntry existingInterfaceMacEntry = ElanUtils.getInterfaceMacEntriesOperationalDataPathFromId(existingMacEntryId);
+        MacEntry existingInterfaceMacEntry = elanUtils.getInterfaceMacEntriesOperationalDataPathFromId(existingMacEntryId);
         if (existingInterfaceMacEntry == null) {
             MacEntry macEntry = new MacEntryBuilder().setMacAddress(mac.getMacAddress()).setInterface(interfaceName).setIsStaticAddress(true).setKey(new MacEntryKey(mac.getMacAddress())).build();
             tx.put(LogicalDatastoreType.OPERATIONAL, existingMacEntryId, macEntry);
@@ -104,7 +80,7 @@ public class ElanForwardingEntriesHandler {
 
     public void updateElanForwardingTablesList(String elanName, String interfaceName, MacEntry mac, WriteTransaction tx) {
         InstanceIdentifier<MacEntry> macEntryId =  ElanUtils.getMacEntryOperationalDataPath(elanName, mac.getMacAddress());
-        MacEntry existingMacEntry = ElanUtils.getMacEntryFromElanMacId(macEntryId);
+        MacEntry existingMacEntry = elanUtils.getMacEntryFromElanMacId(macEntryId);
         if (existingMacEntry != null) {
             // Fix for TR HU71400.
             // ElanUtils.delete(broker, LogicalDatastoreType.OPERATIONAL, macEntryId);
@@ -115,7 +91,7 @@ public class ElanForwardingEntriesHandler {
 
     private void createElanForwardingTablesList(String elanName, MacEntry macEntry, WriteTransaction tx) {
         InstanceIdentifier<MacEntry> macEntryId = ElanUtils.getMacEntryOperationalDataPath(elanName, macEntry.getMacAddress());
-        Optional<MacEntry> existingMacEntry = ElanUtils.read(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL, macEntryId);
+        Optional<MacEntry> existingMacEntry = elanUtils.read(broker, LogicalDatastoreType.OPERATIONAL, macEntryId);
         if (!existingMacEntry.isPresent()) {
             tx.put(LogicalDatastoreType.OPERATIONAL, macEntryId, macEntry);
         }
@@ -125,8 +101,8 @@ public class ElanForwardingEntriesHandler {
         InstanceIdentifier<MacEntry> macEntryId = ElanUtils.getMacEntryOperationalDataPath(elanInfo.getElanInstanceName(), macEntry.getMacAddress());
         tx.delete(LogicalDatastoreType.OPERATIONAL, macEntryId);
         deleteElanInterfaceForwardingTablesList(interfaceInfo.getInterfaceName(), macEntry, tx);
-        WriteTransaction deleteFlowtx = elanServiceProvider.getBroker().newWriteOnlyTransaction();
-        ElanUtils.deleteMacFlows(elanInfo, interfaceInfo, macEntry, deleteFlowtx);
+        WriteTransaction deleteFlowtx = broker.newWriteOnlyTransaction();
+        elanUtils.deleteMacFlows(elanInfo, interfaceInfo, macEntry, deleteFlowtx);
         deleteFlowtx.submit();
     }
 
index 72f2baf042aba18054c672ee51f77c9e4ae404ad..52c0f848668613e038d7b528ad884362b7d7130a 100644 (file)
@@ -44,7 +44,6 @@ import org.opendaylight.genius.mdsalutil.NwConstants;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.genius.utils.ServiceIndex;
 import org.opendaylight.netvirt.elan.internal.ElanInstanceManager;
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
@@ -73,6 +72,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpc
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.GetEgressActionsForInterfaceInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.GetEgressActionsForInterfaceInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.GetEgressActionsForInterfaceOutput;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.ServiceBindings;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.ServiceModeIngress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.ServiceTypeFlowBased;
@@ -95,6 +96,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.G
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.GetTunnelInterfaceNameOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveTerminatingServiceActionsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveTerminatingServiceActionsInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
@@ -149,18 +151,16 @@ import org.slf4j.LoggerFactory;
 
 public class ElanUtils {
 
-    private static ElanServiceProvider elanServiceProvider;
     private static final Logger LOG = LoggerFactory.getLogger(ElanUtils.class);
+
     private static Map<String, ElanInstance> elanInstanceLocalCache = new ConcurrentHashMap<>();
     private static Map<String, ElanInterface> elanInterfaceLocalCache = new ConcurrentHashMap<>();
 
-    public static void setElanServiceProvider(ElanServiceProvider serviceProvider) {
-        elanServiceProvider = serviceProvider;
-    }
-
-    public static ElanServiceProvider getElanServiceProvider() {
-        return elanServiceProvider;
-    }
+    private final DataBroker broker;
+    private final IMdsalApiManager mdsalManager;
+    private final ElanInstanceManager elanInstanceManager;
+    private final OdlInterfaceRpcService interfaceManagerRpcService;
+    private final ItmRpcService itmRpcService;
 
     public static final FutureCallback<Void> DEFAULT_CALLBACK = new FutureCallback<Void>() {
         @Override
@@ -173,7 +173,16 @@ public class ElanUtils {
             LOG.error("Error in Datastore operation", error);
         }
     };
-    
+
+    public ElanUtils(DataBroker dataBroker, IMdsalApiManager mdsalManager, ElanInstanceManager elanInstanceManager,
+                     OdlInterfaceRpcService interfaceManagerRpcService, ItmRpcService itmRpcService) {
+        this.broker = dataBroker;
+        this.mdsalManager = mdsalManager;
+        this.elanInstanceManager = elanInstanceManager;
+        this.interfaceManagerRpcService = interfaceManagerRpcService;
+        this.itmRpcService = itmRpcService;
+    }
+
 
     public static void addElanInstanceIntoCache(String elanInstanceName, ElanInstance elanInstance) {
         elanInstanceLocalCache.put(elanInstanceName, elanInstance);
@@ -232,10 +241,10 @@ public class ElanUtils {
         Future<RpcResult<Void>> result = idManager.releaseId(releaseIdInput);
     }
 
-    public static <T extends DataObject> Optional<T> read(DataBroker broker, LogicalDatastoreType datastoreType,
+    public <T extends DataObject> Optional<T> read(DataBroker broker, LogicalDatastoreType datastoreType,
             InstanceIdentifier<T> path) {
         ReadOnlyTransaction tx = (broker != null) ? broker.newReadOnlyTransaction()
-                : elanServiceProvider.getBroker().newReadOnlyTransaction();
+                : this.broker.newReadOnlyTransaction();
         Optional<T> result = Optional.absent();
         try {
             CheckedFuture<Optional<T>, ReadFailedException> checkedFuture = tx.read(datastoreType, path);
@@ -259,13 +268,13 @@ public class ElanUtils {
     }
 
     // elan-instances config container
-    public static ElanInstance getElanInstanceByName(String elanInstanceName) {
+    public ElanInstance getElanInstanceByName(String elanInstanceName) {
         ElanInstance elanObj = getElanInstanceFromCache(elanInstanceName);
          if (elanObj != null) {
              return elanObj;
          }
         InstanceIdentifier<ElanInstance> elanIdentifierId = getElanInstanceConfigurationDataPath(elanInstanceName);
-        Optional<ElanInstance> elanInstance = read(elanServiceProvider.getBroker(), LogicalDatastoreType.CONFIGURATION,
+        Optional<ElanInstance> elanInstance = read(broker, LogicalDatastoreType.CONFIGURATION,
                 elanIdentifierId);
         if (elanInstance.isPresent()) {
             return elanInstance.get();
@@ -279,13 +288,13 @@ public class ElanUtils {
     }
 
     // elan-interfaces Config Container
-    public static ElanInterface getElanInterfaceByElanInterfaceName(String elanInterfaceName) {
+    public ElanInterface getElanInterfaceByElanInterfaceName(String elanInterfaceName) {
          ElanInterface elanInterfaceObj = getElanInterfaceFromCache(elanInterfaceName);
           if (elanInterfaceObj != null) {
               return elanInterfaceObj;
           }
         InstanceIdentifier<ElanInterface> elanInterfaceId = getElanInterfaceConfigurationDataPathId(elanInterfaceName);
-        Optional<ElanInterface> existingElanInterface = read(elanServiceProvider.getBroker(),
+        Optional<ElanInterface> existingElanInterface = read(broker,
                 LogicalDatastoreType.CONFIGURATION, elanInterfaceId);
         if (existingElanInterface.isPresent()) {
             return existingElanInterface.get();
@@ -293,8 +302,8 @@ public class ElanUtils {
         return null;
     }
 
-    public static EtreeInterface getEtreeInterfaceByElanInterfaceName(String elanInterfaceName) {
-        ElanInterface elanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(elanInterfaceName);
+    public EtreeInterface getEtreeInterfaceByElanInterfaceName(String elanInterfaceName) {
+        ElanInterface elanInterface = getElanInterfaceByElanInterfaceName(elanInterfaceName);
         return elanInterface.getAugmentation(EtreeInterface.class);
     }
 
@@ -304,9 +313,9 @@ public class ElanUtils {
     }
 
     // elan-state Operational container
-    public static Elan getElanByName(String elanInstanceName) {
+    public Elan getElanByName(String elanInstanceName) {
         InstanceIdentifier<Elan> elanIdentifier = getElanInstanceOperationalDataPath(elanInstanceName);
-        Optional<Elan> elanInstance = read(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL,
+        Optional<Elan> elanInstance = read(broker, LogicalDatastoreType.OPERATIONAL,
                 elanIdentifier);
         if (elanInstance.isPresent()) {
             return elanInstance.get();
@@ -319,10 +328,10 @@ public class ElanUtils {
     }
 
     // grouping of forwarding-entries
-    public static MacEntry getInterfaceMacEntriesOperationalDataPath(String interfaceName, PhysAddress physAddress) {
+    public MacEntry getInterfaceMacEntriesOperationalDataPath(String interfaceName, PhysAddress physAddress) {
         InstanceIdentifier<MacEntry> existingMacEntryId = getInterfaceMacEntriesIdentifierOperationalDataPath(
                 interfaceName, physAddress);
-        Optional<MacEntry> existingInterfaceMacEntry = read(elanServiceProvider.getBroker(),
+        Optional<MacEntry> existingInterfaceMacEntry = read(broker,
                 LogicalDatastoreType.OPERATIONAL, existingMacEntryId);
         if (existingInterfaceMacEntry.isPresent()) {
             return existingInterfaceMacEntry.get();
@@ -330,8 +339,8 @@ public class ElanUtils {
         return null;
     }
 
-    public static MacEntry getInterfaceMacEntriesOperationalDataPathFromId(InstanceIdentifier identifier) {
-        Optional<MacEntry> existingInterfaceMacEntry = read(elanServiceProvider.getBroker(),
+    public MacEntry getInterfaceMacEntriesOperationalDataPathFromId(InstanceIdentifier identifier) {
+        Optional<MacEntry> existingInterfaceMacEntry = read(broker,
                 LogicalDatastoreType.OPERATIONAL, identifier);
         if (existingInterfaceMacEntry.isPresent()) {
             return existingInterfaceMacEntry.get();
@@ -348,9 +357,9 @@ public class ElanUtils {
     }
 
     // elan-forwarding-tables Operational container
-    public static MacEntry getMacTableByElanName(String elanName, PhysAddress physAddress) {
+    public MacEntry getMacTableByElanName(String elanName, PhysAddress physAddress) {
         InstanceIdentifier<MacEntry> macId = getMacEntryOperationalDataPath(elanName, physAddress);
-        Optional<MacEntry> existingElanMacEntry = read(elanServiceProvider.getBroker(),
+        Optional<MacEntry> existingElanMacEntry = read(broker,
                 LogicalDatastoreType.OPERATIONAL, macId);
         if (existingElanMacEntry.isPresent()) {
             return existingElanMacEntry.get();
@@ -358,8 +367,8 @@ public class ElanUtils {
         return null;
     }
 
-    public static MacEntry getMacEntryFromElanMacId(InstanceIdentifier identifier) {
-        Optional<MacEntry> existingInterfaceMacEntry = read(elanServiceProvider.getBroker(),
+    public MacEntry getMacEntryFromElanMacId(InstanceIdentifier identifier) {
+        Optional<MacEntry> existingInterfaceMacEntry = read(broker,
                 LogicalDatastoreType.OPERATIONAL, identifier);
         if (existingInterfaceMacEntry.isPresent()) {
             return existingInterfaceMacEntry.get();
@@ -379,10 +388,10 @@ public class ElanUtils {
     }
 
     // elan-interface-forwarding-entries Operational container
-    public static ElanInterfaceMac getElanInterfaceMacByInterfaceName(String interfaceName) {
+    public ElanInterfaceMac getElanInterfaceMacByInterfaceName(String interfaceName) {
         InstanceIdentifier<ElanInterfaceMac> elanInterfaceId = getElanInterfaceMacEntriesOperationalDataPath(
                 interfaceName);
-        Optional<ElanInterfaceMac> existingElanInterface = read(elanServiceProvider.getBroker(),
+        Optional<ElanInterfaceMac> existingElanInterface = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanInterfaceId);
         if (existingElanInterface.isPresent()) {
             return existingElanInterface.get();
@@ -397,9 +406,9 @@ public class ElanUtils {
      *            the interface name
      * @return the elan interface mac addresses
      */
-    public static List<PhysAddress> getElanInterfaceMacAddresses(String interfaceName) {
+    public List<PhysAddress> getElanInterfaceMacAddresses(String interfaceName) {
         List<PhysAddress> macAddresses = new ArrayList<PhysAddress>();
-        ElanInterfaceMac elanInterfaceMac = ElanUtils.getElanInterfaceMacByInterfaceName(interfaceName);
+        ElanInterfaceMac elanInterfaceMac = getElanInterfaceMacByInterfaceName(interfaceName);
         if (elanInterfaceMac != null && elanInterfaceMac.getMacEntry() != null) {
             List<MacEntry> macEntries = elanInterfaceMac.getMacEntry();
             for (MacEntry macEntry : macEntries) {
@@ -425,10 +434,10 @@ public class ElanUtils {
      *            Id of the DPN where the interfaces are located
      * @return the elan interface Info
      */
-    public static DpnInterfaces getElanInterfaceInfoByElanDpn(String elanInstanceName, BigInteger dpId) {
+    public DpnInterfaces getElanInterfaceInfoByElanDpn(String elanInstanceName, BigInteger dpId) {
         InstanceIdentifier<DpnInterfaces> elanDpnInterfacesId = getElanDpnInterfaceOperationalDataPath(elanInstanceName,
                 dpId);
-        Optional<DpnInterfaces> elanDpnInterfaces = read(elanServiceProvider.getBroker(),
+        Optional<DpnInterfaces> elanDpnInterfaces = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanDpnInterfacesId);
         if (elanDpnInterfaces.isPresent()) {
             return elanDpnInterfaces.get();
@@ -455,9 +464,9 @@ public class ElanUtils {
     }
 
     // elan-tag-name-map Operational Container
-    public static ElanTagName getElanInfoByElanTag(long elanTag) {
+    public ElanTagName getElanInfoByElanTag(long elanTag) {
         InstanceIdentifier<ElanTagName> elanId = getElanInfoEntriesOperationalDataPath(elanTag);
-        Optional<ElanTagName> existingElanInfo = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanTagName> existingElanInfo = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanId);
         if (existingElanInfo.isPresent()) {
             return existingElanInfo.get();
@@ -465,9 +474,9 @@ public class ElanUtils {
         return null;
     }
 
-    public static EtreeLeafTagName getEtreeLeafTagByElanTag(long elanTag) {
+    public EtreeLeafTagName getEtreeLeafTagByElanTag(long elanTag) {
         InstanceIdentifier<ElanTagName> elanId = getElanInfoEntriesOperationalDataPath(elanTag);
-        Optional<ElanTagName> existingElanInfo = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanTagName> existingElanInfo = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanId);
         if (existingElanInfo.isPresent()) {
             ElanTagName elanTagName = existingElanInfo.get();
@@ -483,9 +492,9 @@ public class ElanUtils {
     }
 
     // interface-index-tag operational container
-    public static Optional<IfIndexInterface> getInterfaceInfoByInterfaceTag(long interfaceTag) {
+    public Optional<IfIndexInterface> getInterfaceInfoByInterfaceTag(long interfaceTag) {
         InstanceIdentifier<IfIndexInterface> interfaceId = getInterfaceInfoEntriesOperationalDataPath(interfaceTag);
-        return ElanUtils.read(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL, interfaceId);
+        return read(broker, LogicalDatastoreType.OPERATIONAL, interfaceId);
     }
 
     public static InstanceIdentifier<IfIndexInterface> getInterfaceInfoEntriesOperationalDataPath(long interfaceTag) {
@@ -498,9 +507,9 @@ public class ElanUtils {
                 .child(ElanDpnInterfacesList.class, new ElanDpnInterfacesListKey(elanInstanceName)).build();
     }
 
-    public static ElanDpnInterfacesList getElanDpnInterfacesList(String elanName) {
+    public ElanDpnInterfacesList getElanDpnInterfacesList(String elanName) {
         InstanceIdentifier<ElanDpnInterfacesList> elanDpnInterfaceId = getElanDpnOperationDataPath(elanName);
-        Optional<ElanDpnInterfacesList> existingElanDpnInterfaces = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanDpnInterfacesList> existingElanDpnInterfaces = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
         if (existingElanDpnInterfaces.isPresent()) {
             return existingElanDpnInterfaces.get();
@@ -517,10 +526,10 @@ public class ElanUtils {
      *            the elan instance name
      * @return list of dpIds
      */
-    public static List<BigInteger> getParticipatingDPNsInElanInstance(String elanInstanceName) {
+    public List<BigInteger> getParticipatingDPNsInElanInstance(String elanInstanceName) {
         List<BigInteger> dpIds = new ArrayList<BigInteger>();
         InstanceIdentifier<ElanDpnInterfacesList> elanDpnInterfaceId = getElanDpnOperationDataPath(elanInstanceName);
-        Optional<ElanDpnInterfacesList> existingElanDpnInterfaces = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanDpnInterfacesList> existingElanDpnInterfaces = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
         if (!existingElanDpnInterfaces.isPresent()) {
             return dpIds;
@@ -543,10 +552,10 @@ public class ElanUtils {
      *            the elan instance name
      * @return true if dpId is already present, otherwise return false
      */
-    public static boolean isDpnAlreadyPresentInElanInstance(BigInteger dpId, String elanInstanceName) {
+    public boolean isDpnAlreadyPresentInElanInstance(BigInteger dpId, String elanInstanceName) {
         boolean isDpIdPresent = false;
         InstanceIdentifier<ElanDpnInterfacesList> elanDpnInterfaceId = getElanDpnOperationDataPath(elanInstanceName);
-        Optional<ElanDpnInterfacesList> existingElanDpnInterfaces = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanDpnInterfacesList> existingElanDpnInterfaces = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
         if (!existingElanDpnInterfaces.isPresent()) {
             return isDpIdPresent;
@@ -561,10 +570,10 @@ public class ElanUtils {
         return isDpIdPresent;
     }
 
-    public static ElanDpnInterfaces getElanDpnInterfacesList() {
+    public ElanDpnInterfaces getElanDpnInterfacesList() {
         InstanceIdentifier<ElanDpnInterfaces> elanDpnInterfaceId = InstanceIdentifier.builder(ElanDpnInterfaces.class)
                 .build();
-        Optional<ElanDpnInterfaces> existingElanDpnInterfaces = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanDpnInterfaces> existingElanDpnInterfaces = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
         if (existingElanDpnInterfaces.isPresent()) {
             return existingElanDpnInterfaces.get();
@@ -572,10 +581,10 @@ public class ElanUtils {
         return null;
     }
 
-    public static ElanForwardingTables getElanForwardingList() {
+    public ElanForwardingTables getElanForwardingList() {
         InstanceIdentifier<ElanForwardingTables> elanForwardingTableId = InstanceIdentifier
                 .builder(ElanForwardingTables.class).build();
-        Optional<ElanForwardingTables> existingElanForwardingList = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<ElanForwardingTables> existingElanForwardingList = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanForwardingTableId);
         if (existingElanForwardingList.isPresent()) {
             return existingElanForwardingList.get();
@@ -590,9 +599,9 @@ public class ElanUtils {
      *            the elan name
      * @return the elan mac table
      */
-    public static MacTable getElanMacTable(String elanName) {
+    public MacTable getElanMacTable(String elanName) {
         InstanceIdentifier<MacTable> elanMacTableId = getElanMacTableOperationalDataPath(elanName);
-        Optional<MacTable> existingElanMacTable = ElanUtils.read(elanServiceProvider.getBroker(),
+        Optional<MacTable> existingElanMacTable = read(broker,
                 LogicalDatastoreType.OPERATIONAL, elanMacTableId);
         if (existingElanMacTable.isPresent()) {
             return existingElanMacTable.get();
@@ -648,18 +657,18 @@ public class ElanUtils {
      * @param writeFlowGroupTx
      *            the flow group tx
      */
-    public static void setupMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout,
+    public void setupMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout,
             String macAddress, WriteTransaction writeFlowGroupTx) {
         synchronized (macAddress) {
             LOG.info("Acquired lock for mac : " + macAddress + ". Proceeding with install operation.");
-            setupKnownSmacFlow(elanInfo, interfaceInfo, macTimeout, macAddress, elanServiceProvider.getMdsalManager(),
+            setupKnownSmacFlow(elanInfo, interfaceInfo, macTimeout, macAddress, mdsalManager,
                     writeFlowGroupTx);
-            setupOrigDmacFlows(elanInfo, interfaceInfo, macAddress, elanServiceProvider.getMdsalManager(),
-                    elanServiceProvider.getBroker(), writeFlowGroupTx);
+            setupOrigDmacFlows(elanInfo, interfaceInfo, macAddress, mdsalManager,
+                    broker, writeFlowGroupTx);
         }
     }
 
-    public static void setupDMacFlowonRemoteDpn(ElanInstance elanInfo, InterfaceInfo interfaceInfo, BigInteger dstDpId,
+    public void setupDMacFlowonRemoteDpn(ElanInstance elanInfo, InterfaceInfo interfaceInfo, BigInteger dstDpId,
             String macAddress, WriteTransaction writeFlowTx) {
         synchronized (macAddress) {
             LOG.info("Acquired lock for mac : " + macAddress + "Proceeding with install operation.");
@@ -677,7 +686,7 @@ public class ElanUtils {
      * @param macAddress
      * @param mdsalApiManager
      */
-    private static void setupKnownSmacFlow(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout,
+    private void setupKnownSmacFlow(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout,
             String macAddress, IMdsalApiManager mdsalApiManager, WriteTransaction writeFlowGroupTx) {
         FlowEntity flowEntity = buildKnownSmacFlow(elanInfo, interfaceInfo, macTimeout, macAddress);
         mdsalApiManager.addFlowToTx(flowEntity, writeFlowGroupTx);
@@ -687,7 +696,7 @@ public class ElanUtils {
         }
     }
 
-    public static FlowEntity buildKnownSmacFlow(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout,
+    public FlowEntity buildKnownSmacFlow(ElanInstance elanInfo, InterfaceInfo interfaceInfo, long macTimeout,
             String macAddress) {
         BigInteger dpId = interfaceInfo.getDpId();
         int lportTag = interfaceInfo.getInterfaceTag();
@@ -695,7 +704,7 @@ public class ElanUtils {
         // Matching metadata and eth_src fields
         List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
         mkMatches.add(new MatchInfo(MatchFieldType.metadata, new BigInteger[] {
-                ElanUtils.getElanMetadataLabel(elanInfo.getElanTag(), lportTag), ElanUtils.getElanMetadataMask() }));
+                getElanMetadataLabel(elanInfo.getElanTag(), lportTag), getElanMetadataMask() }));
         mkMatches.add(new MatchInfo(MatchFieldType.eth_src, new String[] { macAddress }));
         List<InstructionInfo> mkInstructions = new ArrayList<InstructionInfo>();
         mkInstructions.add(new InstructionInfo(InstructionType.goto_table, new long[] { NwConstants.ELAN_DMAC_TABLE }));
@@ -713,9 +722,8 @@ public class ElanUtils {
         return flowEntity;
     }
 
-    private static Long getElanTag(ElanInstance elanInfo, InterfaceInfo interfaceInfo) {
-        EtreeInterface etreeInterface = ElanUtils
-                .getEtreeInterfaceByElanInterfaceName(interfaceInfo.getInterfaceName());
+    private Long getElanTag(ElanInstance elanInfo, InterfaceInfo interfaceInfo) {
+        EtreeInterface etreeInterface = getEtreeInterfaceByElanInterfaceName(interfaceInfo.getInterfaceName());
         if (etreeInterface == null || etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) {
             return elanInfo.getElanTag();
         } else { // Leaf
@@ -742,7 +750,7 @@ public class ElanUtils {
      * @param writeFlowGroupTx
      *            the writeFLowGroup tx
      */
-    public static void setupTermDmacFlows(InterfaceInfo interfaceInfo, IMdsalApiManager mdsalApiManager,
+    public void setupTermDmacFlows(InterfaceInfo interfaceInfo, IMdsalApiManager mdsalApiManager,
             WriteTransaction writeFlowGroupTx) {
         BigInteger dpId = interfaceInfo.getDpId();
         int lportTag = interfaceInfo.getInterfaceTag();
@@ -797,9 +805,9 @@ public class ElanUtils {
      *            external)
      * @return the Instruction
      */
-    public static List<Instruction> getInstructionsInPortForOutGroup(String ifName) {
+    public List<Instruction> getInstructionsInPortForOutGroup(String ifName) {
         List<Instruction> mkInstructions = new ArrayList<Instruction>();
-        List<Action> actions = ElanUtils.getEgressActionsForInterface(ifName, /* tunnelKey */ null);
+        List<Action> actions = getEgressActionsForInterface(ifName, /* tunnelKey */ null);
 
         mkInstructions.add(MDSALUtil.buildApplyActionsInstruction(actions));
         return mkInstructions;
@@ -819,13 +827,13 @@ public class ElanUtils {
      *            the tunnel key
      * @return the egress actions for interface
      */
-    public static List<Action> getEgressActionsForInterface(String ifName, Long tunnelKey) {
+    public List<Action> getEgressActionsForInterface(String ifName, Long tunnelKey) {
         List<Action> listAction = new ArrayList<Action>();
         try {
             GetEgressActionsForInterfaceInput getEgressActionInput = new GetEgressActionsForInterfaceInputBuilder()
                     .setIntfName(ifName).setTunnelKey(tunnelKey).build();
-            Future<RpcResult<GetEgressActionsForInterfaceOutput>> result = elanServiceProvider
-                    .getInterfaceManagerRpcService().getEgressActionsForInterface(getEgressActionInput);
+            Future<RpcResult<GetEgressActionsForInterfaceOutput>> result = interfaceManagerRpcService
+                    .getEgressActionsForInterface(getEgressActionInput);
             RpcResult<GetEgressActionsForInterfaceOutput> rpcResult = result.get();
             if (!rpcResult.isSuccessful()) {
                 LOG.warn("RPC Call to Get egress actions for interface {} returned with Errors {}", ifName,
@@ -841,7 +849,7 @@ public class ElanUtils {
         return listAction;
     }
 
-    private static void setupOrigDmacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress,
+    private void setupOrigDmacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress,
             IMdsalApiManager mdsalApiManager, DataBroker broker, WriteTransaction writeFlowGroupTx) {
         BigInteger dpId = interfaceInfo.getDpId();
         String ifName = interfaceInfo.getInterfaceName();
@@ -892,7 +900,7 @@ public class ElanUtils {
         }
     }
 
-    private static void setupOrigDmacFlowsonRemoteDpn(ElanInstance elanInfo, InterfaceInfo interfaceInfo,
+    private void setupOrigDmacFlowsonRemoteDpn(ElanInstance elanInfo, InterfaceInfo interfaceInfo,
             BigInteger dstDpId, String macAddress, WriteTransaction writeFlowTx) {
         BigInteger dpId = interfaceInfo.getDpId();
         String elanInstanceName = elanInfo.getElanInstanceName();
@@ -914,16 +922,15 @@ public class ElanUtils {
     }
 
     @SuppressWarnings("unchecked")
-    public static List<DpnInterfaces> getInvolvedDpnsInElan(String elanName) {
-        List<DpnInterfaces> dpns = ElanInstanceManager.getElanInstanceManager(elanServiceProvider)
-                .getElanDPNByName(elanName);
+    public List<DpnInterfaces> getInvolvedDpnsInElan(String elanName) {
+        List<DpnInterfaces> dpns = elanInstanceManager.getElanDPNByName(elanName);
         if (dpns == null) {
             return Collections.emptyList();
         }
         return dpns;
     }
 
-    private static void setupLocalDmacFlow(long elanTag, BigInteger dpId, String ifName, String macAddress,
+    private void setupLocalDmacFlow(long elanTag, BigInteger dpId, String ifName, String macAddress,
             String displayName, IMdsalApiManager mdsalApiManager, long ifTag, WriteTransaction writeFlowGroupTx) {
         Flow flowEntity = buildLocalDmacFlowEntry(elanTag, dpId, ifName, macAddress, displayName, ifTag);
         mdsalApiManager.addFlowToTx(dpId, flowEntity, writeFlowGroupTx);
@@ -931,12 +938,12 @@ public class ElanUtils {
                 writeFlowGroupTx);
     }
 
-    private static void installEtreeLocalDmacFlow(long elanTag, BigInteger dpId, String ifName, String macAddress,
+    private void installEtreeLocalDmacFlow(long elanTag, BigInteger dpId, String ifName, String macAddress,
             String displayName, IMdsalApiManager mdsalApiManager, long ifTag, WriteTransaction writeFlowGroupTx) {
-        EtreeInterface etreeInterface = ElanUtils.getEtreeInterfaceByElanInterfaceName(ifName);
+        EtreeInterface etreeInterface = getEtreeInterfaceByElanInterfaceName(ifName);
         if (etreeInterface != null) {
             if (etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) {
-                EtreeLeafTagName etreeTagName = ElanUtils.getEtreeLeafTagByElanTag(elanTag);
+                EtreeLeafTagName etreeTagName = getEtreeLeafTagByElanTag(elanTag);
                 if (etreeTagName == null) {
                     LOG.warn("Interface " + ifName + " seems like it belongs to Etree but etreeTagName from elanTag "
                             + elanTag + " is null.");
@@ -989,11 +996,11 @@ public class ElanUtils {
      *            the if tag
      * @return the flow
      */
-    public static Flow buildLocalDmacFlowEntry(long elanTag, BigInteger dpId, String ifName, String macAddress,
+    public Flow buildLocalDmacFlowEntry(long elanTag, BigInteger dpId, String ifName, String macAddress,
             String displayName, long ifTag) {
         List<MatchInfo> mkMatches = new ArrayList<>();
         mkMatches.add(new MatchInfo(MatchFieldType.metadata,
-                new BigInteger[] { ElanUtils.getElanMetadataLabel(elanTag), MetaDataUtil.METADATA_MASK_SERVICE }));
+                new BigInteger[] { getElanMetadataLabel(elanTag), MetaDataUtil.METADATA_MASK_SERVICE }));
         mkMatches.add(new MatchInfo(MatchFieldType.eth_dst, new String[] { macAddress }));
 
         List<Instruction> mkInstructions = new ArrayList<Instruction>();
@@ -1007,28 +1014,28 @@ public class ElanUtils {
         return flow;
     }
 
-    public static void setupRemoteDmacFlow(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag,
+    public void setupRemoteDmacFlow(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag,
             String macAddress, String displayName, WriteTransaction writeFlowGroupTx, String interfaceName) {
         Flow flowEntity = buildRemoteDmacFlowEntry(srcDpId, destDpId, lportTag, elanTag, macAddress, displayName);
-        elanServiceProvider.getMdsalManager().addFlowToTx(srcDpId, flowEntity, writeFlowGroupTx);
+        mdsalManager.addFlowToTx(srcDpId, flowEntity, writeFlowGroupTx);
         setupEtreeRemoteDmacFlow(srcDpId, destDpId, lportTag, elanTag, macAddress, displayName, interfaceName,
                 writeFlowGroupTx);
     }
 
-    private static void setupEtreeRemoteDmacFlow(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag,
+    private void setupEtreeRemoteDmacFlow(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag,
             String macAddress, String displayName, String interfaceName, WriteTransaction writeFlowGroupTx) {
         Flow flowEntity;
-        EtreeInterface etreeInterface = ElanUtils.getEtreeInterfaceByElanInterfaceName(interfaceName);
+        EtreeInterface etreeInterface = getEtreeInterfaceByElanInterfaceName(interfaceName);
         if (etreeInterface != null) {
             if (etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) {
-                EtreeLeafTagName etreeTagName = ElanUtils.getEtreeLeafTagByElanTag(elanTag);
+                EtreeLeafTagName etreeTagName = getEtreeLeafTagByElanTag(elanTag);
                 if (etreeTagName == null) {
                     LOG.warn("Interface " + interfaceName
                             + " seems like it belongs to Etree but etreeTagName from elanTag " + elanTag + " is null.");
                 } else {
                     flowEntity = buildRemoteDmacFlowEntry(srcDpId, destDpId, lportTag,
                             etreeTagName.getEtreeLeafTag().getValue(), macAddress, displayName);
-                    elanServiceProvider.getMdsalManager().addFlowToTx(srcDpId, flowEntity, writeFlowGroupTx);
+                    mdsalManager.addFlowToTx(srcDpId, flowEntity, writeFlowGroupTx);
                 }
             }
         }
@@ -1054,11 +1061,11 @@ public class ElanUtils {
      *            display Name
      * @return the flow remote Dmac
      */
-    public static Flow buildRemoteDmacFlowEntry(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag,
+    public Flow buildRemoteDmacFlowEntry(BigInteger srcDpId, BigInteger destDpId, int lportTag, long elanTag,
             String macAddress, String displayName) {
         List<MatchInfo> mkMatches = new ArrayList<>();
         mkMatches.add(new MatchInfo(MatchFieldType.metadata,
-                new BigInteger[] { ElanUtils.getElanMetadataLabel(elanTag), MetaDataUtil.METADATA_MASK_SERVICE }));
+                new BigInteger[] { getElanMetadataLabel(elanTag), MetaDataUtil.METADATA_MASK_SERVICE }));
         mkMatches.add(new MatchInfo(MatchFieldType.eth_dst, new String[] { macAddress }));
 
         List<Instruction> mkInstructions = new ArrayList<Instruction>();
@@ -1082,7 +1089,7 @@ public class ElanUtils {
 
     }
 
-    public static void deleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, MacEntry macEntry,
+    public void deleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, MacEntry macEntry,
             WriteTransaction deleteFlowGroupTx) {
         if (elanInfo == null || interfaceInfo == null) {
             return;
@@ -1094,7 +1101,7 @@ public class ElanUtils {
         }
     }
 
-    public static void deleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress,
+    public void deleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress,
             boolean deleteSmac, WriteTransaction deleteFlowGroupTx) {
         String elanInstanceName = elanInfo.getElanInstanceName();
         List<DpnInterfaces> remoteFEs = getInvolvedDpnsInElan(elanInstanceName);
@@ -1115,17 +1122,17 @@ public class ElanUtils {
         }
     }
 
-    private static void executeEtreeDeleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, boolean deleteSmac,
+    private void executeEtreeDeleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, boolean deleteSmac,
             String elanInstanceName, BigInteger srcdpId, Long elanTag, BigInteger dstDpId,
             WriteTransaction deleteFlowGroupTx) {
-        EtreeLeafTagName etreeLeafTag = ElanUtils.getEtreeLeafTagByElanTag(elanTag);
+        EtreeLeafTagName etreeLeafTag = getEtreeLeafTagByElanTag(elanTag);
         if (etreeLeafTag != null) {
             executeDeleteMacFlows(elanInfo, interfaceInfo, macAddress, deleteSmac, elanInstanceName, srcdpId,
                     etreeLeafTag.getEtreeLeafTag().getValue(), dstDpId, deleteFlowGroupTx);
         }
     }
 
-    private static boolean executeDeleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, boolean deleteSmac,
+    private boolean executeDeleteMacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress, boolean deleteSmac,
             String elanInstanceName, BigInteger srcdpId, Long elanTag, BigInteger dstDpId,
             WriteTransaction deleteFlowGroupTx) {
         boolean isFlowsRemovedInSrcDpn = false;
@@ -1133,7 +1140,7 @@ public class ElanUtils {
             isFlowsRemovedInSrcDpn = true;
             deleteSmacAndDmacFlows(elanInfo, interfaceInfo, macAddress, deleteSmac, deleteFlowGroupTx);
         } else if (isDpnPresent(dstDpId)) {
-            elanServiceProvider.getMdsalManager()
+            mdsalManager
                     .removeFlowToTx(dstDpId,
                             MDSALUtil.buildFlow(NwConstants.ELAN_DMAC_TABLE, getKnownDynamicmacFlowRef(
                                     NwConstants.ELAN_DMAC_TABLE, dstDpId, srcdpId, macAddress, elanTag)),
@@ -1146,20 +1153,20 @@ public class ElanUtils {
         return isFlowsRemovedInSrcDpn;
     }
 
-    private static void deleteSmacAndDmacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress,
+    private void deleteSmacAndDmacFlows(ElanInstance elanInfo, InterfaceInfo interfaceInfo, String macAddress,
             boolean deleteSmac, WriteTransaction deleteFlowGroupTx) {
         String elanInstanceName = elanInfo.getElanInstanceName();
         long ifTag = interfaceInfo.getInterfaceTag();
         BigInteger srcdpId = interfaceInfo.getDpId();
         Long elanTag = elanInfo.getElanTag();
         if (deleteSmac) {
-            elanServiceProvider.getMdsalManager()
+            mdsalManager
                     .removeFlowToTx(srcdpId,
                             MDSALUtil.buildFlow(NwConstants.ELAN_SMAC_TABLE, getKnownDynamicmacFlowRef(
                                     NwConstants.ELAN_SMAC_TABLE, srcdpId, ifTag, macAddress, elanTag)),
                             deleteFlowGroupTx);
         }
-        elanServiceProvider.getMdsalManager().removeFlowToTx(srcdpId,
+        mdsalManager.removeFlowToTx(srcdpId,
                 MDSALUtil.buildFlow(NwConstants.ELAN_DMAC_TABLE,
                         getKnownDynamicmacFlowRef(NwConstants.ELAN_DMAC_TABLE, srcdpId, ifTag, macAddress, elanTag)),
                 deleteFlowGroupTx);
@@ -1188,25 +1195,25 @@ public class ElanUtils {
         String elanInstanceName = elanInstanceAdded.getElanInstanceName();
         Long elanTag = elanInstanceAdded.getElanTag();
         if (elanTag == null || elanTag == 0L) {
-            elanTag = ElanUtils.retrieveNewElanTag(idManager, elanInstanceName);
+            elanTag = retrieveNewElanTag(idManager, elanInstanceName);
         }
         Elan elanInfo = new ElanBuilder().setName(elanInstanceName).setElanInterfaces(elanInterfaces)
                 .setKey(new ElanKey(elanInstanceName)).build();
 
         // Add the ElanState in the elan-state operational data-store
-        tx.put(LogicalDatastoreType.OPERATIONAL, ElanUtils.getElanInstanceOperationalDataPath(elanInstanceName),
+        tx.put(LogicalDatastoreType.OPERATIONAL, getElanInstanceOperationalDataPath(elanInstanceName),
                 elanInfo, true);
 
         // Add the ElanMacTable in the elan-mac-table operational data-store
         MacTable elanMacTable = new MacTableBuilder().setKey(new MacTableKey(elanInstanceName)).build();
-        tx.put(LogicalDatastoreType.OPERATIONAL, ElanUtils.getElanMacTableOperationalDataPath(elanInstanceName),
+        tx.put(LogicalDatastoreType.OPERATIONAL, getElanMacTableOperationalDataPath(elanInstanceName),
                 elanMacTable, true);
 
         ElanTagNameBuilder elanTagNameBuilder = new ElanTagNameBuilder().setElanTag(elanTag)
                 .setKey(new ElanTagNameKey(elanTag)).setName(elanInstanceName);
         long etreeLeafTag = -1;
         if (isEtreeInstance(elanInstanceAdded)) {
-            etreeLeafTag = ElanUtils.retrieveNewElanTag(idManager, elanInstanceName + ElanConstants.LEAVES_POSTFIX);
+            etreeLeafTag = retrieveNewElanTag(idManager, elanInstanceName + ElanConstants.LEAVES_POSTFIX);
             EtreeLeafTagName etreeLeafTagName = new EtreeLeafTagNameBuilder()
                     .setEtreeLeafTag(new EtreeLeafTag(etreeLeafTag)).build();
             elanTagNameBuilder.addAugmentation(EtreeLeafTagName.class, etreeLeafTagName);
@@ -1217,7 +1224,7 @@ public class ElanUtils {
         // Add the ElanTag to ElanName in the elan-tag-name Operational
         // data-store
         tx.put(LogicalDatastoreType.OPERATIONAL,
-                ElanUtils.getElanInfoEntriesOperationalDataPath(elanTag), elanTagName);
+                getElanInfoEntriesOperationalDataPath(elanTag), elanTagName);
 
         // Updates the ElanInstance Config DS by setting the just acquired
         // elanTag
@@ -1241,20 +1248,20 @@ public class ElanUtils {
         ElanTagName etreeTagAsElanTag = new ElanTagNameBuilder().setElanTag(etreeLeafTag)
                 .setKey(new ElanTagNameKey(etreeLeafTag)).setName(elanInstanceName).build();
         tx.put(LogicalDatastoreType.OPERATIONAL,
-                ElanUtils.getElanInfoEntriesOperationalDataPath(etreeLeafTag), etreeTagAsElanTag);
+                getElanInfoEntriesOperationalDataPath(etreeLeafTag), etreeTagAsElanTag);
     }
 
     private static boolean isEtreeInstance(ElanInstance elanInstanceAdded) {
         return elanInstanceAdded.getAugmentation(EtreeInstance.class) != null;
     }
 
-    public static boolean isDpnPresent(BigInteger dpnId) {
+    public boolean isDpnPresent(BigInteger dpnId) {
         String dpn = String.format("%s:%s", "openflow", dpnId);
         NodeId nodeId = new NodeId(dpn);
 
         InstanceIdentifier<Node> node = InstanceIdentifier.builder(Nodes.class).child(Node.class, new NodeKey(nodeId))
                 .build();
-        Optional<Node> nodePresent = read(elanServiceProvider.getBroker(), LogicalDatastoreType.OPERATIONAL, node);
+        Optional<Node> nodePresent = read(broker, LogicalDatastoreType.OPERATIONAL, node);
         return (nodePresent.isPresent());
     }
 
@@ -1262,7 +1269,7 @@ public class ElanUtils {
         int priority = ElanConstants.ELAN_SERVICE_PRIORITY;
         int instructionKey = 0;
         List<Instruction> instructions = new ArrayList<>();
-        instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(ElanUtils.getElanMetadataLabel(elanTag),
+        instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(getElanMetadataLabel(elanTag),
                 MetaDataUtil.METADATA_MASK_SERVICE, ++instructionKey));
         instructions.add(MDSALUtil.buildAndGetGotoTableInstruction(NwConstants.ELAN_SMAC_TABLE, ++instructionKey));
 
@@ -1319,7 +1326,7 @@ public class ElanUtils {
      *            the tunnel key
      * @return the list
      */
-    public static List<Action> buildTunnelItmEgressActions(String tunnelIfaceName, Long tunnelKey) {
+    public List<Action> buildTunnelItmEgressActions(String tunnelIfaceName, Long tunnelKey) {
         if (tunnelIfaceName != null && !tunnelIfaceName.isEmpty()) {
             return buildItmEgressActions(tunnelIfaceName, tunnelKey);
         }
@@ -1338,13 +1345,13 @@ public class ElanUtils {
      *            tunnels, etc.
      * @return the list
      */
-    public static List<Action> buildItmEgressActions(String interfaceName, Long tunnelKey) {
+    public List<Action> buildItmEgressActions(String interfaceName, Long tunnelKey) {
         List<Action> result = Collections.emptyList();
         GetEgressActionsForInterfaceInput getEgressActInput = new GetEgressActionsForInterfaceInputBuilder()
                 .setIntfName(interfaceName).setTunnelKey(tunnelKey).build();
 
-        Future<RpcResult<GetEgressActionsForInterfaceOutput>> egressActionsOutputFuture = elanServiceProvider
-                .getInterfaceManagerRpcService().getEgressActionsForInterface(getEgressActInput);
+        Future<RpcResult<GetEgressActionsForInterfaceOutput>> egressActionsOutputFuture = interfaceManagerRpcService
+                .getEgressActionsForInterface(getEgressActInput);
         try {
             if (egressActionsOutputFuture.get().isSuccessful()) {
                 GetEgressActionsForInterfaceOutput egressActionsOutput = egressActionsOutputFuture.get().getResult();
@@ -1374,13 +1381,13 @@ public class ElanUtils {
      *            Vni to be stamped on the VxLAN Header.
      * @return the external itm egress action
      */
-    public static List<Action> getExternalTunnelItmEgressAction(BigInteger srcDpnId, NodeId torNode, long vni) {
+    public List<Action> getExternalTunnelItmEgressAction(BigInteger srcDpnId, NodeId torNode, long vni) {
         List<Action> result = Collections.emptyList();
 
         GetExternalTunnelInterfaceNameInput input = new GetExternalTunnelInterfaceNameInputBuilder()
                 .setDestinationNode(torNode.getValue()).setSourceNode(srcDpnId.toString())
                 .setTunnelType(TunnelTypeVxlan.class).build();
-        Future<RpcResult<GetExternalTunnelInterfaceNameOutput>> output = elanServiceProvider.getItmRpcService()
+        Future<RpcResult<GetExternalTunnelInterfaceNameOutput>> output = itmRpcService
                 .getExternalTunnelInterfaceName(input);
         try {
             if (output.get().isSuccessful()) {
@@ -1414,7 +1421,7 @@ public class ElanUtils {
      *            serviceId to be sent on the VxLAN header.
      * @return the internal itm egress action
      */
-    public static List<Action> getInternalTunnelItmEgressAction(BigInteger sourceDpnId, BigInteger destinationDpnId,
+    public List<Action> getInternalTunnelItmEgressAction(BigInteger sourceDpnId, BigInteger destinationDpnId,
             long serviceTag) {
         List<Action> result = Collections.emptyList();
 
@@ -1423,7 +1430,7 @@ public class ElanUtils {
         Class<? extends TunnelTypeBase> tunType = TunnelTypeVxlan.class;
         GetTunnelInterfaceNameInput input = new GetTunnelInterfaceNameInputBuilder()
                 .setDestinationDpid(destinationDpnId).setSourceDpid(sourceDpnId).setTunnelType(tunType).build();
-        Future<RpcResult<GetTunnelInterfaceNameOutput>> output = elanServiceProvider.getItmRpcService()
+        Future<RpcResult<GetTunnelInterfaceNameOutput>> output = itmRpcService
                 .getTunnelInterfaceName(input);
         try {
             if (output.get().isSuccessful()) {
@@ -1448,7 +1455,7 @@ public class ElanUtils {
      *            Interface name
      * @return the external port itm egress actions
      */
-    public static List<Action> getExternalPortItmEgressAction(String interfaceName) {
+    public List<Action> getExternalPortItmEgressAction(String interfaceName) {
         return buildItmEgressActions(interfaceName, null);
     }
 
@@ -1460,10 +1467,10 @@ public class ElanUtils {
         return mkMatches;
     }
 
-    public static void removeTerminatingServiceAction(BigInteger destDpId, int serviceId) {
+    public void removeTerminatingServiceAction(BigInteger destDpId, int serviceId) {
         RemoveTerminatingServiceActionsInput input = new RemoveTerminatingServiceActionsInputBuilder()
                 .setDpnId(destDpId).setServiceId(serviceId).build();
-        Future<RpcResult<Void>> futureObject = elanServiceProvider.getItmRpcService()
+        Future<RpcResult<Void>> futureObject = itmRpcService
                 .removeTerminatingServiceActions(input);
         try {
             RpcResult<Void> result = futureObject.get();
@@ -1477,16 +1484,16 @@ public class ElanUtils {
         }
     }
 
-    public static void createTerminatingServiceActions(BigInteger destDpId, int serviceId, List<Action> actions) {
+    public void createTerminatingServiceActions(BigInteger destDpId, int serviceId, List<Action> actions) {
         List<Instruction> mkInstructions = new ArrayList<Instruction>();
         mkInstructions.add(MDSALUtil.buildApplyActionsInstruction(actions));
         CreateTerminatingServiceActionsInput input = new CreateTerminatingServiceActionsInputBuilder()
                 .setDpnId(destDpId).setServiceId(serviceId).setInstruction(mkInstructions).build();
 
-        elanServiceProvider.getItmRpcService().createTerminatingServiceActions(input);
+        itmRpcService.createTerminatingServiceActions(input);
     }
 
-    public static TunnelList buildInternalTunnel(DataBroker broker) {
+    public TunnelList buildInternalTunnel(DataBroker broker) {
         InstanceIdentifier<TunnelList> tunnelListInstanceIdentifier = InstanceIdentifier.builder(TunnelList.class)
                 .build();
         Optional<TunnelList> tunnelList = read(broker, LogicalDatastoreType.CONFIGURATION,
@@ -1508,13 +1515,13 @@ public class ElanUtils {
      *            the datastore type
      * @return the external tunnel
      */
-    public static ExternalTunnel getExternalTunnel(String sourceDevice, String destinationDevice,
+    public ExternalTunnel getExternalTunnel(String sourceDevice, String destinationDevice,
             LogicalDatastoreType datastoreType) {
         ExternalTunnel externalTunnel = null;
         Class<? extends TunnelTypeBase> tunType = TunnelTypeVxlan.class;
         InstanceIdentifier<ExternalTunnel> iid = InstanceIdentifier.builder(ExternalTunnelList.class)
                 .child(ExternalTunnel.class, new ExternalTunnelKey(destinationDevice, sourceDevice, tunType)).build();
-        Optional<ExternalTunnel> tunnelList = read(elanServiceProvider.getBroker(), datastoreType, iid);
+        Optional<ExternalTunnel> tunnelList = read(broker, datastoreType, iid);
         if (tunnelList.isPresent()) {
             externalTunnel = tunnelList.get();
         }
@@ -1530,7 +1537,7 @@ public class ElanUtils {
      *            the datastore type
      * @return the external tunnel
      */
-    public static ExternalTunnel getExternalTunnel(String interfaceName, LogicalDatastoreType datastoreType) {
+    public ExternalTunnel getExternalTunnel(String interfaceName, LogicalDatastoreType datastoreType) {
         ExternalTunnel externalTunnel = null;
         List<ExternalTunnel> externalTunnels = getAllExternalTunnels(datastoreType);
         for (ExternalTunnel tunnel : externalTunnels) {
@@ -1549,10 +1556,10 @@ public class ElanUtils {
      *            the data store type
      * @return the all external tunnels
      */
-    public static List<ExternalTunnel> getAllExternalTunnels(LogicalDatastoreType datastoreType) {
+    public List<ExternalTunnel> getAllExternalTunnels(LogicalDatastoreType datastoreType) {
         List<ExternalTunnel> result = null;
         InstanceIdentifier<ExternalTunnelList> iid = InstanceIdentifier.builder(ExternalTunnelList.class).build();
-        Optional<ExternalTunnelList> tunnelList = read(elanServiceProvider.getBroker(), datastoreType, iid);
+        Optional<ExternalTunnelList> tunnelList = read(broker, datastoreType, iid);
         if (tunnelList.isPresent()) {
             result = tunnelList.get().getExternalTunnel();
         }
@@ -1581,11 +1588,11 @@ public class ElanUtils {
      * @param displayName
      *            the display name
      */
-    public static void installDmacFlowsToInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, long lportTag,
+    public void installDmacFlowsToInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, long lportTag,
             long elanTag, String macAddress, String displayName) {
         Flow flow = buildDmacFlowForInternalRemoteMac(localDpId, remoteDpId, lportTag, elanTag, macAddress,
                 displayName);
-        elanServiceProvider.getMdsalManager().installFlow(remoteDpId, flow);
+        mdsalManager.installFlow(remoteDpId, flow);
     }
 
     /**
@@ -1610,27 +1617,27 @@ public class ElanUtils {
      *
      * @return the dmac flows
      */
-    public static List<ListenableFuture<Void>> installDmacFlowsToExternalRemoteMac(BigInteger dpnId,
+    public List<ListenableFuture<Void>> installDmacFlowsToExternalRemoteMac(BigInteger dpnId,
             String extDeviceNodeId, Long elanTag, Long vni, String macAddress, String displayName,
             String interfaceName) {
         List<ListenableFuture<Void>> futures = new ArrayList<>();
         synchronized (macAddress) {
             Flow flow = buildDmacFlowForExternalRemoteMac(dpnId, extDeviceNodeId, elanTag, vni, macAddress,
                     displayName);
-            futures.add(elanServiceProvider.getMdsalManager().installFlow(dpnId, flow));
+            futures.add(mdsalManager.installFlow(dpnId, flow));
 
             Flow dropFlow = buildDmacFlowDropIfPacketComingFromTunnel(dpnId, extDeviceNodeId, elanTag, macAddress);
-            futures.add(elanServiceProvider.getMdsalManager().installFlow(dpnId, dropFlow));
+            futures.add(mdsalManager.installFlow(dpnId, dropFlow));
             installEtreeDmacFlowsToExternalRemoteMac(dpnId, extDeviceNodeId, elanTag, vni, macAddress, displayName,
                     interfaceName, futures);
         }
         return futures;
     }
 
-    private static void installEtreeDmacFlowsToExternalRemoteMac(BigInteger dpnId, String extDeviceNodeId, Long elanTag,
+    private void installEtreeDmacFlowsToExternalRemoteMac(BigInteger dpnId, String extDeviceNodeId, Long elanTag,
             Long vni, String macAddress, String displayName, String interfaceName,
             List<ListenableFuture<Void>> futures) {
-        EtreeLeafTagName etreeLeafTag = ElanUtils.getEtreeLeafTagByElanTag(elanTag);
+        EtreeLeafTagName etreeLeafTag = getEtreeLeafTagByElanTag(elanTag);
         if (etreeLeafTag != null) {
             buildEtreeDmacFlowDropIfPacketComingFromTunnel(dpnId, extDeviceNodeId, elanTag, macAddress, futures,
                     etreeLeafTag);
@@ -1639,14 +1646,14 @@ public class ElanUtils {
         }
     }
 
-    private static void buildEtreeDmacFlowForExternalRemoteMac(BigInteger dpnId, String extDeviceNodeId, Long vni,
+    private void buildEtreeDmacFlowForExternalRemoteMac(BigInteger dpnId, String extDeviceNodeId, Long vni,
             String macAddress, String displayName, String interfaceName, List<ListenableFuture<Void>> futures,
             EtreeLeafTagName etreeLeafTag) {
         boolean isRoot = false;
         if (interfaceName == null) {
             isRoot = true;
         } else {
-            EtreeInterface etreeInterface = ElanUtils.getEtreeInterfaceByElanInterfaceName(interfaceName);
+            EtreeInterface etreeInterface = getEtreeInterfaceByElanInterfaceName(interfaceName);
             if (etreeInterface != null) {
                 if (etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) {
                     isRoot = true;
@@ -1656,23 +1663,23 @@ public class ElanUtils {
         if (isRoot) {
             Flow flow = buildDmacFlowForExternalRemoteMac(dpnId, extDeviceNodeId,
                     etreeLeafTag.getEtreeLeafTag().getValue(), vni, macAddress, displayName);
-            futures.add(elanServiceProvider.getMdsalManager().installFlow(dpnId, flow));
+            futures.add(mdsalManager.installFlow(dpnId, flow));
         }
     }
 
-    private static void buildEtreeDmacFlowDropIfPacketComingFromTunnel(BigInteger dpnId, String extDeviceNodeId,
+    private void buildEtreeDmacFlowDropIfPacketComingFromTunnel(BigInteger dpnId, String extDeviceNodeId,
             Long elanTag, String macAddress, List<ListenableFuture<Void>> futures, EtreeLeafTagName etreeLeafTag) {
         if (etreeLeafTag != null) {
             Flow dropFlow = buildDmacFlowDropIfPacketComingFromTunnel(dpnId, extDeviceNodeId,
                     etreeLeafTag.getEtreeLeafTag().getValue(), macAddress);
-            futures.add(elanServiceProvider.getMdsalManager().installFlow(dpnId, dropFlow));
+            futures.add(mdsalManager.installFlow(dpnId, dropFlow));
         }
     }
 
     public static List<MatchInfo> buildMatchesForElanTagShFlagAndDstMac(long elanTag, boolean shFlag, String macAddr) {
         List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
         mkMatches.add(new MatchInfo(MatchFieldType.metadata, new BigInteger[] {
-                ElanUtils.getElanMetadataLabel(elanTag, shFlag), MetaDataUtil.METADATA_MASK_SERVICE_SH_FLAG }));
+                getElanMetadataLabel(elanTag, shFlag), MetaDataUtil.METADATA_MASK_SERVICE_SH_FLAG }));
         mkMatches.add(new MatchInfo(MatchFieldType.eth_dst, new String[] { macAddr }));
 
         return mkMatches;
@@ -1699,7 +1706,7 @@ public class ElanUtils {
      *            the display name
      * @return the flow
      */
-    public static Flow buildDmacFlowForExternalRemoteMac(BigInteger dpId, String extDeviceNodeId, long elanTag,
+    public Flow buildDmacFlowForExternalRemoteMac(BigInteger dpId, String extDeviceNodeId, long elanTag,
             Long vni, String dstMacAddress, String displayName) {
         List<MatchInfo> mkMatches = buildMatchesForElanTagShFlagAndDstMac(elanTag, /* shFlag */ false, dstMacAddress);
         List<Instruction> mkInstructions = new ArrayList<>();
@@ -1778,7 +1785,7 @@ public class ElanUtils {
      *            the display name
      * @return the flow
      */
-    public static Flow buildDmacFlowForInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, long lportTag,
+    public Flow buildDmacFlowForInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, long lportTag,
             long elanTag, String macAddress, String displayName) {
         List<MatchInfo> mkMatches = buildMatchesForElanTagShFlagAndDstMac(elanTag, /* shFlag */ false, macAddress);
 
@@ -1825,13 +1832,13 @@ public class ElanUtils {
      *            Indicates if flows must be installed or removed.
      * @see org.opendaylight.genius.mdsalutil.MDSALUtil.MdsalOp
      */
-    public static void setupDmacFlowsToExternalRemoteMac(BigInteger dpId, String extNodeId, Long elanTag, Long vni,
+    public void setupDmacFlowsToExternalRemoteMac(BigInteger dpId, String extNodeId, Long elanTag, Long vni,
             String macAddress, String elanInstanceName, MdsalOp addOrRemove, String interfaceName) {
         if (addOrRemove == MdsalOp.CREATION_OP) {
-            ElanUtils.installDmacFlowsToExternalRemoteMac(dpId, extNodeId, elanTag, vni, macAddress, elanInstanceName,
+            installDmacFlowsToExternalRemoteMac(dpId, extNodeId, elanTag, vni, macAddress, elanInstanceName,
                     interfaceName);
         } else if (addOrRemove == MdsalOp.REMOVAL_OP) {
-            ElanUtils.deleteDmacFlowsToExternalMac(elanTag, dpId, extNodeId, macAddress);
+            deleteDmacFlowsToExternalMac(elanTag, dpId, extNodeId, macAddress);
         }
     }
 
@@ -1848,7 +1855,7 @@ public class ElanUtils {
      *            the mac to remove
      * @return dmac flow
      */
-    public static List<ListenableFuture<Void>> deleteDmacFlowsToExternalMac(long elanTag, BigInteger dpId,
+    public List<ListenableFuture<Void>> deleteDmacFlowsToExternalMac(long elanTag, BigInteger dpId,
             String extDeviceNodeId, String macToRemove) {
         List<ListenableFuture<Void>> futures = new ArrayList<>();
         synchronized (macToRemove) {
@@ -1863,9 +1870,9 @@ public class ElanUtils {
         return futures;
     }
 
-    private static void deleteEtreeDmacFlowsToExternalMac(long elanTag, BigInteger dpId, String extDeviceNodeId,
+    private void deleteEtreeDmacFlowsToExternalMac(long elanTag, BigInteger dpId, String extDeviceNodeId,
             String macToRemove, List<ListenableFuture<Void>> futures) {
-        EtreeLeafTagName etreeLeafTag = ElanUtils.getEtreeLeafTagByElanTag(elanTag);
+        EtreeLeafTagName etreeLeafTag = getEtreeLeafTagByElanTag(elanTag);
         if (etreeLeafTag != null) {
             removeFlowThatSendsThePacketOnAnExternalTunnel(etreeLeafTag.getEtreeLeafTag().getValue(), dpId,
                     extDeviceNodeId, macToRemove, futures);
@@ -1873,20 +1880,20 @@ public class ElanUtils {
         }
     }
 
-    private static void removeTheDropFlow(long elanTag, BigInteger dpId, String extDeviceNodeId, String macToRemove,
+    private void removeTheDropFlow(long elanTag, BigInteger dpId, String extDeviceNodeId, String macToRemove,
             List<ListenableFuture<Void>> futures) {
         String flowId = getKnownDynamicmacFlowRef(NwConstants.ELAN_DMAC_TABLE, dpId, extDeviceNodeId, macToRemove,
                 elanTag, true);
         Flow flowToRemove = new FlowBuilder().setId(new FlowId(flowId)).setTableId(NwConstants.ELAN_DMAC_TABLE).build();
-        futures.add(elanServiceProvider.getMdsalManager().removeFlow(dpId, flowToRemove));
+        futures.add(mdsalManager.removeFlow(dpId, flowToRemove));
     }
 
-    private static void removeFlowThatSendsThePacketOnAnExternalTunnel(long elanTag, BigInteger dpId,
+    private void removeFlowThatSendsThePacketOnAnExternalTunnel(long elanTag, BigInteger dpId,
             String extDeviceNodeId, String macToRemove, List<ListenableFuture<Void>> futures) {
         String flowId = getKnownDynamicmacFlowRef(NwConstants.ELAN_DMAC_TABLE, dpId, extDeviceNodeId, macToRemove,
                 elanTag, false);
         Flow flowToRemove = new FlowBuilder().setId(new FlowId(flowId)).setTableId(NwConstants.ELAN_DMAC_TABLE).build();
-        futures.add(elanServiceProvider.getMdsalManager().removeFlow(dpId, flowToRemove));
+        futures.add(mdsalManager.removeFlow(dpId, flowToRemove));
     }
 
     /**
@@ -1896,9 +1903,9 @@ public class ElanUtils {
      *            the interface name
      * @return the dpid from interface
      */
-    public static BigInteger getDpidFromInterface(String interfaceName) {
+    public BigInteger getDpidFromInterface(String interfaceName) {
         BigInteger dpId = null;
-        Future<RpcResult<GetDpidFromInterfaceOutput>> output = elanServiceProvider.getInterfaceManagerRpcService()
+        Future<RpcResult<GetDpidFromInterfaceOutput>> output = interfaceManagerRpcService
                 .getDpidFromInterface(new GetDpidFromInterfaceInputBuilder().setIntfName(interfaceName).build());
         try {
             RpcResult<GetDpidFromInterfaceOutput> rpcResult = output.get();
@@ -2034,8 +2041,8 @@ public class ElanUtils {
                 && elanInstance.getSegmentType().isAssignableFrom(SegmentTypeFlat.class);
     }
 
-    public static boolean isExternal(String interfaceName) {
-        return isExternal(getInterfaceFromConfigDS(interfaceName, elanServiceProvider.getBroker()));
+    public boolean isExternal(String interfaceName) {
+        return isExternal(getInterfaceFromConfigDS(interfaceName, broker));
     }
 
     public static boolean isExternal(
@@ -2048,7 +2055,7 @@ public class ElanUtils {
         return ifExternal != null && Boolean.TRUE.equals(ifExternal.isExternal());
     }
 
-    public static boolean isEtreeRootInterfaceByInterfaceName(String interfaceName) {
+    public boolean isEtreeRootInterfaceByInterfaceName(String interfaceName) {
         EtreeInterface etreeInterface = getEtreeInterfaceByElanInterfaceName(interfaceName);
         if (etreeInterface != null && etreeInterface.getEtreeInterfaceType() == EtreeInterfaceType.Root) {
             return true;
diff --git a/vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/elanservice/impl/rev150216/ElanServiceImplModule.java b/vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/elanservice/impl/rev150216/ElanServiceImplModule.java
deleted file mode 100644 (file)
index 05236f0..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.elanservice.impl.rev150216;
-
-import org.opendaylight.netvirt.elan.internal.ElanServiceProvider;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-
-public class ElanServiceImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.elanservice.impl.rev150216.AbstractElanServiceImplModule {
-    public ElanServiceImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
-        super(identifier, dependencyResolver);
-    }
-
-    public ElanServiceImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.elanservice.impl.rev150216.ElanServiceImplModule oldModule, java.lang.AutoCloseable oldInstance) {
-        super(identifier, dependencyResolver, oldModule, oldInstance);
-    }
-
-    @Override
-    public void customValidation() {
-        // add custom validation form module attributes here.
-    }
-
-    @Override
-    public java.lang.AutoCloseable createInstance() {
-        RpcProviderRegistry rpcregistryDependency = getRpcregistryDependency();
-        IdManagerService idManager = rpcregistryDependency.getRpcService(IdManagerService.class);
-        ElanServiceProvider provider = new ElanServiceProvider(rpcregistryDependency);
-        provider.setNotificationService(getNotificationServiceDependency());
-        provider.setMdsalManager(getMdsalutilDependency());
-        provider.setInterfaceManager(getOdlinterfaceDependency());
-        provider.setInterfaceManagerRpcService(rpcregistryDependency.getRpcService(OdlInterfaceRpcService.class));
-        provider.setItmRpcService(rpcregistryDependency.getRpcService(ItmRpcService.class));
-        provider.setItmManager(getItmmanagerDependency());
-        provider.setIdManager(idManager);
-        provider.setEntityOwnershipService(getEntityOwnershipServiceDependency());
-        provider.setGenerateIntBridgeMac(getIntBridgeGenMac());
-        getBrokerDependency().registerProvider(provider);
-        return provider;
-    }
-
-}
diff --git a/vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/elanservice/impl/rev150216/ElanServiceImplModuleFactory.java b/vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/elanservice/impl/rev150216/ElanServiceImplModuleFactory.java
deleted file mode 100644 (file)
index 3baee24..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.elanservice.impl.rev150216;
-public class ElanServiceImplModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.elanservice.impl.rev150216.AbstractElanServiceImplModuleFactory {
-
-}
similarity index 94%
rename from vpnservice/elanmanager/elanmanager-impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml
rename to vpnservice/elanmanager/elanmanager-impl/src/main/resources/org/opendaylight/blueprint/commands.xml
index 0981f3c8001eab2f587180bdf4c2c976f967fb0e..b43cd9a9a6b2990c17097cecd1164e25b1b9be17 100644 (file)
@@ -4,6 +4,8 @@
     <reference id="interfaceManagerRef"
         interface="org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager"
         availability="optional" />
+    <reference id="elanUtilsRef" interface="org.opendaylight.netvirt.elan.utils.ElanUtils"
+        availability="optional" />
     <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
         <command>
             <action class="org.opendaylight.netvirt.elan.cli.ElanAdd">
             <action class="org.opendaylight.netvirt.elan.cli.etree.EtreeInterfaceGet">
                 <property name="elanProvider" ref="elanProviderRef" />
                 <property name="interfaceManager" ref="interfaceManagerRef" />
+                <property name="elanUtils" ref="elanUtilsRef" />
             </action>
         </command>
         <command>
             <action class="org.opendaylight.netvirt.elan.cli.etree.EtreeInterfaceDelete">
                 <property name="elanProvider" ref="elanProviderRef" />
+                <property name="elanUtils" ref="elanUtilsRef" />
             </action>
         </command>
     </command-bundle>
diff --git a/vpnservice/elanmanager/elanmanager-impl/src/main/resources/org/opendaylight/blueprint/elanmanager.xml b/vpnservice/elanmanager/elanmanager-impl/src/main/resources/org/opendaylight/blueprint/elanmanager.xml
new file mode 100644 (file)
index 0000000..ef78656
--- /dev/null
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+  xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+  odl:use-default-for-reference-types="true">
+
+  <reference id="dataBroker"
+    interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+    odl:type="pingpong" />
+  <reference id="notificationService"
+    interface="org.opendaylight.controller.md.sal.binding.api.NotificationService" />
+  <reference id="entityOwnershipService"
+    interface="org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService" />
+  <reference id="mdsalUtils"
+    interface="org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager" />
+  <reference id="interfaceManager"
+    interface="org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager" />
+
+  <odl:rpc-service id="odlInterfaceRpcService"
+    interface="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService" />
+  <odl:rpc-service id="itmRpcService"
+    interface="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService" />
+  <odl:rpc-service id="salFlowService"
+    interface="org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService" />
+  <odl:rpc-service id="idManagerService"
+    interface="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService" />
+
+  <bean id="elanForwardingEntriesHandler" class="org.opendaylight.netvirt.elan.utils.ElanForwardingEntriesHandler"
+    destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="elanUtils" />
+  </bean>
+
+  <bean id="elanInterfaceManager"
+    class="org.opendaylight.netvirt.elan.internal.ElanInterfaceManager"
+    destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="idManagerService" />
+    <argument ref="mdsalUtils" />
+    <argument ref="interfaceManager" />
+    <argument ref="elanForwardingEntriesHandler" />
+    <argument ref="elanL2GatewayUtils" />
+    <argument ref="elanUtils" />
+  </bean>
+
+  <bean id="elanInstanceManager"
+    class="org.opendaylight.netvirt.elan.internal.ElanInstanceManager"
+    init-method="init" destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="idManagerService" />
+    <argument ref="elanInterfaceManager" />
+    <argument ref="interfaceManager" />
+    <argument ref="elanUtils" />
+  </bean>
+
+  <bean id="elanNodeListener"
+    class="org.opendaylight.netvirt.elan.internal.ElanNodeListener"
+    destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="mdsalUtils" />
+  </bean>
+
+  <bean id="elanPacketInHandler"
+    class="org.opendaylight.netvirt.elan.internal.ElanPacketInHandler">
+    <argument ref="dataBroker" />
+    <argument ref="interfaceManager" />
+    <argument ref="elanUtils" />
+    <argument ref="elanL2GatewayUtils" />
+  </bean>
+  <odl:notification-listener ref="elanPacketInHandler" />
+
+  <bean id="elanSmacFlowEventListener"
+    class="org.opendaylight.netvirt.elan.internal.ElanSmacFlowEventListener">
+    <argument ref="dataBroker" />
+    <argument ref="interfaceManager" />
+  </bean>
+  <odl:notification-listener ref="elanSmacFlowEventListener" />
+
+  <bean id="elanUtils" class="org.opendaylight.netvirt.elan.utils.ElanUtils">
+    <argument ref="dataBroker" />
+    <argument ref="mdsalUtils" />
+    <argument ref="elanInstanceManager" />
+    <argument ref="odlInterfaceRpcService" />
+    <argument ref="itmRpcService" />
+  </bean>
+
+  <bean id="elanStatisticsImpl" class="org.opendaylight.netvirt.elan.statisitcs.ElanStatisticsImpl">
+    <argument ref="dataBroker" />
+    <argument ref="interfaceManager" />
+    <argument ref="mdsalUtils" />
+    <argument ref="elanUtils" />
+  </bean>
+  <odl:rpc-implementation ref="elanStatisticsImpl" />
+
+  <bean id="elanInterfaceStateChangeListener"
+    class="org.opendaylight.netvirt.elan.internal.ElanInterfaceStateChangeListener">
+    <argument ref="dataBroker" />
+    <argument ref="elanInterfaceManager" />
+    <argument ref="interfaceManager" />
+    <argument ref="elanUtils" />
+  </bean>
+
+  <bean id="elanInterfaceStateClusterListener"
+    class="org.opendaylight.netvirt.elan.internal.ElanInterfaceStateClusteredListener"
+    init-method="init" destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="elanInterfaceManager" />
+    <argument ref="elanUtils" />
+    <argument ref="entityOwnershipService" />
+  </bean>
+
+  <bean id="elanInterfaceClusterListener"
+    class="org.opendaylight.netvirt.elan.internal.ElanDpnInterfaceClusteredListener">
+    <argument ref="dataBroker" />
+    <argument ref="entityOwnershipService" />
+    <argument ref="elanL2GatewayUtils" />
+  </bean>
+
+  <bean id="elanService" class="org.opendaylight.netvirt.elan.internal.ElanServiceProvider"
+    init-method="init">
+    <argument ref="idManagerService" />
+    <argument ref="interfaceManager" />
+    <argument ref="elanInstanceManager" />
+    <argument ref="elanBridgeManager" />
+    <argument ref="dataBroker" />
+    <argument ref="elanStatusMonitor" />
+    <argument ref="elanUtils" />
+  </bean>
+  <service ref="elanService" odl:type="default" interface="org.opendaylight.netvirt.elanmanager.api.IElanService" />
+
+  <bean id="elanL2GatewayUtils" class="org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayUtils">
+    <argument ref="dataBroker" />
+    <argument ref="itmRpcService" />
+    <argument ref="elanUtils" />
+    <argument ref="entityOwnershipService" />
+  </bean>
+
+  <bean id="cacheElanInterfaceListener" class="org.opendaylight.netvirt.elan.utils.CacheElanInterfaceListener"
+    init-method="init" destroy-method="close">
+    <argument ref="dataBroker" />
+  </bean>
+
+  <bean id="hwvtepLocalUcastMacListener" class="org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepLocalUcastMacListener"
+    init-method="init" destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="elanL2GatewayUtils" />
+  </bean>
+
+  <bean id="elanStatusMonitor" class="org.opendaylight.netvirt.elan.statusanddiag.ElanStatusMonitor"
+    init-method="init" />
+
+  <bean id="l2GatewayConnectionListener"
+    class="org.opendaylight.netvirt.elan.l2gw.listeners.L2GatewayConnectionListener"
+    destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="elanInstanceManager" />
+    <argument ref="l2GatewayConnectionUtils" />
+  </bean>
+
+  <bean id="hwvtepPhysicalSwitchListener"
+    class="org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepPhysicalSwitchListener"
+    init-method="init" destroy-method="close">
+    <argument ref="dataBroker" />
+    <argument ref="itmRpcService" />
+    <argument ref="entityOwnershipService" />
+    <argument ref="l2GatewayConnectionUtils" />
+  </bean>
+
+  <bean id="hwvtepTerminationPointListener"
+    class="org.opendaylight.netvirt.elan.l2gw.listeners.HwvtepTerminationPointListener"
+    destroy-method="close">
+    <argument ref="broker" />
+    <argument ref="elanL2GatewayUtils" />
+    <argument ref="entityOwnershipService" />
+  </bean>
+</blueprint>
\ No newline at end of file
diff --git a/vpnservice/elanmanager/elanmanager-impl/src/main/yang/elanservice-impl.yang b/vpnservice/elanmanager/elanmanager-impl/src/main/yang/elanservice-impl.yang
deleted file mode 100644 (file)
index de190cc..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-module elanservice-impl {
-    yang-version 1;
-    namespace "urn:opendaylight:params:xml:ns:yang:elanservice:impl";
-    prefix "elanservice-impl";
-
-    import config { prefix config; revision-date 2013-04-05; }
-    import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
-    import opendaylight-sal-binding-broker-impl { prefix md-sal-binding-impl; revision-date 2013-10-28;}
-    import opendaylight-entity-ownership-service { prefix eos; revision-date 2015-08-10;}
-    import elanmanager-api { prefix elanmgr-api; revision-date 2015-07-07;}
-    import odl-mdsalutil { prefix odl-mdsal; revision-date 2016-04-06;}
-    import odl-interface {prefix odlif; revision-date 2016-04-06;}
-    import itm {prefix itm; revision-date 2016-04-06;}
-
-    description
-        "Service definition for elanservice project";
-
-    revision "2015-02-16" {
-        description
-            "Initial revision";
-    }
-
-    identity elanservice-impl {
-        base config:module-type;
-        config:provided-service elanmgr-api:elanmanager-api;
-        config:java-name-prefix elanServiceImpl;
-    }
-
-    augment "/config:modules/config:module/config:configuration" {
-        case elanservice-impl {
-            when "/config:modules/config:module/config:type = 'elanservice-impl'";
-            container broker {
-                uses config:service-ref {
-                    refine type {
-                        mandatory true;
-                        config:required-identity md-sal-binding:binding-broker-osgi-registry;
-                    }
-                }
-            }
-            container rpcregistry {
-                uses config:service-ref {
-                    refine type {
-                        mandatory true;
-                        config:required-identity md-sal-binding:binding-rpc-registry;
-                    }
-                }
-            }
-            container mdsalutil {
-                uses config:service-ref {
-                    refine type {
-                        mandatory true;
-                        config:required-identity odl-mdsal:odl-mdsalutil;
-                    }
-                }
-            }
-            container odlinterface {
-                uses config:service-ref {
-                    refine type {
-                        mandatory true;
-                        config:required-identity odlif:odl-interface;
-                    }
-                }
-            }
-            container itmmanager {
-                uses config:service-ref {
-                    refine type {
-                        mandatory true;
-                        config:required-identity itm:itm;
-                    }
-                }
-            }
-            container notification-service {
-                uses config:service-ref {
-                    refine type {
-                        mandatory true;
-                        config:required-identity md-sal-binding-impl:binding-new-notification-service;
-                    }
-                }
-            }
-            container entity-ownership-service {
-                uses config:service-ref {
-                    refine type {
-                        mandatory true;
-                        config:required-identity eos:entity-ownership-service;
-                    }
-                }
-            }
-            leaf int-bridge-gen-mac {
-                type boolean;
-            }
-        }
-    }
-}
\ No newline at end of file
index be8d6fe92bde76a4ffc6ab9be93e22a5c40eb9a2..78764a3956bbb8d449fe530904c419159b9b04ad 100644 (file)
@@ -169,13 +169,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
       <artifactId>elanmanager-impl</artifactId>
       <version>${elanmgr.version}</version>
     </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>elanmanager-impl</artifactId>
-      <version>${elanmgr.version}</version>
-      <classifier>config</classifier>
-      <type>xml</type>
-    </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>elanmanager-api</artifactId>
index 6573d70eeffd3643d1c719104fc9b6ea60a848eb..a047e8d91b53fb2080011307497bcfa9e1b4059c 100644 (file)
@@ -75,7 +75,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <bundle>mvn:org.opendaylight.ovsdb/utils.mdsal-utils/{{VERSION}}</bundle>
     <bundle>mvn:org.opendaylight.ovsdb/utils.southbound-utils/{{VERSION}}</bundle>
     <bundle>wrap:mvn:org.apache.thrift/libthrift/0.9.1$overwrite=merge&amp;Bundle-Version=0.9.1&amp;Export-Package=*;-noimport:=true;version="0.9.1"</bundle>
-    <configfile finalname="${configfile.directory}/elanmanager-impl-default-config.xml">mvn:org.opendaylight.netvirt/elanmanager-impl/{{VERSION}}/xml/config</configfile>
     <!--<configfile finalname="${configfile.directory}/cloud-servicechain-impl-default-config.xml">mvn:org.opendaylight.netvirt/cloud-servicechain-impl/{{VERSION}}/xml/config</configfile>-->
   </feature>
 
index e3392cef9cf77079cc6bddde78bd5e66b210aa99..4e54518775a0fa9f103d29f8e605296054dd9248 100644 (file)
@@ -38,7 +38,6 @@ public class ConfigStateManager {
     }
 
     private void initReady() {
-        readyMap.put("elanservice-impl", Pair.of("elanservice-default", false));
     }
 
     private void getServices() {