* Update the Topology class implementation:
- The port IDs are type "integer" instead of "short" so it will be easier
to use it for more general purpose (e.g., topologies with lots of tunnels).
- Implemented methods to get/add/remove various topology elements:
switch, port, link
- Added state to keep track of the reversed unidirectional links, so they
can be properly removed if a switch or a port is removed.
* Add a Topology instance inside the PathComputation class, and
populate it as appropriate with ENTRY_ADD/ENTRY_REMOVE topology events
from the datagrid.
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java
index 89e8da6..cece840 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java
@@ -8,6 +8,7 @@
import java.util.concurrent.LinkedBlockingQueue;
import net.onrc.onos.datagrid.IDatagridService;
+import net.onrc.onos.ofcontroller.topology.Topology;
import net.onrc.onos.ofcontroller.topology.TopologyElement;
import net.onrc.onos.ofcontroller.util.EventEntry;
import net.onrc.onos.ofcontroller.util.FlowPath;
@@ -24,6 +25,7 @@
private FlowManager flowManager; // The Flow Manager to use
private IDatagridService datagridService; // The Datagrid Service to use
+ private Topology topology; // The network topology
// The queue with Flow Path and Topology Element updates
private BlockingQueue<EventEntry<?>> networkEvents =
@@ -45,6 +47,7 @@
IDatagridService datagridService) {
this.flowManager = flowManager;
this.datagridService = datagridService;
+ this.topology = new Topology();
}
/**
@@ -117,6 +120,22 @@
if (topologyEvents.isEmpty() && flowPathEvents.isEmpty())
return; // Nothing to do
+ //
+ // Add the topology events
+ //
+ boolean isTopologyModified = false;
+ for (EventEntry<TopologyElement> eventEntry : topologyEvents) {
+ TopologyElement topologyElement = eventEntry.eventData();
+ switch (eventEntry.eventType()) {
+ case ENTRY_ADD:
+ isTopologyModified = topology.addTopologyElement(topologyElement);
+ break;
+ case ENTRY_REMOVE:
+ isTopologyModified = topology.removeTopologyElement(topologyElement);
+ break;
+ }
+ }
+
// TODO: Implement it!
// Cleanup