diff --git a/src/main/java/net/onrc/onos/core/util/IPv4Net.java b/src/main/java/net/onrc/onos/core/util/IPv4Net.java
index 3b8fad6..66b98a3 100644
--- a/src/main/java/net/onrc/onos/core/util/IPv4Net.java
+++ b/src/main/java/net/onrc/onos/core/util/IPv4Net.java
@@ -1,5 +1,7 @@
 package net.onrc.onos.core.util;
 
+import java.util.Objects;
+
 import net.onrc.onos.core.util.serializers.IPv4NetDeserializer;
 import net.onrc.onos.core.util.serializers.IPv4NetSerializer;
 
@@ -91,4 +93,39 @@
     public String toString() {
         return this.address.toString() + "/" + this.prefixLen;
     }
+
+    /**
+     * Compares the value of two IPv4Net objects.
+     * <p/>
+     * Note the value of the IPv4 address is compared directly between the
+     * objects, and must match exactly for the objects to be considered equal.
+     * This may result in objects which represent the same IP prefix being
+     * classified as unequal, because the unsignificant bits of the address
+     * field don't match (the bits to the right of the prefix length).
+     * <p/>
+     * TODO Change this behavior so that objects that represent the same prefix
+     * are classified as equal according to this equals method.
+     *
+     * @see Object#equals(Object)
+     */
+    @Override
+    public boolean equals(Object other) {
+        if (other == this) {
+            return true;
+        }
+
+        if (!(other instanceof IPv4Net)) {
+            return false;
+        }
+
+        IPv4Net otherIpv4Net = (IPv4Net) other;
+
+        return Objects.equals(this.address, otherIpv4Net.address)
+                && this.prefixLen == otherIpv4Net.prefixLen;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(address, prefixLen);
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/util/IPv6.java b/src/main/java/net/onrc/onos/core/util/IPv6.java
index cd1a192..346d49b 100644
--- a/src/main/java/net/onrc/onos/core/util/IPv6.java
+++ b/src/main/java/net/onrc/onos/core/util/IPv6.java
@@ -1,5 +1,7 @@
 package net.onrc.onos.core.util;
 
+import java.util.Objects;
+
 import net.onrc.onos.core.util.serializers.IPv6Deserializer;
 import net.onrc.onos.core.util.serializers.IPv6Serializer;
 
@@ -87,4 +89,19 @@
         return HexString.toHexString(this.valueHigh) + ":" +
                 HexString.toHexString(this.valueLow);
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (!(o instanceof IPv6)) {
+            return false;
+        }
+        IPv6 other = (IPv6) o;
+        return this.valueHigh == other.valueHigh
+                && this.valueLow == other.valueLow;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(valueHigh, valueLow);
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/util/IPv6Net.java b/src/main/java/net/onrc/onos/core/util/IPv6Net.java
index 064e22e..22e5e22 100644
--- a/src/main/java/net/onrc/onos/core/util/IPv6Net.java
+++ b/src/main/java/net/onrc/onos/core/util/IPv6Net.java
@@ -1,5 +1,7 @@
 package net.onrc.onos.core.util;
 
+import java.util.Objects;
+
 import net.onrc.onos.core.util.serializers.IPv6NetDeserializer;
 import net.onrc.onos.core.util.serializers.IPv6NetSerializer;
 
@@ -91,4 +93,39 @@
     public String toString() {
         return this.address.toString() + "/" + this.prefixLen;
     }
+
+    /**
+     * Compares the value of two IPv6Net objects.
+     * <p/>
+     * Note the value of the IPv6 address is compared directly between the
+     * objects, and must match exactly for the objects to be considered equal.
+     * This may result in objects which represent the same IP prefix being
+     * classified as unequal, because the unsignificant bits of the address
+     * field don't match (the bits to the right of the prefix length).
+     * <p/>
+     * TODO Change this behavior so that objects that represent the same prefix
+     * are classified as equal according to this equals method.
+     *
+     * @see Object#equals(Object)
+     */
+    @Override
+    public boolean equals(Object other) {
+        if (other == this) {
+            return true;
+        }
+
+        if (!(other instanceof IPv6Net)) {
+            return false;
+        }
+
+        IPv6Net otherIpv6Net = (IPv6Net) other;
+
+        return Objects.equals(this.address, otherIpv6Net.address)
+                && this.prefixLen == otherIpv6Net.prefixLen;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(address, prefixLen);
+    }
 }
