1 package org.opendaylight.lispflowmapping.implementation.serializer;
3 import java.nio.ByteBuffer;
5 import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
6 import org.opendaylight.lispflowmapping.type.lisp.MapReply;
10 * This class deals with serializing map reply from the java object to udp.
12 public class MapReplySerializer {
14 private static final MapReplySerializer INSTANCE = new MapReplySerializer();
16 // Private constructor prevents instantiation from other classes
17 private MapReplySerializer() {
20 public static MapReplySerializer getInstance() {
24 public ByteBuffer serialize(MapReply mapReply) {
25 int size = Length.HEADER_SIZE;
26 for (EidToLocatorRecord eidToLocatorRecord : mapReply.getEidToLocatorRecords()) {
27 size += EidToLocatorRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord);
30 ByteBuffer replyBuffer = ByteBuffer.allocate(size);
32 replyBuffer.put((byte) ((LispMessageEnum.MapReply.getValue() << 4) | //
33 (mapReply.isProbe() ? Flags.PROBE : 0x00) | //
34 (mapReply.isEchoNonceEnabled() ? Flags.ECHO_NONCE_ENABLED : 0x00)));
36 replyBuffer.position(replyBuffer.position() + Length.RES);
37 replyBuffer.put((byte) mapReply.getEidToLocatorRecords().size());
38 replyBuffer.putLong(mapReply.getNonce());
39 for (EidToLocatorRecord eidToLocatorRecord : mapReply.getEidToLocatorRecords()) {
40 EidToLocatorRecordSerializer.getInstance().serialize(replyBuffer, eidToLocatorRecord);
45 private interface Length {
50 private interface Flags {
52 int ECHO_NONCE_ENABLED = 0x04;