Modify the openflow renderer to support physical topology monitoring and ARP handling.
[nemo.git] / nemo-renderers / openflow-renderer / src / main / java / org / opendaylight / nemo / renderer / openflow / FlowTableManager.java
index 6ba4a0f8e0a5d78d18cd3e6469abaabde260ffff..21e913bf58a43b679c14e911d8b43bc2ae22f1fd 100644 (file)
@@ -9,23 +9,14 @@
 package org.opendaylight.nemo.renderer.openflow;\r
 \r
 import com.google.common.base.Optional;\r
-import com.google.common.util.concurrent.FutureCallback;\r
-import com.google.common.util.concurrent.Futures;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.concurrent.Executors;\r
-import java.util.concurrent.ScheduledExecutorService;\r
-import com.google.common.util.concurrent.CheckedFuture;\r
-\r
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;\r
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;\r
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;\r
-\r
+import org.opendaylight.nemo.renderer.openflow.physicalnetwork.PhyConfigLoader;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalNodes;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNode;\r
@@ -37,19 +28,18 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.m
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMappingKey;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.UserVnPnMapping;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNetworkId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNetworkId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey;\r
 import org.opendaylight.yangtools.concepts.ListenerRegistration;\r
 import org.opendaylight.yangtools.yang.binding.DataObject;\r
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
-\r
-\r
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
 \r
+import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
 \r
@@ -57,20 +47,32 @@ public class FlowTableManager implements AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(FlowTableManager.class);\r
 \r
     private final DataBroker dataProvider;\r
+    private final PacketProcessingService packetProcessingService;\r
 \r
     private ListenerRegistration<DataChangeListener> userVnPnMappingChangeListenerReg;\r
 \r
     private FlowUtils flowUtils = null;\r
 \r
-    public FlowTableManager(DataBroker dataProvider, ResourceManager resourceManager){\r
+    public FlowTableManager(DataBroker dataProvider,\r
+                            PacketProcessingService packetProcessingService,\r
+                            PhyConfigLoader phyConfigLoader) {\r
+        super();\r
 \r
         this.dataProvider = dataProvider;\r
-        LOG.info("Initialized FlowTableManager.");\r
-        flowUtils = new FlowUtils(dataProvider, resourceManager);\r
-        //register  listener\r
+        this.packetProcessingService = packetProcessingService;\r
+\r
+        LOG.debug("Initialized FlowTableManager.");\r
+\r
+        flowUtils = new FlowUtils(dataProvider, packetProcessingService, phyConfigLoader);\r
+\r
+        // Register listener;\r
         registerUserVnPnMappingListener();\r
     }\r
 \r
+    protected FlowUtils getFlowUtils() {\r
+        return flowUtils;\r
+    }\r
+\r
     private void registerUserVnPnMappingListener() {\r
 \r
         //build userVnPnMappingIid\r
@@ -99,11 +101,11 @@ public class FlowTableManager implements AutoCloseable {
             e.printStackTrace();\r
         }\r
         if (result.isPresent()){\r
-            LOG.info("getUser  OK");\r
+            LOG.debug("getUser  OK");\r
             return (result.get());\r
 \r
         }else{\r
-            LOG.info("getUser  ERROR");\r
+            LOG.debug("getUser  ERROR");\r
             return  null;\r
         }\r
     }\r
@@ -128,11 +130,11 @@ public class FlowTableManager implements AutoCloseable {
             e.printStackTrace();\r
         }\r
         if (result.isPresent()) {\r
-            LOG.info("getVirtualNetwork  OK");\r
+            LOG.debug("getVirtualNetwork  OK");\r
             return (result.get());\r
 \r
         }else{\r
-            LOG.info("getVirtualNetwork  ERROR");\r
+            LOG.debug("getVirtualNetwork  ERROR");\r
             return  null;\r
         }\r
     }\r
@@ -151,11 +153,11 @@ public class FlowTableManager implements AutoCloseable {
             e.printStackTrace();\r
         }\r
         if (result.isPresent()) {\r
-            LOG.info("getUserIntentVnMapping  OK");\r
+            LOG.debug("getUserIntentVnMapping  OK");\r
             return (result.get());\r
 \r
         }else{\r
-            LOG.info("getUserIntentVnMapping  ERROR");\r
+            LOG.debug("getUserIntentVnMapping  ERROR");\r
             return  null;\r
         }\r
     }\r
@@ -173,11 +175,11 @@ public class FlowTableManager implements AutoCloseable {
             e.printStackTrace();\r
         }\r
         if (result.isPresent()) {\r
-            LOG.info("getPhysicalNetwork  OK");\r
+            LOG.debug("getPhysicalNetwork  OK");\r
             return (result.get());\r
 \r
         }else{\r
-            LOG.info("getPhysicalNetwork  ERROR");\r
+            LOG.debug("getPhysicalNetwork  ERROR");\r
             return  null;\r
         }\r
     }\r
@@ -196,7 +198,7 @@ public class FlowTableManager implements AutoCloseable {
             if ( null != createdData && !createdData.isEmpty() ) {\r
                 for ( DataObject dataObject : createdData.values() ) {\r
                     if ( dataObject instanceof UserVnPnMapping ) {\r
-                        LOG.info("Ready to update flow table.");\r
+                        LOG.debug("Ready to update flow table.");\r
                         UserVnPnMapping userVnPnMapping = (UserVnPnMapping)dataObject;\r
                         UserId userId = userVnPnMapping.getUserId();\r
 \r
@@ -214,7 +216,7 @@ public class FlowTableManager implements AutoCloseable {
                         flowUtils.init(physicalNodeList);\r
 \r
                         flowUtils.updateFlowTable(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
-                        LOG.info("Already call flowUtils.updateFlowTable().");\r
+                        LOG.debug("Already call flowUtils.updateFlowTable().");\r
                     }\r
                 }\r
             }\r