diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
index 6021931..d187d88 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
@@ -17,6 +17,8 @@
 
 import io.netty.buffer.ByteBuf;
 
+import java.util.List;
+
 /**
  * Default LISP map notify message class.
  */
@@ -36,4 +38,67 @@
     public Builder createBuilder() {
         return null;
     }
+
+    @Override
+    public long getNonce() {
+        return 0;
+    }
+
+    @Override
+    public byte getRecordCount() {
+        return 0;
+    }
+
+    @Override
+    public short getKeyId() {
+        return 0;
+    }
+
+    @Override
+    public byte[] getAuthenticationData() {
+        return new byte[0];
+    }
+
+    @Override
+    public List<LispRecord> getLispRecords() {
+        return null;
+    }
+
+    public static final class DefaultNotifyBuilder implements NotifyBuilder {
+
+        @Override
+        public LispMessage build() {
+            return null;
+        }
+
+        @Override
+        public LispType getType() {
+            return null;
+        }
+
+        @Override
+        public NotifyBuilder withNonce(long nonce) {
+            return null;
+        }
+
+        @Override
+        public NotifyBuilder withRecordCount(byte recordCount) {
+            return null;
+        }
+
+        @Override
+        public NotifyBuilder withKeyId(short keyId) {
+            return null;
+        }
+
+        @Override
+        public NotifyBuilder withAuthenticationData(byte[] authenticationData) {
+            return null;
+        }
+
+        @Override
+        public NotifyBuilder addRecord(LispRecord record) {
+            return null;
+        }
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
index e14dd01..259f80a 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
@@ -17,6 +17,8 @@
 
 import io.netty.buffer.ByteBuf;
 
+import java.util.List;
+
 /**
  * Default LISP map register message class.
  */
@@ -35,4 +37,87 @@
     public Builder createBuilder() {
         return null;
     }
+
+    @Override
+    public boolean isProxyMapReply() {
+        return false;
+    }
+
+    @Override
+    public boolean isWantMapNotify() {
+        return false;
+    }
+
+    @Override
+    public byte getRecordCount() {
+        return 0;
+    }
+
+    @Override
+    public long getNonce() {
+        return 0;
+    }
+
+    @Override
+    public short getKeyId() {
+        return 0;
+    }
+
+    @Override
+    public byte[] getAuthenticationData() {
+        return new byte[0];
+    }
+
+    @Override
+    public List<LispRecord> getLispRecords() {
+        return null;
+    }
+
+    public static final class DefaultRegisterBuilder implements RegisterBuilder {
+
+        @Override
+        public LispMessage build() {
+            return null;
+        }
+
+        @Override
+        public LispType getType() {
+            return null;
+        }
+
+        @Override
+        public RegisterBuilder withIsProxyMapReply(boolean isProxyMapReply) {
+            return null;
+        }
+
+        @Override
+        public RegisterBuilder withIsWantMapNotify(boolean isWantMapNotify) {
+            return null;
+        }
+
+        @Override
+        public RegisterBuilder withRecordCount(byte recordCount) {
+            return null;
+        }
+
+        @Override
+        public RegisterBuilder withNonce(long nonce) {
+            return null;
+        }
+
+        @Override
+        public RegisterBuilder withKeyId(short keyId) {
+            return null;
+        }
+
+        @Override
+        public RegisterBuilder withAuthenticationData(byte[] authenticationData) {
+            return null;
+        }
+
+        @Override
+        public RegisterBuilder addRecord(LispRecord record) {
+            return null;
+        }
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
index ef2a8a2..7f89dc0 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
@@ -35,4 +35,67 @@
     public Builder createBuilder() {
         return null;
     }
+
+    @Override
+    public boolean isProbe() {
+        return false;
+    }
+
+    @Override
+    public boolean isEtr() {
+        return false;
+    }
+
+    @Override
+    public boolean isSecurity() {
+        return false;
+    }
+
+    @Override
+    public byte getRecordCount() {
+        return 0;
+    }
+
+    @Override
+    public long getNonce() {
+        return 0;
+    }
+
+    public static final class DefaultReplyBuilder implements ReplyBuilder {
+
+        @Override
+        public LispMessage build() {
+            return null;
+        }
+
+        @Override
+        public LispType getType() {
+            return null;
+        }
+
+        @Override
+        public ReplyBuilder withIsProbe(boolean isProbe) {
+            return null;
+        }
+
+        @Override
+        public ReplyBuilder withIsEtr(boolean isEtr) {
+            return null;
+        }
+
+        @Override
+        public ReplyBuilder withIsSecurity(boolean isSecurity) {
+            return null;
+        }
+
+        @Override
+        public ReplyBuilder withRecordCount(byte recordCount) {
+            return null;
+        }
+
+        @Override
+        public ReplyBuilder withNonce(long nonce) {
+            return null;
+        }
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
index df9922b..9f8ac0f 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
@@ -16,6 +16,9 @@
 package org.onosproject.lisp.msg.protocols;
 
 import io.netty.buffer.ByteBuf;
+import org.onosproject.lisp.msg.types.LispAfiAddress;
+
+import java.util.List;
 
 /**
  * Default LISP map request message class.
@@ -35,4 +38,112 @@
     public Builder createBuilder() {
         return null;
     }
+
+    @Override
+    public boolean isAuthoritative() {
+        return false;
+    }
+
+    @Override
+    public boolean isProbe() {
+        return false;
+    }
+
+    @Override
+    public boolean isSmr() {
+        return false;
+    }
+
+    @Override
+    public boolean isPitr() {
+        return false;
+    }
+
+    @Override
+    public boolean isSmrInvoked() {
+        return false;
+    }
+
+    @Override
+    public byte getRecordCount() {
+        return 0;
+    }
+
+    @Override
+    public long getNonce() {
+        return 0;
+    }
+
+    @Override
+    public LispAfiAddress getSourceEid() {
+        return null;
+    }
+
+    @Override
+    public List<LispAfiAddress> getItrRlocs() {
+        return null;
+    }
+
+    @Override
+    public List<EidRecord> getEids() {
+        return null;
+    }
+
+    public static final class DefaultRequestBuilder implements RequestBuilder {
+
+        @Override
+        public LispMessage build() {
+            return null;
+        }
+
+        @Override
+        public LispType getType() {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withIsAuthoritative(boolean isAuthoritative) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withIsProbe(boolean isProbe) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withIsSmr(boolean isSmr) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withIsPitr(boolean isPitr) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withIsSmrInvoked(boolean isSmrInvoked) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withRecordCount(byte recordCount) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withNonce(long nonce) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder withItrRloc(LispAfiAddress itrRloc) {
+            return null;
+        }
+
+        @Override
+        public RequestBuilder addEidRecord(EidRecord record) {
+            return null;
+        }
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/EidRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/EidRecord.java
new file mode 100644
index 0000000..ffcd90e
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/EidRecord.java
@@ -0,0 +1,22 @@
+/*
+ * 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.protocols;
+
+/**
+ * LISP EID record section which is part of LISP map request message.
+ */
+public class EidRecord {
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java
index f3c64c5..e287aa1 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java
@@ -15,8 +15,123 @@
  */
 package org.onosproject.lisp.msg.protocols;
 
+import java.util.List;
+
 /**
  * LISP map notify message interface.
+ *
+ * LISP map notify message format is defined in RFC6830.
+ * https://tools.ietf.org/html/rfc6830#page-39
+ *
+ * 0                   1                   2                   3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Type=4 |              Reserved                 | Record Count  |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         Nonce . . .                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         . . . Nonce                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |            Key ID             |  Authentication Data Length   |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * ~                     Authentication Data                       ~
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |   |                          Record TTL                           |
+ * |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * R   | Locator Count | EID mask-len  | ACT |A|      Reserved         |
+ * e   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * c   | Rsvd  |  Map-Version Number   |         EID-Prefix-AFI        |
+ * o   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * r   |                          EID-Prefix                           |
+ * d   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |  /|    Priority   |    Weight     |  M Priority   |   M Weight    |
+ * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | o |        Unused Flags     |L|p|R|           Loc-AFI             |
+ * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |  \|                             Locator                           |
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
  */
 public interface LispMapNotify extends LispMessage {
+
+    /**
+     * Obtains nonce value.
+     *
+     * @return nonce value
+     */
+    long getNonce();
+
+    /**
+     * Obtains record count value.
+     *
+     * @return record count value
+     */
+    byte getRecordCount();
+
+    /**
+     * Obtains key identifier.
+     *
+     * @return key identifier
+     */
+    short getKeyId();
+
+    /**
+     * Obtains authentication data.
+     *
+     * @return authentication data
+     */
+    byte[] getAuthenticationData();
+
+    /**
+     * Obtains a collection of records.
+     *
+     * @return a collection of records
+     */
+    List<LispRecord> getLispRecords();
+
+    /**
+     * A builder of LISP map notify message.
+     */
+    interface NotifyBuilder extends Builder {
+
+        /**
+         * Sets nonce value.
+         *
+         * @param nonce nonce value
+         * @return NotifyBuilder object
+         */
+        NotifyBuilder withNonce(long nonce);
+
+        /**
+         * Sets record count.
+         *
+         * @param recordCount record count
+         * @return NotifyBuilder object
+         */
+        NotifyBuilder withRecordCount(byte recordCount);
+
+        /**
+         * Sets key identitifer.
+         *
+         * @param keyId key identifier
+         * @return NotifyBuilder object
+         */
+        NotifyBuilder withKeyId(short keyId);
+
+        /**
+         * Sets authentication data.
+         *
+         * @param authenticationData authentication data
+         * @return NotifyBuilder object
+         */
+        NotifyBuilder withAuthenticationData(byte[] authenticationData);
+
+        /**
+         * Adds a new record to record list.
+         *
+         * @param record record
+         * @return NotifyBuilder object
+         */
+        NotifyBuilder addRecord(LispRecord record);
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java
index 4633d27..d9cdf9e 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java
@@ -15,8 +15,152 @@
  */
 package org.onosproject.lisp.msg.protocols;
 
+import java.util.List;
+
 /**
  * LISP map register message interface.
+ *
+ * LISP map register message format is defined in RFC6830.
+ * https://tools.ietf.org/html/rfc6830#page-37
+ *
+ * 0                   1                   2                   3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Type=3 |P|            Reserved               |M| Record Count  |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         Nonce . . .                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         . . . Nonce                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |            Key ID             |  Authentication Data Length   |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * ~                     Authentication Data                       ~
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |   |                          Record TTL                           |
+ * |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * R   | Locator Count | EID mask-len  | ACT |A|      Reserved         |
+ * e   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * c   | Rsvd  |  Map-Version Number   |        EID-Prefix-AFI         |
+ * o   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * r   |                          EID-Prefix                           |
+ * d   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |  /|    Priority   |    Weight     |  M Priority   |   M Weight    |
+ * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | o |        Unused Flags     |L|p|R|           Loc-AFI             |
+ * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |  \|                             Locator                           |
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  */
 public interface LispMapRegister extends LispMessage {
+
+    /**
+     * Obtains proxy map reply flag.
+     *
+     * @return proxy map reply flag
+     */
+    boolean isProxyMapReply();
+
+    /**
+     * Obtains want map notify flag.
+     *
+     * @return want map notify flag
+     */
+    boolean isWantMapNotify();
+
+    /**
+     * Obtains record count value.
+     *
+     * @return record count value
+     */
+    byte getRecordCount();
+
+    /**
+     * Obtains nonce value.
+     *
+     * @return nonce value
+     */
+    long getNonce();
+
+    /**
+     * Obtains key identifier.
+     *
+     * @return key identifier
+     */
+    short getKeyId();
+
+    /**
+     * Obtains authentication data.
+     *
+     * @return authentication data
+     */
+    byte[] getAuthenticationData();
+
+    /**
+     * Obtains a collection of records.
+     *
+     * @return a collection of records
+     */
+    List<LispRecord> getLispRecords();
+
+    /**
+     * A builder of LISP map register message.
+     */
+    interface RegisterBuilder extends Builder {
+
+        /**
+         * Sets isProxyMapReply flag.
+         *
+         * @param isProxyMapReply isProxyMapReply
+         * @return RegisterBuilder object
+         */
+        RegisterBuilder withIsProxyMapReply(boolean isProxyMapReply);
+
+        /**
+         * Sets isWantMapNotify flag.
+         *
+         * @param isWantMapNotify isWantMapNotify
+         * @return RegisterBuilder object
+         */
+        RegisterBuilder withIsWantMapNotify(boolean isWantMapNotify);
+
+        /**
+         * Sets record count.
+         *
+         * @param recordCount record count
+         * @return RegisterBuilder object
+         */
+        RegisterBuilder withRecordCount(byte recordCount);
+
+        /**
+         * Sets nonce value.
+         *
+         * @param nonce nonce value
+         * @return RegisterBuilder object
+         */
+        RegisterBuilder withNonce(long nonce);
+
+        /**
+         * Sets key identifier.
+         *
+         * @param keyId key identifier
+         * @return RegisterBuilder object
+         */
+        RegisterBuilder withKeyId(short keyId);
+
+        /**
+         * Sets authentication data.
+         *
+         * @param authenticationData authentication data
+         * @return RegisterBuilder object
+         */
+        RegisterBuilder withAuthenticationData(byte[] authenticationData);
+
+        /**
+         * Adds a new record to record list.
+         *
+         * @param record record
+         * @return RegisterBuilder object
+         */
+        RegisterBuilder addRecord(LispRecord record);
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReply.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReply.java
index 6ed6c3ab..4a55f9d 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReply.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReply.java
@@ -17,6 +17,114 @@
 
 /**
  * LISP map reply message interface.
+ *
+ * LISP map reply message format is defined in RFC6830.
+ * https://tools.ietf.org/html/rfc6830#page-31
+ *
+ * 0                   1                   2                   3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Type=2 |P|E|S|          Reserved               | Record Count  |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         Nonce . . .                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         . . . Nonce                           |
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |   |                          Record TTL                           |
+ * |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * R   | Locator Count | EID mask-len  | ACT |A|      Reserved         |
+ * e   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * c   | Rsvd  |  Map-Version Number   |       EID-Prefix-AFI          |
+ * o   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * r   |                          EID-Prefix                           |
+ * d   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |  /|    Priority   |    Weight     |  M Priority   |   M Weight    |
+ * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | o |        Unused Flags     |L|p|R|           Loc-AFI             |
+ * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |  \|                             Locator                           |
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  */
 public interface LispMapReply extends LispMessage {
+
+    /**
+     * Obtains probe flag.
+     *
+     * @return probe flag
+     */
+    boolean isProbe();
+
+    /**
+     * Obtains ETR flag.
+     *
+     * @return ETR flag
+     */
+    boolean isEtr();
+
+    /**
+     * Obtains security flag.
+     *
+     * @return security flag
+     */
+    boolean isSecurity();
+
+    /**
+     * Obtains record count value.
+     *
+     * @return record count value
+     */
+    byte getRecordCount();
+
+    /**
+     * Obtains nonce value.
+     *
+     * @return nonce value
+     */
+    long getNonce();
+
+    /**
+     * A builder of LISP map reply message.
+     */
+    interface ReplyBuilder extends Builder {
+
+        /**
+         * Sets isProbe flag.
+         *
+         * @param isProbe isProbe flag
+         * @return ReplyBuilder object
+         */
+        ReplyBuilder withIsProbe(boolean isProbe);
+
+        /**
+         * Sets isEtr flag.
+         *
+         * @param isEtr isEtr flag
+         * @return ReplyBuilder object
+         */
+        ReplyBuilder withIsEtr(boolean isEtr);
+
+        /**
+         * Sets isSecurity flag.
+         *
+         * @param isSecurity isSecurity flag
+         * @return ReplyBuilder object
+         */
+        ReplyBuilder withIsSecurity(boolean isSecurity);
+
+        /**
+         * Sets record count.
+         *
+         * @param recordCount record count
+         * @return ReplyBuilder object
+         */
+        ReplyBuilder withRecordCount(byte recordCount);
+
+        /**
+         * Sets nonce value.
+         *
+         * @param nonce nonce value
+         * @return ReplyBuilder object
+         */
+        ReplyBuilder withNonce(long nonce);
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java
index 2618867..8566768 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java
@@ -15,8 +15,187 @@
  */
 package org.onosproject.lisp.msg.protocols;
 
+import org.onosproject.lisp.msg.types.LispAfiAddress;
+
+import java.util.List;
+
 /**
  * LISP map request message interface.
+ *
+ * LISP map request message format is defined in RFC6830.
+ * https://tools.ietf.org/html/rfc6830#page-27
+ *
+ * 0                   1                   2                   3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Type=1 |A|M|P|S|p|s|    Reserved     |   IRC   | Record Count  |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         Nonce . . .                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                         . . . Nonce                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |         Source-EID-AFI        |   Source EID Address  ...     |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |         ITR-RLOC-AFI 1        |    ITR-RLOC Address 1  ...    |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                              ...                              |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |         ITR-RLOC-AFI n        |    ITR-RLOC Address n  ...    |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * / |   Reserved    | EID mask-len  |        EID-Prefix-AFI         |
+ * Rec +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * \ |                       EID-Prefix  ...                         |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                   Map-Reply Record  ...                       |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  */
 public interface LispMapRequest extends LispMessage {
+
+    /**
+     * Obtains authoritative flag.
+     *
+     * @return authoritative flag
+     */
+    boolean isAuthoritative();
+
+    /**
+     * Obtains probe flag.
+     *
+     * @return probe flag
+     */
+    boolean isProbe();
+
+    /**
+     * Obtains SMR flag.
+     *
+     * @return SMR flag
+     */
+    boolean isSmr();
+
+    /**
+     * Obtains PITR flag.
+     *
+     * @return PITR flag
+     */
+    boolean isPitr();
+
+    /**
+     * Obtains SMR Invoked flag.
+     *
+     * @return SMR invoked flag
+     */
+    boolean isSmrInvoked();
+
+    /**
+     * Obtains record count value.
+     *
+     * @return record count value
+     */
+    byte getRecordCount();
+
+    /**
+     * Obtains nonce value.
+     *
+     * @return nonce value
+     */
+    long getNonce();
+
+    /**
+     * Obtains source EID.
+     *
+     * @return source EID
+     */
+    LispAfiAddress getSourceEid();
+
+    /**
+     * Obtains a collection of ITR RLOCs.
+     *
+     * @return a collection of ITR RLOCs
+     */
+    List<LispAfiAddress> getItrRlocs();
+
+    /**
+     * Obtains a collection of EID records.
+     *
+     * @return a collection of EID records
+     */
+    List<EidRecord> getEids();
+
+    /**
+     * A builder of LISP map request message.
+     */
+    interface RequestBuilder extends Builder {
+
+        /**
+         * Sets isAuthoritative flag.
+         *
+         * @param isAuthoritative isAuthoritative flag
+         * @return RequestBuilder object
+         */
+        RequestBuilder withIsAuthoritative(boolean isAuthoritative);
+
+        /**
+         * Sets isProbe flag.
+         *
+         * @param isProbe isProbe flag
+         * @return RequestBuilder object
+         */
+        RequestBuilder withIsProbe(boolean isProbe);
+
+        /**
+         * Sets isSmr flag.
+         *
+         * @param isSmr isSmr flag
+         * @return RequestBuilder object
+         */
+        RequestBuilder withIsSmr(boolean isSmr);
+
+        /**
+         * Sets isPitr flag.
+         *
+         * @param isPitr isPitr flag
+         * @return RequestBuilder object
+         */
+        RequestBuilder withIsPitr(boolean isPitr);
+
+        /**
+         * Sets isSmrInvoked flag.
+         *
+         * @param isSmrInvoked isSmrInvoked flag
+         * @return RequestBuilder object
+         */
+        RequestBuilder withIsSmrInvoked(boolean isSmrInvoked);
+
+        /**
+         * Sets record count.
+         *
+         * @param recordCount record count
+         * @return RequestBuilder object
+         */
+        RequestBuilder withRecordCount(byte recordCount);
+
+        /**
+         * Sets nonce value.
+         *
+         * @param nonce nonce value
+         * @return RequestBuilder object
+         */
+        RequestBuilder withNonce(long nonce);
+
+        /**
+         * Adds ITR RLOC into RLOC collection.
+         *
+         * @param itrRloc ITR RLOC
+         * @return RequestBuilder object
+         */
+        RequestBuilder withItrRloc(LispAfiAddress itrRloc);
+
+        /**
+         * Adds EID record into record collection.
+         *
+         * @param record EID record
+         * @return RequestBuilder object
+         */
+        RequestBuilder addEidRecord(EidRecord record);
+    }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java
index cbd0c61..7a74bbb 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java
@@ -46,7 +46,7 @@
     /**
      * LISP message builder interface.
      */
-    interface Builder  {
+    interface Builder {
 
         /**
          * Builds LISP message.
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java
new file mode 100644
index 0000000..efbe17b
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java
@@ -0,0 +1,23 @@
+/*
+ * 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.protocols;
+
+/**
+ * LISP record section which is part of LISP map register message.
+ */
+public class LispRecord {
+
+}
