[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());
+ }
+ }
}