diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscoveryService.java b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscoveryService.java index 41455927f798646c40f66e66a52d3cb223441695..84a76fd17d272312fc66f1fe0e0ab98440abb34d 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 c02c5c86fc08d62a84283511e886335d518b82b8..6bb3f53e33ccfa07adca0bbd78dece718cbb1ba5 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 ba17483ab0c0101d1ac36f9c75c30aacf20021b8..8249a94861febdd021406ff5428f21abddf8c02f 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 e72179d037c0ce24cf9a25383c566595b22c6c08..829d1c8edaf14472ecd3f189bbb9ac056a1ae73a 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);