diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java index 9795363ae6d5ec7903b509518c8a81e3acaaf2f3..a7268fa10b370481439b6cfa2034de8495d01449 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java @@ -260,6 +260,8 @@ public class Device implements IDevice { Integer port = cur.getSwitchPort(); if (dpid == null || port == null || !deviceManager.isValidAttachmentPoint(dpid, port) || + cur.getLastSeenTimestamp(). + before(topology.getLastUpdateTime()) || (prev != null && topology.isConsistent(prev.getSwitchDPID().longValue(), prev.getSwitchPort().shortValue(), diff --git a/src/main/java/net/floodlightcontroller/topology/ITopologyService.java b/src/main/java/net/floodlightcontroller/topology/ITopologyService.java index 6b38f60befd56cbe304719e23c574e147ae7a70b..90f8450a8b69aba9178be652cdf5131f4dee7094 100644 --- a/src/main/java/net/floodlightcontroller/topology/ITopologyService.java +++ b/src/main/java/net/floodlightcontroller/topology/ITopologyService.java @@ -1,5 +1,6 @@ package net.floodlightcontroller.topology; +import java.util.Date; import java.util.Set; import net.floodlightcontroller.core.module.IFloodlightService; @@ -9,6 +10,8 @@ public interface ITopologyService extends IFloodlightService { public void addListener(ITopologyListener listener); + public Date getLastUpdateTime(); + /** * Query to determine if devices must be learned on a given switch port. */ diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java index 26374bf6855ff89c29abe846c375216ceb9f951b..1b8e93495a5f3be5f2732a231a43439e6a66f8d0 100644 --- a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java +++ b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java @@ -3,6 +3,7 @@ package net.floodlightcontroller.topology; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -94,6 +95,8 @@ public class TopologyManager implements protected TopologyInstance currentInstanceWithoutTunnels; protected SingletonTask newInstanceTask; + private Date lastUpdateTime; + /** * Thread for recomputing topology. The thread is always running, * however the function applyUpdates() has a blocking call. @@ -104,6 +107,7 @@ public class TopologyManager implements try { applyUpdates(); createNewInstance(); + lastUpdateTime = new Date(); informListeners(); } catch (Exception e) { @@ -141,6 +145,10 @@ public class TopologyManager implements // // ITopologyService interface methods // + @Override + public Date getLastUpdateTime() { + return lastUpdateTime; + } @Override public void addListener(ITopologyListener listener) { @@ -593,6 +601,8 @@ public class TopologyManager implements topologyAware = new ArrayList<ITopologyListener>(); ldUpdates = new LinkedBlockingQueue<LDUpdate>(); appliedUpdates = new HashSet<LDUpdate>(); + + lastUpdateTime = new Date(); } @Override