Rename MdsalUtils to be Southbound and remove statics
authorSam Hague <shague@redhat.com>
Wed, 27 May 2015 20:18:59 +0000 (16:18 -0400)
committerSam Hague <shague@redhat.com>
Wed, 27 May 2015 21:05:48 +0000 (17:05 -0400)
Change-Id: I621d9c8a4d31bce707b64cc70de7c872963f9ba3
Signed-off-by: Sam Hague <shague@redhat.com>
34 files changed:
openstack/net-virt-it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/it/NetvirtIT.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/AbstractServiceInstance.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13Provider.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/PipelineOrchestratorImpl.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ArpResponderService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ClassifierService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/EgressAclService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/InboundNatService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/IngressAclService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/L2ForwardingService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/L2RewriteService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/L3ForwardingService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/LoadBalancerService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/OutboundNatService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/RoutingService.java
openstack/net-virt/src/main/config/default-config.xml
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/ConfigActivator.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalHelper.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NetworkHandler.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/PortHandler.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundHandler.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java [new file with mode: 0644]
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/ConfigurationServiceImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/MdsalUtils.java [new file with mode: 0644]
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NodeCacheManagerImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbDataChangeListener.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbInventoryServiceImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java [moved from openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalUtils.java with 72% similarity]
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/TenantNetworkManagerImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/VlanConfigurationCacheImpl.java
openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImplTest.java

index 4faf64bc9ac6f6feae3b3a6e7fee2df7af41767d..79c1d538fa8376004db643043ed13ff713f43f78 100644 (file)
@@ -19,6 +19,7 @@ import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
 import javax.inject.Inject;
 import org.junit.Assert;
 import org.junit.Before;
