import org.opendaylight.lispflowmapping.implementation.lisp.exception.LispSerializationException;
import org.opendaylight.lispflowmapping.implementation.util.ByteUtil;
import org.opendaylight.lispflowmapping.implementation.util.NumberUtil;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecordBuilder;
-import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRegister;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecord;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecordBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapregisternotification.MapRegisterBuilder;
/**
* This class deals with deserializing map register from udp to the java object.
if (mapRegister.getAuthenticationData() != null) {
size += mapRegister.getAuthenticationData().length;
}
+ if (mapRegister.isXtrSiteIdPresent() != null && mapRegister.isXtrSiteIdPresent()) {
+ size += Length.XTRID_SIZE + Length.SITEID_SIZE;
+ }
for (EidToLocatorRecord eidToLocatorRecord : mapRegister.getEidToLocatorRecord()) {
size += EidToLocatorRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord);
}
ByteBuffer registerBuffer = ByteBuffer.allocate(size);
- registerBuffer.put((byte) ((byte) (LispMessageEnum.MapRegister.getValue() << 4) | ByteUtil.boolToBit(
- BooleanUtils.isTrue(mapRegister.isProxyMapReply()), Flags.PROXY)));
+ registerBuffer.put((byte) ((byte) (LispMessageEnum.MapRegister.getValue() << 4) |
+ ByteUtil.boolToBit(BooleanUtils.isTrue(mapRegister.isProxyMapReply()), Flags.PROXY) |
+ ByteUtil.boolToBit(BooleanUtils.isTrue(mapRegister.isXtrSiteIdPresent()), Flags.XTRSITEID)));
registerBuffer.position(registerBuffer.position() + Length.RES);
registerBuffer.put(ByteUtil.boolToBit(BooleanUtils.isTrue(mapRegister.isWantMapNotify()), Flags.WANT_MAP_REPLY));
registerBuffer.put((byte) mapRegister.getEidToLocatorRecord().size());
for (EidToLocatorRecord eidToLocatorRecord : mapRegister.getEidToLocatorRecord()) {
EidToLocatorRecordSerializer.getInstance().serialize(registerBuffer, eidToLocatorRecord);
}
+
+ if (mapRegister.isXtrSiteIdPresent() != null && mapRegister.isXtrSiteIdPresent()) {
+ registerBuffer.put(mapRegister.getXtrId());
+ registerBuffer.put(mapRegister.getSiteId());
+ }
registerBuffer.clear();
return registerBuffer;
}
MapRegisterBuilder builder = new MapRegisterBuilder();
builder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
- builder.setProxyMapReply(ByteUtil.extractBit(registerBuffer.get(), Flags.PROXY));
+ byte typeAndFlags = registerBuffer.get();
+ boolean xtrSiteIdPresent = ByteUtil.extractBit(typeAndFlags, Flags.XTRSITEID);
+ builder.setProxyMapReply(ByteUtil.extractBit(typeAndFlags, Flags.PROXY));
+ builder.setXtrSiteIdPresent(xtrSiteIdPresent);
registerBuffer.position(registerBuffer.position() + Length.RES);
builder.setWantMapNotify(ByteUtil.extractBit(registerBuffer.get(), Flags.WANT_MAP_REPLY));
builder.getEidToLocatorRecord().add(
new EidToLocatorRecordBuilder(EidToLocatorRecordSerializer.getInstance().deserialize(registerBuffer)).build());
}
+
+ if (xtrSiteIdPresent) {
+ byte[] xtrId = new byte[Length.XTRID_SIZE];
+ registerBuffer.get(xtrId);
+ byte[] siteId = new byte[Length.SITEID_SIZE];
+ registerBuffer.get(siteId);
+ builder.setXtrId(xtrId);
+ builder.setSiteId(siteId);
+ }
registerBuffer.limit(registerBuffer.position());
byte[] mapRegisterBytes = new byte[registerBuffer.position()];
registerBuffer.position(0);
private interface Flags {
byte PROXY = 0x08;
+ byte XTRSITEID = 0x02;
byte WANT_MAP_REPLY = 0x01;
}
- private interface Length {
+ public interface Length {
int HEADER_SIZE = 16;
+ int XTRID_SIZE = 16;
+ int SITEID_SIZE = 8;
int RES = 1;
}
}