1 package org.opendaylight.lispflowmapping.southbound.serializer.address;
3 import java.nio.ByteBuffer;
5 import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
6 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
7 import org.opendaylight.lispflowmapping.type.lisp.address.LispSourceDestLCAFAddress;
9 public class LispSourceDestLCAFAddressSerializer extends LispLCAFAddressSerializer {
11 private static final LispSourceDestLCAFAddressSerializer INSTANCE = new LispSourceDestLCAFAddressSerializer();
13 // Private constructor prevents instantiation from other classes
14 private LispSourceDestLCAFAddressSerializer() {
17 public static LispSourceDestLCAFAddressSerializer getInstance() {
22 public short getLcafLength(LispAddress lispAddress) {
23 LispAddressSerializer srcSerializer = LispAddressSerializerFactory.getSerializer(((LispSourceDestLCAFAddress) lispAddress).getSrcAddress()
25 LispAddressSerializer dstSerializer = LispAddressSerializerFactory.getSerializer(((LispSourceDestLCAFAddress) lispAddress).getDstAddress()
27 return (short) (Length.ALL_FIELDS + srcSerializer.getAddressSize(((LispSourceDestLCAFAddress) lispAddress).getSrcAddress()) + dstSerializer
28 .getAddressSize(((LispSourceDestLCAFAddress) lispAddress).getDstAddress()));
32 public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
33 super.internalSerialize(buffer, lispAddress);
34 LispSourceDestLCAFAddress lispSourceDestLCAFAddress = ((LispSourceDestLCAFAddress) lispAddress);
35 buffer.putShort(lispSourceDestLCAFAddress.getReserved());
36 buffer.put(lispSourceDestLCAFAddress.getSrcMaskLength());
37 buffer.put(lispSourceDestLCAFAddress.getDstMaskLength());
38 LispAddressSerializer srcSerializer = LispAddressSerializerFactory.getSerializer(lispSourceDestLCAFAddress.getSrcAddress().getAfi());
39 if (srcSerializer == null) {
40 throw new LispMalformedPacketException("Unknown AFI type=" + lispSourceDestLCAFAddress.getSrcAddress().getAfi());
42 srcSerializer.serialize(buffer, lispSourceDestLCAFAddress.getSrcAddress());
43 LispAddressSerializer dstSerializer = LispAddressSerializerFactory.getSerializer(lispSourceDestLCAFAddress.getDstAddress().getAfi());
44 if (dstSerializer == null) {
45 throw new LispMalformedPacketException("Unknown AFI type=" + lispSourceDestLCAFAddress.getDstAddress().getAfi());
47 dstSerializer.serialize(buffer, lispSourceDestLCAFAddress.getDstAddress());
51 public LispSourceDestLCAFAddress innerDeserialize(ByteBuffer buffer, byte res2, short length) {
52 short res = buffer.getShort();
53 byte srcMaskLength = buffer.get();
54 byte dstMaskLength = buffer.get();
55 LispAddress srcAddress = LispAddressSerializer.getInstance().deserialize(buffer);
56 LispAddress dstAddress = LispAddressSerializer.getInstance().deserialize(buffer);
58 return new LispSourceDestLCAFAddress(res2, res, srcMaskLength, dstMaskLength, srcAddress, dstAddress);
61 private interface Length {
62 int SOURCE_MASK_LENGTH = 2;
63 int DEST_MASK_LENGTH = 2;
64 int ALL_FIELDS = SOURCE_MASK_LENGTH + DEST_MASK_LENGTH;