Prepare the YANG models for RESTCONF
[lispflowmapping.git] / mappingservice / implementation / src / main / java / org / opendaylight / lispflowmapping / implementation / serializer / MapRegisterSerializer.java
index 9ebf67a558f6e2610ceded745e7cd9236bbebc6f..543647f43a5af7a77cf235a1f41e7ff68451265f 100644 (file)
@@ -14,9 +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.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.
@@ -38,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());
@@ -60,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;
     }
@@ -69,7 +79,10 @@ public class MapRegisterSerializer {
             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));
@@ -82,7 +95,17 @@ public class MapRegisterSerializer {
             builder.setAuthenticationData(authenticationData);
 
             for (int i = 0; i < recordCount; i++) {
-                builder.getEidToLocatorRecord().add(EidToLocatorRecordSerializer.getInstance().deserialize(registerBuffer));
+                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()];
@@ -97,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;
     }
 }