X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Fimplementation%2Fserializer%2FMapRegisterSerializer.java;h=543647f43a5af7a77cf235a1f41e7ff68451265f;hb=6421fa3f64d1cda64c51990ee366c16c74f96600;hp=ba57c4bca83d3c2fdddfd97ea9743150c850ede3;hpb=91416be6a8df0aef66abb823064bd7f5d447c018;p=lispflowmapping.git diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/serializer/MapRegisterSerializer.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/serializer/MapRegisterSerializer.java index ba57c4bca..543647f43 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/serializer/MapRegisterSerializer.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/serializer/MapRegisterSerializer.java @@ -14,10 +14,10 @@ import org.apache.commons.lang3.BooleanUtils; 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. @@ -39,13 +39,17 @@ public class MapRegisterSerializer { 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()); @@ -61,6 +65,11 @@ public class MapRegisterSerializer { 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; } @@ -70,7 +79,10 @@ public class MapRegisterSerializer { MapRegisterBuilder builder = new MapRegisterBuilder(); builder.setEidToLocatorRecord(new ArrayList()); - 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)); @@ -86,6 +98,15 @@ public class MapRegisterSerializer { 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); @@ -99,11 +120,14 @@ public class MapRegisterSerializer { 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; } }