refactoring of listmappingservice into Northbound (future REST) and Southbound (LISP... 76/876/1
authorDavid Goldberg <david.goldberg@contextream.com>
Tue, 30 Jul 2013 09:16:34 +0000 (12:16 +0300)
committerDavid Goldberg <david.goldberg@contextream.com>
Fri, 2 Aug 2013 10:59:34 +0000 (13:59 +0300)
Signed-off-by: David Goldberg <david.goldberg@contextream.com>
79 files changed:
mappingservice/.gitignore [new file with mode: 0644]
mappingservice/api/pom.xml
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/ILispDAO.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/ILispDAO.java with 98% similarity]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/ILispTypeConverter.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/ILispTypeConverter.java with 86% similarity]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/IQueryAll.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/IQueryAll.java with 87% similarity]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/IRowVisitor.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/IRowVisitor.java with 88% similarity]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IFlowMapping.java [new file with mode: 0644]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapResolver.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/lisp/IMapResolver.java with 89% similarity]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapServer.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/lisp/IMapServer.java with 90% similarity]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/AddressFamilyNumberEnum.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/EidRecord.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/EidToLocatorRecord.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/LocatorRecord.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/MapNotify.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/MapRegister.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/MapReply.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/MapRequest.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispASAddress.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispAddress.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispIPAddress.java [new file with mode: 0644]
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispIpv4Address.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispIpv6Address.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispLCAFAddress.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispListLCAFAddress.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispMACAddress.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispNoAddress.java
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispSegmentLCAFAddress.java
mappingservice/implementation/pom.xml
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/Activator.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/dao/ClusterDAOService.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/dao/InMemoryDAO.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolver.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/LispMappingServiceCliTest.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/dao/InMemoryDAOTest.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java
mappingservice/northbound/pom.xml [new file with mode: 0644]
mappingservice/northbound/src/main/java/org/opendaylight/lispflowmapping/northbound/INorthboundService.java [new file with mode: 0644]
mappingservice/northbound/src/main/java/org/opendaylight/lispflowmapping/northbound/NorthboundService.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/ILispMapping.java with 71% similarity]
mappingservice/pom.xml
mappingservice/southbound/pom.xml [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/Activator.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/ILispSouthboundPlugin.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundPlugin.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/ILispSouthboundService.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispSouthboundService.java [moved from mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/LispService.java with 64% similarity]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/exception/LispMalformedPacketException.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/exception/LispMalformedPacketException.java with 90% similarity]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/network/PacketHeader.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/network/PacketHeader.java with 89% similarity]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/EidRecordSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/EidToLocatorRecordSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/LispMessage.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/LispMessage.java with 81% similarity]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/LispMessageEnum.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/LispMessageEnum.java with 93% similarity]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/LocatorRecordSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapNotifySerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRegisterSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapReplySerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRequestSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispASAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispAddressSerializerFactory.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIPAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIpv4AddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIpv6AddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispLCAFAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispListLCAFAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispMACAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispNoAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispSegmentLCAFAddressSerializer.java [new file with mode: 0644]
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/util/ByteUtil.java [moved from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/util/ByteUtil.java with 96% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/lisp/LispSouthboundServiceTest.java [moved from mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/LispServiceTest.java with 96% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/MapNotifySerializationTest.java [moved from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/lisp/MapNotifyTest.java with 88% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRegisterSerializationTest.java [moved from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/MapRegisterTest.java with 91% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/MapReplySerializationTest.java [moved from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/MapReplyTest.java with 87% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRequestSerializationTest.java [moved from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/MapRequestTest.java with 80% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIpv6AddressTest.java [moved from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/address/LispIpv6AddressTest.java with 77% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispListLCAFAddressTest.java [moved from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/address/LispListLCAFAddressTest.java with 76% similarity]
mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispSegmentLCAFAddressTest.java [moved from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/address/LispSegmentLCAFAddressTest.java with 63% similarity]

diff --git a/mappingservice/.gitignore b/mappingservice/.gitignore
new file mode 100644 (file)
index 0000000..1cdc5fc
--- /dev/null
@@ -0,0 +1,4 @@
+implementation/META-INF
+api/META-INF
+northbound/META-INF
+southbound/META-INF
index eab754868400574214f4ef5120f425e60302c92f..391d811c95f1185ebf5672fde4eb9656e3df758a 100644 (file)
                                <configuration>
                                        <instructions>
                                                <Export-Package>
-                                                       org.opendaylight.lispflowmapping,
-                                                       org.opendaylight.lispflowmapping.dao, 
-                                                       org.opendaylight.lispflowmapping.lisp, 
-                                                       org.opendaylight.lispflowmapping.type.exception, 
+                                                       org.opendaylight.lispflowmapping.interfaces.dao, 
+                                                       org.opendaylight.lispflowmapping.interfaces.lisp,
+                                                       org.opendaylight.lispflowmapping.type, 
                                                        org.opendaylight.lispflowmapping.type.lisp, 
-                                                       org.opendaylight.lispflowmapping.type.lisp.address, 
-                                                       org.opendaylight.lispflowmapping.util
+                                                       org.opendaylight.lispflowmapping.type.lisp.address 
                                                </Export-Package>
                                                <Bundle-Activator>
                                                </Bundle-Activator>
similarity index 98%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/ILispDAO.java
rename to mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/ILispDAO.java
index 35eb6d0c7584a3eae670be088e3280fe1905f25e..231b0a3240cb3056eb83ef26e60c96bbbfece51c 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.dao;
+package org.opendaylight.lispflowmapping.interfaces.dao;
 
 import java.util.Map;
 
similarity index 86%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/ILispTypeConverter.java
rename to mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/ILispTypeConverter.java
index dc4302e7366dec72ffc9eb25ff5a4de2dc3f5b2f..cc6d5f358a109e6052a90007e9d9527f37aae5c9 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.dao;
+package org.opendaylight.lispflowmapping.interfaces.dao;
 
 public interface ILispTypeConverter<UserType, DbType> {
 
similarity index 87%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/IQueryAll.java
rename to mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/IQueryAll.java
index d26ee5bbe9b27122ee7ca77e160cc8e54c10460a..937a18a8a8d9aca8c648c5b17c08335bf1fa5f7c 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.dao;
+package org.opendaylight.lispflowmapping.interfaces.dao;
 
 public interface IQueryAll {
     public void getAll(IRowVisitor visitor);
similarity index 88%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/dao/IRowVisitor.java
rename to mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/IRowVisitor.java
index 5c91807c034e6c436a1e83b86e14de0f1a20d0ba..22155a32e06e017f5d148c7445c4011f53c91d46 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.dao;
+package org.opendaylight.lispflowmapping.interfaces.dao;
 
 public interface IRowVisitor {
     void visitRow(Class<?> keyType, Object keyId, String valueKey, Object value);
diff --git a/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IFlowMapping.java b/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IFlowMapping.java
new file mode 100644 (file)
index 0000000..b4bf23e
--- /dev/null
@@ -0,0 +1,4 @@
+package org.opendaylight.lispflowmapping.interfaces.lisp;
+
+public interface IFlowMapping extends IMapResolver, IMapServer {
+}
similarity index 89%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/lisp/IMapResolver.java
rename to mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapResolver.java
index 0490b0c681fa7e4d3f6c516534d599bf9bbde82f..73cee6b46373964d659db825231eb513159eca55 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.lisp;
+package org.opendaylight.lispflowmapping.interfaces.lisp;
 
 import org.opendaylight.lispflowmapping.type.lisp.MapReply;
 import org.opendaylight.lispflowmapping.type.lisp.MapRequest;
similarity index 90%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/lisp/IMapServer.java
rename to mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapServer.java
index 8073a25ad3618f208ce1c51fa85bd0da99fe746b..9eb3882e877851d064ec39459035472cf3785791 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.lisp;
+package org.opendaylight.lispflowmapping.interfaces.lisp;
 
 import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
 import org.opendaylight.lispflowmapping.type.lisp.MapRegister;
index 64dac217736ee3e92ca0653da353a7c7f77de243..c30c590c199ccd5f670ca2b8bcf0774033a4bcec 100644 (file)
@@ -12,16 +12,16 @@ import org.opendaylight.lispflowmapping.type.lisp.address.LispASAddress;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispLCAFAddress;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispMACAddress;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
-import org.opendaylight.lispflowmapping.type.lisp.address.LispSegmentLCAFAddress;
 
 public enum AddressFamilyNumberEnum {
     RESERVED(0, LispNoAddress.class), //
     IP(1, LispIpv4Address.class), //
     IP6(2, LispIpv6Address.class), //
     AS(18, LispASAddress.class), //
-    LCAF(16387, LispSegmentLCAFAddress.class), //
+    LCAF(16387, LispLCAFAddress.class), //
     MAC(16389, LispMACAddress.class), //
     UNKNOWN(-1, null);
 
index 7fdeb382252c29e64109eaaaf9cda19473e7d644..e1f82550e0ecad4a5391fd4c5198363ae232be0a 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.lispflowmapping.type.lisp;
 
-import java.nio.ByteBuffer;
-
 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
 
@@ -55,12 +53,6 @@ public class EidRecord {
         this.prefix = (prefix != null) ? prefix : NO_PREFIX;
     }
 
-    public static EidRecord deserialize(ByteBuffer requestBuffer) {
-        /* byte reserved = */requestBuffer.get();
-        byte maskLength = requestBuffer.get();
-        LispAddress prefix = LispAddress.valueOf(requestBuffer);
-        return new EidRecord(maskLength, prefix);
-    }
 
     private static LispAddress NO_PREFIX = new LispNoAddress();
 }
index 3a9b174901494f9ee9d0fbe03e55a2b4a795bd21..94fbc5ea8ab8b6b56969fa9b46f0dd926cff1509 100644 (file)
@@ -8,13 +8,11 @@
 
 package org.opendaylight.lispflowmapping.type.lisp;
 
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
-import org.opendaylight.lispflowmapping.util.ByteUtil;
 
 /**
  * <pre>
@@ -168,47 +166,6 @@ public class EidToLocatorRecord {
         return this;
     }
 
-    protected static EidToLocatorRecord deserialize(ByteBuffer buffer) {
-        EidToLocatorRecord eidToLocatorRecord = new EidToLocatorRecord();
-        eidToLocatorRecord.setRecordTtl(buffer.getInt());
-        byte locatorCount = buffer.get();
-        eidToLocatorRecord.setMaskLength(buffer.get());
-        byte actionAndAuthoritative = buffer.get();
-        eidToLocatorRecord.setAction(MapReplyAction.valueOf(actionAndAuthoritative >> 5));
-        eidToLocatorRecord.setAuthoritative(ByteUtil.extractBit(actionAndAuthoritative, Flags.AUTHORITATIVE));
-        buffer.position(buffer.position() + Length.RESERVED);
-        eidToLocatorRecord.setMapVersion(buffer.getShort());
-
-        eidToLocatorRecord.setPrefix(LispAddress.valueOf(buffer));
-        for (int i = 0; i < locatorCount; i++) {
-            eidToLocatorRecord.addLocator(LocatorRecord.deserialize(buffer));
-        }
-
-        return eidToLocatorRecord;
-    }
-
-    public void serialize(ByteBuffer replyBuffer) {
-        replyBuffer.putInt(getRecordTtl());
-        replyBuffer.put((byte) getLocators().size());
-        replyBuffer.put((byte) getMaskLength());
-        replyBuffer.put((byte) ((getAction().getCode() << 5) | //
-                ByteUtil.boolToBit(isAuthoritative(), Flags.AUTHORITATIVE)));
-        replyBuffer.position(replyBuffer.position() + Length.RESERVED);
-        replyBuffer.putShort(getMapVersion());
-        getPrefix().serialize(replyBuffer);
-
-        for (LocatorRecord locatorRecord : getLocators()) {
-            locatorRecord.serialize(replyBuffer);
-        }
-    }
-
-    public int getSerializationSize() {
-        int size = Length.HEADER_SIZE + getPrefix().getAddressSize();
-        for (LocatorRecord locatorRecord : getLocators()) {
-            size += locatorRecord.getSerializationSize();
-        }
-        return size;
-    }
 
     public EidToLocatorRecord clone() {
         EidToLocatorRecord cloned = new EidToLocatorRecord();
@@ -224,14 +181,6 @@ public class EidToLocatorRecord {
         return cloned;
     }
 
-    private interface Flags {
-        int AUTHORITATIVE = 0x10;
-    }
-
-    private interface Length {
-        int HEADER_SIZE = 10;
-        int RESERVED = 1;
-    }
 
     @Override
     public int hashCode() {
index 96ba5adfff9aa08a78f309e1e7fdf14a47703ff4..b28a662a949a744225bb421d26e65bbd2cbad34a 100644 (file)
@@ -8,10 +8,7 @@
 
 package org.opendaylight.lispflowmapping.type.lisp;
 
-import java.nio.ByteBuffer;
-
 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
-import org.opendaylight.lispflowmapping.util.ByteUtil;
 
 /**
  * <pre>
@@ -187,35 +184,6 @@ public class LocatorRecord {
         return this;
     }
 
-    protected static LocatorRecord deserialize(ByteBuffer buffer) {
-        LocatorRecord record = new LocatorRecord();
-        record.setPriority(buffer.get());
-        record.setWeight(buffer.get());
-        record.setMulticastPriority(buffer.get());
-        record.setMulticastWeight(buffer.get());
-        byte flags = (byte) buffer.getShort();
-        record.setLocalLocator(ByteUtil.extractBit(flags, Flags.LOCAL_LOCATOR));
-        record.setRlocProbed(ByteUtil.extractBit(flags, Flags.RLOC_PROBED));
-        record.setRouted(ByteUtil.extractBit(flags, Flags.ROUTED));
-        record.setLocator(LispAddress.valueOf(buffer));
-        return record;
-    }
-
-    public void serialize(ByteBuffer replyBuffer) {
-        replyBuffer.put(getPriority());
-        replyBuffer.put(getWeight());
-        replyBuffer.put(getMulticastPriority());
-        replyBuffer.put(getMulticastWeight());
-        replyBuffer.position(replyBuffer.position() + Length.UNUSED_FLAGS);
-        replyBuffer.put((byte) (ByteUtil.boolToBit(isLocalLocator(), Flags.LOCAL_LOCATOR) | //
-                ByteUtil.boolToBit(isRlocProbed(), Flags.RLOC_PROBED) | //
-                ByteUtil.boolToBit(isRouted(), Flags.ROUTED)));
-        getLocator().serialize(replyBuffer);
-    }
-
-    public int getSerializationSize() {
-        return Length.HEADER_SIZE + getLocator().getAddressSize();
-    }
 
     public LocatorRecord clone() {
         LocatorRecord cloned = new LocatorRecord();
@@ -230,16 +198,6 @@ public class LocatorRecord {
         return cloned;
     }
 
-    private interface Flags {
-        int LOCAL_LOCATOR = 0x04;
-        int RLOC_PROBED = 0x02;
-        int ROUTED = 0x01;
-    }
-
-    private interface Length {
-        int HEADER_SIZE = 6;
-        int UNUSED_FLAGS = 1;
-    }
 
     @Override
     public int hashCode() {
index 919ad88cef646a7ca790d412f7a4d7f0c844412f..dbeac0176a8ef66ff718a97414473f14b7835c79 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.lispflowmapping.type.lisp;
 
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -109,31 +108,6 @@ public class MapNotify {
         setAuthenticationData(null);
     }
 
-    public ByteBuffer serialize() {
-        int size = Length.HEADER_SIZE + getAuthenticationData().length;
-        for (EidToLocatorRecord eidToLocatorRecord : getEidToLocatorRecords()) {
-            size += eidToLocatorRecord.getSerializationSize();
-        }
-
-        ByteBuffer replyBuffer = ByteBuffer.allocate(size);
-        replyBuffer.put((byte) (LispMessageEnum.MapNotify.getValue() << 4));
-        replyBuffer.position(replyBuffer.position() + Length.RES);
-        replyBuffer.put((byte) getEidToLocatorRecords().size());
-        replyBuffer.putLong(getNonce());
-        replyBuffer.putShort(getKeyId());
-        replyBuffer.putShort((short) getAuthenticationData().length);
-        if (getAuthenticationData() != null) {
-            replyBuffer.put(getAuthenticationData());
-        }
-
-        for (EidToLocatorRecord eidToLocatorRecord : getEidToLocatorRecords()) {
-            eidToLocatorRecord.serialize(replyBuffer);
-        }
-
-        replyBuffer.clear();
-        return replyBuffer;
-    }
-
     public boolean isProxyMapReply() {
         return proxyMapReply;
     }
@@ -187,10 +161,7 @@ public class MapNotify {
         eidToLocatorRecords.add(record);
     }
 
-    private interface Length {
-        int HEADER_SIZE = 16;
-        int RES = 2;
-    }
+    
 
     public void setFromMapRegister(MapRegister mapRegister) {
         setNonce(mapRegister.getNonce());
index 59c660e70662bac8e68572910660a560767838b3..5897d175c56fdeced9805a9052858912162793ed 100644 (file)
@@ -8,13 +8,9 @@
 
 package org.opendaylight.lispflowmapping.type.lisp;
 
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
-import org.opendaylight.lispflowmapping.util.ByteUtil;
-
 /**
  * <pre>
  *         0                   1                   2                   3
@@ -164,41 +160,5 @@ public class MapRegister {
         return this;
     }
 
-    public static MapRegister deserialize(ByteBuffer registerBuffer) {
-        try {
-            MapRegister mapRegister = new MapRegister();
-
-            mapRegister.setProxyMapReply(ByteUtil.extractBit(registerBuffer.get(), Flags.PROXY));
-
-            registerBuffer.position(registerBuffer.position() + Length.RES);
-            mapRegister.setWantMapNotify(ByteUtil.extractBit(registerBuffer.get(), Flags.WANT_MAP_REPLY));
-            byte recordCount = registerBuffer.get();
-            mapRegister.setNonce(registerBuffer.getLong());
-            mapRegister.setKeyId(registerBuffer.getShort());
-
-            short authenticationLength = registerBuffer.getShort();
-            byte[] authenticationData = new byte[authenticationLength];
-            registerBuffer.get(authenticationData);
-            mapRegister.setAuthenticationData(authenticationData);
-
-            for (int i = 0; i < recordCount; i++) {
-                mapRegister.addEidToLocator(EidToLocatorRecord.deserialize(registerBuffer));
-            }
-            return mapRegister;
-        } catch (RuntimeException re) {
-            throw new LispMalformedPacketException("Couldn't deserialize Map-Register (len=" + registerBuffer.capacity() + ")", re);
-        }
-
-    }
-
-    private interface Flags {
-        byte PROXY = 0x08;
-        byte WANT_MAP_REPLY = 0x01;
-    }
-
-    private interface Length {
-        int RES = 1;
-    }
-
     private static byte[] NO_AUTHENTICATION_DATA = new byte[] {};
 }
index 65725dcd3b3acc9a3a87a3f2e6749af9e1f1be0c..103b2764ba002ae713a51cc541543ddf1fc2d2bc 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.lispflowmapping.type.lisp;
 
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -140,34 +139,5 @@ public class MapReply {
         this.eidToLocatorRecords = eidToLocatorRecords;
     }
 
-    public ByteBuffer serialize() {
-        int size = Length.HEADER_SIZE;
-        for (EidToLocatorRecord eidToLocatorRecord : getEidToLocatorRecords()) {
-            size += eidToLocatorRecord.getSerializationSize();
-        }
-
-        ByteBuffer replyBuffer = ByteBuffer.allocate(size);
-
-        replyBuffer.put((byte) ((LispMessageEnum.MapReply.getValue() << 4) | //
-                (isProbe() ? Flags.PROBE : 0x00) | //
-                (isEchoNonceEnabled() ? Flags.ECHO_NONCE_ENABLED : 0x00)));
-
-        replyBuffer.position(replyBuffer.position() + Length.RES);
-        replyBuffer.put((byte) getEidToLocatorRecords().size());
-        replyBuffer.putLong(getNonce());
-        for (EidToLocatorRecord eidToLocatorRecord : getEidToLocatorRecords()) {
-            eidToLocatorRecord.serialize(replyBuffer);
-        }
-        return replyBuffer;
-    }
-
-    private interface Length {
-        int RES = 2;
-        int HEADER_SIZE = 12;
-    }
-
-    private interface Flags {
-        int PROBE = 0x08;
-        int ECHO_NONCE_ENABLED = 0x04;
-    }
+    
 }
index 56ce31d1ac8d1ab51843088877eca373c5f3d537..6210298f44d1849c89d4ba8d7b0205e17436305d 100644 (file)
@@ -8,13 +8,10 @@
 
 package org.opendaylight.lispflowmapping.type.lisp;
 
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
-import org.opendaylight.lispflowmapping.util.ByteUtil;
 
 /**
  * <pre>
@@ -255,45 +252,5 @@ public class MapRequest {
         return itrRlocs;
     }
 
-    public static MapRequest deserialize(ByteBuffer requestBuffer) {
-        try {
-            MapRequest mapRequest = new MapRequest();
-
-            byte typeAndFlags = requestBuffer.get();
-            mapRequest.setAuthoritative(ByteUtil.extractBit(typeAndFlags, Flags.AUTHORITATIVE));
-            mapRequest.setMapDataPresent(ByteUtil.extractBit(typeAndFlags, Flags.MAP_DATA_PRESENT));
-            mapRequest.setProbe(ByteUtil.extractBit(typeAndFlags, Flags.PROBE));
-            mapRequest.setSmr(ByteUtil.extractBit(typeAndFlags, Flags.SMR));
-
-            byte moreFlags = requestBuffer.get();
-            mapRequest.setPitr(ByteUtil.extractBit(moreFlags, Flags.PITR));
-            mapRequest.setSmrInvoked(ByteUtil.extractBit(moreFlags, Flags.SMR_INVOKED));
-
-            int itrCount = requestBuffer.get() + 1;
-            int recordCount = requestBuffer.get();
-            mapRequest.setNonce(requestBuffer.getLong());
-            mapRequest.setSourceEid(LispAddress.valueOf(requestBuffer));
-
-            for (int i = 0; i < itrCount; i++) {
-                mapRequest.addItrRloc(LispAddress.valueOf(requestBuffer));
-            }
-
-            for (int i = 0; i < recordCount; i++) {
-                mapRequest.addEidRecord(EidRecord.deserialize(requestBuffer));
-            }
-            return mapRequest;
-        } catch (RuntimeException re) {
-            throw new LispMalformedPacketException("Couldn't deserialize Map-Request (len=" + requestBuffer.capacity() + ")", re);
-        }
-    }
-
-    public interface Flags {
-        byte AUTHORITATIVE = 0x08;
-        byte MAP_DATA_PRESENT = 0x04;
-        byte PROBE = 0x02;
-        byte SMR = 0x01;
-
-        byte PITR = (byte) 0x80;
-        byte SMR_INVOKED = 0x40;
-    }
+    
 }
index c1c239bd6af18a1b9b957a22d0b5a1a044ffeb53..a55af719e611f4dd981f2e39aa02618adb3f01cc 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.nio.ByteBuffer;
-
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 
 public class LispASAddress extends LispAddress {
@@ -20,24 +18,11 @@ public class LispASAddress extends LispAddress {
         this.asNum = num;
     }
 
-    public static LispASAddress valueOf(ByteBuffer buffer) {
-        throw new RuntimeException("Not implemented");
-    }
 
     public int getAS() {
         return asNum;
     }
 
-    @Override
-    public int getAddressSize() {
-        throw new RuntimeException("Not implemented");
-
-    }
-
-    @Override
-    public void serialize(ByteBuffer buffer) {
-        throw new RuntimeException("Not implemented");
-    }
 
     @Override
     public int hashCode() {
index 43080bdf46de35025100ac1320b55ffb7a7131b6..0f3bdfbbc199db04446a0634576840f28ebace88 100644 (file)
@@ -8,12 +8,7 @@
 
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.nio.ByteBuffer;
-
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
 
 public abstract class LispAddress {
     private AddressFamilyNumberEnum afi;
@@ -25,40 +20,8 @@ public abstract class LispAddress {
     public AddressFamilyNumberEnum getAfi() {
         return afi;
     }
-
-    public int getAddressSize() {
-        return Length.AFI;
-    }
-
-    abstract public void serialize(ByteBuffer buffer);
-
-    protected void internalSerialize(ByteBuffer buffer) {
-        buffer.putShort(getAfi().getIanaCode());
-    }
-
-    public static LispAddress valueOf(ByteBuffer buffer) {
-        short afi = buffer.getShort();
-        AddressFamilyNumberEnum afiType = AddressFamilyNumberEnum.valueOf(afi);
-        Class<? extends LispAddress> addressClass = afiType.getLispAddressClass();
-        Throwable t = null;
-        try {
-            Method valueOfMethod = addressClass.getMethod("valueOf", ByteBuffer.class);
-            return (LispAddress) valueOfMethod.invoke(null, buffer);
-        } catch (NoSuchMethodException e) {
-            t = e;
-        } catch (SecurityException e) {
-            t = e;
-        } catch (ClassCastException e) {
-            t = e;
-        } catch (IllegalAccessException e) {
-            t = e;
-        } catch (IllegalArgumentException e) {
-            t = e;
-        } catch (InvocationTargetException e) {
-            t = e;
-        }
-        throw new LispMalformedPacketException("Couldn't parse LispAddress afi=" + afi, t);
-    }
+    
+    
 
     @Override
     public int hashCode() {
@@ -82,7 +45,4 @@ public abstract class LispAddress {
         return true;
     }
 
-    private interface Length {
-        int AFI = 2;
-    }
 }
diff --git a/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispIPAddress.java b/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/address/LispIPAddress.java
new file mode 100644 (file)
index 0000000..aea8bde
--- /dev/null
@@ -0,0 +1,84 @@
+package org.opendaylight.lispflowmapping.type.lisp.address;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
+
+public abstract class LispIPAddress extends LispAddress{
+       
+       protected InetAddress address;
+
+       protected LispIPAddress(InetAddress address, AddressFamilyNumberEnum afi) {
+               super(afi);
+               this.address = address;
+       }
+       
+       protected LispIPAddress(int address, AddressFamilyNumberEnum afi) {
+        super(afi);
+        try {
+            this.address = InetAddress.getByAddress(ByteBuffer.allocate(4).putInt(address).array());
+        } catch (UnknownHostException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+       
+       protected LispIPAddress(byte[] address, AddressFamilyNumberEnum afi) {
+        super(afi);
+        try {
+
+            this.address = InetAddress.getByAddress(address);
+        } catch (UnknownHostException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+       
+       protected LispIPAddress(String name, AddressFamilyNumberEnum afi) {
+        super(afi);
+        try {
+            this.address = InetAddress.getByName(name);
+        } catch (UnknownHostException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+       
+       public InetAddress getAddress() {
+        return address;
+    }
+
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((address == null) ? 0 : address.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        LispIPAddress other = (LispIPAddress) obj;
+        if (address == null) {
+            if (other.address != null)
+                return false;
+        } else if (!address.equals(other.address))
+            return false;
+        return true;
+    }
+    
+    @Override
+    public String toString() {
+        return address.getHostAddress();
+    }
+
+}
index 2133ad9d2b8a699dca522203ef10b4c985153ae6..bb8803f6c80f91289262fcb5421bfde75a931ff4 100644 (file)
@@ -9,94 +9,21 @@
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
 import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
 
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 
-public class LispIpv4Address extends LispAddress {
-    private InetAddress address;
+public class LispIpv4Address extends LispIPAddress {
 
     public LispIpv4Address(InetAddress address) {
-        super(AddressFamilyNumberEnum.IP);
-        this.address = address;
+        super(address, AddressFamilyNumberEnum.IP);
     }
 
     public LispIpv4Address(int address) {
-        super(AddressFamilyNumberEnum.IP);
-        try {
-            this.address = InetAddress.getByAddress(ByteBuffer.allocate(4).putInt(address).array());
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+        super(address, AddressFamilyNumberEnum.IP);
     }
 
     public LispIpv4Address(String name) {
-        super(AddressFamilyNumberEnum.IP);
-        try {
-            this.address = InetAddress.getByName(name);
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+        super(name, AddressFamilyNumberEnum.IP);
     }
 
-    public static LispIpv4Address valueOf(ByteBuffer buffer) {
-        byte[] ipBuffer = new byte[4];
-        InetAddress address = null;
-        buffer.get(ipBuffer);
-        try {
-            address = InetAddress.getByAddress(ipBuffer);
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return new LispIpv4Address(address);
-    }
-
-    public InetAddress getAddress() {
-        return address;
-    }
-
-    @Override
-    public int getAddressSize() {
-        return super.getAddressSize() + 4;
-    }
-
-    @Override
-    public void serialize(ByteBuffer buffer) {
-        super.internalSerialize(buffer);
-        buffer.put(address.getAddress());
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((address == null) ? 0 : address.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (!super.equals(obj))
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        LispIpv4Address other = (LispIpv4Address) obj;
-        if (address == null) {
-            if (other.address != null)
-                return false;
-        } else if (!address.equals(other.address))
-            return false;
-        return true;
-    }
-
-    @Override
-    public String toString() {
-        return address.getHostAddress();
-    }
 }
index dfb6c59cb6d0fb92c0d83bc7e51b80fb8b8f5687..b6f5005fd2f1f581dc77232e4e2ab3149a1682d6 100644 (file)
@@ -8,92 +8,23 @@
 
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.net.Inet6Address;
 import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
 
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 
-public class LispIpv6Address extends LispAddress {
-    private InetAddress address;
+public class LispIpv6Address extends LispIPAddress {
 
-    private LispIpv6Address(InetAddress address) {
-        super(AddressFamilyNumberEnum.IP6);
-        this.address = address;
+    public LispIpv6Address(InetAddress address) {
+        super(address, AddressFamilyNumberEnum.IP6);
     }
 
     public LispIpv6Address(byte[] address) {
-        super(AddressFamilyNumberEnum.IP6);
-        try {
-
-            this.address = Inet6Address.getByAddress(address);
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+        super(address, AddressFamilyNumberEnum.IP6);
     }
 
     public LispIpv6Address(String name) {
-        super(AddressFamilyNumberEnum.IP6);
-        try {
-            this.address = InetAddress.getByName(name);
-        } catch (UnknownHostException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static LispIpv6Address valueOf(ByteBuffer buffer) {
-        byte[] ipBuffer = new byte[16];
-        InetAddress address = null;
-        buffer.get(ipBuffer);
-        try {
-            address = InetAddress.getByAddress(ipBuffer);
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return new LispIpv6Address(address);
+        super(name, AddressFamilyNumberEnum.IP6);
     }
 
-    @Override
-    public String toString() {
-        return address.getHostAddress();
-    }
-
-    @Override
-    public int getAddressSize() {
-        return super.getAddressSize() + 16;
-    }
 
-    @Override
-    public void serialize(ByteBuffer buffer) {
-        super.internalSerialize(buffer);
-        buffer.put(address.getAddress());
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((address == null) ? 0 : address.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (!super.equals(obj))
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        LispIpv6Address other = (LispIpv6Address) obj;
-        if (address == null) {
-            if (other.address != null)
-                return false;
-        } else if (!address.equals(other.address))
-            return false;
-        return true;
-    }
 }
index d982892b28ff8f68f8b1a146d0550b44a37f6bb9..9a5b137c8f8c3b968ae572c8d1b87ba48ec0eddd 100644 (file)
@@ -7,74 +7,20 @@
  */
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.nio.ByteBuffer;
-
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
 
 public abstract class LispLCAFAddress extends LispAddress {
 
     protected LispCanonicalAddressFormatEnum lcafType;
     protected byte res2;
 
-    protected LispLCAFAddress(ByteBuffer buffer) {
-        super(AddressFamilyNumberEnum.LCAF);
-    }
-
     public LispLCAFAddress(LispCanonicalAddressFormatEnum lcafType, byte res2) {
         super(AddressFamilyNumberEnum.LCAF);
         this.lcafType = lcafType;
         this.res2 = res2;
     }
 
-    public static LispLCAFAddress valueOf(ByteBuffer buffer) {
-        buffer.position(buffer.position() + Length.RES + Length.FLAGS);
-        byte lispCode = buffer.get();
-        LispCanonicalAddressFormatEnum lcafType = LispCanonicalAddressFormatEnum.valueOf(lispCode);
-        byte res2 = buffer.get();
-        short length = buffer.getShort();
-
-        Class<? extends LispAddress> addressClass = lcafType.getLcafClass();
-        if (addressClass == null) {
-            throw new LispMalformedPacketException("Unknown LispLCAFAddress type=" + lispCode);
-        }
-        Method valueOfMethod;
-        Throwable t = null;
-        try {
-            valueOfMethod = addressClass.getMethod("valueOf", byte.class, short.class, ByteBuffer.class);
-            return (LispLCAFAddress) valueOfMethod.invoke(null, res2, length, buffer);
-        } catch (NoSuchMethodException e) {
-            t = e;
-        } catch (SecurityException e) {
-            t = e;
-        } catch (IllegalAccessException e) {
-            t = e;
-        } catch (IllegalArgumentException e) {
-            t = e;
-        } catch (InvocationTargetException e) {
-            t = e;
-        }
-        throw new LispMalformedPacketException("Couldn't parse LispLCAFAddress type=" + lispCode, t);
-    }
-
-    @Override
-    public final int getAddressSize() {
-        return super.getAddressSize() + Length.LCAF_HEADER + getLcafLength();
-    }
-
-    public abstract short getLcafLength();
-
-    @Override
-    protected void internalSerialize(ByteBuffer buffer) {
-        super.internalSerialize(buffer);
-        buffer.putShort((short) 0); // RES + Flags.
-        buffer.put(lcafType.getLispCode());
-        buffer.put(getRes2());
-        buffer.putShort(getLcafLength());
-    }
 
     public LispCanonicalAddressFormatEnum getType() {
         return lcafType;
@@ -114,10 +60,4 @@ public abstract class LispLCAFAddress extends LispAddress {
         return "[lcafType=" + lcafType + ", res2=" + res2 + "]";
     }
 
-    private interface Length {
-        int RES = 1;
-        int FLAGS = 1;
-
-        int LCAF_HEADER = 6;
-    }
 }
index eca828c5eda0379126a83ce67d9fdce083a7f960..f1d334046752e6ab87e8e508a04a3895ee152874 100644 (file)
@@ -1,49 +1,22 @@
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
 import java.util.List;
 
 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
 
 public class LispListLCAFAddress extends LispLCAFAddress {
-    List<LispAddress> addresses;
+    List<? extends LispAddress> addresses;
 
-    public LispListLCAFAddress(byte res2, List<LispAddress> addresses) {
+    public LispListLCAFAddress(byte res2, List<? extends LispAddress> addresses) {
         super(LispCanonicalAddressFormatEnum.LIST, res2);
         this.addresses = addresses;
     }
 
-    @Override
-    public void serialize(ByteBuffer buffer) {
-        super.internalSerialize(buffer);
-        for (LispAddress address : addresses) {
-            address.serialize(buffer);
-        }
-    }
-
-    @Override
-    public short getLcafLength() {
-        short totalSize = 0;
-        for (LispAddress address : addresses) {
-            totalSize += address.getAddressSize();
-        }
-        return totalSize;
-    }
 
-    public List<LispAddress> getAddresses() {
+    public List<? extends LispAddress> getAddresses() {
         return addresses;
     }
 
-    public static LispListLCAFAddress valueOf(byte res2, short length, ByteBuffer buffer) {
-        List<LispAddress> addresses = new ArrayList<LispAddress>();
-        while (length > 0) {
-            LispAddress address = LispAddress.valueOf(buffer);
-            length -= address.getAddressSize();
-            addresses.add(address);
-        }
-        return new LispListLCAFAddress(res2, addresses);
-    }
 
     @Override
     public int hashCode() {
index a0486e634a758ee120ca7dd79b604292fb653d20..aec451b5b7e5e2c86d381b1efa870713af10e02d 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.nio.ByteBuffer;
 import java.util.Arrays;
 
 import javax.xml.bind.DatatypeConverter;
@@ -23,24 +22,11 @@ public class LispMACAddress extends LispAddress {
         System.arraycopy(mac, 0, this.mac, 0, 6);
     }
 
-    public static LispMACAddress valueOf(ByteBuffer buffer) {
-        throw new RuntimeException("Not implemented");
-    }
 
     public byte[] getMAC() {
         return mac;
     }
 
-    @Override
-    public int getAddressSize() {
-        throw new RuntimeException("Not implemented");
-
-    }
-
-    @Override
-    public void serialize(ByteBuffer buffer) {
-        throw new RuntimeException("Not implemented");
-    }
 
     @Override
     public String toString() {
index 58a905e6c77057b3aca31f15da915f66721292f1..6206656a5b889d79b4c5f33c037301ef1332df2d 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.nio.ByteBuffer;
-
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 
 public class LispNoAddress extends LispAddress {
@@ -17,16 +15,4 @@ public class LispNoAddress extends LispAddress {
         super(AddressFamilyNumberEnum.RESERVED);
     }
 
-    public static LispNoAddress valueOf(ByteBuffer buffer) {
-        return new LispNoAddress();
-    }
-
-    @Override
-    public int getAddressSize() {
-        return super.getAddressSize();
-    }
-
-    @Override
-    public void serialize(ByteBuffer buffer) {
-    }
 }
index a3e104613cce51504e848b1208de1f4cb80fac73..03a21bc051fe5705af7272f8a5a128bdb7319150 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.lispflowmapping.type.lisp.address;
 
-import java.nio.ByteBuffer;
-
 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
 
 public class LispSegmentLCAFAddress extends LispLCAFAddress {
@@ -22,19 +20,6 @@ public class LispSegmentLCAFAddress extends LispLCAFAddress {
         this.instanceId = instanceId;
     }
 
-    public static LispSegmentLCAFAddress valueOf(byte res2, short length, ByteBuffer buffer) {
-        int instanceId = buffer.getInt();
-        LispAddress address = LispAddress.valueOf(buffer);
-
-        return new LispSegmentLCAFAddress(res2, instanceId, address);
-    }
-
-    @Override
-    public void serialize(ByteBuffer buffer) {
-        super.internalSerialize(buffer);
-        buffer.putInt(getInstanceId());
-        address.serialize(buffer);
-    }
 
     public LispAddress getAddress() {
         return address;
@@ -48,10 +33,6 @@ public class LispSegmentLCAFAddress extends LispLCAFAddress {
         return getRes2();
     }
 
-    @Override
-    public short getLcafLength() {
-        return (short) (Length.INSTANCE + getAddress().getAddressSize());
-    }
 
     @Override
     public int hashCode() {
@@ -86,8 +67,5 @@ public class LispSegmentLCAFAddress extends LispLCAFAddress {
         return "LispSegmentLCAFAddress#[address=" + address + ", instanceId=" + instanceId + "]" + super.toString();
     }
 
-    private interface Length {
-        int INSTANCE = 4;
-    }
 
 }
index 55655b3c8b40cd74ac59b452602b9d3582e65bab..70ec0ab475ca3216493c85e08d5e1d4b9e081866 100644 (file)
@@ -22,7 +22,6 @@
                                <configuration>
                                        <instructions>
                                                <Export-Package>
-                                                       org.opendaylight.lispflowmapping.implementation
                                                </Export-Package>
                                                <Import-Package>
                                                        org.opendaylight.controller.sal.core,
                                                        org.slf4j,
                                                        org.eclipse.osgi.framework.console,
                                                        org.osgi.framework,
-                                                       org.opendaylight.lispflowmapping,
-                                                       org.opendaylight.lispflowmapping.dao, 
-                                                       org.opendaylight.lispflowmapping.lisp, 
-                                                       org.opendaylight.lispflowmapping.type.exception, 
+                                                       org.opendaylight.lispflowmapping.interfaces.dao, 
+                                                       org.opendaylight.lispflowmapping.interfaces.lisp, 
                                                        org.opendaylight.lispflowmapping.type.lisp, 
                                                        org.opendaylight.lispflowmapping.type.lisp.address, 
-                                                       org.opendaylight.lispflowmapping.util,
                                                        org.opendaylight.controller.clustering.services
                                                </Import-Package>
                                                <Bundle-Activator>
index 9dc8521d6813d6ffa6fc7a16308d16c045f525ea..5d6735a6b8cf8b53ddfd20c04a9110bbed2ebe3c 100644 (file)
@@ -14,11 +14,9 @@ import java.util.Hashtable;
 import org.apache.felix.dm.Component;
 import org.opendaylight.controller.clustering.services.IClusterContainerServices;
 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
-import org.opendaylight.lispflowmapping.ILispMapping;
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
 import org.opendaylight.lispflowmapping.implementation.dao.ClusterDAOService;
-import org.opendaylight.lispflowmapping.lisp.IMapResolver;
-import org.opendaylight.lispflowmapping.lisp.IMapServer;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IFlowMapping;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -89,7 +87,7 @@ public class Activator extends ComponentActivatorAbstractBase {
             // export the service
             Dictionary<String, String> props = new Hashtable<String, String>();
             props.put("name", "mappingservice");
-            c.setInterface(new String[] { ILispMapping.class.getName(), IMapResolver.class.getName(), IMapServer.class.getName() }, props);
+            c.setInterface(new String[] { IFlowMapping.class.getName() }, props);
             c.add(createContainerServiceDependency(containerName).setService(ILispDAO.class).setCallbacks("setLispDao", "unsetLispDao").setRequired(
                     true));
         } else if (imp.equals(ClusterDAOService.class)) {
index 568b702226efd056e79c1ea7efc2f6537be084a5..88586dfd70b69edae2d8f3c09106dc9297edbc92 100644 (file)
@@ -8,27 +8,18 @@
 
 package org.opendaylight.lispflowmapping.implementation;
 
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetSocketAddress;
-import java.net.SocketException;
-import java.net.SocketTimeoutException;
-
 import org.eclipse.osgi.framework.console.CommandInterpreter;
 import org.eclipse.osgi.framework.console.CommandProvider;
-import org.opendaylight.lispflowmapping.ILispMapping;
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
-import org.opendaylight.lispflowmapping.dao.ILispTypeConverter;
-import org.opendaylight.lispflowmapping.dao.IQueryAll;
-import org.opendaylight.lispflowmapping.dao.IRowVisitor;
 import org.opendaylight.lispflowmapping.implementation.dao.InMemoryDAO;
-import org.opendaylight.lispflowmapping.implementation.lisp.LispService;
 import org.opendaylight.lispflowmapping.implementation.lisp.MapResolver;
 import org.opendaylight.lispflowmapping.implementation.lisp.MapServer;
-import org.opendaylight.lispflowmapping.lisp.IMapResolver;
-import org.opendaylight.lispflowmapping.lisp.IMapServer;
-import org.opendaylight.lispflowmapping.type.lisp.LispMessage;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispTypeConverter;
+import org.opendaylight.lispflowmapping.interfaces.dao.IQueryAll;
+import org.opendaylight.lispflowmapping.interfaces.dao.IRowVisitor;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IFlowMapping;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolver;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServer;
 import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
 import org.opendaylight.lispflowmapping.type.lisp.MapRegister;
 import org.opendaylight.lispflowmapping.type.lisp.MapReply;
@@ -40,12 +31,10 @@ import org.osgi.framework.FrameworkUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class LispMappingService implements ILispMapping, CommandProvider, IMapResolver, IMapServer {
+public class LispMappingService implements CommandProvider, IFlowMapping {
     protected static final Logger logger = LoggerFactory.getLogger(LispMappingService.class);
 
-    private LispIoThread thread;
     private ILispDAO lispDao = null;
-    private LispService service;
     private IMapResolver mapResolver;
     private IMapServer mapServer;
 
@@ -53,10 +42,6 @@ public class LispMappingService implements ILispMapping, CommandProvider, IMapRe
         LispMappingService serv = new LispMappingService();
         serv.setLispDao(new InMemoryDAO());
         serv.init();
-        serv.thread.start();
-        while (true) {
-            Thread.sleep(1000);
-        }
     }
 
     class LispIpv4AddressInMemoryConverter implements ILispTypeConverter<LispIpv4Address, Integer> {
@@ -70,7 +55,6 @@ public class LispMappingService implements ILispMapping, CommandProvider, IMapRe
         lispDao = dao;
         mapResolver = new MapResolver(dao);
         mapServer = new MapServer(dao);
-        service = new LispService(mapResolver, mapServer);
         logger.debug("Registering LispIpv4Address");
         lispDao.register(LispIpv4AddressInMemoryConverter.class);
         logger.debug("Registering LispIpv6Address");
@@ -79,7 +63,6 @@ public class LispMappingService implements ILispMapping, CommandProvider, IMapRe
 
     void unsetLispDao(ILispDAO dao) {
         logger.debug("LispDAO was unset in LispMappingService");
-        service = null;
         mapServer = null;
         mapResolver = null;
         lispDao = null;
@@ -87,14 +70,6 @@ public class LispMappingService implements ILispMapping, CommandProvider, IMapRe
 
     public void init() {
         logger.debug("LISP (RFC6830) Mapping Service is initialized!");
-        thread = new LispIoThread();
-    }
-
-    public void start() {
-        logger.info("LISP (RFC6830) Mapping Service is up!");
-        thread.start();
-
-        // OSGI console
         registerWithOSGIConsole();
     }
 
@@ -103,79 +78,13 @@ public class LispMappingService implements ILispMapping, CommandProvider, IMapRe
         bundleContext.registerService(CommandProvider.class.getName(), this, null);
     }
 
-    public void stop() {
-        thread.stopRunning();
-        logger.info("LISP (RFC6830) Mapping Service is down!");
-    }
 
     public void destroy() {
         logger.debug("LISP (RFC6830) Mapping Service is destroyed!");
-        thread = null;
-        service = null;
         mapResolver = null;
         mapServer = null;
     }
 
-    private class LispIoThread extends Thread {
-        private boolean running;
-
-        public LispIoThread() {
-            super("Lisp Thread");
-            running = true;
-        }
-
-        @Override
-        public void run() {
-            DatagramSocket socket;
-            int lispPortNumber = LispMessage.PORT_NUM;
-            int lispReceiveTimeout = 1000;
-            String lispBindAddress = "0.0.0.0";
-            logger.info("LISP (RFC6830) Mapping Service is running and listening on " + lispBindAddress);
-            try {
-                socket = new DatagramSocket(new InetSocketAddress(lispBindAddress, lispPortNumber));
-                socket.setSoTimeout(lispReceiveTimeout);
-            } catch (SocketException e) {
-                logger.warn("Cannot open socket on UDP port " + lispPortNumber, e);
-                return;
-            }
-
-            while (running) {
-                byte[] buffer = new byte[4096];
-                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
-                try {
-                    socket.receive(packet);
-                } catch (SocketTimeoutException ste) {
-                    continue;
-                } catch (IOException e) {
-                    // TODO: log
-                }
-                logger.debug("Handling packet from {}:{} (len={})", packet.getAddress().getHostAddress(), packet.getPort(), packet.getLength());
-                try {
-                    DatagramPacket reply = service.handlePacket(packet);
-
-                    if (reply == null) {
-                        continue;
-                    }
-
-                    reply.setAddress(packet.getAddress());
-                    try {
-                        logger.debug("sending reply to {}:{} (len={})", reply.getAddress().getHostAddress(), reply.getPort(), reply.getLength());
-                        socket.send(reply);
-                    } catch (IOException e) {
-                        // TODO: log
-                    }
-                } catch (RuntimeException e) {
-                    logger.warn("", e);
-                }
-            }
-
-            socket.close();
-        }
-
-        public void stopRunning() {
-            running = false;
-        }
-    }
 
     public void _removeEid(final CommandInterpreter ci) {
         lispDao.remove(new LispIpv4Address(ci.nextArgument()));
@@ -204,12 +113,6 @@ public class LispMappingService implements ILispMapping, CommandProvider, IMapRe
         return;
     }
 
-    public static String intToIpv4(int address) {
-        return ((address >> 24) & 0xff) + "." + //
-                ((address >> 16) & 0xff) + "." + //
-                ((address >> 8) & 0xff) + "." + //
-                ((address >> 0) & 0xff);
-    }
 
     public String getHelp() {
         StringBuffer help = new StringBuffer();
index 052a744e75fe5d4dea01510dee03206d96adb2e9..3600abd427639b06a0729965ed02b5a7de919ea5 100644 (file)
@@ -18,10 +18,10 @@ import org.opendaylight.controller.clustering.services.CacheConfigException;
 import org.opendaylight.controller.clustering.services.CacheExistException;
 import org.opendaylight.controller.clustering.services.IClusterContainerServices;
 import org.opendaylight.controller.clustering.services.IClusterServices;
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
-import org.opendaylight.lispflowmapping.dao.ILispTypeConverter;
-import org.opendaylight.lispflowmapping.dao.IQueryAll;
-import org.opendaylight.lispflowmapping.dao.IRowVisitor;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispTypeConverter;
+import org.opendaylight.lispflowmapping.interfaces.dao.IQueryAll;
+import org.opendaylight.lispflowmapping.interfaces.dao.IRowVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 8148b4440b77f54a307f9f5aab15cd30cbdab1e4..8cf466c6eab50af14d63853630481e22ced8b7b2 100644 (file)
@@ -12,10 +12,10 @@ import java.lang.reflect.ParameterizedType;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
-import org.opendaylight.lispflowmapping.dao.ILispTypeConverter;
-import org.opendaylight.lispflowmapping.dao.IQueryAll;
-import org.opendaylight.lispflowmapping.dao.IRowVisitor;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispTypeConverter;
+import org.opendaylight.lispflowmapping.interfaces.dao.IQueryAll;
+import org.opendaylight.lispflowmapping.interfaces.dao.IRowVisitor;
 
 public class InMemoryDAO implements ILispDAO, IQueryAll {
     private Map<Class<?>, Map<Object, Map<String, Object>>> typeToKeysToValues;
index 7a43e95f728098f3f1fc3922b7373bc66e3c5e88..0687cc73ec892e9da81af3e6d07c490c519cab3a 100644 (file)
@@ -10,8 +10,8 @@ package org.opendaylight.lispflowmapping.implementation.lisp;
 
 import java.util.Map;
 
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
-import org.opendaylight.lispflowmapping.lisp.IMapResolver;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolver;
 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
 import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
 import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
index 437e1102d6ff1dd44ef8fac7297fcae77e3a4f10..bb5d5d00e799f6182902387c37e30b111bae33ae 100644 (file)
@@ -11,9 +11,9 @@ package org.opendaylight.lispflowmapping.implementation.lisp;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
-import org.opendaylight.lispflowmapping.dao.ILispDAO.MappingEntry;
-import org.opendaylight.lispflowmapping.lisp.IMapServer;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO.MappingEntry;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServer;
 import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
 import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
 import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
index b6503e9bccf665be28f54fd9cee3d0303720b592..6071b3e9184a40a16ce618b79e09da96b11af578 100644 (file)
@@ -17,8 +17,8 @@ import junitx.framework.StringAssert;
 import org.jmock.api.Invocation;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.lispflowmapping.dao.IRowVisitor;
 import org.opendaylight.lispflowmapping.implementation.dao.InMemoryDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.IRowVisitor;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 import org.opendaylight.lispflowmapping.tools.junit.MockCommandInterpreter;
index 437b4b48d23d8481a51086ad8c121e7417ad0fd7..5d118424e76afae6acf6ec4d8d399dfb99f55925 100644 (file)
@@ -8,9 +8,9 @@ import java.util.Map;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.lispflowmapping.dao.ILispDAO.MappingEntry;
-import org.opendaylight.lispflowmapping.dao.ILispDAO.MappingValueKey;
-import org.opendaylight.lispflowmapping.dao.ILispTypeConverter;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispTypeConverter;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO.MappingEntry;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO.MappingValueKey;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 
index b2ef200477a00c22398ef6f5eff4a603174aa06d..5ab644249a6b020a107c5a155aa90bd1d43f7104 100644 (file)
@@ -9,7 +9,7 @@ import junit.framework.Assert;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
 import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
 import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
index 51c081feac411f2988038cf8bbd32bfc61529a80..82efecf1b6d4f06c059a146c993ee6f5764a8acf 100644 (file)
@@ -13,8 +13,8 @@ import junitx.framework.ArrayAssert;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.lispflowmapping.dao.ILispDAO;
-import org.opendaylight.lispflowmapping.dao.ILispDAO.MappingEntry;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO.MappingEntry;
 import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
 import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
 import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
diff --git a/mappingservice/northbound/pom.xml b/mappingservice/northbound/pom.xml
new file mode 100644 (file)
index 0000000..2b5ddf7
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.opendaylight.lispflowmapping</groupId>
+               <artifactId>mappingservice-parent</artifactId>
+               <version>0.1.0-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>mappingservice.northbound</artifactId>
+       <version>0.1.0-SNAPSHOT</version>
+       <packaging>bundle</packaging>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <extensions>true</extensions>
+                               <configuration>
+                                       <instructions>
+                                               <Export-Package>
+                                               </Export-Package>
+                                               <Import-Package>
+                                                       org.opendaylight.lispflowmapping.interfaces.lisp,
+                                                       org.opendaylight.lispflowmapping.type,  
+                                                       org.opendaylight.lispflowmapping.type.lisp, 
+                                                       org.opendaylight.lispflowmapping.type.lisp.address 
+                                               </Import-Package>
+                                               <manifestLocation>${project.basedir}/src/main/resources/META-INF</manifestLocation>
+                                               <Service-Component>
+                                               </Service-Component>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+       <dependencies>
+               <dependency>
+                       <groupId>org.opendaylight.lispflowmapping</groupId>
+                       <artifactId>mappingservice.api</artifactId>
+                       <version>0.1.0-SNAPSHOT</version>
+               </dependency>
+       </dependencies>
+</project>
diff --git a/mappingservice/northbound/src/main/java/org/opendaylight/lispflowmapping/northbound/INorthboundService.java b/mappingservice/northbound/src/main/java/org/opendaylight/lispflowmapping/northbound/INorthboundService.java
new file mode 100644 (file)
index 0000000..724eb0f
--- /dev/null
@@ -0,0 +1,5 @@
+package org.opendaylight.lispflowmapping.northbound;
+
+public interface INorthboundService {
+
+}
similarity index 71%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/ILispMapping.java
rename to mappingservice/northbound/src/main/java/org/opendaylight/lispflowmapping/northbound/NorthboundService.java
index a4df1873de783b61f49f782f557a14efdcf69fed..8e9362d6dd0ee4dd87044a9fb1995419ac97e3f2 100644 (file)
@@ -6,7 +6,11 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping;
+package org.opendaylight.lispflowmapping.northbound;
+
+
+public class NorthboundService implements INorthboundService {
+
+    
 
-public interface ILispMapping {
 }
index 28f11bc7a206888f72f7bc77af4772367eb659e4..70a3540cc0e10b9e5b3b094f611d1a98e20222e2 100644 (file)
@@ -15,6 +15,8 @@
         <modules>
                 <module>api</module>
                 <module>implementation</module>
+                <module>southbound</module>
+                <module>northbound</module>
         </modules>
        <dependencies>
                <dependency>
diff --git a/mappingservice/southbound/pom.xml b/mappingservice/southbound/pom.xml
new file mode 100644 (file)
index 0000000..158958f
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.opendaylight.lispflowmapping</groupId>
+               <artifactId>mappingservice-parent</artifactId>
+               <version>0.1.0-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>mappingservice.southbound</artifactId>
+       <version>0.1.0-SNAPSHOT</version>
+       <packaging>bundle</packaging>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <!--version>2.3.6</version-->
+                               <extensions>true</extensions>
+                               <configuration>
+                                       <instructions>
+                                               <Export-Package>
+                                               </Export-Package>
+                                               <Import-Package>
+                                                       org.opendaylight.controller.sal.core,
+                                                       org.apache.felix.dm,
+                                                       org.apache.commons.lang3.builder,
+                                                       org.osgi.service.component,
+                                                       org.slf4j,
+                                                       org.eclipse.osgi.framework.console,
+                                                       org.osgi.framework,
+                                                       org.opendaylight.lispflowmapping.interfaces.lisp,
+                                                       org.opendaylight.lispflowmapping.type,  
+                                                       org.opendaylight.lispflowmapping.type.lisp, 
+                                                       org.opendaylight.lispflowmapping.type.lisp.address, 
+                                                       org.opendaylight.controller.clustering.services
+                                               </Import-Package>
+                                               <Bundle-Activator>
+                                                       org.opendaylight.lispflowmapping.southbound.Activator
+                                               </Bundle-Activator>
+                                               <Service-Component>
+                                               </Service-Component>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+       <dependencies>
+               <dependency>
+                       <groupId>org.opendaylight.lispflowmapping</groupId>
+                       <artifactId>mappingservice.api</artifactId>
+                       <version>0.1.0-SNAPSHOT</version>
+               </dependency>
+       </dependencies>
+</project>
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/Activator.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/Activator.java
new file mode 100644 (file)
index 0000000..4fde6a9
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2013 Contextream, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.lispflowmapping.southbound;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.felix.dm.Component;
+import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IFlowMapping;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Main application activator class for registering the dependencies and
+ * initialising the Mapping Service application.
+ * 
+ */
+
+public class Activator extends ComponentActivatorAbstractBase {
+
+    /*
+     * Logger instance
+     */
+    protected static final Logger logger = LoggerFactory.getLogger(Activator.class);
+
+    /**
+     * Function called when the activator starts just after some initializations
+     * are done by the ComponentActivatorAbstractBase.
+     * 
+     */
+    @Override
+    public void init() {
+    }
+
+    /**
+     * Function called when the activator stops just before the cleanup done by
+     * ComponentActivatorAbstractBase
+     * 
+     */
+    @Override
+    public void destroy() {
+    }
+
+    /**
+     * Function that is used to communicate to dependency manager the list of
+     * known implementations for services inside a container
+     * 
+     * 
+     * @return An array containing all the CLASS objects that will be
+     *         instantiated in order to get an fully working implementation
+     *         Object
+     */
+    @Override
+    public Object[] getImplementations() {
+        Object[] res = { LispSouthboundPlugin.class };
+        return res;
+    }
+
+    /**
+     * Function that is called when configuration of the dependencies is
+     * required.
+     * 
+     * @param c
+     *            dependency manager Component object, used for configuring the
+     *            dependencies exported and imported
+     * @param imp
+     *            Implementation class that is being configured, needed as long
+     *            as the same routine can configure multiple implementations
+     * @param containerName
+     *            The containerName being configured, this allow also optional
+     *            per-container different behavior if needed, usually should not
+     *            be the case though.
+     */
+    @Override
+    public void configureInstance(Component c, Object imp, String containerName) {
+        if (imp.equals(LispSouthboundPlugin.class)) {
+            // export the service
+            Dictionary<String, String> props = new Hashtable<String, String>();
+            props.put("name", "mappingservice");
+            c.setInterface(new String[] { ILispSouthboundPlugin.class.getName() }, props);
+            c.add(createContainerServiceDependency(containerName).setService(IFlowMapping.class).setCallbacks("setFlowMappingService", "unsetFlowMappingService")
+                    .setRequired(true));
+        }
+    }
+
+    /**
+     * Method which tells how many Global implementations are supported by the
+     * bundle. This way we can tune the number of components created. This
+     * components will be created ONLY at the time of bundle startup and will be
+     * destroyed only at time of bundle destruction, this is the major
+     * difference with the implementation retrieved via getImplementations where
+     * all of them are assumed to be in a container !
+     * 
+     * 
+     * @return The list of implementations the bundle will support, in Global
+     *         version
+     */
+    @Override
+    protected Object[] getGlobalImplementations() {
+        return null;
+    }
+
+    /**
+     * Configure the dependency for a given instance Global
+     * 
+     * @param c
+     *            Component assigned for this instance, this will be what will
+     *            be used for configuration
+     * @param imp
+     *            implementation to be configured
+     * @param containerName
+     *            container on which the configuration happens
+     */
+    @Override
+    protected void configureGlobalInstance(Component c, Object imp) {
+
+    }
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/ILispSouthboundPlugin.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/ILispSouthboundPlugin.java
new file mode 100644 (file)
index 0000000..57f174c
--- /dev/null
@@ -0,0 +1,5 @@
+package org.opendaylight.lispflowmapping.southbound;
+
+
+public interface ILispSouthboundPlugin {
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundPlugin.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundPlugin.java
new file mode 100644 (file)
index 0000000..f780b31
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2013 Contextream, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.lispflowmapping.southbound;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetSocketAddress;
+import java.net.SocketException;
+import java.net.SocketTimeoutException;
+
+import org.eclipse.osgi.framework.console.CommandProvider;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IFlowMapping;
+import org.opendaylight.lispflowmapping.southbound.lisp.LispSouthboundService;
+import org.opendaylight.lispflowmapping.southbound.serializer.LispMessage;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LispSouthboundPlugin implements ILispSouthboundPlugin {
+    protected static final Logger logger = LoggerFactory.getLogger(LispSouthboundPlugin.class);
+
+    private LispIoThread thread;
+    private LispSouthboundService service;
+
+
+    void setFlowMappingService(IFlowMapping mappingService) {
+        logger.debug("FlowMapping set in LispSouthbound");
+        service = new LispSouthboundService(mappingService, mappingService);
+        logger.debug("Registering LispIpv4Address");
+        logger.debug("Registering LispIpv6Address");
+    }
+
+    void unsetFlowMappingService(IFlowMapping mappingService) {
+        logger.debug("LispDAO was unset in LispMappingService");
+        service = null;
+    }
+
+    public void init() {
+        logger.debug("LISP (RFC6830) Mapping Service is initialized!");
+        thread = new LispIoThread();
+    }
+
+    public void start() {
+        logger.info("LISP (RFC6830) Mapping Service is up!");
+        thread.start();
+
+        // OSGI console
+        registerWithOSGIConsole();
+    }
+
+    private void registerWithOSGIConsole() {
+        BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
+        bundleContext.registerService(CommandProvider.class.getName(), this, null);
+    }
+
+    public void stop() {
+        thread.stopRunning();
+        logger.info("LISP (RFC6830) Mapping Service is down!");
+    }
+
+    public void destroy() {
+        logger.debug("LISP (RFC6830) Mapping Service is destroyed!");
+        thread = null;
+        service = null;
+    }
+
+    private class LispIoThread extends Thread {
+        private boolean running;
+
+        public LispIoThread() {
+            super("Lisp Thread");
+            running = true;
+        }
+
+        @Override
+        public void run() {
+            DatagramSocket socket;
+            int lispPortNumber = LispMessage.PORT_NUM;
+            int lispReceiveTimeout = 1000;
+            String lispBindAddress = "0.0.0.0";
+            logger.info("LISP (RFC6830) Mapping Service is running and listening on " + lispBindAddress);
+            try {
+                socket = new DatagramSocket(new InetSocketAddress(lispBindAddress, lispPortNumber));
+                socket.setSoTimeout(lispReceiveTimeout);
+            } catch (SocketException e) {
+                logger.warn("Cannot open socket on UDP port " + lispPortNumber, e);
+                return;
+            }
+
+            while (running) {
+                byte[] buffer = new byte[4096];
+                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
+                try {
+                    socket.receive(packet);
+                } catch (SocketTimeoutException ste) {
+                    continue;
+                } catch (IOException e) {
+                    // TODO: log
+                }
+                logger.debug("Handling packet from {}:{} (len={})", packet.getAddress().getHostAddress(), packet.getPort(), packet.getLength());
+                try {
+                    DatagramPacket reply = service.handlePacket(packet);
+
+                    if (reply == null) {
+                        continue;
+                    }
+
+                    reply.setAddress(packet.getAddress());
+                    try {
+                        logger.debug("sending reply to {}:{} (len={})", reply.getAddress().getHostAddress(), reply.getPort(), reply.getLength());
+                        socket.send(reply);
+                    } catch (IOException e) {
+                        // TODO: log
+                    }
+                } catch (RuntimeException e) {
+                    logger.warn("", e);
+                }
+            }
+
+            socket.close();
+        }
+
+        public void stopRunning() {
+            running = false;
+        }
+    }
+
+
+    public static String intToIpv4(int address) {
+        return ((address >> 24) & 0xff) + "." + //
+                ((address >> 16) & 0xff) + "." + //
+                ((address >> 8) & 0xff) + "." + //
+                ((address >> 0) & 0xff);
+    }
+
+    public String getHelp() {
+        StringBuffer help = new StringBuffer();
+        help.append("---LISP Southbound Plugin---\n");
+        return help.toString();
+    }
+
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/ILispSouthboundService.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/ILispSouthboundService.java
new file mode 100644 (file)
index 0000000..7fbed55
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.lispflowmapping.southbound.lisp;
+
+import java.net.DatagramPacket;
+
+public interface ILispSouthboundService {
+
+       public DatagramPacket handlePacket(DatagramPacket packet);
+       
+}
@@ -6,36 +6,39 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.implementation.lisp;
-
-import static org.opendaylight.lispflowmapping.util.ByteUtil.getUnsignedByte;
+package org.opendaylight.lispflowmapping.southbound.lisp;
 
 import java.net.DatagramPacket;
 import java.nio.ByteBuffer;
 
-import org.opendaylight.lispflowmapping.lisp.IMapResolver;
-import org.opendaylight.lispflowmapping.lisp.IMapServer;
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
-import org.opendaylight.lispflowmapping.type.lisp.LispMessage;
-import org.opendaylight.lispflowmapping.type.lisp.LispMessageEnum;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolver;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServer;
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.southbound.lisp.network.PacketHeader;
+import org.opendaylight.lispflowmapping.southbound.serializer.LispMessage;
+import org.opendaylight.lispflowmapping.southbound.serializer.LispMessageEnum;
+import org.opendaylight.lispflowmapping.southbound.serializer.MapNotifySerializer;
+import org.opendaylight.lispflowmapping.southbound.serializer.MapRegisterSerializer;
+import org.opendaylight.lispflowmapping.southbound.serializer.MapReplySerializer;
+import org.opendaylight.lispflowmapping.southbound.serializer.MapRequestSerializer;
+import org.opendaylight.lispflowmapping.southbound.util.ByteUtil;
 import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
 import org.opendaylight.lispflowmapping.type.lisp.MapRegister;
 import org.opendaylight.lispflowmapping.type.lisp.MapReply;
 import org.opendaylight.lispflowmapping.type.lisp.MapRequest;
-import org.opendaylight.lispflowmapping.type.network.PacketHeader;
 
-public class LispService {
+public class LispSouthboundService implements ILispSouthboundService{
     private IMapResolver mapResolver;
     private IMapServer mapServer;
 
-    public LispService(IMapResolver mapResolver, IMapServer mapServer) {
+    public LispSouthboundService(IMapResolver mapResolver, IMapServer mapServer) {
         this.mapResolver = mapResolver;
         this.mapServer = mapServer;
     }
 
     public DatagramPacket handlePacket(DatagramPacket packet) {
         ByteBuffer inBuffer = ByteBuffer.wrap(packet.getData(), 0, packet.getLength());
-        Object lispType = LispMessageEnum.valueOf((byte) (getUnsignedByte(inBuffer, LispMessage.Pos.TYPE) >> 4));
+        Object lispType = LispMessageEnum.valueOf((byte) (ByteUtil.getUnsignedByte(inBuffer, LispMessage.Pos.TYPE) >> 4));
         if (lispType == LispMessageEnum.EncapsulatedControlMessage) {
             return handleMapRequest(inBuffer);
         } else {
@@ -49,9 +52,9 @@ public class LispService {
 
     private DatagramPacket handleMapRequest(ByteBuffer inBuffer) {
         int encapsulatedSourcePort = extractEncapsulatedSourcePort(inBuffer);
-        MapRequest request = MapRequest.deserialize(inBuffer);
+        MapRequest request = MapRequestSerializer.getInstance().deserialize(inBuffer);
         MapReply mapReply = mapResolver.handleMapRequest(request);
-        ByteBuffer outBuffer = mapReply.serialize();
+        ByteBuffer outBuffer = MapReplySerializer.getInstance().serialize(mapReply);
 
         DatagramPacket replyPacket = new DatagramPacket(outBuffer.array(), outBuffer.capacity());
         replyPacket.setPort(encapsulatedSourcePort);
@@ -77,11 +80,11 @@ public class LispService {
     }
 
     private DatagramPacket handleMapRegister(ByteBuffer inBuffer) {
-        MapRegister mapRegister = MapRegister.deserialize(inBuffer);
+        MapRegister mapRegister = MapRegisterSerializer.getInstance().deserialize(inBuffer);
         MapNotify mapNotify = mapServer.handleMapRegister(mapRegister);
 
         if (mapNotify != null) {
-            ByteBuffer outBuffer = mapNotify.serialize();
+            ByteBuffer outBuffer = MapNotifySerializer.getInstance().serialize(mapNotify);
             DatagramPacket notify = new DatagramPacket(outBuffer.array(), outBuffer.limit());
             notify.setPort(LispMessage.PORT_NUM);
             return notify;
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.lispflowmapping.type.exception;
+package org.opendaylight.lispflowmapping.southbound.lisp.exception;
 
 public class LispMalformedPacketException extends RuntimeException {
 
similarity index 89%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/network/PacketHeader.java
rename to mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/network/PacketHeader.java
index 8183234683d7e6069f20374077f0ee6a85b37648..a0fbacfdd88d0c6c635df5136181864e171fe448 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.type.network;
+package org.opendaylight.lispflowmapping.southbound.lisp.network;
 
 public interface PacketHeader {
 
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/EidRecordSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/EidRecordSerializer.java
new file mode 100644 (file)
index 0000000..860d38a
--- /dev/null
@@ -0,0 +1,27 @@
+package org.opendaylight.lispflowmapping.southbound.serializer;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.serializer.address.LispAddressSerializer;
+import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+
+public class EidRecordSerializer {
+       
+       private static final EidRecordSerializer INSTANCE = new EidRecordSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private EidRecordSerializer() {
+       }
+
+       public static EidRecordSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       public EidRecord deserialize(ByteBuffer requestBuffer) {
+        /* byte reserved = */requestBuffer.get();
+        byte maskLength = requestBuffer.get();
+        LispAddress prefix = LispAddressSerializer.getInstance().deserialize(requestBuffer);
+        return new EidRecord(maskLength, prefix);
+    }
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/EidToLocatorRecordSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/EidToLocatorRecordSerializer.java
new file mode 100644 (file)
index 0000000..749bab9
--- /dev/null
@@ -0,0 +1,74 @@
+package org.opendaylight.lispflowmapping.southbound.serializer;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.serializer.address.LispAddressSerializer;
+import org.opendaylight.lispflowmapping.southbound.serializer.address.LispAddressSerializerFactory;
+import org.opendaylight.lispflowmapping.southbound.util.ByteUtil;
+import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
+
+public class EidToLocatorRecordSerializer {
+       
+       private static final EidToLocatorRecordSerializer INSTANCE = new EidToLocatorRecordSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private EidToLocatorRecordSerializer() {
+       }
+
+       public static EidToLocatorRecordSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       public EidToLocatorRecord deserialize(ByteBuffer buffer) {
+        EidToLocatorRecord eidToLocatorRecord = new EidToLocatorRecord();
+        eidToLocatorRecord.setRecordTtl(buffer.getInt());
+        byte locatorCount = buffer.get();
+        eidToLocatorRecord.setMaskLength(buffer.get());
+        byte actionAndAuthoritative = buffer.get();
+        eidToLocatorRecord.setAction(MapReplyAction.valueOf(actionAndAuthoritative >> 5));
+        eidToLocatorRecord.setAuthoritative(ByteUtil.extractBit(actionAndAuthoritative, Flags.AUTHORITATIVE));
+        buffer.position(buffer.position() + Length.RESERVED);
+        eidToLocatorRecord.setMapVersion(buffer.getShort());
+
+        eidToLocatorRecord.setPrefix(LispAddressSerializer.getInstance().deserialize(buffer));
+        for (int i = 0; i < locatorCount; i++) {
+            eidToLocatorRecord.addLocator(LocatorRecordSerializer.getInstance().deserialize(buffer));
+        }
+
+        return eidToLocatorRecord;
+    }
+
+    public void serialize(ByteBuffer replyBuffer, EidToLocatorRecord record) {
+        replyBuffer.putInt(record.getRecordTtl());
+        replyBuffer.put((byte) record.getLocators().size());
+        replyBuffer.put((byte) record.getMaskLength());
+        replyBuffer.put((byte) ((record.getAction().getCode() << 5) | //
+                ByteUtil.boolToBit(record.isAuthoritative(), Flags.AUTHORITATIVE)));
+        replyBuffer.position(replyBuffer.position() + Length.RESERVED);
+        replyBuffer.putShort(record.getMapVersion());
+        LispAddressSerializerFactory.getSerializer(record.getPrefix().getAfi()).serialize(replyBuffer, record.getPrefix());
+
+        for (LocatorRecord locatorRecord : record.getLocators()) {
+            LocatorRecordSerializer.getInstance().serialize(replyBuffer, locatorRecord);
+        }
+    }
+
+    public int getSerializationSize(EidToLocatorRecord record) {
+        int size = Length.HEADER_SIZE + LispAddressSerializerFactory.getSerializer(record.getPrefix().getAfi()).getAddressSize(record.getPrefix());
+        for (LocatorRecord locatorRecord : record.getLocators()) {
+            size += LocatorRecordSerializer.getInstance().getSerializationSize(locatorRecord);
+        }
+        return size;
+    }
+    
+    private interface Flags {
+        int AUTHORITATIVE = 0x10;
+    }
+
+    private interface Length {
+        int HEADER_SIZE = 10;
+        int RESERVED = 1;
+    }
+}
similarity index 81%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/LispMessage.java
rename to mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/LispMessage.java
index 0e0e32ad4f4ddf6ce339560d5dcc089b150a32a0..88ecf4d664e7eb680eb23d88283186b3741bc98e 100644 (file)
@@ -6,10 +6,10 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.type.lisp;
+package org.opendaylight.lispflowmapping.southbound.serializer;
 
 public interface LispMessage {
-    int PORT_NUM = 4342;
+    int PORT_NUM =  4342;
 
     interface Pos {
         int TYPE = 0;
similarity index 93%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/type/lisp/LispMessageEnum.java
rename to mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/LispMessageEnum.java
index b43546763424e44322eef4ebcd689ad8a1039522..50bfdb2fdee466dfcadb3b44f7b667cd863444e4 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.type.lisp;
+package org.opendaylight.lispflowmapping.southbound.serializer;
 
 public enum LispMessageEnum {
     MapRequest((byte) 1), //
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/LocatorRecordSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/LocatorRecordSerializer.java
new file mode 100644 (file)
index 0000000..ea22e28
--- /dev/null
@@ -0,0 +1,64 @@
+package org.opendaylight.lispflowmapping.southbound.serializer;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.serializer.address.LispAddressSerializer;
+import org.opendaylight.lispflowmapping.southbound.serializer.address.LispAddressSerializerFactory;
+import org.opendaylight.lispflowmapping.southbound.util.ByteUtil;
+import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
+
+public class LocatorRecordSerializer {
+       
+       private static final LocatorRecordSerializer INSTANCE = new LocatorRecordSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LocatorRecordSerializer() {
+       }
+
+       public static LocatorRecordSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       protected LocatorRecord deserialize(ByteBuffer buffer) {
+        LocatorRecord record = new LocatorRecord();
+        record.setPriority(buffer.get());
+        record.setWeight(buffer.get());
+        record.setMulticastPriority(buffer.get());
+        record.setMulticastWeight(buffer.get());
+        byte flags = (byte) buffer.getShort();
+        record.setLocalLocator(ByteUtil.extractBit(flags, Flags.LOCAL_LOCATOR));
+        record.setRlocProbed(ByteUtil.extractBit(flags, Flags.RLOC_PROBED));
+        record.setRouted(ByteUtil.extractBit(flags, Flags.ROUTED));
+        record.setLocator(LispAddressSerializer.getInstance().deserialize(buffer));
+        return record;
+    }
+
+    public void serialize(ByteBuffer replyBuffer, LocatorRecord record) {
+        replyBuffer.put(record.getPriority());
+        replyBuffer.put(record.getWeight());
+        replyBuffer.put(record.getMulticastPriority());
+        replyBuffer.put(record.getMulticastWeight());
+        replyBuffer.position(replyBuffer.position() + Length.UNUSED_FLAGS);
+        replyBuffer.put((byte) (ByteUtil.boolToBit(record.isLocalLocator(), Flags.LOCAL_LOCATOR) | //
+                ByteUtil.boolToBit(record.isRlocProbed(), Flags.RLOC_PROBED) | //
+                ByteUtil.boolToBit(record.isRouted(), Flags.ROUTED)));
+        LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(record.getLocator().getAfi());
+        serializer.serialize(replyBuffer, record.getLocator());
+    }
+
+    public int getSerializationSize(LocatorRecord record) {
+       LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(record.getLocator().getAfi());
+        return Length.HEADER_SIZE + serializer.getAddressSize(record.getLocator());
+    }
+    
+    private interface Flags {
+        int LOCAL_LOCATOR = 0x04;
+        int RLOC_PROBED = 0x02;
+        int ROUTED = 0x01;
+    }
+
+    private interface Length {
+        int HEADER_SIZE = 6;
+        int UNUSED_FLAGS = 1;
+    }
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapNotifySerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapNotifySerializer.java
new file mode 100644 (file)
index 0000000..836db7a
--- /dev/null
@@ -0,0 +1,54 @@
+package org.opendaylight.lispflowmapping.southbound.serializer;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
+
+/**
+ * This class deals with serializing map notify from the java object to udp.
+ */
+public class MapNotifySerializer {
+       
+       private static final MapNotifySerializer INSTANCE = new MapNotifySerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private MapNotifySerializer() {
+       }
+
+       public static MapNotifySerializer getInstance() {
+               return INSTANCE;
+       }
+       
+
+       public ByteBuffer serialize(MapNotify mapNotify) {
+        int size = Length.HEADER_SIZE + mapNotify.getAuthenticationData().length;
+        for (EidToLocatorRecord eidToLocatorRecord : mapNotify.getEidToLocatorRecords()) {
+            size += EidToLocatorRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord);
+        }
+
+        ByteBuffer replyBuffer = ByteBuffer.allocate(size);
+        replyBuffer.put((byte) (LispMessageEnum.MapNotify.getValue() << 4));
+        replyBuffer.position(replyBuffer.position() + Length.RES);
+        replyBuffer.put((byte) mapNotify.getEidToLocatorRecords().size());
+        replyBuffer.putLong(mapNotify.getNonce());
+        replyBuffer.putShort(mapNotify.getKeyId());
+        replyBuffer.putShort((short) mapNotify.getAuthenticationData().length);
+        if (mapNotify.getAuthenticationData() != null) {
+            replyBuffer.put(mapNotify.getAuthenticationData());
+        }
+
+        for (EidToLocatorRecord eidToLocatorRecord : mapNotify.getEidToLocatorRecords()) {
+               EidToLocatorRecordSerializer.getInstance().serialize(replyBuffer, eidToLocatorRecord);
+        }
+
+        replyBuffer.clear();
+        return replyBuffer;
+    }
+       
+       private interface Length {
+        int HEADER_SIZE = 16;
+        int RES = 2;
+    }
+       
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRegisterSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRegisterSerializer.java
new file mode 100644 (file)
index 0000000..138031a
--- /dev/null
@@ -0,0 +1,60 @@
+package org.opendaylight.lispflowmapping.southbound.serializer;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.southbound.util.ByteUtil;
+import org.opendaylight.lispflowmapping.type.lisp.MapRegister;
+
+
+/**
+ * This class deals with deserializing map register from udp to the java object.
+ */
+public class MapRegisterSerializer {
+       
+       private static final MapRegisterSerializer INSTANCE = new MapRegisterSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private MapRegisterSerializer() {
+       }
+
+       public static MapRegisterSerializer getInstance() {
+               return INSTANCE;
+       }
+
+       public MapRegister deserialize(ByteBuffer registerBuffer) {
+        try {
+            MapRegister mapRegister = new MapRegister();
+
+            mapRegister.setProxyMapReply(ByteUtil.extractBit(registerBuffer.get(), Flags.PROXY));
+
+            registerBuffer.position(registerBuffer.position() + Length.RES);
+            mapRegister.setWantMapNotify(ByteUtil.extractBit(registerBuffer.get(), Flags.WANT_MAP_REPLY));
+            byte recordCount = registerBuffer.get();
+            mapRegister.setNonce(registerBuffer.getLong());
+            mapRegister.setKeyId(registerBuffer.getShort());
+
+            short authenticationLength = registerBuffer.getShort();
+            byte[] authenticationData = new byte[authenticationLength];
+            registerBuffer.get(authenticationData);
+            mapRegister.setAuthenticationData(authenticationData);
+
+            for (int i = 0; i < recordCount; i++) {
+                mapRegister.addEidToLocator(EidToLocatorRecordSerializer.getInstance().deserialize(registerBuffer));
+            }
+            return mapRegister;
+        } catch (RuntimeException re) {
+            throw new LispMalformedPacketException("Couldn't deserialize Map-Register (len=" + registerBuffer.capacity() + ")", re);
+        }
+
+    }
+       
+       private interface Flags {
+        byte PROXY = 0x08;
+        byte WANT_MAP_REPLY = 0x01;
+    }
+
+       private interface Length {
+        int RES = 1;
+    }
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapReplySerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapReplySerializer.java
new file mode 100644 (file)
index 0000000..dc92bc5
--- /dev/null
@@ -0,0 +1,55 @@
+package org.opendaylight.lispflowmapping.southbound.serializer;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.MapReply;
+
+
+/**
+ * This class deals with serializing map reply from the java object to udp.
+ */
+public class MapReplySerializer {
+       
+       private static final MapReplySerializer INSTANCE = new MapReplySerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private MapReplySerializer() {
+       }
+
+       public static MapReplySerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       public ByteBuffer serialize(MapReply mapReply) {
+        int size = Length.HEADER_SIZE;
+        for (EidToLocatorRecord eidToLocatorRecord : mapReply.getEidToLocatorRecords()) {
+            size += EidToLocatorRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord);
+        }
+
+        ByteBuffer replyBuffer = ByteBuffer.allocate(size);
+
+        replyBuffer.put((byte) ((LispMessageEnum.MapReply.getValue() << 4) | //
+                (mapReply.isProbe() ? Flags.PROBE : 0x00) | //
+                (mapReply.isEchoNonceEnabled() ? Flags.ECHO_NONCE_ENABLED : 0x00)));
+
+        replyBuffer.position(replyBuffer.position() + Length.RES);
+        replyBuffer.put((byte) mapReply.getEidToLocatorRecords().size());
+        replyBuffer.putLong(mapReply.getNonce());
+        for (EidToLocatorRecord eidToLocatorRecord : mapReply.getEidToLocatorRecords()) {
+               EidToLocatorRecordSerializer.getInstance().serialize(replyBuffer, eidToLocatorRecord);
+        }
+        return replyBuffer;
+    }
+       
+       private interface Length {
+        int RES = 2;
+        int HEADER_SIZE = 12;
+    }
+
+    private interface Flags {
+        int PROBE = 0x08;
+        int ECHO_NONCE_ENABLED = 0x04;
+    }
+       
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRequestSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRequestSerializer.java
new file mode 100644 (file)
index 0000000..c59fe89
--- /dev/null
@@ -0,0 +1,69 @@
+package org.opendaylight.lispflowmapping.southbound.serializer;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.southbound.serializer.address.LispAddressSerializer;
+import org.opendaylight.lispflowmapping.southbound.util.ByteUtil;
+import org.opendaylight.lispflowmapping.type.lisp.MapRequest;
+
+
+/**
+ * This class deals with deserializing map request from udp to the java object.
+ */
+public class MapRequestSerializer {
+       
+       private static final MapRequestSerializer INSTANCE = new MapRequestSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private MapRequestSerializer() {
+       }
+
+       public static MapRequestSerializer getInstance() {
+               return INSTANCE;
+       }
+
+       public MapRequest deserialize(ByteBuffer requestBuffer) {
+        try {
+            MapRequest mapRequest = new MapRequest();
+
+            byte typeAndFlags = requestBuffer.get();
+            mapRequest.setAuthoritative(ByteUtil.extractBit(typeAndFlags, Flags.AUTHORITATIVE));
+            mapRequest.setMapDataPresent(ByteUtil.extractBit(typeAndFlags, Flags.MAP_DATA_PRESENT));
+            mapRequest.setProbe(ByteUtil.extractBit(typeAndFlags, Flags.PROBE));
+            mapRequest.setSmr(ByteUtil.extractBit(typeAndFlags, Flags.SMR));
+
+            byte moreFlags = requestBuffer.get();
+            mapRequest.setPitr(ByteUtil.extractBit(moreFlags, Flags.PITR));
+            mapRequest.setSmrInvoked(ByteUtil.extractBit(moreFlags, Flags.SMR_INVOKED));
+
+            int itrCount = requestBuffer.get() + 1;
+            int recordCount = requestBuffer.get();
+            mapRequest.setNonce(requestBuffer.getLong());
+            mapRequest.setSourceEid(LispAddressSerializer.getInstance().deserialize(requestBuffer));
+
+            for (int i = 0; i < itrCount; i++) {
+                mapRequest.addItrRloc(LispAddressSerializer.getInstance().deserialize(requestBuffer));
+            }
+
+            for (int i = 0; i < recordCount; i++) {
+                mapRequest.addEidRecord(EidRecordSerializer.getInstance().deserialize(requestBuffer));
+            }
+            return mapRequest;
+        } catch (RuntimeException re) {
+            throw new LispMalformedPacketException("Couldn't deserialize Map-Request (len=" + requestBuffer.capacity() + ")", re);
+        }
+    }
+       
+       public interface Flags {
+        byte AUTHORITATIVE = 0x08;
+        byte MAP_DATA_PRESENT = 0x04;
+        byte PROBE = 0x02;
+        byte SMR = 0x01;
+
+        byte PITR = (byte) 0x80;
+        byte SMR_INVOKED = 0x40;
+    }
+       
+       
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispASAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispASAddressSerializer.java
new file mode 100644 (file)
index 0000000..e87ac6d
--- /dev/null
@@ -0,0 +1,36 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.address.LispASAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+
+public class LispASAddressSerializer extends LispAddressSerializer {
+
+       private static final LispASAddressSerializer INSTANCE = new LispASAddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LispASAddressSerializer() {
+       }
+
+       public static LispASAddressSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       public static LispASAddress valueOf(ByteBuffer buffer) {
+        throw new RuntimeException("Not implemented");
+    }
+
+       @Override
+       public int getAddressSize(LispAddress lispAddress) {
+               throw new RuntimeException("Not implemented");
+
+       }
+
+       @Override
+       public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+               throw new RuntimeException("Not implemented");
+       }
+
+
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispAddressSerializer.java
new file mode 100644 (file)
index 0000000..5762283
--- /dev/null
@@ -0,0 +1,51 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+
+public class LispAddressSerializer {
+       
+       private static final LispAddressSerializer INSTANCE = new LispAddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       protected LispAddressSerializer() {
+       }
+
+       public static LispAddressSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       
+       public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+               throw new RuntimeException("Not implemented");
+       }
+       
+    protected void internalSerialize(ByteBuffer buffer, LispAddress lispAddress) {
+        buffer.putShort(lispAddress.getAfi().getIanaCode());
+    }
+    
+    public int getAddressSize(LispAddress lispAddress) {
+        return Length.AFI;
+    }
+
+    public LispAddress deserialize(ByteBuffer buffer) {
+        short afi = buffer.getShort();
+        AddressFamilyNumberEnum afiType = AddressFamilyNumberEnum.valueOf(afi);
+        LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(afiType);
+        if (serializer == null) {
+            throw new LispMalformedPacketException("Unknown AFI type=" + afiType);
+        }
+        try {
+               return serializer.deserialize(buffer);
+        } catch (Exception e) {
+                throw new LispMalformedPacketException(e.getMessage());
+        }
+    }
+    
+    private interface Length {
+        int AFI = 2;
+    }
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispAddressSerializerFactory.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispAddressSerializerFactory.java
new file mode 100644 (file)
index 0000000..414d8c6
--- /dev/null
@@ -0,0 +1,43 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
+import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
+
+public class LispAddressSerializerFactory {
+       
+       private static Map<AddressFamilyNumberEnum, LispAddressSerializer> afiToSearializerMap;
+       private static Map<LispCanonicalAddressFormatEnum, LispLCAFAddressSerializer> lcafToSearializerMap;
+       
+       private static void initializeMap() {
+               afiToSearializerMap = new HashMap<AddressFamilyNumberEnum, LispAddressSerializer>();
+               afiToSearializerMap.put(AddressFamilyNumberEnum.AS, LispASAddressSerializer.getInstance());
+               afiToSearializerMap.put(AddressFamilyNumberEnum.IP, LispIpv4AddressSerializer.getInstance());
+               afiToSearializerMap.put(AddressFamilyNumberEnum.IP6, LispIpv6AddressSerializer.getInstance());
+               afiToSearializerMap.put(AddressFamilyNumberEnum.LCAF, LispLCAFAddressSerializer.getInstance());
+               afiToSearializerMap.put(AddressFamilyNumberEnum.MAC, LispMACAddressSerializer.getInstance());
+               afiToSearializerMap.put(AddressFamilyNumberEnum.RESERVED, LispNoAddressSerializer.getInstance());
+               
+               lcafToSearializerMap = new HashMap<LispCanonicalAddressFormatEnum, LispLCAFAddressSerializer>();
+               lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.LIST, LispListLCAFAddressSerializer.getInstance());
+               lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.SEGMENT, LispSegmentLCAFAddressSerializer.getInstance());
+       }
+       
+       public static LispAddressSerializer getSerializer(AddressFamilyNumberEnum afi) {
+               if (afiToSearializerMap == null) {
+                       initializeMap();
+               }
+               return afiToSearializerMap.get(afi);
+       }
+       
+       public static LispLCAFAddressSerializer getLCAFSerializer(LispCanonicalAddressFormatEnum lcaf) {
+               if (lcafToSearializerMap == null) {
+                       initializeMap();
+               }
+               return lcafToSearializerMap.get(lcaf);
+       }
+       
+
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIPAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIPAddressSerializer.java
new file mode 100644 (file)
index 0000000..d98a5c6
--- /dev/null
@@ -0,0 +1,17 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIPAddress;
+
+public abstract class LispIPAddressSerializer extends LispAddressSerializer{
+
+
+    @Override
+    public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+       LispIPAddress lispIpvAddress = (LispIPAddress)lispAddress;
+        super.internalSerialize(buffer, lispAddress);
+        buffer.put(lispIpvAddress.getAddress().getAddress());
+    }
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIpv4AddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIpv4AddressSerializer.java
new file mode 100644 (file)
index 0000000..ac88889
--- /dev/null
@@ -0,0 +1,45 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
+
+
+public class LispIpv4AddressSerializer extends LispIPAddressSerializer{
+       
+       private static final LispIpv4AddressSerializer INSTANCE = new LispIpv4AddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LispIpv4AddressSerializer() {
+       }
+
+       public static LispIpv4AddressSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       
+       @Override
+    public int getAddressSize(LispAddress lispAddress) {
+        return super.getAddressSize(lispAddress) + 4;
+    }
+       
+       @Override
+       public LispIpv4Address deserialize(ByteBuffer buffer) {
+        byte[] ipBuffer = new byte[4];
+        InetAddress address = null;
+        buffer.get(ipBuffer);
+        try {
+            address = InetAddress.getByAddress(ipBuffer);
+        } catch (UnknownHostException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return new LispIpv4Address(address);
+    }
+
+
+
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIpv6AddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispIpv6AddressSerializer.java
new file mode 100644 (file)
index 0000000..6efd574
--- /dev/null
@@ -0,0 +1,43 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
+
+
+public class LispIpv6AddressSerializer extends LispIPAddressSerializer{
+
+       
+       private static final LispIpv6AddressSerializer INSTANCE = new LispIpv6AddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LispIpv6AddressSerializer() {
+       }
+
+       public static LispIpv6AddressSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       @Override
+    public int getAddressSize(LispAddress lispAddress) {
+        return super.getAddressSize(lispAddress) + 16;
+    }
+       
+       @Override
+       public LispIpv6Address deserialize(ByteBuffer buffer) {
+        byte[] ipBuffer = new byte[16];
+        InetAddress address = null;
+        buffer.get(ipBuffer);
+        try {
+            address = InetAddress.getByAddress(ipBuffer);
+        } catch (UnknownHostException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return new LispIpv6Address(address);
+    }
+
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispLCAFAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispLCAFAddressSerializer.java
new file mode 100644 (file)
index 0000000..bd57106
--- /dev/null
@@ -0,0 +1,71 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispLCAFAddress;
+
+public class LispLCAFAddressSerializer extends LispAddressSerializer{
+       
+       private static final LispLCAFAddressSerializer INSTANCE = new LispLCAFAddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       protected LispLCAFAddressSerializer() {
+       }
+
+       public static LispLCAFAddressSerializer getInstance() {
+               return INSTANCE;
+       }
+
+       @Override
+       public LispLCAFAddress deserialize(ByteBuffer buffer) {
+        buffer.position(buffer.position() + Length.RES + Length.FLAGS);
+        byte lispCode = buffer.get();
+        LispCanonicalAddressFormatEnum lcafType = LispCanonicalAddressFormatEnum.valueOf(lispCode);
+        byte res2 = buffer.get();
+        short length = buffer.getShort();
+
+        LispLCAFAddressSerializer serializer = LispAddressSerializerFactory.getLCAFSerializer(lcafType);
+        if (serializer == null) {
+            throw new LispMalformedPacketException("Unknown LispLCAFAddress type=" + lispCode);
+        }
+        return serializer.innerDeserialize(buffer, res2, length);
+    }
+       
+       public LispLCAFAddress innerDeserialize(ByteBuffer buffer, byte res2, short length) {
+               throw new RuntimeException("Not implemented");
+       }
+
+    @Override
+    public int getAddressSize(LispAddress lispAddress) {
+        return super.getAddressSize(lispAddress) + Length.LCAF_HEADER + getLcafLength(lispAddress);
+    }
+    
+    public short getLcafLength(LispAddress lispAddress) {
+       throw new RuntimeException("Not implemented");
+    }
+    
+    @Override
+    public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+       LispLCAFAddressSerializer lcafSerializer = LispAddressSerializerFactory.getLCAFSerializer(((LispLCAFAddress)lispAddress).getType());
+        lcafSerializer.serialize(buffer, lispAddress);
+    }
+
+    @Override
+    protected void internalSerialize(ByteBuffer buffer, LispAddress lispAddress) {
+        super.internalSerialize(buffer, lispAddress);
+        LispLCAFAddress lispLCAFAddress = (LispLCAFAddress)lispAddress;
+        buffer.putShort((short) 0); // RES + Flags.
+        buffer.put(lispLCAFAddress.getType().getLispCode());
+        buffer.put(lispLCAFAddress.getRes2());
+        buffer.putShort(getLcafLength(lispAddress));
+    }
+    private interface Length {
+        int RES = 1;
+        int FLAGS = 1;
+
+        int LCAF_HEADER = 6;
+    }
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispListLCAFAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispListLCAFAddressSerializer.java
new file mode 100644 (file)
index 0000000..25b4531
--- /dev/null
@@ -0,0 +1,51 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispListLCAFAddress;
+
+public class LispListLCAFAddressSerializer extends LispLCAFAddressSerializer{
+       
+       private static final LispListLCAFAddressSerializer INSTANCE = new LispListLCAFAddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LispListLCAFAddressSerializer() {
+       }
+
+       public static LispListLCAFAddressSerializer getInstance() {
+               return INSTANCE;
+       }
+
+
+       @Override
+    public short getLcafLength(LispAddress lispAddress) {
+        short totalSize = 0;
+        for (LispAddress address : ((LispListLCAFAddress)lispAddress).getAddresses()) {
+            totalSize += LispAddressSerializerFactory.getSerializer(address.getAfi()).getAddressSize(lispAddress);
+        }
+        return totalSize;
+    }
+
+       @Override
+    public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+        super.internalSerialize(buffer, lispAddress);
+        for (LispAddress address : ((LispListLCAFAddress)lispAddress).getAddresses()) {
+               LispAddressSerializerFactory.getSerializer(address.getAfi()).serialize(buffer, address);
+        }
+    }
+       
+       @Override
+       public LispListLCAFAddress innerDeserialize(ByteBuffer buffer, byte res2, short length) {
+        List<LispAddress> addresses = new ArrayList<LispAddress>();
+        while (length > 0) {
+            LispAddress address = LispAddressSerializer.getInstance().deserialize(buffer);
+            length -= LispAddressSerializerFactory.getSerializer(address.getAfi()).getAddressSize(address);
+            addresses.add(address);
+        }
+        return new LispListLCAFAddress(res2, addresses);
+    }
+       
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispMACAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispMACAddressSerializer.java
new file mode 100644 (file)
index 0000000..36c279a
--- /dev/null
@@ -0,0 +1,41 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispMACAddress;
+
+public class LispMACAddressSerializer extends LispAddressSerializer{
+       
+       private static final LispMACAddressSerializer INSTANCE = new LispMACAddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LispMACAddressSerializer() {
+       }
+
+       public static LispMACAddressSerializer getInstance() {
+               return INSTANCE;
+       }
+
+
+       @Override
+    public int getAddressSize(LispAddress lispAddress) {
+               return super.getAddressSize(lispAddress) + 6;
+
+    }
+       
+       @Override
+       public LispMACAddress deserialize(ByteBuffer buffer) {
+               byte[] macBuffer = new byte[6];
+               buffer.get(macBuffer);
+        return new LispMACAddress(macBuffer);
+    }
+
+    @Override
+    public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+       LispMACAddress lispMACAddress = (LispMACAddress)lispAddress;
+        super.internalSerialize(buffer, lispMACAddress);
+        buffer.put(lispMACAddress.getMAC());
+    }
+
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispNoAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispNoAddressSerializer.java
new file mode 100644 (file)
index 0000000..e525840
--- /dev/null
@@ -0,0 +1,34 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
+
+public class LispNoAddressSerializer extends LispAddressSerializer{
+
+       private static final LispNoAddressSerializer INSTANCE = new LispNoAddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LispNoAddressSerializer() {
+       }
+
+       public static LispNoAddressSerializer getInstance() {
+               return INSTANCE;
+       }
+       
+       @Override
+       public LispNoAddress deserialize(ByteBuffer buffer) {
+        return new LispNoAddress();
+    }
+
+    @Override
+    public int getAddressSize(LispAddress lispAddress) {
+        return super.getAddressSize(lispAddress);
+    }
+
+    @Override
+    public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+    }
+
+}
diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispSegmentLCAFAddressSerializer.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/serializer/address/LispSegmentLCAFAddressSerializer.java
new file mode 100644 (file)
index 0000000..0dba4cd
--- /dev/null
@@ -0,0 +1,50 @@
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
+
+import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispSegmentLCAFAddress;
+
+public class LispSegmentLCAFAddressSerializer extends LispLCAFAddressSerializer{
+       
+       private static final LispSegmentLCAFAddressSerializer INSTANCE = new LispSegmentLCAFAddressSerializer();
+
+       // Private constructor prevents instantiation from other classes
+       private LispSegmentLCAFAddressSerializer() {
+       }
+
+       public static LispSegmentLCAFAddressSerializer getInstance() {
+               return INSTANCE;
+       }
+
+
+       @Override
+    public short getLcafLength(LispAddress lispAddress) {
+               LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(((LispSegmentLCAFAddress)lispAddress).getAddress().getAfi());
+        return (short) (Length.INSTANCE + serializer.getAddressSize(lispAddress));
+    }
+
+       @Override
+    public void serialize(ByteBuffer buffer, LispAddress lispAddress) {
+        super.internalSerialize(buffer, lispAddress);
+        buffer.putInt(((LispSegmentLCAFAddress)lispAddress).getInstanceId());
+        LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(((LispSegmentLCAFAddress)lispAddress).getAddress().getAfi());
+        if (serializer == null) {
+            throw new LispMalformedPacketException("Unknown AFI type=" + ((LispSegmentLCAFAddress)lispAddress).getAddress().getAfi());
+        }
+        serializer.serialize(buffer, ((LispSegmentLCAFAddress)lispAddress).getAddress());
+    }
+       
+       @Override
+       public LispSegmentLCAFAddress innerDeserialize(ByteBuffer buffer, byte res2, short length) {
+        int instanceId = buffer.getInt();
+        LispAddress address = LispAddressSerializer.getInstance().deserialize(buffer);
+
+        return new LispSegmentLCAFAddress(res2, instanceId, address);
+    }
+
+       private interface Length {
+        int INSTANCE = 4;
+    }
+}
similarity index 96%
rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/util/ByteUtil.java
rename to mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/util/ByteUtil.java
index 75b2ba1e9618f5df022be0e8f7f45185bab28573..bdbf27643d26614ff7dc6985b55f14d6c49a964b 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.util;
+package org.opendaylight.lispflowmapping.southbound.util;
 
 import java.nio.ByteBuffer;
 
@@ -6,12 +6,11 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.implementation.lisp;
+package org.opendaylight.lispflowmapping.southbound.lisp;
 
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
-import static org.opendaylight.lispflowmapping.util.ByteUtil.getShort;
 
 import java.net.DatagramPacket;
 import java.util.Arrays;
@@ -24,14 +23,16 @@ import org.jmock.api.Invocation;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
-import org.opendaylight.lispflowmapping.lisp.IMapResolver;
-import org.opendaylight.lispflowmapping.lisp.IMapServer;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolver;
+import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServer;
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.southbound.serializer.LispMessage;
+import org.opendaylight.lispflowmapping.southbound.serializer.LispMessageEnum;
+import org.opendaylight.lispflowmapping.southbound.util.ByteUtil;
+import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
 import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
-import org.opendaylight.lispflowmapping.type.lisp.LispMessage;
-import org.opendaylight.lispflowmapping.type.lisp.LispMessageEnum;
 import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
 import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
 import org.opendaylight.lispflowmapping.type.lisp.MapRegister;
@@ -40,12 +41,10 @@ import org.opendaylight.lispflowmapping.type.lisp.MapRequest;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
-import org.opendaylight.lispflowmapping.util.ByteUtil;
-import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 
-public class LispServiceTest extends BaseTestCase {
+public class LispSouthboundServiceTest extends BaseTestCase {
 
-    private LispService testedLispService;
+    private LispSouthboundService testedLispService;
     private IMapResolver mapResolver;
     private IMapServer mapServer;
     private byte[] mapRequestPacket;
@@ -81,7 +80,7 @@ public class LispServiceTest extends BaseTestCase {
         super.before();
         mapResolver = context.mock(IMapResolver.class);
         mapServer = context.mock(IMapServer.class);
-        testedLispService = new LispService(mapResolver, mapServer);
+        testedLispService = new LispSouthboundService(mapResolver, mapServer);
 
         mapRegisterSaver = new ValueSaverAction<MapRegister>();
         mapRequestSaver = new ValueSaverAction<MapRequest>();
@@ -467,7 +466,7 @@ public class LispServiceTest extends BaseTestCase {
         assertEquals(expectedRecordCount, result[MapReplyIpv4SingleLocatorPos.RECORD_COUNT]);
 
         assertEquals(eidToLocator.getMaskLength(), result[MapReplyIpv4SingleLocatorPos.EID_MASK_LEN]);
-        assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), getShort(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
+        assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
         assertEquals(0x0a0014c8, ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.EID_PREFIX));
     }
 
@@ -486,7 +485,7 @@ public class LispServiceTest extends BaseTestCase {
         assertEquals(expectedRecordCount, result[MapReplyIpv4SingleLocatorPos.RECORD_COUNT]);
 
         assertEquals(eidToLocator.getMaskLength(), result[MapReplyIpv4SingleLocatorPos.EID_MASK_LEN]);
-        assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), getShort(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
+        assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.AFI_TYPE));
         byte[] expectedIpv6 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
 
         ArrayAssert.assertEquals(expectedIpv6, Arrays.copyOfRange(result, 24, 40));
@@ -541,7 +540,7 @@ public class LispServiceTest extends BaseTestCase {
         byte expectedLocCount = 1;
         assertEquals(expectedLocCount, result[MapReplyIpv4SingleLocatorPos.LOCATOR_COUNT]);
 
-        assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), getShort(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
+        assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
 
         assertEquals(0x04030201, ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.LOCATOR));
         assertEquals(0x01, result[MapReplyIpv4SingleLocatorPos.LOCATOR_RBIT] & 0x01);
@@ -558,11 +557,11 @@ public class LispServiceTest extends BaseTestCase {
 
         assertEquals(2, result[MapReplyIpv4SingleLocatorPos.LOCATOR_COUNT]);
 
-        assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), getShort(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
+        assertEquals(AddressFamilyNumberEnum.IP.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SingleLocatorPos.LOC_AFI));
         assertEquals(0x04030201, ByteUtil.getInt(result, MapReplyIpv4SingleLocatorPos.LOCATOR));
         assertEquals(0x01, result[MapReplyIpv4SingleLocatorPos.LOCATOR_RBIT] & 0x01);
 
-        assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), getShort(result, MapReplyIpv4SecondLocatorPos.LOC_AFI));
+        assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), ByteUtil.getShort(result, MapReplyIpv4SecondLocatorPos.LOC_AFI));
 
         byte[] expectedIpv6Rloc = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
         ArrayAssert.assertEquals(expectedIpv6Rloc, Arrays.copyOfRange(result, MapReplyIpv4SecondLocatorPos.LOCATOR,
similarity index 88%
rename from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/lisp/MapNotifyTest.java
rename to mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/MapNotifySerializationTest.java
index 0b690565ffa436026e55c2e69220906493831c01..9cda0405f91b42de4738a3fc44a962c6a074b2bd 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.lisp;
+package org.opendaylight.lispflowmapping.southbound.serializer;
 
 import static junit.framework.Assert.assertEquals;
 
@@ -21,7 +21,7 @@ import org.opendaylight.lispflowmapping.type.lisp.MapNotify;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
 
-public class MapNotifyTest extends BaseTestCase {
+public class MapNotifySerializationTest extends BaseTestCase {
 
     @Test
     public void serialize__Fields() throws Exception {
@@ -34,7 +34,7 @@ public class MapNotifyTest extends BaseTestCase {
         byte[] authenticationData = new byte[] { 0x03, 0x01, 0x04, 0x01, 0x05, 0x09, 0x02, 0x06 };
         mn.setAuthenticationData(authenticationData);
 
-        ByteBuffer bb = mn.serialize();
+        ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mn);
         assertHexEquals((byte) 0x40, bb.get()); // Type + MSByte of reserved
         assertEquals(0, bb.getShort()); // Rest of reserved
         assertEquals(2, bb.get()); // Record Count
@@ -60,21 +60,21 @@ public class MapNotifyTest extends BaseTestCase {
         MapNotify mn = new MapNotify();
         mn.addEidToLocator(new EidToLocatorRecord().setPrefix(new LispIpv4Address(1)).setRecordTtl(55));
 
-        ByteBuffer bb = mn.serialize();
+        ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mn);
         bb.position(bb.position() + 14); // jump to AuthenticationDataLength
         assertEquals(0, bb.getShort());
         assertEquals(55, bb.getInt());
 
         mn.setAuthenticationData(null);
 
-        bb = mn.serialize();
+        bb = MapNotifySerializer.getInstance().serialize(mn);
         bb.position(bb.position() + 14); // jump to AuthenticationDataLength
         assertEquals(0, bb.getShort());
         assertEquals(55, bb.getInt());
 
         mn.setAuthenticationData(new byte[0]);
 
-        bb = mn.serialize();
+        bb = MapNotifySerializer.getInstance().serialize(mn);
         bb.position(bb.position() + 14); // jump to AuthenticationDataLength
         assertEquals(0, bb.getShort());
         assertEquals(55, bb.getInt());
@@ -87,7 +87,7 @@ public class MapNotifyTest extends BaseTestCase {
         mn.addEidToLocator(new EidToLocatorRecord().setPrefix(null));
         mn.addEidToLocator(new EidToLocatorRecord().setPrefix(new LispNoAddress()));
 
-        ByteBuffer bb = mn.serialize();
+        ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mn);
         bb.position(bb.position() + 26); // jump to first record prefix AFI
         assertEquals(0, bb.getShort());
 
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.type.lisp;
+package org.opendaylight.lispflowmapping.southbound.serializer;
 
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
@@ -14,10 +14,14 @@ import static junit.framework.Assert.assertTrue;
 import junitx.framework.ArrayAssert;
 
 import org.junit.Test;
-import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
+import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.MapRegister;
+import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 
-public class MapRegisterTest extends BaseTestCase {
+public class MapRegisterSerializationTest extends BaseTestCase {
 
     @Test
     public void deserialize__AllFields() throws Exception {
@@ -32,7 +36,7 @@ public class MapRegisterTest extends BaseTestCase {
         // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
         // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
         //
-        MapRegister mr = MapRegister.deserialize(hexToByteBuffer("38 00 01 01 FF BB " //
+        MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB " //
                 + "00 00 00 00 00 00 00 01 00 14 e8 f5 0b c5 c5 f2 " //
                 + "b0 21 27 a8 21 41 04 f3 46 5a a5 68 89 ec 00 00 " //
                 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
@@ -59,7 +63,7 @@ public class MapRegisterTest extends BaseTestCase {
         // Local RLOCs: 192.168.136.10 -- 192.168.136.11 -- 192.168.136.12 --
         // 192.168.136.13
         //
-        MapRegister mr = MapRegister.deserialize(hexToByteBuffer("38 00 01 " //
+        MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 " //
                 + "04 " // Record count
                 + "FF BB 00 00 00 00 00 00 00 01 00 14 e8 f5 0b c5 " //
                 + "c5 f2 b0 21 27 a8 21 41 04 f3 46 5a a5 68 89 ec " //
@@ -86,7 +90,7 @@ public class MapRegisterTest extends BaseTestCase {
 
     @Test
     public void deserialize__Locators() throws Exception {
-        MapRegister mr = MapRegister.deserialize(hexToByteBuffer("38 00 01 01 " //
+        MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 " //
                 + "FF BB 00 00 00 00 00 00 00 01 00 14 e8 f5 0b c5 " //
                 + "c5 f2 b0 21 27 a8 21 41 04 f3 46 5a a5 68 89 ec " //
                 + "00 00 00 0a " //
@@ -153,7 +157,7 @@ public class MapRegisterTest extends BaseTestCase {
         // Local RLOCs: 192.168.136.10 -- 192.168.136.11 -- 192.168.136.12 --
         // 192.168.136.13
         //
-        MapRegister mr = MapRegister.deserialize(hexToByteBuffer("38 00 01 " //
+        MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 " //
                 + "04 " // Record count
                 + "FF BB 00 00 00 00 00 00 00 01 00 14 e8 f5 0b c5 " //
                 + "c5 f2 b0 21 27 a8 21 41 04 f3 46 5a a5 68 89 ec " //
@@ -202,7 +206,7 @@ public class MapRegisterTest extends BaseTestCase {
 
     @Test
     public void deserialize__IllegalAction() throws Exception {
-        MapRegister mr = MapRegister.deserialize(hexToByteBuffer("38 00 01 01 FF BB " //
+        MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB " //
                 + "00 00 00 00 00 00 00 01 00 14 e8 f5 0b c5 c5 f2 " //
                 + "b0 21 27 a8 21 41 04 f3 46 5a a5 68 89 ec 00 00 " //
                 + "00 0a 01 20 F0 00 00 00 00 01 99 10 fe 01 01 64 " //
similarity index 87%
rename from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/MapReplyTest.java
rename to mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/MapReplySerializationTest.java
index 3034a6763479abd3c0dcf3a927ef60be9822a1ef..ab7ffa2b1d7a6241bcb971d7576cca97b9f2d8f5 100644 (file)
@@ -6,7 +6,7 @@
  * and is availabl at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.type.lisp;
+package org.opendaylight.lispflowmapping.southbound.serializer;
 
 import static org.junit.Assert.assertEquals;
 
@@ -16,11 +16,15 @@ import junitx.framework.ArrayAssert;
 
 import org.junit.Ignore;
 import org.junit.Test;
+import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
+import org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
+import org.opendaylight.lispflowmapping.type.lisp.MapReply;
+import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
-import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 
-public class MapReplyTest extends BaseTestCase {
+public class MapReplySerializationTest extends BaseTestCase {
 
     @Test
     @Ignore
@@ -37,14 +41,14 @@ public class MapReplyTest extends BaseTestCase {
         mr.setProbe(true);
         mr.setEchoNonceEnabled(false);
 
-        ByteBuffer packet = mr.serialize();
+        ByteBuffer packet = MapReplySerializer.getInstance().serialize(mr);
         byte firstByte = packet.get(0);
         assertHexEquals((byte) 0x28, firstByte);
 
         mr.setProbe(false);
         mr.setEchoNonceEnabled(true);
 
-        packet = mr.serialize();
+        packet = MapReplySerializer.getInstance().serialize(mr);
         firstByte = packet.get(0);
         assertHexEquals((byte) 0x24, firstByte);
     }
@@ -55,7 +59,7 @@ public class MapReplyTest extends BaseTestCase {
         mr.addEidToLocator(new EidToLocatorRecord().setPrefix(new LispIpv6Address("::8")));
         mr.addEidToLocator(new EidToLocatorRecord().setPrefix(new LispIpv4Address(0x08020405)));
 
-        ByteBuffer packet = mr.serialize();
+        ByteBuffer packet = MapReplySerializer.getInstance().serialize(mr);
         assertEquals(2, packet.get(3));
 
         packet.position(24); /* EID in first record */
@@ -75,7 +79,7 @@ public class MapReplyTest extends BaseTestCase {
         eidToLocator.setPrefix(new LispIpv4Address(1));
         mr.addEidToLocator(eidToLocator);
 
-        ByteBuffer packet = mr.serialize();
+        ByteBuffer packet = MapReplySerializer.getInstance().serialize(mr);
 
         packet.position(18);
         assertHexEquals((byte) 0x00, packet.get()); // MapReplyAction.NoAction
@@ -89,7 +93,7 @@ public class MapReplyTest extends BaseTestCase {
         eidToLocator.setAction(null);
         mr.addEidToLocator(eidToLocator);
 
-        ByteBuffer packet = mr.serialize();
+        ByteBuffer packet = MapReplySerializer.getInstance().serialize(mr);
 
         packet.position(18);
         assertHexEquals((byte) 0x00, packet.get()); // MapReplyAction.NoAction
@@ -115,7 +119,7 @@ public class MapReplyTest extends BaseTestCase {
         eidToLocator2.setMapVersion((short) 29);
         mr.addEidToLocator(eidToLocator2);
 
-        ByteBuffer packet = mr.serialize();
+        ByteBuffer packet = MapReplySerializer.getInstance().serialize(mr);
 
         packet.position(12); /* First record */
         assertEquals(7, packet.getInt());
@@ -163,7 +167,7 @@ public class MapReplyTest extends BaseTestCase {
 
         mr.addEidToLocator(eidToLocator);
 
-        ByteBuffer packet = mr.serialize();
+        ByteBuffer packet = MapReplySerializer.getInstance().serialize(mr);
 
         packet.position(12 + 16); /* First locator record */
         assertHexEquals((byte) 0xF3, packet.get());
similarity index 80%
rename from mappingservice/api/src/test/java/org/opendaylight/lispflowmapping/type/lisp/MapRequestTest.java
rename to mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/serializer/MapRequestSerializationTest.java
index d61fa1e4fd213fec0b3f3784a1163badfccaaa8e..849a9cbb5d85803695eec0738811624ea7091ccc 100644 (file)
@@ -6,20 +6,22 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.type.lisp;
+package org.opendaylight.lispflowmapping.southbound.serializer;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
+import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
+import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
+import org.opendaylight.lispflowmapping.type.lisp.MapRequest;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
-import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 
-public class MapRequestTest extends BaseTestCase {
+public class MapRequestSerializationTest extends BaseTestCase {
 
     @Test
     public void prefix__NoPrefix() throws Exception {
@@ -33,7 +35,7 @@ public class MapRequestTest extends BaseTestCase {
 
     @Test
     public void deserialize__FlagsInFirstByte() throws Exception {
-        MapRequest mr = MapRequest.deserialize(hexToByteBuffer("16 00 00 01 3d 8d " //
+        MapRequest mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("16 00 00 01 3d 8d " //
                 + "2a cd 39 c8 d6 08 00 00 00 01 c0 a8 88 0a 00 20 " //
                 + "00 01 01 02 03 04"));
         assertFalse(mr.isAuthoritative());
@@ -41,7 +43,7 @@ public class MapRequestTest extends BaseTestCase {
         assertTrue(mr.isProbe());
         assertFalse(mr.isSmr());
 
-        mr = MapRequest.deserialize(hexToByteBuffer("19 00 00 01 3d 8d " //
+        mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("19 00 00 01 3d 8d " //
                 + "2a cd 39 c8 d6 08 00 00 00 01 c0 a8 88 0a 00 20 " //
                 + "00 01 01 02 03 04"));
         assertTrue(mr.isAuthoritative());
@@ -49,7 +51,7 @@ public class MapRequestTest extends BaseTestCase {
         assertFalse(mr.isProbe());
         assertTrue(mr.isSmr());
 
-        mr = MapRequest.deserialize(hexToByteBuffer("1C 00 00 01 3d 8d " //
+        mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("1C 00 00 01 3d 8d " //
                 + "2a cd 39 c8 d6 08 00 00 00 01 c0 a8 88 0a 00 20 " //
                 + "00 01 01 02 03 04"));
         assertTrue(mr.isAuthoritative());
@@ -60,13 +62,13 @@ public class MapRequestTest extends BaseTestCase {
 
     @Test
     public void deserialize__FlagsInSecondByte() throws Exception {
-        MapRequest mr = MapRequest.deserialize(hexToByteBuffer("16 80 00 01 3d 8d " //
+        MapRequest mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("16 80 00 01 3d 8d " //
                 + "2a cd 39 c8 d6 08 00 00 00 01 c0 a8 88 0a 00 20 " //
                 + "00 01 01 02 03 04"));
         assertTrue(mr.isPitr());
         assertFalse(mr.isSmrInvoked());
 
-        mr = MapRequest.deserialize(hexToByteBuffer("19 40 00 01 3d 8d " //
+        mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("19 40 00 01 3d 8d " //
                 + "2a cd 39 c8 d6 08 00 00 00 01 c0 a8 88 0a 00 20 " //
                 + "00 01 01 02 03 04"));
         assertFalse(mr.isPitr());
@@ -75,7 +77,7 @@ public class MapRequestTest extends BaseTestCase {
 
     @Test
     public void deserialize__SingleEidRecord() throws Exception {
-        MapRequest mr = MapRequest.deserialize(hexToByteBuffer("16 80 00 " //
+        MapRequest mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("16 80 00 " //
                 + "01 " // single record
                 + "3d 8d 2a cd 39 c8 d6 08 00 00 00 01 c0 a8 88 0a " //
                 + "00 20 00 01 01 02 03 04"));
@@ -88,7 +90,7 @@ public class MapRequestTest extends BaseTestCase {
 
     @Test
     public void deserialize__MultipleEidRecord() throws Exception {
-        MapRequest mr = MapRequest.deserialize(hexToByteBuffer("16 80 00 " //
+        MapRequest mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("16 80 00 " //
                 + "02 " // 2 records
                 + "3d 8d 2a cd 39 c8 d6 08 00 00 00 01 c0 a8 88 0a " //
                 + "00 20 00 01 01 02 03 04 " //
@@ -107,7 +109,7 @@ public class MapRequestTest extends BaseTestCase {
 
     @Test
     public void deserialize__SingleItrRloc() throws Exception {
-        MapRequest mr = MapRequest.deserialize(hexToByteBuffer("10 00 " //
+        MapRequest mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("10 00 " //
                 + "00 " // This means 1 ITR-RLOC
                 + "01 3d 8d 2a cd 39 c8 d6 08 00 00 " //
                 + "00 01 c0 a8 88 0a " // IPv4 (ITR-RLOC #1 of 1)
@@ -119,7 +121,7 @@ public class MapRequestTest extends BaseTestCase {
 
     @Test
     public void deserialize__MultipleItrRlocs() throws Exception {
-        MapRequest mr = MapRequest.deserialize(hexToByteBuffer("10 00 " //
+        MapRequest mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("10 00 " //
                 + "02 " // This means 3 ITR - RLOCs
                 + "01 3d 8d 2a cd 39 c8 d6 08 00 00 " //
                 + "00 01 c0 a8 88 0a " // IPv4 (ITR-RLOC #1 of 3)
@@ -6,13 +6,14 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.lispflowmapping.type.lisp.address;
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
 
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
-import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
+import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
 
 public class LispIpv6AddressTest extends BaseTestCase {
 
@@ -21,7 +22,7 @@ public class LispIpv6AddressTest extends BaseTestCase {
         LispIpv6Address lispIpv6Address = new LispIpv6Address("::0");
 
         assertEquals(AddressFamilyNumberEnum.IP6, lispIpv6Address.getAfi());
-        assertEquals(18, lispIpv6Address.getAddressSize());
+        assertEquals(18, LispIpv6AddressSerializer.getInstance().getAddressSize(lispIpv6Address));
         assertEquals("0:0:0:0:0:0:0:0", lispIpv6Address.toString());
     }
 
@@ -30,7 +31,7 @@ public class LispIpv6AddressTest extends BaseTestCase {
         LispIpv6Address lispIpv6Address = new LispIpv6Address(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 });
 
         assertEquals(AddressFamilyNumberEnum.IP6, lispIpv6Address.getAfi());
-        assertEquals(18, lispIpv6Address.getAddressSize());
+        assertEquals(18, LispIpv6AddressSerializer.getInstance().getAddressSize(lispIpv6Address));
         assertEquals("0:0:0:0:0:0:0:1", lispIpv6Address.toString());
     }
 }
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.lispflowmapping.type.lisp.address;
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
 
 import static junit.framework.Assert.assertEquals;
 
@@ -18,16 +18,20 @@ import junitx.framework.ArrayAssert;
 import junitx.framework.Assert;
 
 import org.junit.Test;
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
-import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispListLCAFAddress;
 
 public class LispListLCAFAddressTest extends BaseTestCase {
 
     @Test
     public void deserialize__Simple() throws Exception {
-        LispAddress address = LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "01 00 00 18 " + //
                 "00 01 AA BB CC DD " + // IPv4
                 "00 02 11 22 33 44 11 22 33 44 11 22 33 44 11 22 33 44")); // IPv6
@@ -37,7 +41,7 @@ public class LispListLCAFAddressTest extends BaseTestCase {
 
         assertEquals(LispCanonicalAddressFormatEnum.LIST, lcafList.getType());
 
-        List<LispAddress> addressList = lcafList.getAddresses();
+        List<? extends LispAddress> addressList = lcafList.getAddresses();
         assertEquals(2, addressList.size());
 
         assertEquals(new LispIpv4Address(0xAABBCCDD), addressList.get(0));
@@ -46,7 +50,7 @@ public class LispListLCAFAddressTest extends BaseTestCase {
 
     @Test
     public void deserialize__NoAddresses() throws Exception {
-        LispAddress address = LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "01 00 00 00 "));
 
         assertEquals(AddressFamilyNumberEnum.LCAF, address.getAfi());
@@ -54,13 +58,13 @@ public class LispListLCAFAddressTest extends BaseTestCase {
 
         assertEquals(LispCanonicalAddressFormatEnum.LIST, lcafList.getType());
 
-        List<LispAddress> addressList = lcafList.getAddresses();
+        List<? extends LispAddress> addressList = lcafList.getAddresses();
         assertEquals(0, addressList.size());
     }
 
     @Test(expected = LispMalformedPacketException.class)
     public void deserialize__ShorterBuffer() throws Exception {
-        LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "01 00 00 18 " + //
                 "00 01 AA BB CC DD " + // IPv4
                 "00 02 11 22 33 44 11 22 33 44 11 22 33 44"));
@@ -68,7 +72,7 @@ public class LispListLCAFAddressTest extends BaseTestCase {
 
     @Test(expected = LispMalformedPacketException.class)
     public void deserialize__ShorterBuffer2() throws Exception {
-        LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "01 00 00 18 "));
     }
 
@@ -79,8 +83,8 @@ public class LispListLCAFAddressTest extends BaseTestCase {
         addressList.add(new LispIpv6Address("1222:3344:1122:3344:1122:3344:1122:3344"));
         LispListLCAFAddress address = new LispListLCAFAddress((byte) 0, addressList);
 
-        ByteBuffer buf = ByteBuffer.allocate(address.getAddressSize());
-        address.serialize(buf);
+        ByteBuffer buf = ByteBuffer.allocate(LispListLCAFAddressSerializer.getInstance().getAddressSize(address));
+        LispListLCAFAddressSerializer.getInstance().serialize(buf,address);
         ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + //
                 "01 00 00 18 " + //
                 "00 01 AA BB CC DD " + // IPv4
@@ -92,8 +96,8 @@ public class LispListLCAFAddressTest extends BaseTestCase {
     public void serialize__NoAddresses() throws Exception {
         LispListLCAFAddress address = new LispListLCAFAddress((byte) 0, new ArrayList<LispAddress>());
 
-        ByteBuffer buf = ByteBuffer.allocate(address.getAddressSize());
-        address.serialize(buf);
+        ByteBuffer buf = ByteBuffer.allocate(LispListLCAFAddressSerializer.getInstance().getAddressSize(address));
+        LispListLCAFAddressSerializer.getInstance().serialize(buf,address);
         ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + //
                 "01 00 00 00");
         ArrayAssert.assertEquals(expectedBuf.array(), buf.array());
@@ -5,26 +5,29 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.lispflowmapping.type.lisp.address;
+package org.opendaylight.lispflowmapping.southbound.serializer.address;
 
 import static junit.framework.Assert.assertEquals;
 
 import java.nio.ByteBuffer;
 
 import junitx.framework.ArrayAssert;
-import junitx.framework.Assert;
 
 import org.junit.Test;
+import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException;
+import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
-import org.opendaylight.lispflowmapping.type.exception.LispMalformedPacketException;
-import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
+import org.opendaylight.lispflowmapping.type.lisp.address.LispSegmentLCAFAddress;
 
 public class LispSegmentLCAFAddressTest extends BaseTestCase {
 
     @Test
     public void deserialize__Simple() throws Exception {
-        LispAddress address = LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "02 20 00 0A " + //
                 "AA BB CC DD " + // instance ID
                 "00 01 11 22 33 44")); // AFI=1, IP=0x11223344
@@ -40,14 +43,14 @@ public class LispSegmentLCAFAddressTest extends BaseTestCase {
 
     @Test(expected = LispMalformedPacketException.class)
     public void deserialize__ShorterBuffer() throws Exception {
-        LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "02 20 00 0A " + //
                 "AA BB "));
     }
 
     @Test(expected = LispMalformedPacketException.class)
     public void deserialize__UnknownLCAFType() throws Exception {
-        LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "AA 20 00 0A " + // Type AA is unknown
                 "AA BB CC DD " + // instance ID
                 "00 01 11 22 33 44")); // AFI=1, IP=0x11223344
@@ -55,7 +58,7 @@ public class LispSegmentLCAFAddressTest extends BaseTestCase {
 
     @Test
     public void deserialize__Ipv6() throws Exception {
-        LispSegmentLCAFAddress segAddress = (LispSegmentLCAFAddress) LispAddress.valueOf(hexToByteBuffer("40 03 00 00 " + //
+        LispSegmentLCAFAddress segAddress = (LispSegmentLCAFAddress) LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + //
                 "02 20 00 0A " + //
                 "AA BB CC DD " + // instance ID
                 "00 02 11 22 33 44 55 66 77 88 99 AA BB CC AA BB CC DD")); // AFI=2,
@@ -71,30 +74,12 @@ public class LispSegmentLCAFAddressTest extends BaseTestCase {
     @Test
     public void serialize__Simple() throws Exception {
         LispSegmentLCAFAddress address = new LispSegmentLCAFAddress((byte) 0x06, 0x01020304, new LispIpv4Address(0x11223344));
-        ByteBuffer buf = ByteBuffer.allocate(address.getAddressSize());
-        address.serialize(buf);
+        ByteBuffer buf = ByteBuffer.allocate(LispSegmentLCAFAddressSerializer.getInstance().getAddressSize(address));
+        LispSegmentLCAFAddressSerializer.getInstance().serialize(buf,address);
         ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + //
                 "02 06 00 0A " + //
                 "01 02 03 04 " + // instance ID
                 "00 01 11 22 33 44");
         ArrayAssert.assertEquals(expectedBuf.array(), buf.array());
     }
-
-    @Test
-    public void equals__Simple() throws Exception {
-        LispSegmentLCAFAddress address1 = new LispSegmentLCAFAddress((byte) 0x06, 0x01020304, new LispIpv4Address(0x11223344));
-        LispSegmentLCAFAddress address2 = new LispSegmentLCAFAddress((byte) 0x06, 0x01020304, new LispIpv4Address(0x11223344));
-        LispSegmentLCAFAddress address3 = new LispSegmentLCAFAddress((byte) 0x06, 0x01020305, new LispIpv4Address(0x11223344));
-        LispSegmentLCAFAddress address4 = new LispSegmentLCAFAddress((byte) 0x05, 0x01020304, new LispIpv4Address(0x11223344));
-        LispSegmentLCAFAddress address5 = new LispSegmentLCAFAddress((byte) 0x06, 0x01020304, new LispIpv4Address(0x11223343));
-
-        assertEquals(address1, address2);
-        assertEquals(address1, address1);
-        Assert.assertNotEquals(address1, address3);
-        Assert.assertNotEquals(address1, address4);
-        Assert.assertNotEquals(address1, address5);
-        Assert.assertNotEquals(address3, address4);
-        Assert.assertNotEquals(address3, address5);
-        Assert.assertNotEquals(address4, address5);
-    }
 }