Added tools for converting dpid to uri and vice versa.
Modified device and link provider to use the new tools.
diff --git a/utils/misc/src/main/java/org/onlab/util/Tools.java b/utils/misc/src/main/java/org/onlab/util/Tools.java
index e1e9ed7..5e63b84 100644
--- a/utils/misc/src/main/java/org/onlab/util/Tools.java
+++ b/utils/misc/src/main/java/org/onlab/util/Tools.java
@@ -1,5 +1,7 @@
 package org.onlab.util;
 
+import com.google.common.base.Strings;
+import com.google.common.primitives.UnsignedLongs;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
 import java.util.concurrent.ThreadFactory;
@@ -20,4 +22,34 @@
         return new ThreadFactoryBuilder().setNameFormat(pattern).build();
     }
 
+    /**
+     * Converts a string from hex to long.
+     *
+     * @param string hex number in string form; sans 0x
+     * @return long value
+     */
+    public static long fromHex(String string) {
+        return UnsignedLongs.parseUnsignedLong(string, 16);
+    }
+
+    /**
+     * Converts a long value to hex string; 16 wide and sans 0x.
+     *
+     * @param value long value
+     * @return hex string
+     */
+    public static String toHex(long value) {
+        return Strings.padStart(UnsignedLongs.toString(value, 16), 16, '0');
+    }
+
+    /**
+     * Converts a long value to hex string; 16 wide and sans 0x.
+     *
+     * @param value long value
+     * @param width string width; zero padded
+     * @return hex string
+     */
+    public static String toHex(long value, int width) {
+        return Strings.padStart(UnsignedLongs.toString(value, 16), width, '0');
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/util/ToolsTest.java b/utils/misc/src/test/java/org/onlab/util/ToolsTest.java
new file mode 100644
index 0000000..c384176
--- /dev/null
+++ b/utils/misc/src/test/java/org/onlab/util/ToolsTest.java
@@ -0,0 +1,30 @@
+package org.onlab.util;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Test of the miscellaneous tools.
+ */
+public class ToolsTest {
+
+    @Test
+    public void fromHex() throws Exception {
+        assertEquals(15, Tools.fromHex("0f"));
+        assertEquals(16, Tools.fromHex("10"));
+        assertEquals(65535, Tools.fromHex("ffff"));
+        assertEquals(4096, Tools.fromHex("1000"));
+        assertEquals(0xffffffffffffffffL, Tools.fromHex("ffffffffffffffff"));
+    }
+
+    @Test
+    public void toHex() throws Exception {
+        assertEquals("0f", Tools.toHex(15, 2));
+        assertEquals("ffff", Tools.toHex(65535, 4));
+        assertEquals("1000", Tools.toHex(4096, 4));
+        assertEquals("000000000000000f", Tools.toHex(15));
+        assertEquals("ffffffffffffffff", Tools.toHex(0xffffffffffffffffL));
+
+    }
+}