@@ -27,6 +28,9 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
+import org.opendaylight.ovsdb.openstack.netvirt.impl.*;
+import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.*;
@@ -71,8 +75,9 @@ public class NetvirtIT extends AbstractMdsalTestBase {
     private static String addressStr;
     private static String portStr;
     private static String connectionType;
-    private static Boolean setup = false;
+    private static AtomicBoolean setup = new AtomicBoolean(false);
     private static MdsalUtils mdsalUtils = null;
+    private static Southbound southbound = null;
     private static final String NETVIRT = "org.opendaylight.ovsdb.openstack.net-virt";
     private static final String NETVIRTPROVIDERS = "org.opendaylight.ovsdb.openstack.net-virt-providers";
 
@@ -166,7 +171,7 @@ public class NetvirtIT extends AbstractMdsalTestBase {
 
     @Before
     public void setUp() throws InterruptedException {
-        if (setup == true) {
+        if (setup.get()) {
             LOG.info("Skipping setUp, already initialized");
             return;
         }
@@ -195,21 +200,22 @@ public class NetvirtIT extends AbstractMdsalTestBase {
         //dataBroker = getSession().getSALService(DataBroker.class);
         //Thread.sleep(3000);
         //dataBroker = OvsdbInventoryServiceImpl.getDataBroker();
-        for (int i=0; i<10; i++) {
-            dataBroker = org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils.getDatabroker();
-            if (dataBroker == null) {
-                LOG.warn("NetvirtIT: dataBroker is null");
-                Thread.sleep(5000);
-                continue;
-            } else {
-                break;
+        for (int i=0; i<20; i++) {
+            southbound = (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
+            if (southbound != null) {
+                dataBroker = southbound.getDatabroker();
+                if (dataBroker != null) {
+                    break;
+                }
             }
+            LOG.warn("NetvirtIT: dataBroker is null");
+            Thread.sleep(5000);
         }
         Assert.assertNotNull("dataBroker should not be null", dataBroker);
         Thread.sleep(5000);
 
         mdsalUtils = new MdsalUtils(dataBroker);
-        setup = true;
+        setup.set(true);
     }
 
     /**
@@ -580,6 +586,7 @@ public class NetvirtIT extends AbstractMdsalTestBase {
         Assert.assertTrue(disconnectOvsdbNode(connectionInfo));
     }
 
+    @Ignore
     @Test
     public void testNetVirt2() throws InterruptedException {
         Thread.sleep(60000);
@@ -588,7 +595,7 @@ public class NetvirtIT extends AbstractMdsalTestBase {
     @Test
     public void testReadOvsdbTopologyNodes() throws InterruptedException {
         Thread.sleep(10000);
-        List<Node> ovsdbNodes = org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils.readOvsdbTopologyNodes();
+        List<Node> ovsdbNodes = southbound.readOvsdbTopologyNodes();
         for (Node node : ovsdbNodes) {
             LOG.info(">>>>> node: {}", node);
         }
index 418c567ae296ad2d9e65f26694c1c1f3a057c61b..a07510d9936a5c867202c4e227710f417c966325 100644 (file)
@@ -15,8 +15,8 @@ import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.InstructionUtils;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
@@ -36,12 +36,10 @@ 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.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 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 com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.CheckedFuture;
 import java.util.List;
@@ -65,6 +63,7 @@ public abstract class AbstractServiceInstance {
     private DataBroker dataBroker = null;
     // OSGi Services that we are dependent on.
     private volatile PipelineOrchestrator orchestrator;
+    private volatile Southbound southbound;
 
     // Concrete Service that this AbstractServiceInstance represents
     private Service service;
@@ -74,14 +73,16 @@ public abstract class AbstractServiceInstance {
         this.dataBroker = NetvirtProvidersProvider.getDataBroker();
     }
 
-    protected void setOrchestrator(final ServiceReference ref, AbstractServiceInstance serviceInstance) {
+    protected void setDependencies(final ServiceReference ref, AbstractServiceInstance serviceInstance) {
         this.orchestrator =
                 (PipelineOrchestrator) ServiceHelper.getGlobalInstance(PipelineOrchestrator.class, serviceInstance);
         orchestrator.registerService(ref, serviceInstance);
+        this.southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, serviceInstance);
     }
-
+    
     public boolean isBridgeInPipeline (Node node){
-        String bridgeName = MdsalUtils.getBridgeName(node);
+        String bridgeName = southbound.getBridgeName(node);
         if (bridgeName != null && Constants.INTEGRATION_BRIDGE.equals(bridgeName)) {
             return true;
         }
@@ -193,7 +194,7 @@ public abstract class AbstractServiceInstance {
 
     private Long getDpid(Node node) {
         Long dpid = 0L;
-        dpid = MdsalUtils.getDataPathId(node);
+        dpid = southbound.getDataPathId(node);
         if (dpid == 0) {
             logger.warn("getDpid: dpid not found: {}", node);
         }
index fb19447eee8e8c3aef92d85b2b3b4a3a7900933d..facbd6a31d6ba80ef3c95c6e3c4ae1397e149d1c 100644 (file)
@@ -16,8 +16,21 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFaile
 import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.ovsdb.openstack.netvirt.MdsalHelper;
 import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler;
-import org.opendaylight.ovsdb.openstack.netvirt.api.*;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.ClassifierProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
+import org.opendaylight.ovsdb.openstack.netvirt.api.EgressAclProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.api.IngressAclProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.api.L2ForwardingProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
+import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
+import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.InstructionUtils;
@@ -112,6 +125,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
     public static final String NAME = "OF13Provider";
     private volatile NetworkingProviderManager networkingProviderManager;
     private volatile BundleContext bundleContext;
+    private volatile Southbound southbound;
 
     public OF13Provider() {
         this.dataBroker = NetvirtProvidersProvider.getDataBroker();
@@ -159,8 +173,8 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
         String tunnelBridgeName = configurationService.getIntegrationBridgeName();
         String portName = getTunnelName(tunnelType, dst);
         logger.info("addTunnelPort enter: portName: {}", portName);
-        if (MdsalUtils.extractTerminationPointAugmentation(node, portName) != null
-                || MdsalUtils.isTunnelTerminationPointExist(node,tunnelBridgeName,portName)) {
+        if (southbound.extractTerminationPointAugmentation(node, portName) != null
+                || southbound.isTunnelTerminationPointExist(node, tunnelBridgeName, portName)) {
             logger.info("Tunnel {} is present in {} of {}", portName, tunnelBridgeName, node.getNodeId().getValue());
             return true;
         }
@@ -170,12 +184,12 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
         options.put("local_ip", src.getHostAddress());
         options.put("remote_ip", dst.getHostAddress());
 
-        if (!MdsalUtils.addTunnelTerminationPoint(node, tunnelBridgeName, portName, tunnelType, options)) {
+        if (!southbound.addTunnelTerminationPoint(node, tunnelBridgeName, portName, tunnelType, options)) {
             logger.error("Failed to insert Tunnel port {} in {}", portName, tunnelBridgeName);
             return false;
         }
 
-        logger.info("addTunnelPort exit: portName: {}", portName);
+            logger.info("addTunnelPort exit: portName: {}", portName);
         return true;
     }
 
@@ -183,7 +197,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
     private boolean deletePort(Node node, String bridgeName, String portName) {
         // TODO SB_MIGRATION
         // might need to convert from ovsdb node to bridge node
-        return MdsalUtils.deleteTerminationPoint(node, portName);
+        return southbound.deleteTerminationPoint(node, portName);
     }
 
     private boolean deleteTunnelPort(Node node, String tunnelType, InetAddress src, InetAddress dst) {
@@ -672,7 +686,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
 
     private Long getDpid(Node node) {
         Long dpid = 0L;
-        dpid = MdsalUtils.getDataPathId(node);
+        dpid = southbound.getDataPathId(node);
         if (dpid == 0) {
             logger.warn("getDpid: dpid not found: {}", node);
         }
@@ -681,7 +695,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
 
     private Long getIntegrationBridgeOFDPID(Node node) {
         Long dpid = 0L;
-        if (MdsalUtils.getBridgeName(node).equals(configurationService.getIntegrationBridgeName())) {
+        if (southbound.getBridgeName(node).equals(configurationService.getIntegrationBridgeName())) {
             dpid = getDpid(node);
         }
         return dpid;
@@ -689,7 +703,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
 
     private Long getExternalBridgeDpid(Node node) {
         Long dpid = 0L;
-        if (MdsalUtils.getBridgeName(node).equals(configurationService.getExternalBridgeName())) {
+        if (southbound.getBridgeName(node).equals(configurationService.getExternalBridgeName())) {
             dpid = getDpid(node);
         }
         return dpid;
@@ -707,13 +721,13 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                 return;
             }
 
-            long localPort = MdsalUtils.getOFPort(intf);
+            long localPort = southbound.getOFPort(intf);
             if (localPort == 0) {
                 logger.info("programLocalRules: could not find ofPort");
                 return;
             }
 
-            String attachedMac = MdsalUtils.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
+            String attachedMac = southbound.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
             if (attachedMac == null) {
                 logger.warn("No AttachedMac seen in {}", intf);
                 return;
@@ -761,13 +775,13 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                 return;
             }
 
-            long localPort = MdsalUtils.getOFPort(intf);
+            long localPort = southbound.getOFPort(intf);
             if (localPort == 0) {
                 logger.info("removeLocalRules: could not find ofPort");
                 return;
             }
 
-            String attachedMac = MdsalUtils.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
+            String attachedMac = southbound.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
             if (attachedMac == null) {
                 logger.warn("No AttachedMac seen in {}", intf);
                 return;
@@ -803,22 +817,22 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                 return;
             }
 
-            long localPort = MdsalUtils.getOFPort(intf);
+            long localPort = southbound.getOFPort(intf);
             if (localPort == 0) {
                 logger.info("programTunnelRules: could not find ofPort");
                 return;
             }
 
-            String attachedMac = MdsalUtils.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
+            String attachedMac = southbound.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
             if (attachedMac == null) {
                 logger.warn("programTunnelRules: No AttachedMac seen in {}", intf);
                 return;
             }
 
-            List<OvsdbTerminationPointAugmentation> intfs = MdsalUtils.getTerminationPointsOfBridge(node);
+            List<OvsdbTerminationPointAugmentation> intfs = southbound.getTerminationPointsOfBridge(node);
             for (OvsdbTerminationPointAugmentation tunIntf : intfs) {
                 if (tunIntf.getName().equals(getTunnelName(tunnelType, dst))) {
-                    long tunnelOFPort = MdsalUtils.getOFPort(tunIntf);
+                    long tunnelOFPort = southbound.getOFPort(tunIntf);
                     if (tunnelOFPort == 0) {
                         logger.error("programTunnelRules: Could not Identify Tunnel port {} -> OF ({}) on {}",
                                 tunIntf.getName(), tunnelOFPort, node);
@@ -861,22 +875,22 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                 return;
             }
 
-            long localPort = MdsalUtils.getOFPort(intf);
+            long localPort = southbound.getOFPort(intf);
             if (localPort == 0) {
                 logger.info("removeTunnelRules: could not find ofPort");
                 return;
             }
 
-            String attachedMac = MdsalUtils.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
+            String attachedMac = southbound.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
             if (attachedMac == null) {
                 logger.error("removeTunnelRules: No AttachedMac seen in {}", intf);
                 return;
             }
 
-            List<OvsdbTerminationPointAugmentation> intfs = MdsalUtils.getTerminationPointsOfBridge(node);
+            List<OvsdbTerminationPointAugmentation> intfs = southbound.getTerminationPointsOfBridge(node);
             for (OvsdbTerminationPointAugmentation tunIntf : intfs) {
                 if (tunIntf.getName().equals(getTunnelName(tunnelType, dst))) {
-                    long tunnelOFPort = MdsalUtils.getOFPort(tunIntf);
+                    long tunnelOFPort = southbound.getOFPort(tunIntf);
                     if (tunnelOFPort == -1) {
                         logger.error("Could not Identify Tunnel port {} -> OF ({}) on {}",
                                 tunIntf.getName(), tunnelOFPort, node);
@@ -909,13 +923,13 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
             return;
         }
 
-        long localPort = MdsalUtils.getOFPort(intf);
+        long localPort = southbound.getOFPort(intf);
         if (localPort == 0) {
             logger.debug("programVlanRules: could not find ofPort for {}", intf.getName());
             return;
         }
 
-        String attachedMac = MdsalUtils.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
+        String attachedMac = southbound.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
         if (attachedMac == null) {
             logger.debug("programVlanRules: No AttachedMac seen in {}", intf);
             return;
@@ -923,7 +937,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
 
         String phyIfName =
                 bridgeConfigurationManager.getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
-        long ethOFPort = MdsalUtils.getOFPort(node, phyIfName);
+        long ethOFPort = southbound.getOFPort(node, phyIfName);
         if (ethOFPort == 0) {
             logger.warn("programVlanRules: could not find ofPort for physical port {}", phyIfName);
             return;
@@ -947,13 +961,13 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
             return;
         }
 
-        long localPort = MdsalUtils.getOFPort(intf);
+        long localPort = southbound.getOFPort(intf);
         if (localPort == 0) {
             logger.debug("removeVlanRules: programVlanRules: could not find ofPort for {}", intf.getName());
             return;
         }
 
-        String attachedMac = MdsalUtils.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
+        String attachedMac = southbound.getInterfaceExternalIdsValue(intf, Constants.EXTERNAL_ID_VM_MAC);
         if (attachedMac == null) {
             logger.debug("removeVlanRules: No AttachedMac seen in {}", intf);
             return;
@@ -961,7 +975,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
 
         String phyIfName =
                 bridgeConfigurationManager.getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
-        long ethOFPort = MdsalUtils.getOFPort(node, phyIfName);
+        long ethOFPort = southbound.getOFPort(node, phyIfName);
         if (ethOFPort == 0) {
             logger.warn("removeVlanRules: could not find ofPort for physical port {}", phyIfName);
             return;
@@ -982,10 +996,10 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
         Preconditions.checkNotNull(nodeCacheManager);
         Map<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId,Node> nodes =
                 nodeCacheManager.getOvsdbNodes();
-        nodes.remove(MdsalUtils.extractBridgeOvsdbNodeId(srcNode));
+        nodes.remove(southbound.extractBridgeOvsdbNodeId(srcNode));
         String networkType = network.getProviderNetworkType();
         String segmentationId = network.getProviderSegmentationID();
-        Node srcBridgeNode = MdsalUtils.getBridgeNode(srcNode,configurationService.getIntegrationBridgeName());
+        Node srcBridgeNode = southbound.getBridgeNode(srcNode, configurationService.getIntegrationBridgeName());
         programLocalRules(networkType, network.getProviderSegmentationID(), srcBridgeNode, intf);
 
         if (networkType.equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VLAN)) {
@@ -996,7 +1010,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                 InetAddress src = configurationService.getTunnelEndPoint(srcNode);
                 InetAddress dst = configurationService.getTunnelEndPoint(dstNode);
                 if ((src != null) && (dst != null)) {
-                    Node dstBridgeNode = MdsalUtils.getBridgeNode(dstNode,
+                    Node dstBridgeNode = southbound.getBridgeNode(dstNode,
                             configurationService.getIntegrationBridgeName());
                     if (addTunnelPort(srcBridgeNode, networkType, src, dst)) {
                         programTunnelRules(networkType, segmentationId, dst, srcBridgeNode, intf, true);
@@ -1018,7 +1032,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
 
     private void triggerInterfaceUpdates(Node node) {
         logger.debug("enter triggerInterfaceUpdates for {}", node.getNodeId());
-        List<OvsdbTerminationPointAugmentation> ports = MdsalUtils.extractTerminationPointAugmentations(node);
+        List<OvsdbTerminationPointAugmentation> ports = southbound.extractTerminationPointAugmentations(node);
         if (ports != null && !ports.isEmpty()) {
             for (OvsdbTerminationPointAugmentation port : ports) {
                 NeutronNetwork neutronNetwork = tenantNetworkManager.getTenantNetwork(port);
@@ -1038,17 +1052,17 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                                          OvsdbTerminationPointAugmentation intf, boolean isLastInstanceOnNode) {
         Map<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId,Node> nodes =
                 nodeCacheManager.getOvsdbNodes();
-        nodes.remove(MdsalUtils.extractBridgeOvsdbNodeId(srcNode));
+        nodes.remove(southbound.extractBridgeOvsdbNodeId(srcNode));
 
         logger.info("Delete intf " + intf.getName() + " isLastInstanceOnNode " + isLastInstanceOnNode);
         List<String> phyIfName = bridgeConfigurationManager.getAllPhysicalInterfaceNames(srcNode);
-        if (MdsalUtils.isTunnel(intf)) {
+        if (southbound.isTunnel(intf)) {
             // Delete tunnel port
             try {
                 InetAddress src = InetAddress.getByName(
-                        MdsalUtils.getOptionsValue(intf.getOptions(), "local_ip"));
+                        southbound.getOptionsValue(intf.getOptions(), "local_ip"));
                 InetAddress dst = InetAddress.getByName(
-                        MdsalUtils.getOptionsValue(intf.getOptions(), "remote_ip"));
+                        southbound.getOptionsValue(intf.getOptions(), "remote_ip"));
                 deleteTunnelPort(srcNode,
                         MdsalHelper.createOvsdbInterfaceType(intf.getInterfaceType()),
                         src, dst);
@@ -1075,7 +1089,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                                 + intf.getName() + " on srcNode " + srcNode.getNodeId().getValue());
                         removeTunnelRules(tunnelType, network.getProviderSegmentationID(),
                                 dst, srcNode, intf, true, isLastInstanceOnNode);
-                        Node dstBridgeNode = MdsalUtils.getBridgeNode(dstNode, Constants.INTEGRATION_BRIDGE);
+                        Node dstBridgeNode = southbound.getBridgeNode(dstNode, Constants.INTEGRATION_BRIDGE);
                         if(dstBridgeNode != null){
                             logger.info("Remove tunnel rules for interface "
                                     + intf.getName() + " on dstNode " + dstNode.getNodeId().getValue());
@@ -1103,8 +1117,8 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
     }
 
     private void initializeFlowRules(Node node, String bridgeName) {
-        Long dpid = MdsalUtils.getDataPathId(node);
-        String datapathId = MdsalUtils.getDatapathId(node);
+        Long dpid = southbound.getDataPathId(node);
+        String datapathId = southbound.getDatapathId(node);
         logger.info("initializeFlowRules: bridgeName: {}, dpid: {} - {}",
                 bridgeName, dpid, datapathId);
 
@@ -1804,7 +1818,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
 
     @Override
     public void initializeOFFlowRules(Node openflowNode) {
-        String bridgeName = MdsalUtils.getBridgeName(openflowNode);
+        String bridgeName = southbound.getBridgeName(openflowNode);
         logger.info("initializeOFFlowRules: bridgeName: {}", bridgeName);
         if (bridgeName.equals(configurationService.getIntegrationBridgeName())) {
             initializeFlowRules(openflowNode, configurationService.getIntegrationBridgeName());
@@ -1845,7 +1859,8 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                 (L2ForwardingProvider) ServiceHelper.getGlobalInstance(L2ForwardingProvider.class, this);
         securityServicesManager =
                 (SecurityServicesManager) ServiceHelper.getGlobalInstance(SecurityServicesManager.class, this);
-
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
     }
 
     @Override
index 3b342e1dd03d63f0f3228884e9e2b60733886519..dce4a39a87f8601690b83ae61b02baa706ad810c 100644 (file)
@@ -18,7 +18,7 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheListener;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
@@ -48,6 +48,7 @@ public class PipelineOrchestratorImpl implements ConfigInterface, NodeCacheListe
     Map<Service, AbstractServiceInstance> serviceRegistry = Maps.newConcurrentMap();
     private volatile BlockingQueue<Node> queue;
     private ExecutorService eventHandler;
+    private Southbound southbound;
 
     public PipelineOrchestratorImpl() {
         eventHandler = Executors.newSingleThreadExecutor();
@@ -97,7 +98,7 @@ public class PipelineOrchestratorImpl implements ConfigInterface, NodeCacheListe
                             AbstractServiceInstance serviceInstance = getServiceInstance(service);
                             //logger.info("pipeline: {} - {}", service, serviceInstance);
                             if (serviceInstance != null) {
-                                if (MdsalUtils.getBridge(node) != null) {
+                                if (southbound.getBridge(node) != null) {
                                     serviceInstance.programDefaultPipelineRule(node);
                                 }
                             }
@@ -145,10 +146,10 @@ public class PipelineOrchestratorImpl implements ConfigInterface, NodeCacheListe
                 (NodeCacheManager) ServiceHelper.getGlobalInstance(NodeCacheManager.class, this);
         nodeCacheManager.cacheListenerAdded(
                 bundleContext.getServiceReference(PipelineOrchestrator.class.getName()), this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
     }
 
     @Override
-    public void setDependencies(Object impl) {
-
-    }
+    public void setDependencies(Object impl) {}
 }
index 4f807961513488c5b20249aae094f56fd670dd59..250e03f4e36ae007b3f482d35cbe53efd2b951dc 100644 (file)
@@ -16,7 +16,6 @@ import java.util.List;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
 import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.ConfigInterface;
@@ -25,7 +24,6 @@ import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provide
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.ActionUtils;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.MatchUtils;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
@@ -161,7 +159,7 @@ public class ArpResponderService extends AbstractServiceInstance implements ArpP
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(ArpProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(ArpProvider.class.getName()), this);
     }
 
     @Override
index 0571d1b5730e4c4501227b8cbc1e41bf709d1ca3..1eb2f1257b3d0c60100c3a9abb7d0aa679194aa1 100644 (file)
@@ -12,10 +12,7 @@ package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 import java.math.BigInteger;
 import java.util.List;
 
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ClassifierProvider;
-import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
@@ -460,7 +457,7 @@ public class ClassifierService extends AbstractServiceInstance implements Classi
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(ClassifierProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(ClassifierProvider.class.getName()), this);
     }
 
     @Override
index 79219d463c1fa42f246079f334c24d0246772ddd..fdf4807c08b634467b72b08735ad3390d88a594a 100644 (file)
@@ -16,7 +16,6 @@ import org.opendaylight.neutron.spi.NeutronSecurityGroup;
 import org.opendaylight.neutron.spi.NeutronSecurityRule;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.EgressAclProvider;
-import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
@@ -473,7 +472,7 @@ public class EgressAclService extends AbstractServiceInstance implements EgressA
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(EgressAclProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(EgressAclProvider.class.getName()), this);
     }
 
     @Override
index 96310a1b79d552cb4434c1b715420f270eed36cb..7c63f5f38971fdce236d9e17a4bc1a2aa9f42f1c 100644 (file)
@@ -150,7 +150,7 @@ public class InboundNatService extends AbstractServiceInstance implements Config
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(InboundNatProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(InboundNatProvider.class.getName()), this);
     }
 
     @Override
index 6876f1abc5f14f5185d81d5bed5f5bd07d35f4b0..68da745fb251ac11f885606c60baab53b43c424d 100644 (file)
@@ -15,7 +15,6 @@ import java.util.List;
 import org.opendaylight.neutron.spi.NeutronSecurityGroup;
 import org.opendaylight.neutron.spi.NeutronSecurityRule;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.api.InboundNatProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.IngressAclProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
@@ -467,7 +466,7 @@ public class IngressAclService extends AbstractServiceInstance implements Ingres
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(IngressAclProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(IngressAclProvider.class.getName()), this);
     }
 
     @Override
index 4ab2a3da4360357cf1963ec292ca37ae8bb31eb6..f37ac61f7b81864d0db487d1158d74c69bd27807 100644 (file)
@@ -12,7 +12,6 @@ package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 import java.math.BigInteger;
 import java.util.List;
 
-import org.opendaylight.ovsdb.openstack.netvirt.api.IngressAclProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.L2ForwardingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
@@ -1060,7 +1059,7 @@ public class L2ForwardingService extends AbstractServiceInstance implements Conf
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(L2ForwardingProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(L2ForwardingProvider.class.getName()), this);
     }
 
     @Override
index 01efd3ff6c985daf2c07e4918560f36e0e108de7..c6e08b8056295607d6bd177ab897da277d970b39 100644 (file)
@@ -27,7 +27,7 @@ public class L2RewriteService extends AbstractServiceInstance implements ConfigI
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(L2RewriteProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(L2RewriteProvider.class.getName()), this);
     }
 
     @Override
index 5c474fa91ba64429b8f1129b3995b1d1bec97fc0..4b4e6ae78ae8fa5d156186cd50ebf823718a46b4 100644 (file)
@@ -16,7 +16,6 @@ import java.util.List;
 
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.api.L2ForwardingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
 import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
@@ -26,7 +25,6 @@ import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provide
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.InstructionUtils;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.MatchUtils;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
@@ -36,7 +34,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.M
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
 
 import com.google.common.collect.Lists;
@@ -107,7 +104,7 @@ public class L3ForwardingService extends AbstractServiceInstance implements L3Fo
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(L3ForwardingProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(L3ForwardingProvider.class.getName()), this);
     }
 
     @Override
index cc5387dcf38109109d354fccecb48e206d674477..43142bd8f6fb3a7414ce1695c2790326a60d78e9 100644 (file)
@@ -15,7 +15,6 @@ import java.util.Map;
 
 import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerConfiguration;
 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerConfiguration.LoadBalancerPoolMember;
 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
@@ -447,7 +446,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(LoadBalancerProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(LoadBalancerProvider.class.getName()), this);
     }
 
     @Override
index 6e35c1569077c5a9a3a156507d0152f08e9156fb..86fc8e37fb145f38b1509ba9c1d446a0c3299756 100644 (file)
@@ -16,7 +16,6 @@ import java.util.List;
 
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OutboundNatProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
 import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
@@ -154,7 +153,7 @@ public class OutboundNatService extends AbstractServiceInstance implements Outbo
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(OutboundNatProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(OutboundNatProvider.class.getName()), this);
     }
 
     @Override
index 120bda6768a8b613e26929a26f086a44f350dbe4..9ea0c4bb15b46544bd6f8671103fb82a7ba3d95e 100644 (file)
@@ -16,19 +16,15 @@ import java.util.List;
 
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
-import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
 import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.AbstractServiceInstance;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.OF13Provider;
-import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
 import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
 import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.ActionUtils;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.MatchUtils;
-import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
@@ -208,7 +204,7 @@ public class RoutingService extends AbstractServiceInstance implements RoutingPr
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-        super.setOrchestrator(bundleContext.getServiceReference(RoutingProvider.class.getName()), this);
+        super.setDependencies(bundleContext.getServiceReference(RoutingProvider.class.getName()), this);
     }
 
     @Override
index 9bb6e300836d4cbedf81b82c2dc467ad41ecd6b4..7b3ffd38bfe8df2569ad0a191eb60dc99e831eff 100644 (file)
@@ -3,6 +3,7 @@
 <snapshot>
   <required-capabilities>
     <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:southbound:impl?module=southbound-impl&amp;revision=2014-12-10</capability>
     <capability>urn:opendaylight:params:xml:ns:yang:netvirt:impl?module=netvirt-impl&amp;revision=2015-05-13</capability>
   </required-capabilities>
   <configuration>
index e726aa1b68526c7ffa11fd9d160a78af72563321..b29c53346e543cd7acc54e7901e28aa80b1526a5 100644 (file)
@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.List;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.*;
 import org.opendaylight.ovsdb.openstack.netvirt.api.*;
@@ -163,6 +164,10 @@ public class ConfigActivator implements BundleActivator {
         registerService(context,
                 new String[]{MultiTenantAwareRouter.class.getName()}, null, openstackRouter);
 
+        Southbound southbound = new SouthboundImpl(providerContext.getSALService(DataBroker.class));
+        registerService(context,
+                new String[]{Southbound.class.getName()}, null, southbound);
+
         Dictionary<String, Object> nodeCacheManagerProperties = new Hashtable<>();
         nodeCacheManagerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NODE);
         NodeCacheManagerImpl nodeCacheManager = new NodeCacheManagerImpl();
index a657595b3c9c3457f420260e6624ecb5d3e3dbb5..cc7aef1251d4158950ffea6e9cf96b5331ee68d3 100644 (file)
@@ -57,7 +57,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.ImmutableBiMap;
 
 public class MdsalHelper {
-    private static final Logger LOG = LoggerFactory.getLogger(MdsalUtils.class);
+    private static final Logger LOG = LoggerFactory.getLogger(MdsalHelper.class);
     public static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
     public static final String OVSDB_URI_PREFIX = "ovsdb";
     public static final String BRIDGE_URI_PREFIX = "bridge";
index 160dfa11d85ebf307a0abd036d4490fd72f4c55a..3f7b575c1eb3f32b8635160dcf356712ebcfb63d 100644 (file)
@@ -16,6 +16,7 @@ import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
@@ -45,6 +46,7 @@ public class NetworkHandler extends AbstractHandler implements INeutronNetworkAw
     private volatile INeutronNetworkCRUD neutronNetworkCache;
     private volatile NeutronL3Adapter neutronL3Adapter;
     private volatile EventDispatcher eventDispatcher;
+    private volatile Southbound southbound;
 
     /**
      * Invoked when a network creation is requested
@@ -145,14 +147,14 @@ public class NetworkHandler extends AbstractHandler implements INeutronNetworkAw
                 for (Node node : nodes) {
                     List<String> phyIfName = bridgeConfigurationManager.getAllPhysicalInterfaceNames(node);
                     try {
-                        List<OvsdbTerminationPointAugmentation> ports = MdsalUtils.getTerminationPointsOfBridge(node);
+                        List<OvsdbTerminationPointAugmentation> ports = southbound.getTerminationPointsOfBridge(node);
                         for (OvsdbTerminationPointAugmentation port : ports) {
-                            if (MdsalUtils.isTunnel(port)) {
+                            if (southbound.isTunnel(port)) {
                                 logger.trace("Delete tunnel interface {}", port.getName());
-                                MdsalUtils.deleteTerminationPoint(node, port.getName());
+                                southbound.deleteTerminationPoint(node, port.getName());
                             } else if (!phyIfName.isEmpty() && phyIfName.contains(port.getName())) {
                                 logger.trace("Delete physical interface {}", port.getName());
-                                MdsalUtils.deleteTerminationPoint(node, port.getName());
+                                southbound.deleteTerminationPoint(node, port.getName());
                             }
                         }
                     } catch (Exception e) {
@@ -203,6 +205,8 @@ public class NetworkHandler extends AbstractHandler implements INeutronNetworkAw
                 (NodeCacheManager) ServiceHelper.getGlobalInstance(NodeCacheManager.class, this);
         neutronL3Adapter =
                 (NeutronL3Adapter) ServiceHelper.getGlobalInstance(NeutronL3Adapter.class, this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
         eventDispatcher =
                 (EventDispatcher) ServiceHelper.getGlobalInstance(EventDispatcher.class, this);
         eventDispatcher.eventHandlerAdded(
index 130bd30b50277b008154669a5fc21fa8ed1c5687..4ed2a6e104a2225a38ae3742c625ac8428e85a88 100644 (file)
@@ -15,6 +15,7 @@ import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
@@ -37,6 +38,7 @@ public class PortHandler extends AbstractHandler implements INeutronPortAware, C
     private volatile NodeCacheManager nodeCacheManager;
     private volatile NeutronL3Adapter neutronL3Adapter;
     private volatile EventDispatcher eventDispatcher;
+    private volatile Southbound southbound;
 
     /**
      * Invoked when a port creation is requested
@@ -125,13 +127,13 @@ public class PortHandler extends AbstractHandler implements INeutronPortAware, C
         List<Node> nodes = nodeCacheManager.getNodes();
         for (Node node : nodes) {
             try {
-                List<OvsdbTerminationPointAugmentation> ports = MdsalUtils.getTerminationPointsOfBridge(node);
+                List<OvsdbTerminationPointAugmentation> ports = southbound.getTerminationPointsOfBridge(node);
                 for (OvsdbTerminationPointAugmentation port : ports) {
                     String neutronPortId =
-                            MdsalUtils.getInterfaceExternalIdsValue(port, Constants.EXTERNAL_ID_INTERFACE_ID);
+                            southbound.getInterfaceExternalIdsValue(port, Constants.EXTERNAL_ID_INTERFACE_ID);
                     if (neutronPortId != null && neutronPortId.equalsIgnoreCase(neutronPort.getPortUUID())) {
                         logger.trace("neutronPortDeleted: Delete interface {}", port.getName());
-                        MdsalUtils.deleteTerminationPoint(node, port.getName());
+                        southbound.deleteTerminationPoint(node, port.getName());
                         break;
                     }
                 }
@@ -180,6 +182,8 @@ public class PortHandler extends AbstractHandler implements INeutronPortAware, C
                 (NodeCacheManager) ServiceHelper.getGlobalInstance(NodeCacheManager.class, this);
         neutronL3Adapter =
                 (NeutronL3Adapter) ServiceHelper.getGlobalInstance(NeutronL3Adapter.class, this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
         eventDispatcher =
                 (EventDispatcher) ServiceHelper.getGlobalInstance(EventDispatcher.class, this);
         eventDispatcher.eventHandlerAdded(
index 3a7cbe964ed81b04027f6f2a290aab94ad760628..55fd4b307089876058b60fd23de4a8f8eb386746 100644 (file)
@@ -40,9 +40,10 @@ public class SouthboundHandler extends AbstractHandler
     private volatile TenantNetworkManager tenantNetworkManager;
     private volatile NetworkingProviderManager networkingProviderManager;
     private volatile NeutronL3Adapter neutronL3Adapter;
-    private volatile NodeCacheManager nodeCacheManager = null;
+    private volatile NodeCacheManager nodeCacheManager;
     private volatile EventDispatcher eventDispatcher;
     private volatile OvsdbInventoryService ovsdbInventoryService;
+    private volatile Southbound southbound;
 
     private SouthboundEvent.Type ovsdbTypeToSouthboundEventType(OvsdbType ovsdbType) {
         SouthboundEvent.Type type = SouthboundEvent.Type.NODE;
@@ -118,7 +119,7 @@ public class SouthboundHandler extends AbstractHandler
     @Override
     public void triggerUpdates() {
         logger.info("triggerUpdates");
-        List<Node> ovsdbNodes = MdsalUtils.readOvsdbTopologyNodes();
+        List<Node> ovsdbNodes = southbound.readOvsdbTopologyNodes();
         for (Node node : ovsdbNodes) {
             ovsdbUpdate(node, node.getAugmentation(OvsdbNodeAugmentation.class),
                     OvsdbInventoryListener.OvsdbType.NODE, Action.ADD);
@@ -145,7 +146,7 @@ public class SouthboundHandler extends AbstractHandler
             logger.debug("Network {}: Delete interface {} attached to bridge {}", network.getNetworkUUID(),
                     ovsdbTerminationPointAugmentation.getInterfaceUuid(), node.getNodeId());
             try {
-                OvsdbBridgeAugmentation ovsdbBridgeAugmentation = MdsalUtils.getBridge(node);
+                OvsdbBridgeAugmentation ovsdbBridgeAugmentation = southbound.getBridge(node);
                 if (ovsdbBridgeAugmentation != null) {
                     List<TerminationPoint> terminationPoints = node.getTerminationPoint();
                     if (!terminationPoints.isEmpty()){
@@ -202,7 +203,7 @@ public class SouthboundHandler extends AbstractHandler
         logger.info("notifyNode: action: {}, Node <{}>", action, node);
 
         if (action.equals(Action.ADD)) {
-            if (MdsalUtils.getBridge(node) != null) {
+            if (southbound.getBridge(node) != null) {
                 networkingProviderManager.getProvider(node).initializeOFFlowRules(node);
             }
         }
@@ -279,7 +280,7 @@ public class SouthboundHandler extends AbstractHandler
         InstanceIdentifier<Node> bridgeNodeIid =
                 MdsalHelper.createInstanceIdentifier(ovsdbNode.getConnectionInfo(),
                         Constants.INTEGRATION_BRIDGE);
-        MdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, bridgeNodeIid);
+        southbound.delete(LogicalDatastoreType.CONFIGURATION, bridgeNodeIid);
         */
     }
 
@@ -318,7 +319,7 @@ public class SouthboundHandler extends AbstractHandler
         logger.debug("processOpenVSwitchUpdate {}", node);
         // TODO this node might be the OvsdbNode and not have termination points
         // Would need to change listener or grab tp nodes in here.
-        List<TerminationPoint> terminationPoints = MdsalUtils.extractTerminationPoints(node);
+        List<TerminationPoint> terminationPoints = southbound.extractTerminationPoints(node);
         for (TerminationPoint terminationPoint : terminationPoints) {
             processPortUpdate(node, terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class));
         }
@@ -342,12 +343,12 @@ public class SouthboundHandler extends AbstractHandler
         boolean rv = false;
         String nodeIdStr = node.getNodeId().getValue();
         String bridgeName = nodeIdStr.substring(nodeIdStr.lastIndexOf('/') + 1);
-        List<TerminationPoint> terminationPoints = MdsalUtils.extractTerminationPoints(node);
+        List<TerminationPoint> terminationPoints = southbound.extractTerminationPoints(node);
         if (terminationPoints != null && terminationPoints.size() == 1) {
         }
-        OvsdbTerminationPointAugmentation port = MdsalUtils.extractTerminationPointAugmentation(node, bridgeName);
+        OvsdbTerminationPointAugmentation port = southbound.extractTerminationPointAugmentation(node, bridgeName);
         if (port != null) {
-            String datapathId = MdsalUtils.getDatapathId(bridge);
+            String datapathId = southbound.getDatapathId(bridge);
             // Having a datapathId means the ovsdb node has connected to ODL
             if (datapathId != null) {
                 rv = true;
@@ -360,7 +361,7 @@ public class SouthboundHandler extends AbstractHandler
 
     private void processBridgeCreate(Node node, OvsdbBridgeAugmentation bridge) {
         logger.debug("processBridgeCreate <{}> <{}>", node, bridge);
-        String datapathId = MdsalUtils.getDatapathId(bridge);
+        String datapathId = southbound.getDatapathId(bridge);
         // Having a datapathId means the ovsdb node has connected to ODL
         if (datapathId != null) {
             nodeCacheManager.nodeAdded(node);
@@ -371,7 +372,7 @@ public class SouthboundHandler extends AbstractHandler
 
     private void processBridgeUpdate(Node node, OvsdbBridgeAugmentation bridge) {
         logger.debug("processBridgeUpdate <{}> <{}>", node, bridge);
-        String datapathId = MdsalUtils.getDatapathId(bridge);
+        String datapathId = southbound.getDatapathId(bridge);
         // Having a datapathId means the ovsdb node has connected to ODL
         if (datapathId != null) {
             nodeCacheManager.nodeAdded(node);
@@ -386,7 +387,7 @@ public class SouthboundHandler extends AbstractHandler
         nodeCacheManager.nodeRemoved(node);
         // TODO SB_MIGRATION
         // Not sure if we want to do this yet
-        MdsalUtils.deleteBridge(node);
+        southbound.deleteBridge(node);
     }
 
     @Override
@@ -405,6 +406,8 @@ public class SouthboundHandler extends AbstractHandler
                 bundleContext.getServiceReference(OvsdbInventoryListener.class.getName()), this);
         neutronL3Adapter =
                 (NeutronL3Adapter) ServiceHelper.getGlobalInstance(NeutronL3Adapter.class, this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
         eventDispatcher =
                 (EventDispatcher) ServiceHelper.getGlobalInstance(EventDispatcher.class, this);
         eventDispatcher.eventHandlerAdded(
diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java
new file mode 100644 (file)
index 0000000..d09f5d6
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2015 Red Hat, Inc. 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.ovsdb.openstack.netvirt.api;
+
+import java.util.List;
+import java.util.Map;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
+
+/**
+ * Utility class to wrap southbound transactions.
+ *
+ * @author Sam Hague (shague@redhat.com)
+ */
+public interface Southbound {
+    ConnectionInfo getConnectionInfo(Node node);
+    OvsdbNodeAugmentation extractOvsdbNode(Node node);
+    NodeId extractBridgeOvsdbNodeId(Node bridgeNode);
+    List<Node> readOvsdbTopologyNodes();
+    OvsdbNodeAugmentation readOvsdbNode(Node bridgeNode);
+    String getOvsdbNodeUUID(Node node);
+    String getOsdbNodeExternalIdsValue(OvsdbNodeAugmentation ovsdbNodeAugmentation, String key);
+    boolean addBridge(Node ovsdbNode, String bridgeName, String target);
+    boolean deleteBridge(Node ovsdbNode);
+    OvsdbBridgeAugmentation readBridge(Node node, String name);
+    Node readBridgeNode(Node node, String name);
+    Node getBridgeNode(Node node, String bridgeName);
+    String getBridgeUuid(Node node, String name);
+    long getDataPathId(Node node);
+    String getDatapathId(Node node);
+    String getDatapathId(OvsdbBridgeAugmentation ovsdbBridgeAugmentation);
+    OvsdbBridgeAugmentation getBridge(Node node, String name);
+    OvsdbBridgeAugmentation getBridge(Node node);
+    String getBridgeName(Node node);
+    String extractBridgeName(Node node);
+    OvsdbBridgeAugmentation extractBridgeAugmentation(Node node);
+    List<Node> getAllBridgesOnOvsdbNode(Node node);
+    OvsdbNodeAugmentation extractNodeAugmentation(Node node);
+    List<OvsdbTerminationPointAugmentation> getTerminationPointsOfBridge(Node node);
+    OvsdbTerminationPointAugmentation extractTerminationPointAugmentation(Node bridgeNode, String portName);
+    List<TerminationPoint> extractTerminationPoints(Node node);
+    List<OvsdbTerminationPointAugmentation> extractTerminationPointAugmentations(Node node);
+    List<OvsdbTerminationPointAugmentation> readTerminationPointAugmentations(Node node);
+    String getInterfaceExternalIdsValue(
+            OvsdbTerminationPointAugmentation terminationPointAugmentation, String key);
+    Boolean addTerminationPoint(Node bridgeNode, String bridgeName, String portName, String type);
+    Boolean deleteTerminationPoint(Node bridgeNode, String portName);
+    Boolean addTerminationPoint(Node bridgeNode, String bridgeName, String portName,
+                                String type, Map<String, String> options);
+    TerminationPoint readTerminationPoint(Node bridgeNode, String bridgeName, String portName);
+    Boolean addTunnelTerminationPoint(Node bridgeNode, String bridgeName, String portName, String type,
+                                      Map<String, String> options);
+    Boolean isTunnelTerminationPointExist(Node bridgeNode, String bridgeName, String portName);
+    Boolean addPatchTerminationPoint(Node node, String bridgeName, String portName, String peerPortName);
+    String getExternalId(Node node, OvsdbTables table, String key);
+    String getOtherConfig(Node node, OvsdbTables table, String key);
+    boolean addVlanToTp(long vlan);
+    boolean isTunnel(OvsdbTerminationPointAugmentation port);
+    String getOptionsValue(List<Options> options, String key);
+    Topology getOvsdbTopology();
+    Long getOFPort(OvsdbTerminationPointAugmentation port);
+    Long getOFPort(Node bridgeNode, String portName);
+    DataBroker getDatabroker();
+}
index b48b7b3073df2b28c09c7d41a5efe02cf080095e..0484075c07daa426b01653de874d771ae6b8fa78 100644 (file)
@@ -9,12 +9,12 @@ package org.opendaylight.ovsdb.openstack.netvirt.impl;
 
 import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler;
 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.utils.config.ConfigProperties;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
@@ -46,38 +46,43 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
     // The implementation for each of these services is resolved by the OSGi Service Manager
     private volatile ConfigurationService configurationService;
     private volatile NetworkingProviderManager networkingProviderManager;
+    private volatile Southbound southbound;
 
     public void setConfigurationService(ConfigurationService configurationService) {
         this.configurationService = configurationService;
     }
 
+    public void setSouthbound(Southbound southbound) {
+        this.southbound = southbound;
+    }
+
     @Override
     public String getBridgeUuid(Node node, String bridgeName) {
-        return MdsalUtils.getBridgeUuid(node, bridgeName);
+        return southbound.getBridgeUuid(node, bridgeName);
     }
 
     @Override
     public boolean isNodeNeutronReady(Node node) {
         Preconditions.checkNotNull(configurationService);
-        return MdsalUtils.getBridge(node, configurationService.getIntegrationBridgeName()) != null;
+        return southbound.getBridge(node, configurationService.getIntegrationBridgeName()) != null;
     }
 
     @Override
     public boolean isNodeOverlayReady(Node node) {
         Preconditions.checkNotNull(configurationService);
         return isNodeNeutronReady(node)
-                && MdsalUtils.getBridge(node, configurationService.getNetworkBridgeName()) != null;
+                && southbound.getBridge(node, configurationService.getNetworkBridgeName()) != null;
     }
 
     @Override
     public boolean isPortOnBridge (Node node, String portName) {
-        return MdsalUtils.extractTerminationPointAugmentation(node, portName) != null;
+        return southbound.extractTerminationPointAugmentation(node, portName) != null;
     }
 
     @Override
     public boolean isNodeTunnelReady(Node node) {
         Preconditions.checkNotNull(configurationService);
-        return MdsalUtils.getBridge(node, configurationService.getIntegrationBridgeName()) != null;
+        return southbound.getBridge(node, configurationService.getIntegrationBridgeName()) != null;
     }
 
     @Override
@@ -85,7 +90,7 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
         Preconditions.checkNotNull(configurationService);
 
         /* is br-int created */
-        OvsdbBridgeAugmentation intBridge = MdsalUtils.getBridge(node, configurationService.getIntegrationBridgeName());
+        OvsdbBridgeAugmentation intBridge = southbound.getBridge(node, configurationService.getIntegrationBridgeName());
         if (intBridge == null) {
             LOGGER.trace("isNodeVlanReady: node: {}, br-int missing", node);
             return false;
@@ -93,7 +98,7 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
 
         /* Check if physical device is added to br-int. */
         String phyNetName = getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
-        if (MdsalUtils.extractTerminationPointAugmentation(node, phyNetName) == null) {
+        if (southbound.extractTerminationPointAugmentation(node, phyNetName) == null) {
             LOGGER.trace("isNodeVlanReady: node: {}, eth missing", node);
             return false;
         }
@@ -151,7 +156,7 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
     @Override
     public String getPhysicalInterfaceName (Node node, String physicalNetwork) {
         String phyIf = null;
-        String providerMaps = MdsalUtils.getOtherConfig(node, OvsdbTables.OPENVSWITCH,
+        String providerMaps = southbound.getOtherConfig(node, OvsdbTables.OPENVSWITCH,
                 configurationService.getProviderMappingsKey());
         if (providerMaps == null) {
             providerMaps = configurationService.getDefaultProviderMapping();
@@ -179,7 +184,7 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
     public List<String> getAllPhysicalInterfaceNames(Node node) {
         List<String> phyIfName = Lists.newArrayList();
         String phyIf = null;
-        String providerMaps = MdsalUtils.getOtherConfig(node, OvsdbTables.OPENVSWITCH,
+        String providerMaps = southbound.getOtherConfig(node, OvsdbTables.OPENVSWITCH,
                 configurationService.getProviderMappingsKey());
         if (providerMaps == null) {
             providerMaps = configurationService.getDefaultProviderMapping();
@@ -313,8 +318,8 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
     private boolean addPortToBridge (Node node, String bridgeName, String portName) throws Exception {
         boolean rv = true;
 
-        if (MdsalUtils.extractTerminationPointAugmentation(node, portName) == null) {
-            rv = MdsalUtils.addTerminationPoint(node, bridgeName, portName, null);
+        if (southbound.extractTerminationPointAugmentation(node, portName) == null) {
+            rv = southbound.addTerminationPoint(node, bridgeName, portName, null);
         }
 
         return rv;
@@ -326,8 +331,8 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
     private boolean addPatchPort (Node node, String bridgeName, String portName, String peerPortName) throws Exception {
         boolean rv = true;
 
-        if (MdsalUtils.extractTerminationPointAugmentation(node, portName) == null) {
-            rv = MdsalUtils.addPatchTerminationPoint(node, bridgeName, portName, peerPortName);
+        if (southbound.extractTerminationPointAugmentation(node, portName) == null) {
+            rv = southbound.addPatchTerminationPoint(node, bridgeName, portName, peerPortName);
         }
 
         return rv;
@@ -339,8 +344,8 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
     private boolean addBridge(Node node, String bridgeName,
                               String localPatchName, String remotePatchName) throws Exception {
         boolean rv = true;
-        if (MdsalUtils.getBridge(node, bridgeName) == null) {
-            rv = MdsalUtils.addBridge(node, bridgeName, getControllerTarget(node));
+        if (southbound.getBridge(node, bridgeName) == null) {
+            rv = southbound.addBridge(node, bridgeName, getControllerTarget(node));
         }
         return rv;
     }
@@ -412,7 +417,7 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
 
     private String getControllerTarget(Node node) {
         String target = null;
-        OvsdbNodeAugmentation ovsdbNodeAugmentation = MdsalUtils.extractOvsdbNode(node);
+        OvsdbNodeAugmentation ovsdbNodeAugmentation = southbound.extractOvsdbNode(node);
         if (ovsdbNodeAugmentation != null) {
             ConnectionInfo connectionInfo = ovsdbNodeAugmentation.getConnectionInfo();
             String addressStr = new String(connectionInfo.getLocalIp().getValue());
@@ -456,6 +461,8 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage
                 (ConfigurationService) ServiceHelper.getGlobalInstance(ConfigurationService.class, this);
         networkingProviderManager =
                 (NetworkingProviderManager) ServiceHelper.getGlobalInstance(NetworkingProviderManager.class, this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
     }
 
     @Override
index 90263e7228c0ad50eb1f468cc5695b768e061bb8..5ec7be9c47035ee818f3f84a97e82df3b45d17b9 100644 (file)
@@ -17,11 +17,12 @@ import java.util.Map;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.utils.config.ConfigProperties;
+import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -39,6 +40,7 @@ public class ConfigurationServiceImpl implements ConfigurationService, ConfigInt
     private Map<Pair<String, String>, String> patchPortNames = Maps.newHashMap();
     private String providerMappingsKey;
     private String providerMapping;
+    private Southbound southbound;
 
     public ConfigurationServiceImpl() {
         tunnelEndpointKey = Constants.TUNNEL_ENDPOINT_KEY;
@@ -131,7 +133,7 @@ public class ConfigurationServiceImpl implements ConfigurationService, ConfigInt
     @Override
     public InetAddress getTunnelEndPoint(Node node) {
         InetAddress address = null;
-        String tunnelEndpoint = MdsalUtils.getOtherConfig(node, OvsdbTables.OPENVSWITCH, tunnelEndpointKey);
+        String tunnelEndpoint = southbound.getOtherConfig(node, OvsdbTables.OPENVSWITCH, tunnelEndpointKey);
         if (tunnelEndpoint != null) {
             try {
                 address = InetAddress.getByName(tunnelEndpoint);
@@ -163,6 +165,8 @@ public class ConfigurationServiceImpl implements ConfigurationService, ConfigInt
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
     }
 
     @Override
diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/MdsalUtils.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/MdsalUtils.java
new file mode 100644 (file)
index 0000000..1d370e3
--- /dev/null
@@ -0,0 +1,125 @@
+package org.opendaylight.ovsdb.openstack.netvirt.impl;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MdsalUtils {
+    private static final Logger LOG = LoggerFactory.getLogger(MdsalUtils.class);
+    private DataBroker databroker = null;
+
+    /**
+     * Class constructor setting the data broker.
+     *
+     * @param dataBroker the {@link org.opendaylight.controller.md.sal.binding.api.DataBroker}
+     */
+    public MdsalUtils(DataBroker dataBroker) {
+        this.databroker = dataBroker;
+    }
+
+    /**
+     * Executes delete as a blocking transaction.
+     *
+     * @param store {@link LogicalDatastoreType} which should be modified
+     * @param path {@link InstanceIdentifier} to read from
+     * @param <D> the data object type
+     * @return the result of the request
+     */
+    public <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean delete(
+            final LogicalDatastoreType store, final InstanceIdentifier<D> path)  {
+        boolean result = false;
+        final WriteTransaction transaction = databroker.newWriteOnlyTransaction();
+        transaction.delete(store, path);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.checkedGet();
+            result = true;
+        } catch (TransactionCommitFailedException e) {
+            LOG.warn("Failed to delete {} ", path, e);
+        }
+        return result;
+    }
+
+    /**
+     * Executes merge as a blocking transaction.
+     *
+     * @param logicalDatastoreType {@link LogicalDatastoreType} which should be modified
+     * @param path {@link InstanceIdentifier} for path to read
+     * @param <D> the data object type
+     * @return the result of the request
+     */
+    public <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean merge(
+            final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier<D> path, D data)  {
+        boolean result = false;
+        final WriteTransaction transaction = databroker.newWriteOnlyTransaction();
+        transaction.merge(logicalDatastoreType, path, data, true);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.checkedGet();
+            result = true;
+        } catch (TransactionCommitFailedException e) {
+            LOG.warn("Failed to merge {} ", path, e);
+        }
+        return result;
+    }
+
+    /**
+     * Executes put as a blocking transaction.
+     *
+     * @param logicalDatastoreType {@link LogicalDatastoreType} which should be modified
+     * @param path {@link InstanceIdentifier} for path to read
+     * @param <D> the data object type
+     * @return the result of the request
+     */
+    public <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean put(
+            final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier<D> path, D data)  {
+        boolean result = false;
+        final WriteTransaction transaction = databroker.newWriteOnlyTransaction();
+        transaction.put(logicalDatastoreType, path, data, true);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.checkedGet();
+            result = true;
+        } catch (TransactionCommitFailedException e) {
+            LOG.warn("Failed to put {} ", path, e);
+        }
+        return result;
+    }
+
+    /**
+     * Executes read as a blocking transaction.
+     *
+     * @param store {@link LogicalDatastoreType} to read
+     * @param path {@link InstanceIdentifier} for path to read
+     * @param <D> the data object type
+     * @return the result as the data object requested
+     */
+    public <D extends org.opendaylight.yangtools.yang.binding.DataObject> D read(
+            final LogicalDatastoreType store, final InstanceIdentifier<D> path)  {
+        D result = null;
+        final ReadOnlyTransaction transaction = databroker.newReadOnlyTransaction();
+        Optional<D> optionalDataObject;
+        CheckedFuture<Optional<D>, ReadFailedException> future = transaction.read(store, path);
+        try {
+            optionalDataObject = future.checkedGet();
+            if (optionalDataObject.isPresent()) {
+                result = optionalDataObject.get();
+            } else {
+                LOG.debug("{}: Failed to read {}",
+                        Thread.currentThread().getStackTrace()[1], path);
+            }
+        } catch (ReadFailedException e) {
+            LOG.warn("Failed to read {} ", path, e);
+        }
+        transaction.close();
+        return result;
+    }
+}
index 0a9ab33023afd8cfc4f83f3e2d50d196ebf6d5b1..685fd05fbdea65a5ddaee522281fb31de42706f7 100644 (file)
@@ -19,7 +19,6 @@ import org.opendaylight.neutron.spi.NeutronRouter;
 import org.opendaylight.neutron.spi.NeutronRouter_Interface;
 import org.opendaylight.neutron.spi.NeutronSubnet;
 import org.opendaylight.neutron.spi.Neutron_IPs;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.api.*;
 import org.opendaylight.ovsdb.utils.config.ConfigProperties;
@@ -73,6 +72,7 @@ public class NeutronL3Adapter implements ConfigInterface {
     private Map<String, String> networkIdToRouterMacCache;
     private Map<String, NeutronRouter_Interface> subnetIdToRouterInterfaceCache;
     private Boolean enabled = false;
+    private Southbound southbound;
 
     public NeutronL3Adapter() {
         logger.info(">>>>>> NeutronL3Adapter constructor {}", this.getClass());
@@ -935,8 +935,8 @@ public class NeutronL3Adapter implements ConfigInterface {
 
     private Long getDpidForIntegrationBridge(Node node) {
         // Check if node is integration bridge; and only then return its dpid
-        if (MdsalUtils.getBridge(node, configurationService.getIntegrationBridgeName()) != null) {
-            return MdsalUtils.getDataPathId(node);
+        if (southbound.getBridge(node, configurationService.getIntegrationBridgeName()) != null) {
+            return southbound.getDataPathId(node);
         }
         return null;
     }
@@ -959,6 +959,8 @@ public class NeutronL3Adapter implements ConfigInterface {
                 (L3ForwardingProvider) ServiceHelper.getGlobalInstance(L3ForwardingProvider.class, this);
         nodeCacheManager =
                 (NodeCacheManager) ServiceHelper.getGlobalInstance(NodeCacheManager.class, this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
     }
 
     @Override
index 656b2298119037b1ebf21c2a31ba79e009b3e2a1..8a3e4316c2c713ed9b29f2ada809cb6bd687d563 100644 (file)
@@ -14,13 +14,13 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent;
 import org.opendaylight.ovsdb.openstack.netvirt.AbstractHandler;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.NodeCacheManagerEvent;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheListener;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
@@ -38,7 +38,8 @@ public class NodeCacheManagerImpl extends AbstractHandler implements NodeCacheMa
     private final Object nodeCacheLock = new Object();
     private Map<NodeId, Node> nodeCache = new ConcurrentHashMap<>();
     private Map<Long, NodeCacheListener> handlers = Maps.newHashMap();
-    private EventDispatcher eventDispatcher;
+    private volatile EventDispatcher eventDispatcher;
+    private volatile Southbound southbound;
 
     @Override
     public void nodeAdded(Node node) {
@@ -67,7 +68,7 @@ public class NodeCacheManagerImpl extends AbstractHandler implements NodeCacheMa
 
         logger.debug("processNodeUpdate: {} Node type {} {}: {}",
                 nodeCache.size(),
-                MdsalUtils.getBridge(node) != null ? "BridgeNode" : "OvsdbNode",
+                southbound.getBridge(node) != null ? "BridgeNode" : "OvsdbNode",
                 action == Action.ADD ? "ADD" : "UPDATE",
                 node);
 
@@ -136,7 +137,7 @@ public class NodeCacheManagerImpl extends AbstractHandler implements NodeCacheMa
     public Map<NodeId,Node> getOvsdbNodes() {
         Map<NodeId,Node> ovsdbNodesMap = new ConcurrentHashMap<NodeId,Node>();
         for (Map.Entry<NodeId, Node> ovsdbNodeEntry : nodeCache.entrySet()) {
-            if (MdsalUtils.extractOvsdbNode(ovsdbNodeEntry.getValue()) != null) {
+            if (southbound.extractOvsdbNode(ovsdbNodeEntry.getValue()) != null) {
                 ovsdbNodesMap.put(ovsdbNodeEntry.getKey(), ovsdbNodeEntry.getValue());
             }
         }
@@ -147,7 +148,7 @@ public class NodeCacheManagerImpl extends AbstractHandler implements NodeCacheMa
     public List<Node> getBridgeNodes() {
         List<Node> nodes = Lists.newArrayList();
         for (Node node : nodeCache.values()) {
-            if (MdsalUtils.getBridge(node) != null) {
+            if (southbound.getBridge(node) != null) {
                 nodes.add(node);
             }
         }
@@ -165,6 +166,8 @@ public class NodeCacheManagerImpl extends AbstractHandler implements NodeCacheMa
 
     @Override
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
         eventDispatcher =
                 (EventDispatcher) ServiceHelper.getGlobalInstance(EventDispatcher.class, this);
         eventDispatcher.eventHandlerAdded(
index 536e70c1ca8a00b713f44951fc966ab616d0b524..11364021c10edf8d520667c950a63964fc4eb46e 100644 (file)
@@ -44,7 +44,6 @@ public class OvsdbDataChangeListener implements DataChangeListener, AutoCloseabl
     private ListenerRegistration<DataChangeListener> registration;
     private final ExecutorService executorService = Executors.newFixedThreadPool(1);
 
-
     public OvsdbDataChangeListener (DataBroker dataBroker) {
         this.dataBroker = dataBroker;
     }
index 30fe2e9060801a00a02db1a49048e9ec730c012e..b2611fab5c155815e85ac0f473d36e82d6852b3c 100644 (file)
@@ -12,7 +12,6 @@ import java.util.Set;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryService;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
@@ -31,49 +30,16 @@ public class OvsdbInventoryServiceImpl implements ConfigInterface, OvsdbInventor
     private static DataBroker dataBroker = null;
     private static Set<OvsdbInventoryListener> mdsalConsumerListeners = Sets.newCopyOnWriteArraySet();
     private OvsdbDataChangeListener ovsdbDataChangeListener = null;
-    private static MdsalUtils mdsalUtils = null;
-    private volatile BindingAwareBroker broker; // dependency injection
-    //private ConsumerContext consumerContext = null;
+    //private static SouthboundImpl southboundImpl = null;
+    private volatile BindingAwareBroker broker;
 
     public OvsdbInventoryServiceImpl(ProviderContext providerContext) {
         dataBroker = providerContext.getSALService(DataBroker.class);
         LOG.info("netvirt MdsalConsumer initialized");
         ovsdbDataChangeListener = new OvsdbDataChangeListener(dataBroker);
-        mdsalUtils = new MdsalUtils(dataBroker);
+        //southboundImpl = new SouthboundImpl(dataBroker);
     }
 
-    /*void init(Component c) {
-        LOG.info(">>>>> init OvsdbInventoryServiceImpl");
-        LOG.info(">>>>> Netvirt Provider Registered with MD-SAL");
-        broker.registerConsumer(this, c.getDependencyManager().getBundleContext());
-    }
-
-    void start() {
-        LOG.info(">>>>> start OvsdbInventoryServiceImpl");
-    }
-
-    void destroy() {
-        // Now lets close MDSAL session
-        if (this.consumerContext != null) {
-            //this.consumerContext.close();
-            this.dataBroker = null;
-            this.consumerContext = null;
-        }
-    }
-    @Override
-    public void onSessionInitialized (ConsumerContext consumerContext) {
-        this.consumerContext = consumerContext;
-        dataBroker = consumerContext.getSALService(DataBroker.class);
-        LOG.info("netvirt MdsalConsumer initialized");
-        ovsdbDataChangeListener = new OvsdbDataChangeListener(dataBroker);
-        mdsalUtils = new MdsalUtils(dataBroker);
-    }*/
-
-    //@Override
-    /*public static DataBroker getDataBroker() {
-        return dataBroker;
-    }*/
-
     @Override
     public void listenerAdded(OvsdbInventoryListener listener) {
         mdsalConsumerListeners.add(listener);
index be35574978eae8aa4b0fae48e4a642fce4e21b16..f861f53aafd0e5d59f79b9a44f7b7ce5776aec04 100644 (file)
@@ -11,10 +11,11 @@ import java.util.List;
 import org.opendaylight.neutron.spi.INeutronPortCRUD;
 import org.opendaylight.neutron.spi.NeutronPort;
 import org.opendaylight.neutron.spi.NeutronSecurityGroup;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
+import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.*;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -24,6 +25,7 @@ import org.slf4j.LoggerFactory;
 public class SecurityServicesImpl implements ConfigInterface, SecurityServicesManager {
     static final Logger logger = LoggerFactory.getLogger(TenantNetworkManagerImpl.class);
     private volatile INeutronPortCRUD neutronPortCache;
+    private volatile Southbound southbound;
 
     /**
      * Is security group ready.
@@ -37,7 +39,7 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa
             return false;
         }
         logger.trace("isPortSecurityReady for {}", terminationPointAugmentation.getName());
-        String neutronPortId = MdsalUtils.getInterfaceExternalIdsValue(terminationPointAugmentation,
+        String neutronPortId = southbound.getInterfaceExternalIdsValue(terminationPointAugmentation,
                 Constants.EXTERNAL_ID_INTERFACE_ID);
         if (neutronPortId == null) {
             return false;
@@ -57,7 +59,7 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa
                     neutronPortId);
             return false;
         }
-        String vmPort = MdsalUtils.getInterfaceExternalIdsValue(terminationPointAugmentation,
+        String vmPort = southbound.getInterfaceExternalIdsValue(terminationPointAugmentation,
                 Constants.EXTERNAL_ID_VM_MAC);
         logger.debug("Security Group Check {} DOES contain a Neutron Security Group", neutronPortId);
         return true;
@@ -75,7 +77,7 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa
             return null;
         }
         logger.trace("isPortSecurityReady for {}", terminationPointAugmentation.getName());
-        String neutronPortId = MdsalUtils.getInterfaceExternalIdsValue(terminationPointAugmentation,
+        String neutronPortId = southbound.getInterfaceExternalIdsValue(terminationPointAugmentation,
                 Constants.EXTERNAL_ID_INTERFACE_ID);
         if (neutronPortId == null) {
             return null;
@@ -95,7 +97,10 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa
     }
 
     @Override
-    public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {}
+    public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
+    }
 
     @Override
     public void setDependencies(Object impl) {
similarity index 72%
rename from openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalUtils.java
rename to openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java
index a672a6c850c270646e492032a3b17c1cbe2b0ba1..e1bcf24dcc906068e5c7b6ec5efde72392d25fe8 100644 (file)
@@ -5,7 +5,7 @@
  * 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.ovsdb.openstack.netvirt;
+package org.opendaylight.ovsdb.openstack.netvirt.impl;
 
 import java.math.BigInteger;
 import java.security.InvalidParameterException;
@@ -15,12 +15,11 @@ import java.util.List;
 import java.util.Map;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.ovsdb.openstack.netvirt.MdsalHelper;
+import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
@@ -59,134 +58,34 @@ 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.collect.ImmutableBiMap;
-import com.google.common.util.concurrent.CheckedFuture;
 
 /**
  * Utility class to wrap mdsal transactions.
  *
  * @author Sam Hague (shague@redhat.com)
  */
-public class MdsalUtils {
-    private static final Logger LOG = LoggerFactory.getLogger(MdsalUtils.class);
-
-    public static DataBroker getDatabroker() {
-        return databroker;
-    }
-
-    private static DataBroker databroker = null;
-    private static final int OVSDB_UPDATE_TIMEOUT = 500;
+public class SouthboundImpl implements Southbound {
+    private static final Logger LOG = LoggerFactory.getLogger(SouthboundImpl.class);
+    private DataBroker databroker = null;
     private static final String PATCH_PORT_TYPE = "patch";
+    private MdsalUtils mdsalUtils = null;
 
     /**
      * Class constructor setting the data broker.
      *
      * @param dataBroker the {@link org.opendaylight.controller.md.sal.binding.api.DataBroker}
      */
-    public MdsalUtils(DataBroker dataBroker) {
+    public SouthboundImpl(DataBroker dataBroker) {
         this.databroker = dataBroker;
+        mdsalUtils = new MdsalUtils(dataBroker);
     }
 
-    /**
-     * Executes delete as a blocking transaction.
-     *
-     * @param store {@link LogicalDatastoreType} which should be modified
-     * @param path {@link InstanceIdentifier} to read from
-     * @param <D> the data object type
-     * @return the result of the request
-     */
-    public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean delete(
-            final LogicalDatastoreType store, final InstanceIdentifier<D> path)  {
-        boolean result = false;
-        final WriteTransaction transaction = databroker.newWriteOnlyTransaction();
-        transaction.delete(store, path);
-        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
-        try {
-            future.checkedGet();
-            result = true;
-        } catch (TransactionCommitFailedException e) {
-            LOG.warn("Failed to delete {} ", path, e);
-        }
-        return result;
-    }
-
-    /**
-     * Executes merge as a blocking transaction.
-     *
-     * @param logicalDatastoreType {@link LogicalDatastoreType} which should be modified
-     * @param path {@link InstanceIdentifier} for path to read
-     * @param <D> the data object type
-     * @return the result of the request
-     */
-    public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean merge(
-            final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier<D> path, D data)  {
-        boolean result = false;
-        final WriteTransaction transaction = databroker.newWriteOnlyTransaction();
-        transaction.merge(logicalDatastoreType, path, data, true);
-        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
-        try {
-            future.checkedGet();
-            result = true;
-        } catch (TransactionCommitFailedException e) {
-            LOG.warn("Failed to merge {} ", path, e);
-        }
-        return result;
-    }
-
-    /**
-     * Executes put as a blocking transaction.
-     *
-     * @param logicalDatastoreType {@link LogicalDatastoreType} which should be modified
-     * @param path {@link InstanceIdentifier} for path to read
-     * @param <D> the data object type
-     * @return the result of the request
-     */
-    public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean put(
-            final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier<D> path, D data)  {
-        boolean result = false;
-        final WriteTransaction transaction = databroker.newWriteOnlyTransaction();
-        transaction.put(logicalDatastoreType, path, data, true);
-        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
-        try {
-            future.checkedGet();
-            result = true;
-        } catch (TransactionCommitFailedException e) {
-            LOG.warn("Failed to put {} ", path, e);
-        }
-        return result;
-    }
-
-    /**
-     * Executes read as a blocking transaction.
-     *
-     * @param store {@link LogicalDatastoreType} to read
-     * @param path {@link InstanceIdentifier} for path to read
-     * @param <D> the data object type
-     * @return the result as the data object requested
-     */
-    public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> D read(
-            final LogicalDatastoreType store, final InstanceIdentifier<D> path)  {
-        D result = null;
-        final ReadOnlyTransaction transaction = databroker.newReadOnlyTransaction();
-        Optional<D> optionalDataObject;
-        CheckedFuture<Optional<D>, ReadFailedException> future = transaction.read(store, path);
-        try {
-            optionalDataObject = future.checkedGet();
-            if (optionalDataObject.isPresent()) {
-                result = optionalDataObject.get();
-            } else {
-                LOG.debug("{}: Failed to read {}",
-                        Thread.currentThread().getStackTrace()[1], path);
-            }
-        } catch (ReadFailedException e) {
-            LOG.warn("Failed to read {} ", path, e);
-        }
-        transaction.close();
-        return result;
+    public DataBroker getDatabroker() {
+        return databroker;
     }
 
-    public static ConnectionInfo getConnectionInfo(Node node) {
+    public ConnectionInfo getConnectionInfo(Node node) {
         ConnectionInfo connectionInfo = null;
         OvsdbNodeAugmentation ovsdbNodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
         if (ovsdbNodeAugmentation != null) {
@@ -195,11 +94,11 @@ public class MdsalUtils {
         return connectionInfo;
     }
 
-    public static OvsdbNodeAugmentation extractOvsdbNode(Node node) {
+    public OvsdbNodeAugmentation extractOvsdbNode(Node node) {
         return node.getAugmentation(OvsdbNodeAugmentation.class);
     }
 
-    public static NodeId extractBridgeOvsdbNodeId(Node bridgeNode) {
+    public NodeId extractBridgeOvsdbNodeId(Node bridgeNode) {
         NodeId ovsdbNodeId = null;
         OvsdbBridgeAugmentation bridgeAugmentation = extractBridgeAugmentation(bridgeNode);
         if (bridgeAugmentation != null) {
@@ -211,10 +110,10 @@ public class MdsalUtils {
         return ovsdbNodeId;
     }
 
-    public static List<Node> readOvsdbTopologyNodes() {
+    public List<Node> readOvsdbTopologyNodes() {
         List<Node> ovsdbNodes = new ArrayList<>();
         InstanceIdentifier<Topology> topologyInstanceIdentifier = MdsalHelper.createInstanceIdentifier();
-        Topology topology = read(LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
+        Topology topology = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
         if (topology != null && topology.getNode() != null) {
             for (Node node : topology.getNode()) {
                 OvsdbNodeAugmentation ovsdbNodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
@@ -226,13 +125,13 @@ public class MdsalUtils {
         return ovsdbNodes;
     }
 
-    public static OvsdbNodeAugmentation readOvsdbNode(Node bridgeNode) {
+    public OvsdbNodeAugmentation readOvsdbNode(Node bridgeNode) {
         OvsdbNodeAugmentation nodeAugmentation = null;
         OvsdbBridgeAugmentation bridgeAugmentation = extractBridgeAugmentation(bridgeNode);
         if(bridgeAugmentation != null){
             InstanceIdentifier<Node> ovsdbNodeIid =
                     (InstanceIdentifier<Node>) bridgeAugmentation.getManagedBy().getValue();
-            Node node = read(LogicalDatastoreType.OPERATIONAL, ovsdbNodeIid);
+            Node node = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, ovsdbNodeIid);
             if (node != null){
                 nodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
                 LOG.debug("readOvsdbNode: Ovsdb node {} found that manages bridge {}",
@@ -247,7 +146,7 @@ public class MdsalUtils {
         return nodeAugmentation;
     }
 
-    public static String getOvsdbNodeUUID(Node node) {
+    public String getOvsdbNodeUUID(Node node) {
         String nodeUUID = null;
         OvsdbNodeAugmentation ovsdbNodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
         if (ovsdbNodeAugmentation != null) {
@@ -257,7 +156,7 @@ public class MdsalUtils {
         return nodeUUID;
     }
 
-    public static String getOsdbNodeExternalIdsValue(OvsdbNodeAugmentation ovsdbNodeAugmentation, String key) {
+    public String getOsdbNodeExternalIdsValue(OvsdbNodeAugmentation ovsdbNodeAugmentation, String key) {
         String value = null;
         List<OpenvswitchExternalIds> pairs = ovsdbNodeAugmentation.getOpenvswitchExternalIds();
         if (pairs != null && !pairs.isEmpty()) {
@@ -271,8 +170,7 @@ public class MdsalUtils {
         return value;
     }
 
-    public static boolean addBridge(Node ovsdbNode, String bridgeName, String target)
-            throws InterruptedException, InvalidParameterException {
+    public boolean addBridge(Node ovsdbNode, String bridgeName, String target) throws InvalidParameterException {
         boolean result = false;
 
         LOG.info("addBridge: node: {}, bridgeName: {}, target: {}", ovsdbNode, bridgeName, target);
@@ -292,7 +190,7 @@ public class MdsalUtils {
             setManagedByForBridge(ovsdbBridgeAugmentationBuilder, ovsdbNode.getKey());
             bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbBridgeAugmentationBuilder.build());
 
-            result = put(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build());
+            result = mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build());
             LOG.info("addBridge: result: {}", result);
         } else {
             throw new InvalidParameterException("Could not find ConnectionInfo");
@@ -300,23 +198,23 @@ public class MdsalUtils {
         return result;
     }
 
-    public static boolean deleteBridge(Node ovsdbNode) {
+    public boolean deleteBridge(Node ovsdbNode) {
         boolean result = false;
         InstanceIdentifier<Node> bridgeIid =
                 MdsalHelper.createInstanceIdentifier(ovsdbNode.getNodeId());
 
-        result = delete(LogicalDatastoreType.CONFIGURATION, bridgeIid);
+        result = mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, bridgeIid);
         LOG.info("deleteBridge node: {}, bridgeName: {} result : {}", ovsdbNode, ovsdbNode.getNodeId(),result);
         return result;
     }
 
-    public static OvsdbBridgeAugmentation readBridge(Node node, String name) {
+    public OvsdbBridgeAugmentation readBridge(Node node, String name) {
         OvsdbBridgeAugmentation ovsdbBridgeAugmentation = null;
         ConnectionInfo connectionInfo = getConnectionInfo(node);
         if (connectionInfo != null) {
             InstanceIdentifier<Node> bridgeIid =
-                    MdsalHelper.createInstanceIdentifier(node.getKey(), name);
-            Node bridgeNode = read(LogicalDatastoreType.OPERATIONAL, bridgeIid);
+            MdsalHelper.createInstanceIdentifier(node.getKey(), name);
+            Node bridgeNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, bridgeIid);
             if (bridgeNode != null) {
                 ovsdbBridgeAugmentation = bridgeNode.getAugmentation(OvsdbBridgeAugmentation.class);
             }
@@ -324,18 +222,18 @@ public class MdsalUtils {
         return ovsdbBridgeAugmentation;
     }
 
-    public static Node readBridgeNode(Node node, String name) {
+    public Node readBridgeNode(Node node, String name) {
         Node bridgeNode = null;
         ConnectionInfo connectionInfo = getConnectionInfo(node);
         if (connectionInfo != null) {
             InstanceIdentifier<Node> bridgeIid =
-                    MdsalHelper.createInstanceIdentifier(node.getKey(), name);
-            bridgeNode = read(LogicalDatastoreType.OPERATIONAL, bridgeIid);
+            MdsalHelper.createInstanceIdentifier(node.getKey(), name);
+            bridgeNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, bridgeIid);
         }
         return bridgeNode;
     }
 
-    public static Node getBridgeNode(Node node, String bridgeName) {
+    public Node getBridgeNode(Node node, String bridgeName) {
         Node bridgeNode = null;
         OvsdbBridgeAugmentation bridge = extractBridgeAugmentation(node);
         if (bridge != null) {
@@ -349,7 +247,7 @@ public class MdsalUtils {
         return bridgeNode;
     }
 
-    public static String getBridgeUuid(Node node, String name) {
+    public String getBridgeUuid(Node node, String name) {
         String uuid = null;
         OvsdbBridgeAugmentation ovsdbBridgeAugmentation = readBridge(node, name);
         if (ovsdbBridgeAugmentation != null) {
@@ -358,13 +256,13 @@ public class MdsalUtils {
         return uuid;
     }
 
-    private static void setManagedByForBridge(OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder,
-                                     NodeKey ovsdbNodeKey) {
-        InstanceIdentifier<Node> connectionNodePath = MdsalHelper.createInstanceIdentifier(ovsdbNodeKey.getNodeId());
+    private void setManagedByForBridge(OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder,
+                NodeKey ovsdbNodeKey) {
+            InstanceIdentifier<Node> connectionNodePath = MdsalHelper.createInstanceIdentifier(ovsdbNodeKey.getNodeId());
         ovsdbBridgeAugmentationBuilder.setManagedBy(new OvsdbNodeRef(connectionNodePath));
     }
 
-    private static void setControllerForBridge(Node ovsdbNode, String bridgeName, String targetString) {
+    private void setControllerForBridge(Node ovsdbNode, String bridgeName, String targetString) {
         ConnectionInfo connectionInfo = getConnectionInfo(ovsdbNode);
         if (connectionInfo != null) {
             for (ControllerEntry controllerEntry: createControllerEntries(targetString)) {
@@ -373,13 +271,13 @@ public class MdsalUtils {
                                 .augmentation(OvsdbBridgeAugmentation.class)
                                 .child(ControllerEntry.class, controllerEntry.getKey());
 
-                boolean result = put(LogicalDatastoreType.CONFIGURATION, iid, controllerEntry);
+                boolean result = mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, iid, controllerEntry);
                 LOG.info("addController: result: {}", result);
             }
         }
     }
 
-    private static List<ControllerEntry> createControllerEntries(String targetString) {
+    private List<ControllerEntry> createControllerEntries(String targetString) {
         List<ControllerEntry> controllerEntries = new ArrayList<ControllerEntry>();
         ControllerEntryBuilder controllerEntryBuilder = new ControllerEntryBuilder();
         controllerEntryBuilder.setTarget(new Uri(targetString));
@@ -387,7 +285,7 @@ public class MdsalUtils {
         return controllerEntries;
     }
 
-    private static List<ProtocolEntry> createMdsalProtocols() {
+    private List<ProtocolEntry> createMdsalProtocols() {
         List<ProtocolEntry> protocolList = new ArrayList<ProtocolEntry>();
         ImmutableBiMap<String, Class<? extends OvsdbBridgeProtocolBase>> mapper =
                 MdsalHelper.OVSDB_PROTOCOL_MAP.inverse();
@@ -396,7 +294,7 @@ public class MdsalUtils {
         return protocolList;
     }
 
-    public static long getDataPathId(Node node) {
+    public long getDataPathId(Node node) {
         long dpid = 0L;
         String datapathId = getDatapathId(node);
         if (datapathId != null) {
@@ -405,7 +303,7 @@ public class MdsalUtils {
         return dpid;
     }
 
-    public static String getDatapathId(Node node) {
+    public String getDatapathId(Node node) {
         String datapathId = null;
         OvsdbBridgeAugmentation ovsdbBridgeAugmentation = node.getAugmentation(OvsdbBridgeAugmentation.class);
         if (ovsdbBridgeAugmentation != null && ovsdbBridgeAugmentation.getDatapathId() != null) {
@@ -414,7 +312,7 @@ public class MdsalUtils {
         return datapathId;
     }
 
-    public static String getDatapathId(OvsdbBridgeAugmentation ovsdbBridgeAugmentation) {
+    public String getDatapathId(OvsdbBridgeAugmentation ovsdbBridgeAugmentation) {
         String datapathId = null;
         if (ovsdbBridgeAugmentation != null && ovsdbBridgeAugmentation.getDatapathId() != null) {
             datapathId = ovsdbBridgeAugmentation.getDatapathId().getValue();
@@ -422,7 +320,7 @@ public class MdsalUtils {
         return datapathId;
     }
 
-    public static OvsdbBridgeAugmentation getBridge(Node node, String name) {
+    public OvsdbBridgeAugmentation getBridge(Node node, String name) {
         OvsdbBridgeAugmentation bridge = node.getAugmentation(OvsdbBridgeAugmentation.class);
         if (bridge != null) {
             if (!bridge.getBridgeName().getValue().equals(name)) {
@@ -432,12 +330,12 @@ public class MdsalUtils {
         return bridge;
     }
 
-    public static OvsdbBridgeAugmentation getBridge(Node node) {
+    public OvsdbBridgeAugmentation getBridge(Node node) {
         OvsdbBridgeAugmentation bridge = node.getAugmentation(OvsdbBridgeAugmentation.class);
         return bridge;
     }
 
-    public static String getBridgeName(Node node) {
+    public String getBridgeName(Node node) {
         String bridgeName = null;
         OvsdbBridgeAugmentation bridge = getBridge(node);
         if (bridge != null) {
@@ -446,20 +344,20 @@ public class MdsalUtils {
         return bridgeName;
     }
 
-    public static String extractBridgeName(Node node) {
+    public String extractBridgeName(Node node) {
         return (node.getAugmentation(OvsdbBridgeAugmentation.class).getBridgeName().getValue());
     }
 
-    public static OvsdbBridgeAugmentation extractBridgeAugmentation(Node node) {
+    public OvsdbBridgeAugmentation extractBridgeAugmentation(Node node) {
         return node.getAugmentation(OvsdbBridgeAugmentation.class);
     }
 
-    public static List<Node> getAllBridgesOnOvsdbNode(Node node) {
+    public List<Node> getAllBridgesOnOvsdbNode(Node node) {
         List<Node> nodes = new ArrayList<Node>();
         List<ManagedNodeEntry> managedNodes = node.getAugmentation(OvsdbNodeAugmentation.class).getManagedNodeEntry();
         for (ManagedNodeEntry managedNode : managedNodes) {
             InstanceIdentifier<?> bridgeIid = managedNode.getBridgeRef().getValue();
-            Node bridgeNode = (Node) read(LogicalDatastoreType.OPERATIONAL, bridgeIid);
+            Node bridgeNode = (Node) mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, bridgeIid);
             if (bridgeNode != null) {
                 nodes.add(bridgeNode);
             }
@@ -467,7 +365,7 @@ public class MdsalUtils {
         return nodes;
     }
 
-    public static OvsdbNodeAugmentation extractNodeAugmentation(Node node) {
+    public OvsdbNodeAugmentation extractNodeAugmentation(Node node) {
         return node.getAugmentation(OvsdbNodeAugmentation.class);
     }
 
@@ -477,7 +375,7 @@ public class MdsalUtils {
      * @param node
      * @return
      */
-    public static List<OvsdbTerminationPointAugmentation> getTerminationPointsOfBridge(Node node) {
+    public List<OvsdbTerminationPointAugmentation> getTerminationPointsOfBridge(Node node) {
         List<OvsdbTerminationPointAugmentation> tpAugmentations = extractTerminationPointAugmentations(node);
         if(tpAugmentations.isEmpty()){
             tpAugmentations = readTerminationPointAugmentations(node);
@@ -485,7 +383,7 @@ public class MdsalUtils {
         return tpAugmentations;
     }
 
-    public static OvsdbTerminationPointAugmentation extractTerminationPointAugmentation(Node bridgeNode, String portName) {
+    public OvsdbTerminationPointAugmentation extractTerminationPointAugmentation(Node bridgeNode, String portName) {
         OvsdbBridgeAugmentation ovsdbBridgeAugmentation = bridgeNode.getAugmentation(OvsdbBridgeAugmentation.class);
         if (ovsdbBridgeAugmentation != null) {
             List<TerminationPoint> terminationPoints = bridgeNode.getTerminationPoint();
@@ -501,7 +399,7 @@ public class MdsalUtils {
         return null;
     }
 
-    public static List<TerminationPoint> extractTerminationPoints(Node node) {
+    public List<TerminationPoint> extractTerminationPoints(Node node) {
         List<TerminationPoint> terminationPoints = new ArrayList<TerminationPoint>();
         OvsdbBridgeAugmentation ovsdbBridgeAugmentation = node.getAugmentation(OvsdbBridgeAugmentation.class);
         if (ovsdbBridgeAugmentation != null) {
@@ -510,7 +408,7 @@ public class MdsalUtils {
         return terminationPoints;
     }
 
-    public static List<OvsdbTerminationPointAugmentation> extractTerminationPointAugmentations( Node node ) {
+    public List<OvsdbTerminationPointAugmentation> extractTerminationPointAugmentations( Node node ) {
         List<OvsdbTerminationPointAugmentation> tpAugmentations = new ArrayList<OvsdbTerminationPointAugmentation>();
         List<TerminationPoint> terminationPoints = node.getTerminationPoint();
         if(terminationPoints != null && !terminationPoints.isEmpty()){
@@ -521,16 +419,16 @@ public class MdsalUtils {
         return tpAugmentations;
     }
 
-    public static List<OvsdbTerminationPointAugmentation> readTerminationPointAugmentations(Node node) {
+    public List<OvsdbTerminationPointAugmentation> readTerminationPointAugmentations(Node node) {
         InstanceIdentifier<Node> bridgeNodeIid = MdsalHelper.createInstanceIdentifier(node.getNodeId());
-        Node operNode = read(LogicalDatastoreType.OPERATIONAL, bridgeNodeIid);
+        Node operNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, bridgeNodeIid);
         if(operNode != null){
             return extractTerminationPointAugmentations(operNode);
         }
         return new ArrayList<OvsdbTerminationPointAugmentation>();
     }
 
-    public static String getInterfaceExternalIdsValue(
+    public String getInterfaceExternalIdsValue(
             OvsdbTerminationPointAugmentation terminationPointAugmentation, String key) {
         String value = null;
         List<InterfaceExternalIds> pairs = terminationPointAugmentation.getInterfaceExternalIds();
@@ -545,7 +443,7 @@ public class MdsalUtils {
         return value;
     }
 
-    public static Boolean addTerminationPoint(Node bridgeNode, String bridgeName, String portName, String type) {
+    public Boolean addTerminationPoint(Node bridgeNode, String bridgeName, String portName, String type) {
         InstanceIdentifier<TerminationPoint> tpIid =
                 MdsalHelper.createTerminationPointInstanceIdentifier(bridgeNode, portName);
         OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder =
@@ -558,16 +456,16 @@ public class MdsalUtils {
         TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
         tpBuilder.setKey(InstanceIdentifier.keyOf(tpIid));
         tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
-        return put(LogicalDatastoreType.CONFIGURATION, tpIid, tpBuilder.build());
+        return mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, tpIid, tpBuilder.build());
     }
 
-    public static Boolean deleteTerminationPoint(Node bridgeNode, String portName) {
+    public Boolean deleteTerminationPoint(Node bridgeNode, String portName) {
         InstanceIdentifier<TerminationPoint> tpIid =
                 MdsalHelper.createTerminationPointInstanceIdentifier(bridgeNode, portName);
-        return delete(LogicalDatastoreType.CONFIGURATION, tpIid);
+        return mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, tpIid);
     }
 
-    public static Boolean addTerminationPoint(Node bridgeNode, String bridgeName, String portName,
+    public Boolean addTerminationPoint(Node bridgeNode, String bridgeName, String portName,
             String type, Map<String, String> options) {
         InstanceIdentifier<TerminationPoint> tpIid = MdsalHelper.createTerminationPointInstanceIdentifier(
                 bridgeNode, portName);
@@ -591,32 +489,32 @@ public class MdsalUtils {
         TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
         tpBuilder.setKey(InstanceIdentifier.keyOf(tpIid));
         tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
-        /* TODO SB_MIGRATION should this be merge or put */
-        return put(LogicalDatastoreType.CONFIGURATION, tpIid, tpBuilder.build());
+        /* TODO SB_MIGRATION should this be merge or mdsalUtils.put */
+        return mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, tpIid, tpBuilder.build());
     }
 
-    public static TerminationPoint readTerminationPoint(Node bridgeNode, String bridgeName, String portName) {
+    public TerminationPoint readTerminationPoint(Node bridgeNode, String bridgeName, String portName) {
         InstanceIdentifier<TerminationPoint> tpIid = MdsalHelper.createTerminationPointInstanceIdentifier(
                 bridgeNode, portName);
-        return read(LogicalDatastoreType.OPERATIONAL, tpIid);
+        return mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, tpIid);
     }
 
-    public static Boolean addTunnelTerminationPoint(Node bridgeNode, String bridgeName, String portName, String type,
+    public Boolean addTunnelTerminationPoint(Node bridgeNode, String bridgeName, String portName, String type,
                                         Map<String, String> options) {
         return addTerminationPoint(bridgeNode, bridgeName, portName, type, options);
     }
 
-    public static Boolean isTunnelTerminationPointExist(Node bridgeNode, String bridgeName, String portName){
+    public Boolean isTunnelTerminationPointExist(Node bridgeNode, String bridgeName, String portName){
         return readTerminationPoint(bridgeNode, bridgeName, portName) != null;
     }
 
-    public static Boolean addPatchTerminationPoint(Node node, String bridgeName, String portName, String peerPortName) {
+    public Boolean addPatchTerminationPoint(Node node, String bridgeName, String portName, String peerPortName) {
         Map<String, String> option = new HashMap<String, String>();
         option.put("peer", peerPortName);
         return addTerminationPoint(node, bridgeName, portName, PATCH_PORT_TYPE, option);
     }
 
-    public static String getExternalId(Node node, OvsdbTables table, String key) {
+    public String getExternalId(Node node, OvsdbTables table, String key) {
         switch (table) {
         case BRIDGE:
             OvsdbBridgeAugmentation bridge = extractBridgeAugmentation(node);
@@ -660,7 +558,7 @@ public class MdsalUtils {
         return null;
     }
 
-    public static String getOtherConfig(Node node, OvsdbTables table, String key) {
+    public String getOtherConfig(Node node, OvsdbTables table, String key) {
         switch (table) {
             case BRIDGE:
                 OvsdbBridgeAugmentation bridge = extractBridgeAugmentation(node);
@@ -708,12 +606,12 @@ public class MdsalUtils {
         return null;
     }
 
-    public static boolean addVlanToTp(long vlan) {
+    public boolean addVlanToTp(long vlan) {
         return false;
     }
 
-    public static boolean isTunnel(OvsdbTerminationPointAugmentation port) {
-        LOG.trace("MdsalUtils#isTunnel: Interface : {}", port);
+    public boolean isTunnel(OvsdbTerminationPointAugmentation port) {
+        LOG.trace("SouthboundImpl#isTunnel: Interface : {}", port);
 
         if(port.getInterfaceType() == null){
             LOG.warn("No type found for the interface : {}", port);
@@ -725,7 +623,7 @@ public class MdsalUtils {
                 port.getInterfaceType()).equals(NetworkHandler.NETWORK_TYPE_GRE);
     }
 
-    public static String getOptionsValue(List<Options> options, String key) {
+    public String getOptionsValue(List<Options> options, String key) {
         String value = null;
         for (Options option : options) {
             if (option.getKey().equals(key)) {
@@ -735,16 +633,16 @@ public class MdsalUtils {
         return value;
     }
 
-    private static Topology getOvsdbTopology() {
+    public Topology getOvsdbTopology() {
         InstanceIdentifier<Topology> path = InstanceIdentifier
                 .create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(MdsalHelper.OVSDB_TOPOLOGY_ID));
 
-        Topology topology = read(LogicalDatastoreType.OPERATIONAL, path);
+        Topology topology = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, path);
         return topology;
     }
 
-    public static Long getOFPort(OvsdbTerminationPointAugmentation port) {
+    public Long getOFPort(OvsdbTerminationPointAugmentation port) {
         Long ofPort = 0L;
         if (port.getOfport() != null) {
             ofPort = port.getOfport();
@@ -752,7 +650,7 @@ public class MdsalUtils {
         return ofPort;
     }
 
-    public static Long getOFPort(Node bridgeNode, String portName) {
+    public Long getOFPort(Node bridgeNode, String portName) {
         Long ofPort = 0L;
         OvsdbTerminationPointAugmentation port = extractTerminationPointAugmentation(bridgeNode, portName);
         if (port != null) {
index 53f9d06237b8d60b0f52fe9152dcead61a8d1283..f04f9df0c066dd15f4d6e260ec9ba6935611f192 100644 (file)
@@ -16,8 +16,8 @@ import org.opendaylight.neutron.spi.INeutronPortCRUD;
 import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.neutron.spi.NeutronPort;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
@@ -30,9 +30,10 @@ import org.slf4j.LoggerFactory;
 
 public class TenantNetworkManagerImpl implements ConfigInterface, TenantNetworkManager {
     static final Logger logger = LoggerFactory.getLogger(TenantNetworkManagerImpl.class);
-    private volatile INeutronNetworkCRUD neutronNetworkCache;
-    private volatile INeutronPortCRUD neutronPortCache;
-    private volatile VlanConfigurationCache vlanConfigurationCache;
+    private INeutronNetworkCRUD neutronNetworkCache;
+    private INeutronPortCRUD neutronPortCache;
+    private VlanConfigurationCache vlanConfigurationCache;
+    private Southbound southbound;
 
     @Override
     public int getInternalVlan(Node node, String networkId) {
@@ -62,7 +63,7 @@ public class TenantNetworkManagerImpl implements ConfigInterface, TenantNetworkM
             return;
         }
 
-        MdsalUtils.addVlanToTp(vlan);
+        southbound.addVlanToTp(vlan);
     }
 
     @Override
@@ -74,9 +75,9 @@ public class TenantNetworkManagerImpl implements ConfigInterface, TenantNetworkM
         }
 
         try {
-            List<OvsdbTerminationPointAugmentation> ports = MdsalUtils.getTerminationPointsOfBridge(node);
+            List<OvsdbTerminationPointAugmentation> ports = southbound.getTerminationPointsOfBridge(node);
             for (OvsdbTerminationPointAugmentation port : ports) {
-                String ifaceId = MdsalUtils.getInterfaceExternalIdsValue(port, Constants.EXTERNAL_ID_INTERFACE_ID);
+                String ifaceId = southbound.getInterfaceExternalIdsValue(port, Constants.EXTERNAL_ID_INTERFACE_ID);
                 if (ifaceId != null && isInterfacePresentInTenantNetwork(ifaceId, networkId)) {
                     logger.debug("Tenant Network {} with Segmentation-id {} is present in Node {} / Interface {}",
                             networkId, segmentationId, node, port);
@@ -114,7 +115,7 @@ public class TenantNetworkManagerImpl implements ConfigInterface, TenantNetworkM
         NeutronNetwork neutronNetwork = null;
 
         logger.debug("getTenantNetwork for {}", terminationPointAugmentation);
-        String neutronPortId = MdsalUtils.getInterfaceExternalIdsValue(terminationPointAugmentation,
+        String neutronPortId = southbound.getInterfaceExternalIdsValue(terminationPointAugmentation,
                 Constants.EXTERNAL_ID_INTERFACE_ID);
         if (neutronPortId != null) {
             NeutronPort neutronPort = neutronPortCache.getPort(neutronPortId);
@@ -145,8 +146,8 @@ public class TenantNetworkManagerImpl implements ConfigInterface, TenantNetworkM
         NeutronPort neutronPort = null;
 
         logger.trace("getTenantPort for {}", terminationPointAugmentation.getName());
-        String neutronPortId = MdsalUtils.getInterfaceExternalIdsValue(terminationPointAugmentation,
-            Constants.EXTERNAL_ID_INTERFACE_ID);
+        String neutronPortId = southbound.getInterfaceExternalIdsValue(terminationPointAugmentation,
+                Constants.EXTERNAL_ID_INTERFACE_ID);
         if (neutronPortId != null) {
             neutronPort = neutronPortCache.getPort(neutronPortId);
         }
@@ -178,6 +179,8 @@ public class TenantNetworkManagerImpl implements ConfigInterface, TenantNetworkM
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
         vlanConfigurationCache =
                 (VlanConfigurationCache) ServiceHelper.getGlobalInstance(VlanConfigurationCache.class, this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
     }
 
     @Override
index 07c7d0cb81b670422fd06db19bb21ec697d135e8..0c4867aad8d2af980af1044575ff7c9fa9479fcc 100644 (file)
@@ -9,8 +9,8 @@
 package org.opendaylight.ovsdb.openstack.netvirt.impl;
 
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.NodeConfiguration;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
@@ -33,6 +33,7 @@ public class VlanConfigurationCacheImpl implements ConfigInterface, VlanConfigur
     static final Logger logger = LoggerFactory.getLogger(VlanConfigurationCacheImpl.class);
     private Map<String, NodeConfiguration> configurationCache = Maps.newConcurrentMap();
     private volatile TenantNetworkManager tenantNetworkManager;
+    private volatile Southbound southbound;
 
     private NodeConfiguration getNodeConfiguration(Node node){
         String nodeUuid = getNodeUUID(node);
@@ -47,14 +48,14 @@ public class VlanConfigurationCacheImpl implements ConfigInterface, VlanConfigur
     }
 
     private String getNodeUUID(Node node) {
-        return MdsalUtils.getOvsdbNodeUUID(node);
+        return southbound.getOvsdbNodeUUID(node);
     }
 
     private void initializeNodeConfiguration(Node node, String nodeUuid) {
         NodeConfiguration nodeConfiguration = new NodeConfiguration();
         Integer vlan = 0;
         String networkId = null;
-        List<OvsdbTerminationPointAugmentation> ports = MdsalUtils.getTerminationPointsOfBridge(node);
+        List<OvsdbTerminationPointAugmentation> ports = southbound.getTerminationPointsOfBridge(node);
         for (OvsdbTerminationPointAugmentation port : ports) {
             vlan = port.getVlanTag().getValue();
             networkId = tenantNetworkManager.getTenantNetwork(port).getNetworkUUID();
@@ -116,6 +117,8 @@ public class VlanConfigurationCacheImpl implements ConfigInterface, VlanConfigur
     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
         tenantNetworkManager =
                 (TenantNetworkManager) ServiceHelper.getGlobalInstance(TenantNetworkManager.class, this);
+        southbound =
+                (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
     }
 
     @Override
index 6ad13384775bd5101c303353848134d0b49d653b..bf57d6c772f512acfe67ea617cad2239f73342d8 100644 (file)
@@ -24,7 +24,6 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 import static org.powermock.api.mockito.PowerMockito.mockStatic;
-import static org.powermock.api.mockito.PowerMockito.verifyStatic;
 
 import java.util.List;
 import org.junit.runner.RunWith;
@@ -34,9 +33,9 @@ import org.mockito.Mock;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.opendaylight.neutron.spi.NeutronNetwork;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
@@ -52,13 +51,13 @@ import org.powermock.modules.junit4.PowerMockRunner;
  * @author Sam Hague (shague@redhat.com)
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(MdsalUtils.class)
 public class BridgeConfigurationManagerImplTest {
     @Mock private Node node;
     @Mock private OvsdbBridgeAugmentation bridge;
     @Mock private OvsdbTerminationPointAugmentation port;
     @Mock private NeutronNetwork neutronNetwork;
     @Mock private ConfigurationService configurationService;
+    @Mock private Southbound southbound;
     @InjectMocks public static BridgeConfigurationManagerImpl bridgeConfigurationManagerImpl;
 
     private static final String BR_INT = "br-int";
@@ -75,8 +74,7 @@ public class BridgeConfigurationManagerImplTest {
 
     @Test
     public void testGetBridgeUuid() {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridgeUuid(any(Node.class), anyString()))
+        when(southbound.getBridgeUuid(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(BRIDGE_UUID);
 
@@ -84,14 +82,12 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImpl.getBridgeUuid(node, BR_INT));
         assertEquals("Error, did not return UUID of correct bridge", BRIDGE_UUID,
                 bridgeConfigurationManagerImpl.getBridgeUuid(node, BR_INT));
-        verifyStatic(times(2));
-        MdsalUtils.getBridgeUuid(any(Node.class), anyString());
+        verify(southbound, times(2)).getBridgeUuid(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeNeutronReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
+        when(southbound.getBridge(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(bridge);
 
@@ -104,14 +100,12 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImpl.isNodeNeutronReady(node));
 
         verify(configurationService, times(2)).getIntegrationBridgeName();
-        verifyStatic(times(2));
-        MdsalUtils.getBridge(any(Node.class), anyString());
+        verify(southbound, times(2)).getBridge(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeOverlayReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
+        when(southbound.getBridge(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(bridge);
 
@@ -119,6 +113,7 @@ public class BridgeConfigurationManagerImplTest {
                 PowerMockito.spy(new BridgeConfigurationManagerImpl());
         doReturn(false).when(bridgeConfigurationManagerImplSpy).isNodeNeutronReady(any(Node.class));
         bridgeConfigurationManagerImplSpy.setConfigurationService(configurationService);
+        bridgeConfigurationManagerImplSpy.setSouthbound(southbound);
 
         verifyNoMoreInteractions(configurationService);
 
@@ -134,14 +129,12 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImplSpy.isNodeOverlayReady(node));
 
         verify(configurationService, times(2)).getNetworkBridgeName();
-        verifyStatic(times(2));
-        MdsalUtils.getBridge(any(Node.class), anyString());
+        verify(southbound, times(2)).getBridge(any(Node.class), anyString());
     }
 
     @Test
     public void testIsPortOnBridge() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString()))
+        when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(port);
 
@@ -149,14 +142,12 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImpl.isPortOnBridge(node, PORT_BR_INT));
         assertTrue("Error, port " + PORT_BR_INT + " should be found",
                 bridgeConfigurationManagerImpl.isPortOnBridge(node, PORT_BR_INT));
-        verifyStatic(times(2));
-        MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString());
+        verify(southbound, times(2)).extractTerminationPointAugmentation(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeTunnelReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
+        when(southbound.getBridge(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(bridge);
 
@@ -169,18 +160,16 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImpl.isNodeNeutronReady(node));
 
         verify(configurationService, times(2)).getIntegrationBridgeName();
-        verifyStatic(times(2));
-        MdsalUtils.getBridge(any(Node.class), anyString());
+        verify(southbound, times(2)).getBridge(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeVlanReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
+        when(southbound.getBridge(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(bridge);
 
-        when(MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString()))
+        when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(port);
 
@@ -194,6 +183,7 @@ public class BridgeConfigurationManagerImplTest {
                 PowerMockito.spy(new BridgeConfigurationManagerImpl());
         doReturn(ETH1).when(bridgeConfigurationManagerImplSpy).getPhysicalInterfaceName(any(Node.class), anyString());
         bridgeConfigurationManagerImplSpy.setConfigurationService(configurationService);
+        bridgeConfigurationManagerImplSpy.setSouthbound(southbound);
 
         assertFalse("Error, did not return correct boolean from isNodeVlanReady",
                 bridgeConfigurationManagerImpl.isNodeVlanReady(node, neutronNetwork));
@@ -203,10 +193,6 @@ public class BridgeConfigurationManagerImplTest {
 
         verify(configurationService, times(3)).getIntegrationBridgeName();
         verify(neutronNetwork, times(2)).getProviderPhysicalNetwork();
-        verifyStatic(times(3));
-        MdsalUtils.getBridge(any(Node.class), anyString());
-        verifyStatic(times(2));
-        MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString());
     }
 
     @Test
@@ -255,8 +241,7 @@ public class BridgeConfigurationManagerImplTest {
 
     @Test
     public void testGetPhysicalInterfaceName() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
+        when(southbound.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
                 .thenReturn(null)
                 .thenReturn(null)
                 .thenReturn(PROVIDER_MAPPINGS);
@@ -279,12 +264,12 @@ public class BridgeConfigurationManagerImplTest {
         assertNull(PHYSNET1, bridgeConfigurationManagerImpl.getPhysicalInterfaceName(node, PHYSNET3));
         verify(configurationService, times(5)).getProviderMappingsKey();
         verify(configurationService, times(2)).getDefaultProviderMapping();
+        verify(southbound, times(5)).getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString());
     }
 
     @Test
     public void testGetAllPhysicalInterfaceNames() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
+        when(southbound.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
                 .thenReturn(null)
                 .thenReturn(PROVIDER_MAPPINGS);
 
@@ -303,7 +288,6 @@ public class BridgeConfigurationManagerImplTest {
 
         verify(configurationService, times(2)).getProviderMappingsKey();
         verify(configurationService, times(1)).getDefaultProviderMapping();
-        verifyStatic(times(2));
-        MdsalUtils.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString());
+        verify(southbound, times(2)).getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString());
     }
 }
\ No newline at end of file