From 33472a605c4dc1361db5075732a1429a326064d2 Mon Sep 17 00:00:00 2001 From: Srinivasan Ramasubramanian <srini@bigswitch.com> Date: Wed, 17 Oct 2012 06:18:53 -0700 Subject: [PATCH] Add isTunnelPort() to ILinkDiscoveryService. A tunnel port is not an attachment point port even if no links are found through it. --- .../linkdiscovery/ILinkDiscoveryService.java | 6 ++++++ .../linkdiscovery/internal/LinkDiscoveryManager.java | 4 ++++ .../net/floodlightcontroller/topology/TopologyManager.java | 7 +++++++ .../topology/TopologyInstanceTest.java | 5 +++++ 4 files changed, 22 insertions(+) diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscoveryService.java b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscoveryService.java index 41455927f..84a76fd17 100644 --- a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscoveryService.java +++ b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscoveryService.java @@ -26,6 +26,12 @@ import net.floodlightcontroller.topology.NodePortTuple; public interface ILinkDiscoveryService extends IFloodlightService { + + /** + * Returns if a given switchport is a tunnel endpoint or not + */ + public boolean isTunnelPort(long sw, short port); + /** * Retrieves a map of all known link connections between OpenFlow switches * and the associated info (valid time, port states) for the link. diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java index c02c5c86f..6bb3f53e3 100644 --- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java +++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java @@ -302,6 +302,10 @@ IFloodlightModule, IInfoProvider, IHAListener { return false; } + public boolean isTunnelPort(long sw, short port) { + return false; + } + public ILinkDiscovery.LinkType getLinkType(Link lt, LinkInfo info) { if (info.getUnicastValidTime() != null) { return ILinkDiscovery.LinkType.DIRECT_LINK; diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java index ba17483ab..8249a9486 100644 --- a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java +++ b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java @@ -199,6 +199,13 @@ public class TopologyManager implements @Override public boolean isAttachmentPointPort(long switchid, short port, boolean tunnelEnabled) { + + // If the switch port is a tunnel endpoint, it is not + // an attachment point port, irrespective of whether + // a link is found through it or not. + if (linkDiscovery.isTunnelPort(switchid, port)) + return false; + TopologyInstance ti = getCurrentInstance(tunnelEnabled); // if the port is not attachment point port according to diff --git a/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java b/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java index e72179d03..829d1c8ed 100644 --- a/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java +++ b/src/test/java/net/floodlightcontroller/topology/TopologyInstanceTest.java @@ -12,11 +12,13 @@ import net.floodlightcontroller.core.module.FloodlightModuleContext; import net.floodlightcontroller.core.test.MockFloodlightProvider; import net.floodlightcontroller.core.test.MockThreadPoolService; import net.floodlightcontroller.linkdiscovery.ILinkDiscovery; +import net.floodlightcontroller.linkdiscovery.ILinkDiscoveryService; import net.floodlightcontroller.threadpool.IThreadPoolService; import net.floodlightcontroller.topology.NodePortTuple; import net.floodlightcontroller.topology.TopologyInstance; import net.floodlightcontroller.topology.TopologyManager; +import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; @@ -26,6 +28,7 @@ public class TopologyInstanceTest { protected static Logger log = LoggerFactory.getLogger(TopologyInstanceTest.class); protected TopologyManager topologyManager; protected FloodlightModuleContext fmc; + protected ILinkDiscoveryService linkDiscovery; protected MockFloodlightProvider mockFloodlightProvider; protected int DIRECT_LINK = 1; @@ -35,8 +38,10 @@ public class TopologyInstanceTest { @Before public void SetUp() throws Exception { fmc = new FloodlightModuleContext(); + linkDiscovery = EasyMock.createMock(ILinkDiscoveryService.class); mockFloodlightProvider = new MockFloodlightProvider(); fmc.addService(IFloodlightProviderService.class, mockFloodlightProvider); + fmc.addService(ILinkDiscoveryService.class, linkDiscovery); MockThreadPoolService tp = new MockThreadPoolService(); topologyManager = new TopologyManager(); fmc.addService(IThreadPoolService.class, tp); -- GitLab