Added shortest-path computation tool:
admin@deva-onos1:~/ONOS/web$ ./get_network_graph.py shortest-path 00:00:00:00:00:00:02:01 00:00:00:00:00:00:04:01
[
{
"src-switch": "00:00:00:00:00:00:02:01",
"src-port": 51,
"dst-switch": "00:00:00:00:00:00:01:02",
"dst-port": 4
},
{
"src-switch": "00:00:00:00:00:00:01:02",
"src-port": 3,
"dst-switch": "00:00:00:00:00:00:01:03",
"dst-port": 2
},
{
"src-switch": "00:00:00:00:00:00:01:03",
"src-port": 3,
"dst-switch": "00:00:00:00:00:00:01:04",
"dst-port": 2
},
{
"src-switch": "00:00:00:00:00:00:01:04",
"src-port": 5,
"dst-switch": "00:00:00:00:00:00:04:01",
"dst-port": 26
}
]
Removed extra (empty) new line in the web/get_datagrid_ngevents.py output
Change-Id: I5ac8981447fbe26a26b812e8d811f902665123d7
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/NetworkGraphShortestPathResource.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/NetworkGraphShortestPathResource.java
new file mode 100644
index 0000000..43e5806
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/web/NetworkGraphShortestPathResource.java
@@ -0,0 +1,81 @@
+package net.onrc.onos.ofcontroller.networkgraph.web;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import net.onrc.onos.intent.ConstrainedBFSTree;
+import net.onrc.onos.ofcontroller.networkgraph.INetworkGraphService;
+import net.onrc.onos.ofcontroller.networkgraph.Link;
+import net.onrc.onos.ofcontroller.networkgraph.LinkEvent;
+import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
+import net.onrc.onos.ofcontroller.networkgraph.Path;
+import net.onrc.onos.ofcontroller.networkgraph.Switch;
+import net.onrc.onos.ofcontroller.networkgraph.serializers.LinkSerializer;
+import net.onrc.onos.ofcontroller.util.Dpid;
+
+import org.codehaus.jackson.Version;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.module.SimpleModule;
+import org.restlet.resource.Get;
+import org.restlet.resource.ServerResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NetworkGraphShortestPathResource extends ServerResource {
+
+ private static final Logger log = LoggerFactory.getLogger(NetworkGraphShortestPathResource.class);
+
+ @Get("json")
+ public String retrieve() {
+ INetworkGraphService networkGraphService =
+ (INetworkGraphService)getContext().getAttributes().
+ get(INetworkGraphService.class.getCanonicalName());
+
+ NetworkGraph graph = networkGraphService.getNetworkGraph();
+
+ ObjectMapper mapper = new ObjectMapper();
+ SimpleModule module = new SimpleModule("module", new Version(1, 0, 0, null));
+ module.addSerializer(new LinkSerializer());
+ mapper.registerModule(module);
+
+ //
+ // Fetch the attributes
+ //
+ String srcDpidStr = (String)getRequestAttributes().get("src-dpid");
+ String dstDpidStr = (String)getRequestAttributes().get("dst-dpid");
+ Dpid srcDpid = new Dpid(srcDpidStr);
+ Dpid dstDpid = new Dpid(dstDpidStr);
+ log.debug("Getting Shortest Path {}--{}", srcDpidStr, dstDpidStr);
+
+ //
+ // Do the Shortest Path computation and return the result: list of
+ // links.
+ //
+ try {
+ graph.acquireReadLock();
+ Switch srcSwitch = graph.getSwitch(srcDpid.value());
+ Switch dstSwitch = graph.getSwitch(dstDpid.value());
+ if ((srcSwitch == null) || (dstSwitch == null))
+ return "";
+ ConstrainedBFSTree bfsTree = new ConstrainedBFSTree(srcSwitch);
+ Path path = bfsTree.getPath(dstSwitch);
+ List<Link> links = new LinkedList<>();
+ for (LinkEvent linkEvent : path) {
+ Link link = graph.getLink(linkEvent.getSrc().getDpid(),
+ linkEvent.getSrc().getNumber(),
+ linkEvent.getDst().getDpid(),
+ linkEvent.getDst().getNumber());
+ if (link == null)
+ return "";
+ links.add(link);
+ }
+ return mapper.writeValueAsString(links);
+ } catch (IOException e) {
+ log.error("Error writing Shortest Path to JSON", e);
+ return "";
+ } finally {
+ graph.releaseReadLock();
+ }
+ }
+}