[ONOS-4718] Initial implementation of LISP control msg serializer

Change-Id: Ia068e1b158f05dd70839cb1020f15dc66b0142a0
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java
index 1e79d19..35fe975 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java
@@ -18,8 +18,11 @@
 import io.netty.buffer.ByteBuf;
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
+import org.onosproject.lisp.msg.exceptions.LispWriterException;
 import org.onosproject.lisp.msg.types.LispAfiAddress;
 
+import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
+
 /**
  * LISP EID record section which is part of LISP map request message.
  */
@@ -58,9 +61,9 @@
     }
 
     /**
-     * A private LISP message reader for EidRecord portion.
+     * A LISP message reader for EidRecord portion.
      */
-    public static class EidRecordReader implements LispMessageReader<LispEidRecord> {
+    public static final class EidRecordReader implements LispMessageReader<LispEidRecord> {
 
         private static final int RESERVED_SKIP_LENGTH = 1;
 
@@ -77,4 +80,26 @@
             return new LispEidRecord((byte) maskLength, prefix);
         }
     }
+
+    /**
+     * A LISP message writer for EidRecord portion.
+     */
+    public static final class EidRecordWriter implements LispMessageWriter<LispEidRecord> {
+
+        private static final int UNUSED_ZERO = 0;
+
+        @Override
+        public void writeTo(ByteBuf byteBuf, LispEidRecord message) throws LispWriterException {
+
+            // fill zero into reserved field
+            byteBuf.writeByte((short) UNUSED_ZERO);
+
+            // mask length
+            byteBuf.writeByte(message.getMaskLength());
+
+            // EID prefix AFI with EID prefix
+            AfiAddressWriter afiAddressWriter = new AfiAddressWriter();
+            afiAddressWriter.writeTo(byteBuf, message.getPrefix());
+        }
+    }
 }