1 package org.opendaylight.lispflowmapping.implementation.serializer.address;
3 import java.nio.ByteBuffer;
4 import java.util.ArrayList;
7 import org.opendaylight.lispflowmapping.implementation.serializer.address.factory.LispAFIAddressSerializerFactory;
8 import org.opendaylight.lispflowmapping.implementation.util.ByteUtil;
9 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
10 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
11 import org.opendaylight.lispflowmapping.type.lisp.address.LispTrafficEngineeringLCAFAddress;
12 import org.opendaylight.lispflowmapping.type.lisp.address.ReencapHop;
14 public class LispTrafficEngineeringLCAFAddressSerializer extends LispLCAFAddressSerializer {
16 private static final LispTrafficEngineeringLCAFAddressSerializer INSTANCE = new LispTrafficEngineeringLCAFAddressSerializer();
18 // Private constructor prevents instantiation from other classes
19 private LispTrafficEngineeringLCAFAddressSerializer() {
22 public static LispTrafficEngineeringLCAFAddressSerializer getInstance() {
27 protected short getLcafLength(LispAddress lispAddress) {
29 for (ReencapHop hop : ((LispTrafficEngineeringLCAFAddress) lispAddress).getHops()) {
30 totalSize += LispAddressSerializer.getInstance().getAddressSize(hop) + 2;
36 protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) {
37 for (ReencapHop hop : ((LispTrafficEngineeringLCAFAddress) lispAddress).getHops()) {
38 serializeAFIAddressHeader(buffer, hop);
40 buffer.put((byte) (ByteUtil.boolToBit(hop.isLookup(), Flags.LOOKUP) | //
41 ByteUtil.boolToBit(hop.isRLOCProbe(), Flags.RLOC_PROBE) | //
42 ByteUtil.boolToBit(hop.isStrict(), Flags.STRICT)));
43 LispAddressSerializer serializer = LispAFIAddressSerializerFactory.getSerializer(hop.getAfi());
44 serializer.serializeData(buffer, hop.getHop());
49 protected LispTrafficEngineeringLCAFAddress deserializeData(ByteBuffer buffer, byte res2, short length) {
50 List<ReencapHop> hops = new ArrayList<ReencapHop>();
52 short afi = buffer.getShort();
53 LispAddressSerializer serializer = LispAFIAddressSerializerFactory.getSerializer(AddressFamilyNumberEnum.valueOf(afi));
54 byte flags = (byte) buffer.getShort();
55 boolean lookup = ByteUtil.extractBit(flags, Flags.LOOKUP);
56 boolean RLOCProbe = ByteUtil.extractBit(flags, Flags.RLOC_PROBE);
57 boolean strict = ByteUtil.extractBit(flags, Flags.STRICT);
58 LispAddress address = serializer.deserializeData(buffer);
59 ReencapHop hop = new ReencapHop(address, (short) 0, lookup, RLOCProbe, strict);
60 length -= LispAddressSerializer.getInstance().getAddressSize(hop) + 2;
63 return new LispTrafficEngineeringLCAFAddress(res2, hops);
66 private interface Flags {
68 int RLOC_PROBE = 0x02;