Disjoint Path Utils Exposed
- to TopologyStores
- to TopologyServices
- to PathServices
- to REST API
Change-Id: Ib2b5840df0f8e94f327ec8f91827d3d850634562
Change-Id: I03e59210e9c79c4f92dcfa8c7983642572708429
Change-Id: Ia5c17d1ded374ef688990bd30e7f99184aaca95b
Change-Id: Ibebae50bc722701e8212263587727ad8abd79805
diff --git a/core/api/src/main/java/org/onosproject/net/topology/PathService.java b/core/api/src/main/java/org/onosproject/net/topology/PathService.java
index be8c7cf..d41b4ee 100644
--- a/core/api/src/main/java/org/onosproject/net/topology/PathService.java
+++ b/core/api/src/main/java/org/onosproject/net/topology/PathService.java
@@ -15,9 +15,12 @@
*/
package org.onosproject.net.topology;
+import org.onosproject.net.DisjointPath;
import org.onosproject.net.ElementId;
+import org.onosproject.net.Link;
import org.onosproject.net.Path;
+import java.util.Map;
import java.util.Set;
/**
@@ -48,4 +51,51 @@
*/
Set<Path> getPaths(ElementId src, ElementId dst, LinkWeight weight);
+ /**
+ * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count,
+ * between the specified source and destination devices.
+ *
+ * @param src source device
+ * @param dst destination device
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst);
+
+ /**
+ * Returns the set of all disjoint shortest path pairs, computed using the supplied
+ * edge-weight entity, between the specified source and destination devices.
+ *
+ * @param src source device
+ * @param dst destination device
+ * @param weight edge-weight entity
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst,
+ LinkWeight weight);
+
+ /**
+ * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count,
+ * between the specified source and destination devices.
+ *
+ * @param src source device
+ * @param dst destination device
+ * @param riskProfile map of edges to risk profiles
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getSRLGDisjointPaths(ElementId src, ElementId dst,
+ Map<Link, Object> riskProfile);
+
+ /**
+ * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count,
+ * between the specified source and destination devices.
+ *
+ * @param src source device
+ * @param dst destination device
+ * @param weight edge-weight entity
+ * @param riskProfile map of edges to risk profiles
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getSRLGDisjointPaths(ElementId src, ElementId dst,
+ LinkWeight weight, Map<Link, Object> riskProfile);
+
}
diff --git a/core/api/src/main/java/org/onosproject/net/topology/TopologyService.java b/core/api/src/main/java/org/onosproject/net/topology/TopologyService.java
index 41eac2c..7b22a36 100644
--- a/core/api/src/main/java/org/onosproject/net/topology/TopologyService.java
+++ b/core/api/src/main/java/org/onosproject/net/topology/TopologyService.java
@@ -18,9 +18,11 @@
import org.onosproject.event.ListenerService;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.DisjointPath;
import org.onosproject.net.Link;
import org.onosproject.net.Path;
+import java.util.Map;
import java.util.Set;
/**
@@ -112,6 +114,56 @@
LinkWeight weight);
/**
+ * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count,
+ * between the specified source and destination devices.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst);
+
+ /**
+ * Returns the set of all disjoint shortest path pairs, computed using the supplied
+ * edge-weight entity, between the specified source and destination devices.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @param weight edge-weight entity
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
+ LinkWeight weight);
+
+ /**
+ * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count,
+ * between the specified source and destination devices.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @param riskProfile map of edges to risk profiles
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getSRLGDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
+ Map<Link, Object> riskProfile);
+
+ /**
+ * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count,
+ * between the specified source and destination devices.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @param weight edge-weight entity
+ * @param riskProfile map of edges to risk profiles
+ * @return set of all shortest paths between the two devices
+ */
+ Set<DisjointPath> getSRLGDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
+ LinkWeight weight, Map<Link, Object> riskProfile);
+ /**
* Indicates whether the specified connection point is part of the network
* infrastructure or part of network edge.
*
diff --git a/core/api/src/main/java/org/onosproject/net/topology/TopologyStore.java b/core/api/src/main/java/org/onosproject/net/topology/TopologyStore.java
index 983e616..f194878 100644
--- a/core/api/src/main/java/org/onosproject/net/topology/TopologyStore.java
+++ b/core/api/src/main/java/org/onosproject/net/topology/TopologyStore.java
@@ -20,11 +20,13 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.Link;
import org.onosproject.net.Path;
+import org.onosproject.net.DisjointPath;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.store.Store;
import java.util.List;
import java.util.Set;
+import java.util.Map;
/**
* Manages inventory of topology snapshots; not intended for direct use.
@@ -112,6 +114,59 @@
LinkWeight weight);
/**
+ * Computes and returns the set of disjoint shortest path pairs
+ * between src and dst.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @param weight link weight function
+ * @return set of shortest paths
+ */
+ Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
+ LinkWeight weight);
+
+ /**
+ * Computes and returns the set of disjoint shortest path pairs
+ * between src and dst.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @return set of shortest paths
+ */
+ Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst);
+
+ /**
+ * Computes and returns the set of SRLG disjoint shortest path pairs between source
+ * and dst, given a mapping of edges to SRLG risk groups.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @param weight link weight function
+ * @param riskProfile map of edges to objects. Edges that map to the same object will
+ * be treated as if they were in the same risk group.
+ * @return set of shortest paths
+ */
+ Set<DisjointPath> getSRLGDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
+ LinkWeight weight, Map<Link, Object> riskProfile);
+
+ /**
+ * Returns the set of pre-computed SRLG shortest paths between src and dest.
+ *
+ * @param topology topology descriptor
+ * @param src source device
+ * @param dst destination device
+ * @param riskProfile map of edges to objects. Edges that map to the same object will
+ * be treated as if they were in the same risk group.
+ * @return set of shortest paths
+ */
+ Set<DisjointPath> getSRLGDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
+ Map<Link, Object> riskProfile);
+
+
+ /**
* Indicates whether the given connect point is part of the network fabric.
*
* @param topology topology descriptor
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
index ac4ecff..8d30551 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
@@ -22,6 +22,7 @@
import org.onosproject.core.DefaultGroupId;
import org.onosproject.core.GroupId;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.DisjointPath;
import org.onosproject.net.ElementId;
import org.onosproject.net.Link;
import org.onosproject.net.NetTestTools;
@@ -64,6 +65,7 @@
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
@@ -185,6 +187,28 @@
}
return paths;
}
+
+ @Override
+ public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst) {
+ return null;
+ }
+
+ @Override
+ public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, LinkWeight weight) {
+ return null;
+ }
+
+ @Override
+ public Set<DisjointPath> getSRLGDisjointPaths(ElementId src, ElementId dst,
+ Map<Link, Object> riskProfile) {
+ return null;
+ }
+
+ @Override
+ public Set<DisjointPath> getSRLGDisjointPaths(ElementId src, ElementId dst, LinkWeight weight,
+ Map<Link, Object> riskProfile) {
+ return null;
+ }
}
public static class MockLinkResourceAllocations implements LinkResourceAllocations {
@@ -424,7 +448,7 @@
}
final MockFlowRule other = (MockFlowRule) obj;
return Objects.equals(this.timestamp, other.timestamp) &&
- this.id == other.id;
+ this.id == other.id;
}
@Override
@@ -450,7 +474,7 @@
public MockIntent(Long number) {
super(NetTestTools.APP_ID, null, Collections.emptyList(),
- Intent.DEFAULT_INTENT_PRIORITY);
+ Intent.DEFAULT_INTENT_PRIORITY);
this.number = number;
}
diff --git a/core/api/src/test/java/org/onosproject/net/topology/TopologyServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/topology/TopologyServiceAdapter.java
index 07e6784..b5b3056 100644
--- a/core/api/src/test/java/org/onosproject/net/topology/TopologyServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/topology/TopologyServiceAdapter.java
@@ -17,9 +17,11 @@
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.DisjointPath;
import org.onosproject.net.Link;
import org.onosproject.net.Path;
+import java.util.Map;
import java.util.Set;
/**
@@ -88,5 +90,26 @@
@Override
public void removeListener(TopologyListener listener) {
}
+ @Override
+ public Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst) {
+ return null;
+ }
+
+ @Override
+ public Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight) {
+ return null;
+ }
+
+ @Override
+ public Set<DisjointPath> getSRLGDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
+ Map<Link, Object> riskProfile) {
+ return null;
+ }
+
+ @Override
+ public Set<DisjointPath> getSRLGDisjointPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight,
+ Map<Link, Object> riskProfile) {
+ return null;
+ }
}