diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/AddressFamilyIdentifierEnum.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/AddressFamilyIdentifierEnum.java
index 136534e..526c8b4 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/AddressFamilyIdentifierEnum.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/AddressFamilyIdentifierEnum.java
@@ -25,10 +25,18 @@
  */
 public enum AddressFamilyIdentifierEnum {
 
-    NO_ADDRESS(0), IP(1), IP6(2), DNS(16), DISTINGUISHED_NAME(17), AS(18), LCAF(16387),
-    MAC(16389), OUI(16391), UNKNOWN(-1);
+    NO_ADDRESS(0),              // Reserved
+    IP(1),                      // IP (IP version 4)
+    IP6(2),                     // IP6 (IP version 6)
+    DNS(16),                    // Domain Name System
+    DISTINGUISHED_NAME(17),     // Distinguished Name
+    AS(18),                     // AS Number
+    LCAF(16387),                // LISP Canonical Address Format (LCAF)
+    MAC(16389),                 // 48-bit MAC
+    OUI(16391),                 // 24-bit Organizationally Unique Identifier
+    UNKNOWN(-1);                // Other Enums for internal use
 
-    private short ianaCode;
+    private final short ianaCode;
 
     AddressFamilyIdentifierEnum(int ianaCode) {
         this.ianaCode = (short) ianaCode;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java
index c4c49e1..efc5ea6 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.lisp.msg.types;
 
+import java.util.Objects;
+
 /**
  * LISP Locator address typed by Address Family Identifier (AFI).
  */
@@ -42,10 +44,7 @@
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((afi == null) ? 0 : afi.hashCode());
-        return result;
+        return Objects.hash(afi);
     }
 
     @Override
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAppDataLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAppDataLcafAddress.java
index f3f3808..208b7fb 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAppDataLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAppDataLcafAddress.java
@@ -126,14 +126,7 @@
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((address == null) ? 0 : address.hashCode());
-        result = prime * result + protocol;
-        result = prime * result + ipTos;
-        result = prime * result + localPort;
-        result = prime * result + remotePort;
-        return result;
+        return Objects.hash(address, protocol, ipTos, localPort, remotePort);
     }
 
     @Override
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java
index cb31108..fb5c616 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.lisp.msg.types;
 
+import java.util.Objects;
+
 /**
  * The identifier of Autonomous System (AS).
  */
@@ -43,10 +45,7 @@
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + asNum;
-        return result;
+        return Objects.hash(asNum);
     }
 
     @Override
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispDistinguishedNameAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispDistinguishedNameAddress.java
new file mode 100644
index 0000000..d5fbc988
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispDistinguishedNameAddress.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.lisp.msg.types;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * Distinguished name address that is used by LISP Locator.
+ */
+public class LispDistinguishedNameAddress extends LispAfiAddress {
+
+    private final String distinguishedName;
+
+    /**
+     * Initializes LISP locator's distinguished name address with AFI enum.
+     *
+     * @param distinguishedName distinguished name address
+     */
+    public LispDistinguishedNameAddress(String distinguishedName) {
+        super(AddressFamilyIdentifierEnum.DISTINGUISHED_NAME);
+        this.distinguishedName = distinguishedName;
+    }
+
+    /**
+     * Obtains LISP locator's distinguished name address.
+     *
+     * @return distinguished name address
+     */
+    public String getDistinguishedName() {
+        return distinguishedName;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(distinguishedName);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (obj instanceof LispDistinguishedNameAddress) {
+            final LispDistinguishedNameAddress other = (LispDistinguishedNameAddress) obj;
+            return Objects.equals(this.distinguishedName, other.distinguishedName);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("distinguished name", distinguishedName)
+                .toString();
+    }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java
index ce51271..c1b2df3f 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java
@@ -168,14 +168,7 @@
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((lcafType == null) ? 0 : lcafType.hashCode());
-        result = prime * result + reserved1;
-        result = prime * result + reserved2;
-        result = prime * result + flag;
-        result = prime * result + length;
-        return result;
+        return Objects.hash(lcafType, reserved1, reserved2, flag, length);
     }
 
     @Override
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
index e92810a..6166ad5 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
@@ -71,10 +71,7 @@
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((addresses == null) ? 0 : addresses.hashCode());
-        return result;
+        return Objects.hash(addresses);
     }
 
     @Override
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java
index b44905e..a36ddf5 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java
@@ -83,12 +83,7 @@
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((address == null) ? 0 : address.hashCode());
-        result = prime * result + instanceId;
-        result = prime * result + reserved2;
-        return result;
+        return Objects.hash(address, instanceId, reserved2);
     }
 
     @Override
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java
index 6438fb3..921bf53 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java
@@ -124,14 +124,7 @@
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((srcPrefix == null) ? 0 : srcPrefix.hashCode());
-        result = prime * result + ((dstPrefix == null) ? 0 : dstPrefix.hashCode());
-        result = prime * result + srcMaskLength;
-        result = prime * result + dstMaskLength;
-        result = prime * result + reserved;
-        return result;
+        return Objects.hash(srcPrefix, dstPrefix, srcMaskLength, dstMaskLength, reserved);
     }
 
     @Override
