Added graph-related utility code.
diff --git a/utils/misc/src/main/java/org/onlab/graph/GraphPathSearch.java b/utils/misc/src/main/java/org/onlab/graph/GraphPathSearch.java
new file mode 100644
index 0000000..e8df185
--- /dev/null
+++ b/utils/misc/src/main/java/org/onlab/graph/GraphPathSearch.java
@@ -0,0 +1,68 @@
+package org.onlab.graph;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Representation of a graph path search algorithm.
+ *
+ * @param <V> vertex type
+ * @param <E> edge type
+ */
+public interface GraphPathSearch<V extends Vertex, E extends Edge<V>> {
+
+    /**
+     * Abstraction of a path search result.
+     */
+    public interface Result<V extends Vertex, E extends Edge<V>> {
+
+        /**
+         * Returns the search source.
+         *
+         * @return search source
+         */
+        public V src();
+
+        /**
+         * Returns the search destination, if was was given.
+         *
+         * @return optional search destination
+         */
+        public V dst();
+
+        /**
+         * Returns the set of paths produced as a result of the graph search.
+         *
+         * @return set of paths
+         */
+        Set<Path<V, E>> paths();
+
+        /**
+         * Returns bindings of each vertex to its parent edges in the path.
+         *
+         * @return map of vertex to its parent edge bindings
+         */
+        public Map<V, Set<E>> parents();
+
+        /**
+         * Return a bindings of each vertex to its cost in the path.
+         *
+         * @return map of vertex to path cost bindings
+         */
+        public Map<V, Double> costs();
+    }
+
+    /**
+     * Searches the specified graph.
+     *
+     * @param graph  graph to be searched
+     * @param src    optional source vertex
+     * @param dst    optional destination vertex; if null paths to all vertex
+     *               destinations will be searched
+     * @param weight optional edge-weight; if null cost of each edge will be
+     *               assumed to be 1.0
+     * @return search results
+     */
+    Result<V, E> search(Graph<V, E> graph, V src, V dst, EdgeWeight<V, E> weight);
+
+}