diff --git a/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java new file mode 100644 index 0000000000000000000000000000000000000000..70e406fcc25946a4c1275c2e351c6c4513838932 --- /dev/null +++ b/src/main/java/net/floodlightcontroller/topology/web/RouteResource.java @@ -0,0 +1,47 @@ +package net.floodlightcontroller.topology.web; + +import java.util.List; + +import net.floodlightcontroller.routing.IRoutingService; +import net.floodlightcontroller.routing.Route; +import net.floodlightcontroller.topology.NodePortTuple; + +import org.openflow.util.HexString; +import org.restlet.resource.Get; +import org.restlet.resource.ServerResource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RouteResource extends ServerResource { + + protected static Logger log = LoggerFactory.getLogger(RouteResource.class); + + @Get("json") + public List<NodePortTuple> retrieve() { + IRoutingService routing = + (IRoutingService)getContext().getAttributes(). + get(IRoutingService.class.getCanonicalName()); + + String srcDpid = (String) getRequestAttributes().get("src-dpid"); + String srcPort = (String) getRequestAttributes().get("src-port"); + String dstDpid = (String) getRequestAttributes().get("dst-dpid"); + String dstPort = (String) getRequestAttributes().get("dst-port"); + + log.debug( srcDpid + "--" + srcPort + "--" + dstDpid + "--" + dstPort); + + long longSrcDpid = HexString.toLong(srcDpid); + short shortSrcPort = Short.parseShort(srcPort); + long longDstDpid = HexString.toLong(dstDpid); + short shortDstPort = Short.parseShort(dstPort); + + Route result = routing.getRoute(longSrcDpid, shortSrcPort, longDstDpid, shortDstPort); + + if (result!=null) { + return routing.getRoute(longSrcDpid, shortSrcPort, longDstDpid, shortDstPort).getPath(); + } + else { + log.debug("ERROR! no route found"); + return null; + } + } +} diff --git a/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java b/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java index 7335f261d95ef8f037d8ab8612816bd6a8a8a296..1c15d8a65dde9c7b8e678e0c2325fbb0ffc43135 100644 --- a/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java +++ b/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java @@ -18,6 +18,7 @@ public class TopologyWebRoutable implements RestletRoutable { router.attach("/switchclusters/json", SwitchClustersResource.class); router.attach("/broadcastdomainports/json", BroadcastDomainResource.class); router.attach("/blockedports/json", BlockedPortsResource.class); + router.attach("/route/{src-dpid}/{src-port}/{dst-dpid}/{dst-port}/json", RouteResource.class); return router; }