diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java index a0dee52830bafafa0d851d4dccd03f0c15077500..ac8fa0d6c3f33ab27397005855a86286132a5003 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java @@ -2102,9 +2102,8 @@ IFlowReconcileListener, IInfoProvider { * Topology listener method. */ @Override - public void topologyChanged() { + public void topologyChanged(List<LDUpdate> updateList) { Iterator<Device> diter = deviceMap.values().iterator(); - List<LDUpdate> updateList = topology.getLastLinkUpdates(); if (updateList != null) { if (logger.isTraceEnabled()) { for(LDUpdate update: updateList) { diff --git a/src/main/java/net/floodlightcontroller/flowcache/PortDownReconciliation.java b/src/main/java/net/floodlightcontroller/flowcache/PortDownReconciliation.java index 24ee7c733bf9dc9395c91a18fecdbe997d8bdf8d..a2f57bb9cc166e073e2ebacf4b950fdc292b6a12 100644 --- a/src/main/java/net/floodlightcontroller/flowcache/PortDownReconciliation.java +++ b/src/main/java/net/floodlightcontroller/flowcache/PortDownReconciliation.java @@ -85,8 +85,8 @@ public class PortDownReconciliation implements IFloodlightModule, // ITopologyListener @Override - public void topologyChanged() { - for (LDUpdate ldu : topology.getLastLinkUpdates()) { + public void topologyChanged(List<LDUpdate> appliedUpdates) { + for (LDUpdate ldu : appliedUpdates) { if (ldu.getOperation() .equals(ILinkDiscovery.UpdateOperation.PORT_DOWN)) { diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java index b6aa79d8be7586af95578c016ebf3dcd832b6559..0e27157669190a166803b73bdeac6c7233b04e49 100644 --- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java +++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java @@ -923,9 +923,9 @@ public class LinkDiscoveryManager implements IOFMessageListener, private boolean portEnabled(OFPhysicalPort port) { if (port == null) return false; if ((OFPortConfig.OFPPC_PORT_DOWN.getValue() & port.getConfig()) > 0) - return false; + return false; if ((OFPortState.OFPPS_LINK_DOWN.getValue() & port.getState()) > 0) - return false; + return false; // Port STP state doesn't work with multiple VLANs, so ignore it for now // if ((port.getState() & OFPortState.OFPPS_STP_MASK.getValue()) == // OFPortState.OFPPS_STP_BLOCK.getValue()) @@ -1816,7 +1816,7 @@ public class LinkDiscoveryManager implements IOFMessageListener, // Storage Listener //********************* /** - * Sets the IStorageSource to use for ITology + * Sets the IStorageSource to use for Topology * * @param storageSource * the storage source to use diff --git a/src/main/java/net/floodlightcontroller/topology/ITopologyListener.java b/src/main/java/net/floodlightcontroller/topology/ITopologyListener.java index 85dd19897d445a966eeda9f0711eb53d5a1e63aa..56933ca59515cf242c4d3b7108975b0c0fbb034a 100644 --- a/src/main/java/net/floodlightcontroller/topology/ITopologyListener.java +++ b/src/main/java/net/floodlightcontroller/topology/ITopologyListener.java @@ -16,9 +16,13 @@ package net.floodlightcontroller.topology; +import java.util.List; + +import net.floodlightcontroller.linkdiscovery.ILinkDiscovery.LDUpdate; + public interface ITopologyListener { /** * Happens when the switch clusters are recomputed */ - void topologyChanged(); + void topologyChanged(List<LDUpdate> linkUpdates); } diff --git a/src/main/java/net/floodlightcontroller/topology/ITopologyService.java b/src/main/java/net/floodlightcontroller/topology/ITopologyService.java index 8bbb82a1b83c73946c6346d41cca0e1287f4dadb..5635d637dabfe00652909e1b46184b0fcadb5091 100644 --- a/src/main/java/net/floodlightcontroller/topology/ITopologyService.java +++ b/src/main/java/net/floodlightcontroller/topology/ITopologyService.java @@ -203,14 +203,6 @@ public interface ITopologyService extends IFloodlightService { */ public Set<NodePortTuple> getBlockedPorts(); - /** - * ITopologyListener provides topologyChanged notification, - * but not *what* the changes were. - * This method returns the delta in the linkUpdates between the current and the previous topology instance. - * @return - */ - public List<LDUpdate> getLastLinkUpdates(); - /** * Switch methods */ diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java index 775ba64f74891b90d42452a6f4f16d5cda4fc81b..69a5d09daa334706612c39d03039bda8dffa4bb9 100644 --- a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java +++ b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java @@ -19,6 +19,7 @@ package net.floodlightcontroller.topology; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -126,7 +127,6 @@ public class TopologyManager implements protected ArrayList<ITopologyListener> topologyAware; protected BlockingQueue<LDUpdate> ldUpdates; - protected List<LDUpdate> appliedUpdates; // These must be accessed using getCurrentInstance(), not directly protected TopologyInstance currentInstance; @@ -210,10 +210,10 @@ public class TopologyManager implements linksUpdated = false; dtLinksUpdated = false; tunnelPortsUpdated = false; - applyUpdates(); + List<LDUpdate> appliedUpdates = applyUpdates(); newInstanceFlag = createNewInstance(); lastUpdateTime = new Date(); - informListeners(); + informListeners(appliedUpdates); return newInstanceFlag; } @@ -576,11 +576,6 @@ public class TopologyManager implements return blockedPorts; } - - @Override - public List<LDUpdate> getLastLinkUpdates() { - return appliedUpdates; - } //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// @@ -765,7 +760,6 @@ public class TopologyManager implements tunnelPorts = new HashSet<NodePortTuple>(); topologyAware = new ArrayList<ITopologyListener>(); ldUpdates = new LinkedBlockingQueue<LDUpdate>(); - appliedUpdates = new ArrayList<LDUpdate>(); haListener = new HAListenerDelegate(); } @@ -1015,8 +1009,8 @@ public class TopologyManager implements message="Error reading link discovery update.", explanation="Unable to process link discovery update", recommendation=LogMessageDoc.REPORT_CONTROLLER_BUG) - public void applyUpdates() { - appliedUpdates.clear(); + public List<LDUpdate> applyUpdates() { + List<LDUpdate> appliedUpdates = new ArrayList<LDUpdate>(); LDUpdate update = null; while (ldUpdates.peek() != null) { try { @@ -1056,6 +1050,7 @@ public class TopologyManager implements // Add to the list of applied updates. appliedUpdates.add(update); } + return (Collections.unmodifiableList(appliedUpdates)); } protected void addOrUpdateSwitch(long sw) { @@ -1195,14 +1190,14 @@ public class TopologyManager implements - public void informListeners() { + public void informListeners(List<LDUpdate> linkUpdates) { if (role != null && role != Role.MASTER) return; for(int i=0; i<topologyAware.size(); ++i) { ITopologyListener listener = topologyAware.get(i); - listener.topologyChanged(); + listener.topologyChanged(linkUpdates); } } @@ -1368,7 +1363,6 @@ public class TopologyManager implements switchPortLinks.clear(); portBroadcastDomainLinks.clear(); directLinks.clear(); - appliedUpdates.clear(); } /** @@ -1428,6 +1422,4 @@ public class TopologyManager implements ports.addAll(ofpList); return ports; } - - }