From 902407f3f0a8b0cdc9348680b61369b8fd807305 Mon Sep 17 00:00:00 2001 From: Srinivasan Ramasubramanian <srini@bigswitch.com> Date: Thu, 18 Oct 2012 02:32:59 -0700 Subject: [PATCH] Changes to REST API for links. http://<controller>:8080/wm/topology/links/json would now return only direct and tunnel links (LinkType.DIRECT_LINK or LinkType.TUNNEL). To get external links, use http://<controller>:8080/wm/topology/external-links/json. --- .../web/ExternalLinksResource.java | 42 +++++++++++++++++++ .../linkdiscovery/web/LinksResource.java | 8 +++- .../topology/web/TopologyWebRoutable.java | 2 + 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/floodlightcontroller/linkdiscovery/web/ExternalLinksResource.java diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/web/ExternalLinksResource.java b/src/main/java/net/floodlightcontroller/linkdiscovery/web/ExternalLinksResource.java new file mode 100644 index 000000000..8adcf119e --- /dev/null +++ b/src/main/java/net/floodlightcontroller/linkdiscovery/web/ExternalLinksResource.java @@ -0,0 +1,42 @@ +package net.floodlightcontroller.linkdiscovery.web; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import net.floodlightcontroller.linkdiscovery.ILinkDiscovery.LinkType; +import net.floodlightcontroller.linkdiscovery.ILinkDiscoveryService; +import net.floodlightcontroller.linkdiscovery.LinkInfo; +import net.floodlightcontroller.routing.Link; + +import org.restlet.resource.Get; +import org.restlet.resource.ServerResource; + +public class ExternalLinksResource extends ServerResource { + + @Get("json") + public Set<LinkWithType> retrieve() { + ILinkDiscoveryService ld = (ILinkDiscoveryService)getContext().getAttributes(). + get(ILinkDiscoveryService.class.getCanonicalName()); + Map<Link, LinkInfo> links = new HashMap<Link, LinkInfo>(); + Set<LinkWithType> returnLinkSet = new HashSet<LinkWithType>(); + + if (ld != null) { + links.putAll(ld.getLinks()); + for (Link link: links.keySet()) { + LinkInfo info = links.get(link); + LinkType type = ld.getLinkType(link, info); + if (type == LinkType.MULTIHOP_LINK) { + LinkWithType lwt = new LinkWithType(link, + info.getSrcPortState(), + info.getDstPortState(), + type); + + returnLinkSet.add(lwt); + } + } + } + return returnLinkSet; + } +} diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/web/LinksResource.java b/src/main/java/net/floodlightcontroller/linkdiscovery/web/LinksResource.java index 4cad18e61..5e1ffd4c1 100644 --- a/src/main/java/net/floodlightcontroller/linkdiscovery/web/LinksResource.java +++ b/src/main/java/net/floodlightcontroller/linkdiscovery/web/LinksResource.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import net.floodlightcontroller.linkdiscovery.ILinkDiscovery.LinkType; import net.floodlightcontroller.linkdiscovery.ILinkDiscoveryService; import net.floodlightcontroller.linkdiscovery.LinkInfo; import net.floodlightcontroller.routing.Link; @@ -25,11 +26,14 @@ public class LinksResource extends ServerResource { links.putAll(ld.getLinks()); for (Link link: links.keySet()) { LinkInfo info = links.get(link); + LinkType type = ld.getLinkType(link, info); LinkWithType lwt = new LinkWithType(link, info.getSrcPortState(), info.getDstPortState(), - ld.getLinkType(link, info)); - returnLinkSet.add(lwt); + type); + + if (type == LinkType.DIRECT_LINK || type == LinkType.TUNNEL) + returnLinkSet.add(lwt); } } return returnLinkSet; diff --git a/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java b/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java index 79894137a..c9479beb0 100644 --- a/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java +++ b/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java @@ -3,6 +3,7 @@ package net.floodlightcontroller.topology.web; import org.restlet.Context; import org.restlet.routing.Router; +import net.floodlightcontroller.linkdiscovery.web.ExternalLinksResource; import net.floodlightcontroller.linkdiscovery.web.LinksResource; import net.floodlightcontroller.restserver.RestletRoutable; @@ -14,6 +15,7 @@ public class TopologyWebRoutable implements RestletRoutable { public Router getRestlet(Context context) { Router router = new Router(context); router.attach("/links/json", LinksResource.class); + router.attach("/external-links/json", ExternalLinksResource.class); router.attach("/tunnellinks/json", TunnelLinksResource.class); router.attach("/switchclusters/json", SwitchClustersResource.class); router.attach("/broadcastdomainports/json", BroadcastDomainPortsResource.class); -- GitLab