Added new method IpAddress.valueOf(InetAddress inetAddress)
and use it as appropriate inside DistributedClusterStore.memberAddress()
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/DistributedClusterStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/DistributedClusterStore.java
index fd85f65..f372ced 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/DistributedClusterStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/DistributedClusterStore.java
@@ -147,9 +147,7 @@
     }
 
     private IpAddress memberAddress(Member member) {
-        byte[] address = member.getSocketAddress().getAddress().getAddress();
-        // TODO: Add support for IPv6
-        return IpAddress.valueOf(IpAddress.Version.INET, address);
+        return IpAddress.valueOf(member.getSocketAddress().getAddress());
     }
 
     // Interceptor for membership events.
diff --git a/utils/misc/src/main/java/org/onlab/packet/IpAddress.java b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
index 3f5931f..77ba9b0 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
@@ -164,6 +164,33 @@
     }
 
     /**
+     * Converts an InetAddress into an IP address.
+     *
+     * @param inetAddress the InetAddress value to use
+     * @return an IP address
+     * @throws IllegalArgumentException if the argument is invalid
+     */
+    public static IpAddress valueOf(InetAddress inetAddress) {
+        byte[] bytes = inetAddress.getAddress();
+        if (inetAddress instanceof Inet4Address) {
+            return new IpAddress(Version.INET, bytes);
+        }
+        if (inetAddress instanceof Inet6Address) {
+            return new IpAddress(Version.INET6, bytes);
+        }
+        // Use the number of bytes as a hint
+        if (bytes.length == INET_BYTE_LENGTH) {
+            return new IpAddress(Version.INET, bytes);
+        }
+        if (bytes.length == INET6_BYTE_LENGTH) {
+            return new IpAddress(Version.INET6, bytes);
+        }
+        final String msg = "Unrecognized IP version address string: " +
+            inetAddress.toString();
+        throw new IllegalArgumentException(msg);
+    }
+
+    /**
      * Converts an IPv4 or IPv6 string literal (e.g., "10.2.3.4" or
      * "1111:2222::8888") into an IP address.
      *
@@ -172,22 +199,14 @@
      * @throws IllegalArgumentException if the argument is invalid
      */
     public static IpAddress valueOf(String value) {
-        InetAddress addr = null;
+        InetAddress inetAddress = null;
         try {
-            addr = InetAddresses.forString(value);
+            inetAddress = InetAddresses.forString(value);
         } catch (IllegalArgumentException e) {
             final String msg = "Invalid IP address string: " + value;
             throw new IllegalArgumentException(msg);
         }
-        byte[] bytes = addr.getAddress();
-        if (addr instanceof Inet4Address) {
-            return new IpAddress(Version.INET, bytes);
-        }
-        if (addr instanceof Inet6Address) {
-            return new IpAddress(Version.INET6, bytes);
-        }
-        final String msg = "Unrecognized IP version address string: " + value;
-        throw new IllegalArgumentException(msg);
+        return valueOf(inetAddress);
     }
 
     /**
diff --git a/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java b/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java
index 5e01aa1..a609a43 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java
@@ -15,6 +15,9 @@
  */
 package org.onlab.packet;
 
+import java.net.InetAddress;
+
+import com.google.common.net.InetAddresses;
 import org.junit.Test;
 
 import static org.hamcrest.Matchers.is;
@@ -367,6 +370,52 @@
     }
 
     /**
+     * Tests valueOf() converter for IPv4 InetAddress.
+     */
+    @Test
+    public void testValueOfInetAddressIPv4() {
+        IpAddress ipAddress;
+        InetAddress inetAddress;
+
+        inetAddress = InetAddresses.forString("1.2.3.4");
+        ipAddress = IpAddress.valueOf(inetAddress);
+        assertThat(ipAddress.toString(), is("1.2.3.4"));
+
+        inetAddress = InetAddresses.forString("0.0.0.0");
+        ipAddress = IpAddress.valueOf(inetAddress);
+        assertThat(ipAddress.toString(), is("0.0.0.0"));
+
+        inetAddress = InetAddresses.forString("255.255.255.255");
+        ipAddress = IpAddress.valueOf(inetAddress);
+        assertThat(ipAddress.toString(), is("255.255.255.255"));
+    }
+
+    /**
+     * Tests valueOf() converter for IPv6 InetAddress.
+     */
+    @Test
+    public void testValueOfInetAddressIPv6() {
+        IpAddress ipAddress;
+        InetAddress inetAddress;
+
+        inetAddress =
+            InetAddresses.forString("1111:2222:3333:4444:5555:6666:7777:8888");
+        ipAddress = IpAddress.valueOf(inetAddress);
+        assertThat(ipAddress.toString(),
+                   is("1111:2222:3333:4444:5555:6666:7777:8888"));
+
+        inetAddress = InetAddresses.forString("::");
+        ipAddress = IpAddress.valueOf(inetAddress);
+        assertThat(ipAddress.toString(), is("::"));
+
+        inetAddress =
+            InetAddresses.forString("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
+        ipAddress = IpAddress.valueOf(inetAddress);
+        assertThat(ipAddress.toString(),
+                   is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
+    }
+
+    /**
      * Tests valueOf() converter for IPv4 string.
      */
     @Test