From 73911b126a839687c0bf0818fdecf3ec6cd58066 Mon Sep 17 00:00:00 2001 From: Lorand Jakab Date: Tue, 1 Dec 2015 15:53:19 +0200 Subject: [PATCH] Migrate lisp-proto implementation to IETF YANG model Change-Id: I8f769d01f2c643960a1693b1f385100e2c3ed34e Signed-off-by: Lorand Jakab --- features/pom.xml | 2 - features/src/main/features/features.xml | 14 +- .../lisp/IMapRequestResultHandler.java | 2 +- mappingservice/lisp-proto/pom.xml | 35 +- .../lisp/serializer/EidRecordSerializer.java | 15 +- .../serializer/LocatorRecordSerializer.java | 15 +- .../lisp/serializer/MapNotifySerializer.java | 28 +- .../serializer/MapRegisterSerializer.java | 20 +- .../lisp/serializer/MapReplySerializer.java | 24 +- .../lisp/serializer/MapRequestSerializer.java | 68 ++-- ...izer.java => MappingRecordSerializer.java} | 46 +-- .../serializer/address/AfiListSerializer.java | 97 +++++ .../address/ApplicationDataSerializer.java | 130 +++++++ .../address/DistinguishedNameSerializer.java | 99 +++++ .../ExplicitLocatorPathSerializer.java | 127 ++++++ .../address/InstanceIdSerializer.java | 81 ++++ .../address/Ipv4PrefixSerializer.java | 108 ++++++ .../serializer/address/Ipv4Serializer.java | 114 ++++++ .../address/Ipv6PrefixSerializer.java | 108 ++++++ .../serializer/address/Ipv6Serializer.java | 114 ++++++ .../address/KeyValueAddressSerializer.java | 88 +++++ .../serializer/address/LcafSerializer.java | 118 ++++++ .../address/LispAddressSerializer.java | 145 +++++-- .../address/LispAddressSerializerContext.java | 49 +++ ...pApplicationDataLCAFAddressSerializer.java | 100 ----- ...ispDistinguishedNameAddressSerializer.java | 54 --- .../address/LispIpv4AddressSerializer.java | 63 --- .../address/LispIpv6AddressSerializer.java | 64 --- .../address/LispKeyValueLCAFSerializer.java | 61 --- .../address/LispLCAFAddressSerializer.java | 86 ---- .../LispListLCAFAddressSerializer.java | 64 --- .../address/LispMACAddressSerializer.java | 61 --- .../address/LispNoAddressSerializer.java | 47 --- .../LispSegmentLCAFAddressSerializer.java | 71 ---- .../LispSourceDestLCAFAddressSerializer.java | 79 ---- ...afficEngineeringLCAFAddressSerializer.java | 91 ----- .../serializer/address/MacSerializer.java | 107 +++++ .../address/NoAddressSerializer.java | 68 ++++ .../address/SimpleAddressSerializer.java | 69 ++++ .../address/SourceDestKeySerializer.java | 106 +++++ .../LispAFIAddressSerializerFactory.java | 44 --- .../factory/LispAddressSerializerFactory.java | 77 ++++ .../LispLCAFAddressSerializerFactory.java | 44 --- .../lisp/type/AddressFamilyNumberEnum.java | 44 --- .../lisp/util/AddressTypeMap.java | 109 ++++++ .../lisp/util/LcafSourceDestHelper.java | 146 ------- .../lisp/util/LispAFIConvertor.java | 361 ----------------- .../lisp/util/LispAddressStringifier.java | 205 +++++----- .../lisp/util/LispAddressUtil.java | 367 ++++++++++++++++++ ...java => LispSimpleAddressStringifier.java} | 40 +- .../lisp/util/MapNotifyBuilderHelper.java | 10 +- .../lisp/util/MapRequestUtil.java | 21 +- .../lisp/util/MapServerMapResolverUtil.java | 21 +- .../lispflowmapping/lisp/util/MaskUtil.java | 340 ++++------------ .../lisp/util/SourceDestKeyHelper.java | 65 ++++ .../types/rev151105/SimpleAddressBuilder.java | 52 ++- .../MapNotifySerializationTest.java | 119 +++--- .../MapRegisterSerializationTest.java | 142 +++---- .../serializer/MapReplySerializationTest.java | 205 +++++----- .../MapRequestSerializationTest.java | 189 ++++----- .../address/AfiListSerializerTest.java | 141 +++++++ .../ApplicationDataSerializerTest.java | 116 ++++++ .../DistinguishedNameSerializerTest.java | 102 +++++ .../ExplicitLocatorPathSerializerTest.java | 139 +++++++ .../address/InstanceIdSerializerTest.java | 95 +++++ ...dressTest.java => Ipv6SerializerTest.java} | 25 +- .../KeyValueAddressSerializerTest.java | 97 +++++ .../LispApplicationDataLCAFAddressTest.java | 109 ------ ...istinguishedNameAddressSerializerTest.java | 101 ----- .../address/LispKeyValueLCAFAddressTest.java | 89 ----- .../address/LispListLCAFAddressTest.java | 137 ------- .../address/LispSegmentLCAFAddressTest.java | 97 ----- .../LispSourceDestLCAFAddressTest.java | 99 ----- ...LispTrafficEngineeringLCAFAddressTest.java | 139 ------- .../address/SourceDestKeySerializerTest.java | 108 ++++++ 75 files changed, 3867 insertions(+), 3166 deletions(-) rename mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/{EidToLocatorRecordSerializer.java => MappingRecordSerializer.java} (68%) create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/AfiListSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ApplicationDataSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/DistinguishedNameSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ExplicitLocatorPathSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/InstanceIdSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4PrefixSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4Serializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6PrefixSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6Serializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/KeyValueAddressSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LcafSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializerContext.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispApplicationDataLCAFAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispDistinguishedNameAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv4AddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv6AddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispKeyValueLCAFSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispLCAFAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispListLCAFAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispMACAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispNoAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSegmentLCAFAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSourceDestLCAFAddressSerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispTrafficEngineeringLCAFAddressSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/MacSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/NoAddressSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SimpleAddressSerializer.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SourceDestKeySerializer.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAFIAddressSerializerFactory.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAddressSerializerFactory.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispLCAFAddressSerializerFactory.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/type/AddressFamilyNumberEnum.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/AddressTypeMap.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LcafSourceDestHelper.java delete mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAFIConvertor.java create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressUtil.java rename mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/{LispPrimitiveAddressStringifier.java => LispSimpleAddressStringifier.java} (51%) create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/SourceDestKeyHelper.java create mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/AfiListSerializerTest.java create mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ApplicationDataSerializerTest.java create mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/DistinguishedNameSerializerTest.java create mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ExplicitLocatorPathSerializerTest.java create mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/InstanceIdSerializerTest.java rename mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/{LispIpv6AddressTest.java => Ipv6SerializerTest.java} (51%) create mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/KeyValueAddressSerializerTest.java delete mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispApplicationDataLCAFAddressTest.java delete mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispDistinguishedNameAddressSerializerTest.java delete mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispKeyValueLCAFAddressTest.java delete mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispListLCAFAddressTest.java delete mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSegmentLCAFAddressTest.java delete mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSourceDestLCAFAddressTest.java delete mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispTrafficEngineeringLCAFAddressTest.java create mode 100644 mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/SourceDestKeySerializerTest.java diff --git a/features/pom.xml b/features/pom.xml index dfaa8230d..b2916bf56 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -35,8 +35,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html 0.8.0-SNAPSHOT 0.6.0-SNAPSHOT 1.3.0-SNAPSHOT - - true diff --git a/features/src/main/features/features.xml b/features/src/main/features/features.xml index b901d73e6..6f87ec5c2 100644 --- a/features/src/main/features/features.xml +++ b/features/src/main/features/features.xml @@ -18,8 +18,10 @@ mvn:org.opendaylight.netconf/features-restconf/{{VERSION}}/xml/features mvn:org.opendaylight.controller/features-config/{{VERSION}}/xml/features + - odl-mdsal-apidocs mvn:org.apache.commons/commons-lang3/{{VERSION}} mvn:org.opendaylight.lispflowmapping/mappingservice.lisp-proto/{{VERSION}} mvn:org.opendaylight.lispflowmapping/mappingservice.api/{{VERSION}} - - - odl-lispflowmapping-mappingservice - mvn:org.opendaylight.lispflowmapping/mappingservice.shell/{{VERSION}} - diff --git a/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapRequestResultHandler.java b/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapRequestResultHandler.java index 386c794dc..33e57fe33 100644 --- a/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapRequestResultHandler.java +++ b/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/lisp/IMapRequestResultHandler.java @@ -32,4 +32,4 @@ public interface IMapRequestResultHandler { * The address of the ETR */ void handleNonProxyMapRequest(MapRequest mapRequest, TransportAddress transportAddress); -} \ No newline at end of file +} diff --git a/mappingservice/lisp-proto/pom.xml b/mappingservice/lisp-proto/pom.xml index bc3d208af..3abbfce06 100644 --- a/mappingservice/lisp-proto/pom.xml +++ b/mappingservice/lisp-proto/pom.xml @@ -31,6 +31,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal.model ietf-yang-types + + org.opendaylight.mdsal.model + iana-afn-safi + org.apache.commons commons-lang3 @@ -48,7 +52,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - @@ -81,35 +84,5 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - - - - maven-compiler-plugin - - - default-compile - compile - - compile - - - - org/opendaylight/lispflowmapping/** - - - - - default-testCompile - test-compile - - testCompile - - - true - - - - - diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/EidRecordSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/EidRecordSerializer.java index a061641e1..25a99812d 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/EidRecordSerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/EidRecordSerializer.java @@ -10,12 +10,9 @@ package org.opendaylight.lispflowmapping.lisp.serializer; import java.nio.ByteBuffer; import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializerContext; import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidrecords.EidRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidrecords.EidRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; public class EidRecordSerializer { @@ -29,12 +26,10 @@ public class EidRecordSerializer { return INSTANCE; } - public EidRecord deserialize(ByteBuffer requestBuffer) { + public Eid deserialize(ByteBuffer requestBuffer) { /* byte reserved = */requestBuffer.get(); short maskLength = (short) (ByteUtil.getUnsignedByte(requestBuffer)); - LispAFIAddress prefix = LispAddressSerializer.getInstance().deserialize(requestBuffer); - prefix = MaskUtil.fixMask(prefix, maskLength); - return new EidRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(prefix)).setMask(maskLength) - .build(); + LispAddressSerializerContext ctx = new LispAddressSerializerContext(maskLength); + return LispAddressSerializer.getInstance().deserializeEid(requestBuffer, ctx); } } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/LocatorRecordSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/LocatorRecordSerializer.java index a22398e4b..9449e935d 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/LocatorRecordSerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/LocatorRecordSerializer.java @@ -12,13 +12,11 @@ import java.nio.ByteBuffer; import org.apache.commons.lang3.BooleanUtils; import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier; import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; public class LocatorRecordSerializer { @@ -42,10 +40,9 @@ public class LocatorRecordSerializer { builder.setLocalLocator(ByteUtil.extractBit(flags, Flags.LOCAL_LOCATOR)); builder.setRlocProbed(ByteUtil.extractBit(flags, Flags.RLOC_PROBED)); builder.setRouted(ByteUtil.extractBit(flags, Flags.ROUTED)); - LispAFIAddress afiAddress = LispAddressSerializer.getInstance().deserialize(buffer); - LispAddressContainer locator = LispAFIConvertor.toContainer(afiAddress); - builder.setLispAddressContainer(locator); - builder.setName(LispAddressStringifier.getString(locator)); + Rloc rloc = LispAddressSerializer.getInstance().deserializeRloc(buffer); + builder.setRloc(rloc); + builder.setLocatorId(LispAddressStringifier.getString(rloc)); return builder.build(); } @@ -58,12 +55,12 @@ public class LocatorRecordSerializer { replyBuffer.put((byte) (ByteUtil.boolToBit(BooleanUtils.isTrue(record.isLocalLocator()), Flags.LOCAL_LOCATOR) | // ByteUtil.boolToBit(BooleanUtils.isTrue(record.isRlocProbed()), Flags.RLOC_PROBED) | // ByteUtil.boolToBit(BooleanUtils.isTrue(record.isRouted()), Flags.ROUTED))); - LispAddressSerializer.getInstance().serialize(replyBuffer, LispAFIConvertor.toAFI(record.getLispAddressContainer())); + LispAddressSerializer.getInstance().serialize(replyBuffer, record.getRloc()); } public int getSerializationSize(LocatorRecord record) { return Length.HEADER_SIZE - + LispAddressSerializer.getInstance().getAddressSize(LispAFIConvertor.toAFI(record.getLispAddressContainer())); + + LispAddressSerializer.getInstance().getAddressSize(record.getRloc()); } private interface Flags { diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapNotifySerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapNotifySerializer.java index 08bfa6b8d..80fbfb8e9 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapNotifySerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapNotifySerializer.java @@ -15,9 +15,9 @@ import org.opendaylight.lispflowmapping.lisp.type.LispMessageEnum; import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder; /** * This class deals with serializing map notify from the java object to udp. @@ -43,15 +43,15 @@ public class MapNotifySerializer { size += org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer.Length.XTRID_SIZE + org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer.Length.SITEID_SIZE; } - for (EidToLocatorRecord eidToLocatorRecord : mapNotify.getEidToLocatorRecord()) { - size += EidToLocatorRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord); + for (MappingRecordItem mappingRecord : mapNotify.getMappingRecordItem()) { + size += MappingRecordSerializer.getInstance().getSerializationSize(mappingRecord.getMappingRecord()); } ByteBuffer replyBuffer = ByteBuffer.allocate(size); replyBuffer.put((byte) (LispMessageEnum.MapNotify.getValue() << 4)); replyBuffer.position(replyBuffer.position() + Length.RES); - if (mapNotify.getEidToLocatorRecord() != null) { - replyBuffer.put((byte) mapNotify.getEidToLocatorRecord().size()); + if (mapNotify.getMappingRecordItem() != null) { + replyBuffer.put((byte) mapNotify.getMappingRecordItem().size()); } else { replyBuffer.put((byte) 0); } @@ -64,9 +64,9 @@ public class MapNotifySerializer { replyBuffer.putShort((short) 0); } - if (mapNotify.getEidToLocatorRecord() != null) { - for (EidToLocatorRecord eidToLocatorRecord : mapNotify.getEidToLocatorRecord()) { - EidToLocatorRecordSerializer.getInstance().serialize(replyBuffer, eidToLocatorRecord); + if (mapNotify.getMappingRecordItem() != null) { + for (MappingRecordItem mappingRecord : mapNotify.getMappingRecordItem()) { + MappingRecordSerializer.getInstance().serialize(replyBuffer, mappingRecord.getMappingRecord()); } } @@ -96,16 +96,16 @@ public class MapNotifySerializer { notifyBuffer.get(authenticationData); builder.setAuthenticationData(authenticationData); - builder.setEidToLocatorRecord(new ArrayList()); + builder.setMappingRecordItem(new ArrayList()); for (int i = 0; i < recordCount; i++) { - builder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder(EidToLocatorRecordSerializer.getInstance().deserialize(notifyBuffer)).build()); + builder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + (MappingRecordSerializer.getInstance().deserialize(notifyBuffer))).build()); } if (xtrSiteIdPresent) { - byte[] xtrId = new byte[org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer.Length.XTRID_SIZE]; + byte[] xtrId = new byte[MapRegisterSerializer.Length.XTRID_SIZE]; notifyBuffer.get(xtrId); - byte[] siteId = new byte[org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer.Length.SITEID_SIZE]; + byte[] siteId = new byte[MapRegisterSerializer.Length.SITEID_SIZE]; notifyBuffer.get(siteId); builder.setXtrId(xtrId); builder.setSiteId(siteId); diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRegisterSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRegisterSerializer.java index 83b3d4e59..d7eb66463 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRegisterSerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRegisterSerializer.java @@ -16,8 +16,8 @@ import org.opendaylight.lispflowmapping.lisp.type.LispMessageEnum; import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegisterBuilder; /** @@ -43,8 +43,8 @@ public class MapRegisterSerializer { if (mapRegister.isXtrSiteIdPresent() != null && mapRegister.isXtrSiteIdPresent()) { size += Length.XTRID_SIZE + Length.SITEID_SIZE; } - for (EidToLocatorRecord eidToLocatorRecord : mapRegister.getEidToLocatorRecord()) { - size += EidToLocatorRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord); + for (MappingRecordItem eidToLocatorRecord : mapRegister.getMappingRecordItem()) { + size += MappingRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord.getMappingRecord()); } ByteBuffer registerBuffer = ByteBuffer.allocate(size); @@ -53,7 +53,7 @@ public class MapRegisterSerializer { ByteUtil.boolToBit(BooleanUtils.isTrue(mapRegister.isXtrSiteIdPresent()), Flags.XTRSITEID))); registerBuffer.position(registerBuffer.position() + Length.RES); registerBuffer.put(ByteUtil.boolToBit(BooleanUtils.isTrue(mapRegister.isWantMapNotify()), Flags.WANT_MAP_REPLY)); - registerBuffer.put((byte) mapRegister.getEidToLocatorRecord().size()); + registerBuffer.put((byte) mapRegister.getMappingRecordItem().size()); registerBuffer.putLong(NumberUtil.asLong(mapRegister.getNonce())); registerBuffer.putShort(NumberUtil.asShort(mapRegister.getKeyId())); @@ -63,8 +63,8 @@ public class MapRegisterSerializer { } else { registerBuffer.putShort((short) 0); } - for (EidToLocatorRecord eidToLocatorRecord : mapRegister.getEidToLocatorRecord()) { - EidToLocatorRecordSerializer.getInstance().serialize(registerBuffer, eidToLocatorRecord); + for (MappingRecordItem eidToLocatorRecord : mapRegister.getMappingRecordItem()) { + MappingRecordSerializer.getInstance().serialize(registerBuffer, eidToLocatorRecord.getMappingRecord()); } if (mapRegister.isXtrSiteIdPresent() != null && mapRegister.isXtrSiteIdPresent()) { @@ -78,7 +78,7 @@ public class MapRegisterSerializer { public MapRegister deserialize(ByteBuffer registerBuffer) { try { MapRegisterBuilder builder = new MapRegisterBuilder(); - builder.setEidToLocatorRecord(new ArrayList()); + builder.setMappingRecordItem(new ArrayList()); byte typeAndFlags = registerBuffer.get(); boolean xtrSiteIdPresent = ByteUtil.extractBit(typeAndFlags, Flags.XTRSITEID); @@ -96,8 +96,8 @@ public class MapRegisterSerializer { builder.setAuthenticationData(authenticationData); for (int i = 0; i < recordCount; i++) { - builder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder(EidToLocatorRecordSerializer.getInstance().deserialize(registerBuffer)).build()); + builder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + MappingRecordSerializer.getInstance().deserialize(registerBuffer)).build()); } if (xtrSiteIdPresent) { diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapReplySerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapReplySerializer.java index 0eadcee07..cdb6697b5 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapReplySerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapReplySerializer.java @@ -15,8 +15,8 @@ import org.opendaylight.lispflowmapping.lisp.type.LispMessageEnum; import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapReply; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder; /** @@ -36,8 +36,8 @@ public class MapReplySerializer { public ByteBuffer serialize(MapReply mapReply) { int size = Length.HEADER_SIZE; - for (EidToLocatorRecord eidToLocatorRecord : mapReply.getEidToLocatorRecord()) { - size += EidToLocatorRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord); + for (MappingRecordItem eidToLocatorRecord : mapReply.getMappingRecordItem()) { + size += MappingRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord.getMappingRecord()); } ByteBuffer replyBuffer = ByteBuffer.allocate(size); @@ -47,16 +47,16 @@ public class MapReplySerializer { (BooleanUtils.isTrue(mapReply.isEchoNonceEnabled()) ? Flags.ECHO_NONCE_ENABLED : 0x00))); replyBuffer.position(replyBuffer.position() + Length.RES); - if (mapReply.getEidToLocatorRecord() != null) { - replyBuffer.put((byte) mapReply.getEidToLocatorRecord().size()); + if (mapReply.getMappingRecordItem() != null) { + replyBuffer.put((byte) mapReply.getMappingRecordItem().size()); } else { replyBuffer.put((byte) 0); } replyBuffer.putLong(NumberUtil.asLong(mapReply.getNonce())); - if (mapReply.getEidToLocatorRecord() != null) { - for (EidToLocatorRecord eidToLocatorRecord : mapReply.getEidToLocatorRecord()) { - EidToLocatorRecordSerializer.getInstance().serialize(replyBuffer, eidToLocatorRecord); + if (mapReply.getMappingRecordItem() != null) { + for (MappingRecordItem eidToLocatorRecord : mapReply.getMappingRecordItem()) { + MappingRecordSerializer.getInstance().serialize(replyBuffer, eidToLocatorRecord.getMappingRecord()); } } return replyBuffer; @@ -71,10 +71,10 @@ public class MapReplySerializer { replyBuffer.getShort(); int recordCount = ByteUtil.getUnsignedByte(replyBuffer); builder.setNonce(replyBuffer.getLong()); - builder.setEidToLocatorRecord(new ArrayList()); + builder.setMappingRecordItem(new ArrayList()); for (int i = 0; i < recordCount; i++) { - builder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder(EidToLocatorRecordSerializer.getInstance().deserialize(replyBuffer)).build()); + builder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + MappingRecordSerializer.getInstance().deserialize(replyBuffer)).build()); } return builder.build(); diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRequestSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRequestSerializer.java index 1f1931f6e..b04533c44 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRequestSerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRequestSerializer.java @@ -12,14 +12,15 @@ import java.util.ArrayList; import org.apache.commons.lang3.BooleanUtils; import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializerContext; import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; import org.opendaylight.lispflowmapping.lisp.type.LispMessageEnum; import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; +import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRequest; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidrecords.EidRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRloc; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRlocBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.SourceEidBuilder; @@ -45,20 +46,19 @@ public class MapRequestSerializer { public ByteBuffer serialize(MapRequest mapRequest) { int size = Length.HEADER_SIZE; - if (mapRequest.getSourceEid() != null && mapRequest.getSourceEid().getLispAddressContainer() != null) { - size += LispAddressSerializer.getInstance().getAddressSize( - LispAFIConvertor.toAFI(mapRequest.getSourceEid().getLispAddressContainer())); + if (mapRequest.getSourceEid() != null && mapRequest.getSourceEid().getEid() != null) { + size += LispAddressSerializer.getInstance().getAddressSize(mapRequest.getSourceEid().getEid()); } else { size += 2; } if (mapRequest.getItrRloc() != null) { for (ItrRloc address : mapRequest.getItrRloc()) { - size += LispAddressSerializer.getInstance().getAddressSize(LispAFIConvertor.toAFI(address.getLispAddressContainer())); + size += LispAddressSerializer.getInstance().getAddressSize(address.getRloc()); } } - if (mapRequest.getEidRecord() != null) { - for (EidRecord record : mapRequest.getEidRecord()) { - size += 2 + LispAddressSerializer.getInstance().getAddressSize(LispAFIConvertor.toAFI(record.getLispAddressContainer())); + if (mapRequest.getEidItem() != null) { + for (EidItem record : mapRequest.getEidItem()) { + size += 2 + LispAddressSerializer.getInstance().getAddressSize(record.getEid()); } } ByteBuffer requestBuffer = ByteBuffer.allocate(size); @@ -79,34 +79,34 @@ public class MapRequestSerializer { requestBuffer.put((byte) 0); } - if (mapRequest.getEidRecord() != null) { - requestBuffer.put((byte) mapRequest.getEidRecord().size()); + if (mapRequest.getEidItem() != null) { + requestBuffer.put((byte) mapRequest.getEidItem().size()); } else { requestBuffer.put((byte) 0); } requestBuffer.putLong(NumberUtil.asLong(mapRequest.getNonce())); - if (mapRequest.getSourceEid() != null && mapRequest.getSourceEid().getLispAddressContainer() != null) { - LispAddressSerializer.getInstance().serialize(requestBuffer, - LispAFIConvertor.toAFI(mapRequest.getSourceEid().getLispAddressContainer())); + if (mapRequest.getSourceEid() != null && mapRequest.getSourceEid().getEid() != null) { + LispAddressSerializer.getInstance().serialize(requestBuffer, mapRequest.getSourceEid().getEid()); } else { requestBuffer.putShort((short) 0); } if (mapRequest.getItrRloc() != null) { for (ItrRloc address : mapRequest.getItrRloc()) { - LispAddressSerializer.getInstance().serialize(requestBuffer, LispAFIConvertor.toAFI(address.getLispAddressContainer())); + LispAddressSerializer.getInstance().serialize(requestBuffer, address.getRloc()); } } - if (mapRequest.getEidRecord() != null) { - for (EidRecord record : mapRequest.getEidRecord()) { + if (mapRequest.getEidItem() != null) { + for (EidItem record : mapRequest.getEidItem()) { requestBuffer.put((byte) 0); - requestBuffer.put((byte) record.getMask().byteValue()); - LispAddressSerializer.getInstance().serialize(requestBuffer, LispAFIConvertor.toAFI(record.getLispAddressContainer())); + requestBuffer.put((byte) MaskUtil.getMaskForAddress(record.getEid().getAddress())); + LispAddressSerializer.getInstance().serialize(requestBuffer, record.getEid()); } } if (mapRequest.getMapReply() != null) { - ByteBuffer replyBuffer = ByteBuffer.allocate(EidToLocatorRecordSerializer.getInstance().getSerializationSize(mapRequest.getMapReply())); - EidToLocatorRecordSerializer.getInstance().serialize(replyBuffer, mapRequest.getMapReply()); + ByteBuffer replyBuffer = ByteBuffer.allocate(MappingRecordSerializer.getInstance() + .getSerializationSize(mapRequest.getMapReply().getMappingRecord())); + MappingRecordSerializer.getInstance().serialize(replyBuffer, mapRequest.getMapReply().getMappingRecord()); ByteBuffer combinedBuffer = ByteBuffer.allocate(requestBuffer.capacity() + replyBuffer.capacity()); combinedBuffer.put(requestBuffer.array()); combinedBuffer.put(replyBuffer.array()); @@ -132,30 +132,30 @@ public class MapRequestSerializer { int itrCount = ByteUtil.getUnsignedByte(requestBuffer) + 1; int recordCount = ByteUtil.getUnsignedByte(requestBuffer); builder.setNonce(requestBuffer.getLong()); - builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer( - LispAFIConvertor.toContainer(LispAddressSerializer.getInstance().deserialize(requestBuffer))) - .build()); + LispAddressSerializerContext ctx = new LispAddressSerializerContext( + LispAddressSerializerContext.MASK_LEN_MISSING); + builder.setSourceEid(new SourceEidBuilder().setEid( + LispAddressSerializer.getInstance().deserializeEid(requestBuffer, ctx)).build()); if (builder.getItrRloc() == null) { builder.setItrRloc(new ArrayList()); } for (int i = 0; i < itrCount; i++) { - builder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer( - LispAFIConvertor.toContainer(LispAddressSerializer.getInstance().deserialize(requestBuffer))) - .build()); + builder.getItrRloc().add(new ItrRlocBuilder().setRloc( + LispAddressSerializer.getInstance().deserializeRloc(requestBuffer)).build()); } - if (builder.getEidRecord() == null) { - builder.setEidRecord(new ArrayList()); + if (builder.getEidItem() == null) { + builder.setEidItem(new ArrayList()); } for (int i = 0; i < recordCount; i++) { - builder.getEidRecord().add(EidRecordSerializer.getInstance().deserialize(requestBuffer)); + builder.getEidItem().add(new EidItemBuilder().setEid( + EidRecordSerializer.getInstance().deserialize(requestBuffer)).build()); } if (builder.isMapDataPresent() && requestBuffer.hasRemaining()) { try { - builder.setMapReply(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.MapReplyBuilder( - new EidToLocatorRecordBuilder(EidToLocatorRecordSerializer.getInstance().deserialize(requestBuffer)).build()).build()); + builder.setMapReply(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.MapReplyBuilder().setMappingRecord( + MappingRecordSerializer.getInstance().deserialize(requestBuffer)).build()).build(); } catch (RuntimeException re) { LOG.warn("couldn't deserialize map reply encapsulated in map request. {}", re.getMessage()); } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/EidToLocatorRecordSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MappingRecordSerializer.java similarity index 68% rename from mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/EidToLocatorRecordSerializer.java rename to mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MappingRecordSerializer.java index 6a7f6c836..9795e90d9 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/EidToLocatorRecordSerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MappingRecordSerializer.java @@ -12,31 +12,29 @@ import java.util.ArrayList; import org.apache.commons.lang3.BooleanUtils; import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializerContext; import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord.Action; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder; -public class EidToLocatorRecordSerializer { +public class MappingRecordSerializer { - private static final EidToLocatorRecordSerializer INSTANCE = new EidToLocatorRecordSerializer(); + private static final MappingRecordSerializer INSTANCE = new MappingRecordSerializer(); // Private constructor prevents instantiation from other classes - private EidToLocatorRecordSerializer() { + private MappingRecordSerializer() { } - public static EidToLocatorRecordSerializer getInstance() { + public static MappingRecordSerializer getInstance() { return INSTANCE; } - public EidToLocatorRecord deserialize(ByteBuffer buffer) { - EidToLocatorRecordBuilder builder = new EidToLocatorRecordBuilder(); + public MappingRecord deserialize(ByteBuffer buffer) { + MappingRecordBuilder builder = new MappingRecordBuilder(); builder.setRecordTtl(buffer.getInt()); byte locatorCount = (byte) ByteUtil.getUnsignedByte(buffer); builder.setMaskLength((short) ByteUtil.getUnsignedByte(buffer)); @@ -50,10 +48,8 @@ public class EidToLocatorRecordSerializer { buffer.position(buffer.position() + Length.RESERVED); builder.setMapVersion(buffer.getShort()); - LispAFIAddress afiAddress = LispAddressSerializer.getInstance().deserialize(buffer); - afiAddress = MaskUtil.fixMask(afiAddress, builder.getMaskLength()); - LispAddressContainer container = LispAFIConvertor.toContainer(afiAddress); - builder.setLispAddressContainer(container); + LispAddressSerializerContext ctx = new LispAddressSerializerContext(builder.getMaskLength()); + builder.setEid(LispAddressSerializer.getInstance().deserializeEid(buffer, ctx)); builder.setLocatorRecord(new ArrayList()); for (int i = 0; i < locatorCount; i++) { @@ -63,14 +59,18 @@ public class EidToLocatorRecordSerializer { return builder.build(); } - public void serialize(ByteBuffer replyBuffer, EidToLocatorRecord record) { + public void serialize(ByteBuffer replyBuffer, MappingRecord record) { replyBuffer.putInt(NumberUtil.asInt(record.getRecordTtl())); if (record.getLocatorRecord() != null) { replyBuffer.put((byte) record.getLocatorRecord().size()); } else { replyBuffer.put((byte) 0); } - replyBuffer.put((byte) NumberUtil.asShort(record.getMaskLength())); + if (record.getEid() != null && MaskUtil.getMaskForAddress(record.getEid().getAddress()) != -1) { + replyBuffer.put((byte) NumberUtil.asShort(MaskUtil.getMaskForAddress(record.getEid().getAddress()))); + } else { + replyBuffer.put((byte) 0); + } Action act = Action.NoAction; if (record.getAction() != null) { act = record.getAction(); @@ -79,8 +79,8 @@ public class EidToLocatorRecordSerializer { ByteUtil.boolToBit(BooleanUtils.isTrue(record.isAuthoritative()), Flags.AUTHORITATIVE))); replyBuffer.position(replyBuffer.position() + Length.RESERVED); replyBuffer.putShort(NumberUtil.asShort(record.getMapVersion())); - if (record.getLispAddressContainer() != null && record.getLispAddressContainer().getAddress() != null) { - LispAddressSerializer.getInstance().serialize(replyBuffer, LispAFIConvertor.toAFI(record.getLispAddressContainer())); + if (record.getEid() != null && record.getEid().getAddress() != null) { + LispAddressSerializer.getInstance().serialize(replyBuffer, record.getEid()); } if (record.getLocatorRecord() != null) { @@ -90,10 +90,10 @@ public class EidToLocatorRecordSerializer { } } - public int getSerializationSize(EidToLocatorRecord record) { + public int getSerializationSize(MappingRecord record) { int size = Length.HEADER_SIZE; - if (record.getLispAddressContainer() != null) { - size += LispAddressSerializer.getInstance().getAddressSize((LispAFIConvertor.toAFI(record.getLispAddressContainer()))); + if (record.getEid() != null) { + size += LispAddressSerializer.getInstance().getAddressSize(record.getEid()); } if (record.getLocatorRecord() != null) { for (LocatorRecord locatorRecord : record.getLocatorRecord()) { diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/AfiListSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/AfiListSerializer.java new file mode 100644 index 000000000..a4fc710f9 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/AfiListSerializer.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AfiListLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.afi.list.AfiList; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.afi.list.AfiListBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class AfiListSerializer extends LcafSerializer { + + private static final AfiListSerializer INSTANCE = new AfiListSerializer(); + + // Private constructor prevents instantiation from other classes + private AfiListSerializer() { + } + + public static AfiListSerializer getInstance() { + return INSTANCE; + } + + @Override + protected byte getLcafType() { + return LispCanonicalAddressFormatEnum.LIST.getLispCode(); + } + + @Override + protected short getLcafLength(LispAddress lispAddress) { + short totalSize = 0; + AfiList afiList = (((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiList) + lispAddress.getAddress()).getAfiList()); + for (SimpleAddress address : afiList.getAddressList()) { + totalSize += SimpleAddressSerializer.getInstance().getAddressSize(address); + } + return totalSize; + } + + @Override + protected short getAfi() { + return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + AfiList afiList = (((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiList) + lispAddress.getAddress()).getAfiList()); + for (SimpleAddress address : afiList.getAddressList()) { + SimpleAddressSerializer.getInstance().serialize(buffer, address); + } + } + + @Override + public Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(AfiListLcaf.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(deserializeData(buffer, length, ctx)); + return eb.build(); + } + + @Override + public Rloc deserializeLcafRlocData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(AfiListLcaf.class); + rb.setVirtualNetworkId(getVni(ctx)); + rb.setAddress(deserializeData(buffer, length, ctx)); + return rb.build(); + } + + private Address deserializeData(ByteBuffer buffer, short length, LispAddressSerializerContext ctx) { + List addresses = new ArrayList(); + while (length > 0) { + SimpleAddress address = SimpleAddressSerializer.getInstance().deserialize(buffer, ctx); + length -= SimpleAddressSerializer.getInstance().getAddressSize(address); + addresses.add(address); + } + return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiListBuilder() + .setAfiList(new AfiListBuilder().setAddressList(addresses).build()).build(); + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ApplicationDataSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ApplicationDataSerializer.java new file mode 100644 index 000000000..86893ce1b --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ApplicationDataSerializer.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; +import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; +import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ApplicationDataLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.application.data.ApplicationData; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.application.data.ApplicationDataBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class ApplicationDataSerializer extends LcafSerializer { + + private static final ApplicationDataSerializer INSTANCE = new ApplicationDataSerializer(); + + // Private constructor prevents instantiation from other classes + private ApplicationDataSerializer() { + } + + public static ApplicationDataSerializer getInstance() { + return INSTANCE; + } + + @Override + protected byte getLcafType() { + return LispCanonicalAddressFormatEnum.APPLICATION_DATA.getLispCode(); + } + + @Override + protected short getLcafLength(LispAddress lispAddress) { + ApplicationData appData = ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationData) + lispAddress.getAddress()).getApplicationData(); + return (short) (Length.ALL_FIELDS + SimpleAddressSerializer.getInstance().getAddressSize(appData.getAddress())); + } + + @Override + protected short getAfi() { + return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + ApplicationData appData = ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationData) + lispAddress.getAddress()).getApplicationData(); + buffer.put(ByteUtil.partialIntToByteArray(NumberUtil.asInt(appData.getIpTos()), Length.TOC)); + buffer.put((byte) NumberUtil.asShort(appData.getProtocol())); + if (appData.getLocalPortLow() != null) { + buffer.putShort(NumberUtil.asShort(appData.getLocalPortLow().getValue().shortValue())); + } else { + buffer.putShort((short) 0); + } + if (appData.getLocalPortHigh() != null) { + buffer.putShort(NumberUtil.asShort(appData.getLocalPortHigh().getValue().shortValue())); + } else { + buffer.putShort((short) 0); + } + if (appData.getRemotePortLow() != null) { + buffer.putShort(NumberUtil.asShort(appData.getRemotePortLow().getValue().shortValue())); + } else { + buffer.putShort((short) 0); + } + if (appData.getRemotePortHigh() != null) { + buffer.putShort(NumberUtil.asShort(appData.getRemotePortHigh().getValue().shortValue())); + } else { + buffer.putShort((short) 0); + } + SimpleAddressSerializer.getInstance().serialize(buffer, appData.getAddress()); + } + + @Override + protected Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(ApplicationDataLcaf.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(deserializeData(buffer, ctx)); + return eb.build(); + } + + @Override + protected Rloc deserializeLcafRlocData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + RlocBuilder eb = new RlocBuilder(); + eb.setAddressType(ApplicationDataLcaf.class); + eb.setVirtualNetworkId(null); + eb.setAddress(deserializeData(buffer, ctx)); + return eb.build(); + } + + private Address deserializeData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + ApplicationDataBuilder builder = new ApplicationDataBuilder(); + byte[] rawIPTos = new byte[3]; + buffer.get(rawIPTos); + builder.setIpTos(ByteUtil.getPartialInt(rawIPTos)); + builder.setProtocol((short) ByteUtil.getUnsignedByte(buffer)); + builder.setLocalPortLow(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); + builder.setLocalPortHigh(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); + builder.setRemotePortLow(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); + builder.setRemotePortHigh(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); + SimpleAddress address = SimpleAddressSerializer.getInstance().deserialize(buffer, ctx); + builder.setAddress(address); + return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationDataBuilder() + .setApplicationData(builder.build()).build(); + } + + private interface Length { + int LOCAL_PORT_LOW = 2; + int LOCAL_PORT_HIGH = 2; + int REMOTE_PORT_LOW = 2; + int REMOTE_PORT_HIGH = 2; + int TOC = 3; + int PROTOCOL = 1; + int ALL_FIELDS = LOCAL_PORT_LOW + LOCAL_PORT_HIGH + REMOTE_PORT_LOW + REMOTE_PORT_HIGH + TOC + PROTOCOL; + } + +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/DistinguishedNameSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/DistinguishedNameSerializer.java new file mode 100644 index 000000000..770123df9 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/DistinguishedNameSerializer.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class DistinguishedNameSerializer extends LispAddressSerializer { + + private static final DistinguishedNameSerializer INSTANCE = new DistinguishedNameSerializer(); + + // Private constructor prevents instantiation from other classes + private DistinguishedNameSerializer() { + } + + public static DistinguishedNameSerializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return ((DistinguishedName) lispAddress.getAddress()).getDistinguishedName().getValue().length() + 1; + + } + + @Override + public int getAddressSize(SimpleAddress simpleAddress) { + return simpleAddress.getDistinguishedNameType().getValue().length() + 1; + + } + + @Override + protected short getAfi() { + return (short) AddressFamily.DistinguishedName.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + DistinguishedName distinguishedNameAddress = (DistinguishedName) lispAddress.getAddress(); + buffer.put(distinguishedNameAddress.getDistinguishedName().getValue().getBytes()); + buffer.put((byte) 0); + } + + @Override + protected void serializeData(ByteBuffer buffer, SimpleAddress simpleAddress) { + buffer.put(simpleAddress.getDistinguishedNameType().getValue().getBytes()); + buffer.put((byte) 0); + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(DistinguishedNameAfi.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build()); + return eb.build(); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(DistinguishedNameAfi.class); + rb.setVirtualNetworkId(null); + rb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build()); + return rb.build(); + } + + + @Override + protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + return new SimpleAddress(deserializeData(buffer)); + } + + private DistinguishedNameType deserializeData(ByteBuffer buffer) { + StringBuilder sb = new StringBuilder(); + byte b = buffer.get(); + while (b != 0) { + sb.append((char) b); + b = buffer.get(); + } + return new DistinguishedNameType(sb.toString()); + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ExplicitLocatorPathSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ExplicitLocatorPathSerializer.java new file mode 100644 index 000000000..fad9b9cb7 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/ExplicitLocatorPathSerializer.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.BooleanUtils; +import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; +import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPath; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.ExplicitLocatorPathBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop.LrsBits; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.HopBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class ExplicitLocatorPathSerializer extends LcafSerializer { + + private static final ExplicitLocatorPathSerializer INSTANCE = new ExplicitLocatorPathSerializer(); + + // Private constructor prevents instantiation from other classes + private ExplicitLocatorPathSerializer() { + } + + public static ExplicitLocatorPathSerializer getInstance() { + return INSTANCE; + } + + @Override + protected byte getLcafType() { + return LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode(); + } + + @Override + protected short getLcafLength(LispAddress lispAddress) { + short totalSize = 0; + ExplicitLocatorPath elp = (ExplicitLocatorPath) lispAddress.getAddress(); + if (elp.getExplicitLocatorPath() != null) { + for (Hop hop : elp.getExplicitLocatorPath().getHop()) { + totalSize += SimpleAddressSerializer.getInstance().getAddressSize(hop.getAddress()) + 2; + } + } + return totalSize; + } + + @Override + protected short getAfi() { + return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + ExplicitLocatorPath elp = (ExplicitLocatorPath) lispAddress.getAddress(); + if (elp.getExplicitLocatorPath() != null) { + for (Hop hop : elp.getExplicitLocatorPath().getHop()) { + buffer.put((byte) 0); + if (hop.getLrsBits() != null) { + buffer.put((byte) (ByteUtil.boolToBit(BooleanUtils.isTrue(hop.getLrsBits().isLookup()), Flags.LOOKUP) | // + ByteUtil.boolToBit(BooleanUtils.isTrue(hop.getLrsBits().isRlocProbe()), Flags.RLOC_PROBE) | // + ByteUtil.boolToBit(BooleanUtils.isTrue(hop.getLrsBits().isStrict()), Flags.STRICT))); + } else { + buffer.put((byte) 0); + } + SimpleAddressSerializer.getInstance().serialize(buffer, hop.getAddress()); + } + } + } + + @Override + protected Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(ExplicitLocatorPathLcaf.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(deserializeData(buffer, length, ctx)); + return eb.build(); + } + + @Override + protected Rloc deserializeLcafRlocData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(ExplicitLocatorPathLcaf.class); + rb.setVirtualNetworkId(null); + rb.setAddress(deserializeData(buffer, length, ctx)); + return rb.build(); + } + + private Address deserializeData(ByteBuffer buffer, short length, LispAddressSerializerContext ctx) { + List hops = new ArrayList(); + while (length > 0) { + byte flags = (byte) buffer.getShort(); + boolean lookup = ByteUtil.extractBit(flags, Flags.LOOKUP); + boolean rlocProbe = ByteUtil.extractBit(flags, Flags.RLOC_PROBE); + boolean strict = ByteUtil.extractBit(flags, Flags.STRICT); + SimpleAddress address = SimpleAddressSerializer.getInstance().deserialize(buffer, ctx); + HopBuilder builder = new HopBuilder(); + builder.setLrsBits(new LrsBits(lookup, rlocProbe, strict)); + builder.setAddress(address); + builder.setHopId("Hop " + (hops.size()+1)); + length -= SimpleAddressSerializer.getInstance().getAddressSize(address) + 2; + hops.add(builder.build()); + } + return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder() + .setExplicitLocatorPath(new ExplicitLocatorPathBuilder().setHop(hops).build()).build(); + } + + private interface Flags { + int LOOKUP = 0x04; + int RLOC_PROBE = 0x02; + int STRICT = 0x01; + } + +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/InstanceIdSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/InstanceIdSerializer.java new file mode 100644 index 000000000..e4bd831ab --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/InstanceIdSerializer.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; +import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.InstanceId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; + +public class InstanceIdSerializer extends LcafSerializer { + + private static final int MAX_INSTANCE_ID = 16777216; + private static final InstanceIdSerializer INSTANCE = new InstanceIdSerializer(); + + // Private constructor prevents instantiation from other classes + private InstanceIdSerializer() { + } + + public static InstanceIdSerializer getInstance() { + return INSTANCE; + } + + @Override + protected byte getLcafType() { + return LispCanonicalAddressFormatEnum.SEGMENT.getLispCode(); + } + + @Override + protected short getLcafLength(LispAddress lispAddress) { + return (short) (Length.INSTANCE + LispAddressSerializer.getInstance().getAddressSize(lispAddress)); + } + + protected int getInstanceIdSize() { + return Length.INSTANCE; + } + + @Override + protected short getAfi() { + return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + InstanceId iid = (InstanceId) lispAddress.getAddress(); + // The IID mask-len field is in the LCAF header on the res2 position + buffer.put(buffer.position() - 3, iid.getInstanceId().getMaskLength().byteValue()); + + buffer.putInt(iid.getInstanceId().getIid().getValue().intValue()); + LispAddressSerializer.getInstance().serialize(buffer, lispAddress); + } + + protected void serializeNonLcafAddress(ByteBuffer buffer, LispAddress lispAddress) { + buffer.putInt(lispAddress.getVirtualNetworkId().getValue().intValue()); + } + + @Override + protected Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + long instanceId = (int) ByteUtil.asUnsignedInteger(buffer.getInt()); + + if (instanceId > MAX_INSTANCE_ID) { + throw new LispSerializationException("Instance ID is longer than 24 bits: " + instanceId); + } + ctx.setVni(new InstanceIdType(instanceId)); + return LispAddressSerializer.getInstance().deserializeEid(buffer, ctx); + } + + private interface Length { + int INSTANCE = 4; + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4PrefixSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4PrefixSerializer.java new file mode 100644 index 000000000..540f4c334 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4PrefixSerializer.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.serializer.address; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv4Serializer.Length; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; + +/** + * @author Lorand Jakab + * + */ +public class Ipv4PrefixSerializer extends LispAddressSerializer { + + private static final Ipv4PrefixSerializer INSTANCE = new Ipv4PrefixSerializer(); + + // Private constructor prevents instantiation from other classes + private Ipv4PrefixSerializer() { + } + + public static Ipv4PrefixSerializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return Length.IPV4; // XXX does this need to worry about the mask too? + } + + @Override + public int getAddressSize(SimpleAddress simpleAddress) { + return Length.IPV4; // XXX does this need to worry about the mask too? + } + + @Override + protected short getAfi() { + return (short) AddressFamily.IpV4.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + Ipv4Prefix address = (Ipv4Prefix) lispAddress.getAddress(); + try { + buffer.put(Inet4Address.getByName(MaskUtil.getAddressStringForIpv4Prefix(address)).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected void serializeData(ByteBuffer buffer, SimpleAddress address) { + try { + buffer.put(Inet4Address.getByName(MaskUtil.getAddressStringForIpPrefix(address.getIpPrefix())).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(Ipv4PrefixAfi.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(deserializeData(buffer, ctx)).build()); + return eb.build(); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + throw new LispSerializationException("RLOCs should not be deserialized into prefixes!"); + } + + @Override + protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + return new SimpleAddress(new IpPrefix(deserializeData(buffer, ctx))); + } + + private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix + deserializeData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + byte[] ipBuffer = new byte[4]; + InetAddress address = null; + buffer.get(ipBuffer); + try { + address = InetAddress.getByAddress(ipBuffer); + } catch (UnknownHostException e) { + } + return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix( + address.getHostAddress() + "/" + ctx.getMaskLen()); + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4Serializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4Serializer.java new file mode 100644 index 000000000..ba09ebaeb --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv4Serializer.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.serializer.address; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +/** + * @author Lorand Jakab + * + */ +public class Ipv4Serializer extends LispAddressSerializer { + + private static final Ipv4Serializer INSTANCE = new Ipv4Serializer(); + + // Private constructor prevents instantiation from other classes + private Ipv4Serializer() { + } + + public static Ipv4Serializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return Length.IPV4; + } + + @Override + public int getAddressSize(SimpleAddress simpleAddress) { + return Length.IPV4; + } + + @Override + protected short getAfi() { + return (short) AddressFamily.IpV4.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + Ipv4 address = (Ipv4) lispAddress.getAddress(); + try { + buffer.put(Inet4Address.getByName(address.getIpv4().getValue()).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected void serializeData(ByteBuffer buffer, SimpleAddress address) { + try { + buffer.put(Inet4Address.getByName(address.getIpAddress().getIpv4Address().getValue()).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(Ipv4Afi.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(new Ipv4Builder().setIpv4(deserializeData(buffer)).build()); + return eb.build(); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(Ipv4Afi.class); + rb.setVirtualNetworkId(null); + rb.setAddress(new Ipv4Builder().setIpv4(deserializeData(buffer)).build()); + return rb.build(); + } + + @Override + protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + return new SimpleAddress(new IpAddress(deserializeData(buffer))); + } + + private Ipv4Address deserializeData(ByteBuffer buffer) { + byte[] ipBuffer = new byte[4]; + InetAddress address = null; + buffer.get(ipBuffer); + try { + address = InetAddress.getByAddress(ipBuffer); + } catch (UnknownHostException e) { + } + return new Ipv4Address(address.getHostAddress()); + } + + protected interface Length { + int IPV4 = 4; + } + +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6PrefixSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6PrefixSerializer.java new file mode 100644 index 000000000..8438cf2b9 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6PrefixSerializer.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.serializer.address; + +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv6Serializer.Length; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; + +/** + * @author Lorand Jakab + * + */ +public class Ipv6PrefixSerializer extends LispAddressSerializer { + + private static final Ipv6PrefixSerializer INSTANCE = new Ipv6PrefixSerializer(); + + // Private constructor prevents instantiation from other classes + private Ipv6PrefixSerializer() { + } + + public static Ipv6PrefixSerializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return Length.IPV6; // XXX does this need to worry about the mask too? + } + + @Override + public int getAddressSize(SimpleAddress simpleAddress) { + return Length.IPV6; // XXX does this need to worry about the mask too? + } + + @Override + protected short getAfi() { + return (short) AddressFamily.IpV6.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + Ipv6Prefix address = (Ipv6Prefix) lispAddress.getAddress(); + try { + buffer.put(Inet6Address.getByName(MaskUtil.getAddressStringForIpv6Prefix(address)).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected void serializeData(ByteBuffer buffer, IpPrefix prefix) { + try { + buffer.put(Inet6Address.getByName(prefix.getIpv6Prefix().getValue()).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(Ipv6PrefixAfi.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(deserializeData(buffer, ctx)).build()); + return eb.build(); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + throw new LispSerializationException("RLOCs should not be deserialized into prefixes!"); + } + + @Override + protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + return new SimpleAddress(new IpPrefix(deserializeData(buffer, ctx))); + } + + private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix + deserializeData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + byte[] ipBuffer = new byte[16]; + InetAddress address = null; + buffer.get(ipBuffer); + try { + address = InetAddress.getByAddress(ipBuffer); + } catch (UnknownHostException e) { + } + return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix( + address.getHostAddress() + "/" + ctx.getMaskLen()); + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6Serializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6Serializer.java new file mode 100644 index 000000000..72ed95a35 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/Ipv6Serializer.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.serializer.address; + +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +/** + * @author Lorand Jakab + * + */ +public class Ipv6Serializer extends LispAddressSerializer { + + private static final Ipv6Serializer INSTANCE = new Ipv6Serializer(); + + // Private constructor prevents instantiation from other classes + private Ipv6Serializer() { + } + + public static Ipv6Serializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return Length.IPV6; + } + + @Override + public int getAddressSize(SimpleAddress simpleAddress) { + return Length.IPV6; + } + + @Override + protected short getAfi() { + return (short) AddressFamily.IpV6.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + Ipv6 address = (Ipv6) lispAddress.getAddress(); + try { + buffer.put(Inet6Address.getByName(address.getIpv6().getValue()).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected void serializeData(ByteBuffer buffer, SimpleAddress address) { + try { + buffer.put(Inet6Address.getByName(address.getIpAddress().getIpv6Address().getValue()).getAddress()); + } catch (UnknownHostException e) { + } + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(Ipv6Afi.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(new Ipv6Builder().setIpv6(deserializeData(buffer)).build()); + return eb.build(); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(Ipv6Afi.class); + rb.setVirtualNetworkId(null); + rb.setAddress(new Ipv6Builder().setIpv6(deserializeData(buffer)).build()); + return rb.build(); + } + + @Override + protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + return new SimpleAddress(new IpAddress(deserializeData(buffer))); + } + + private Ipv6Address deserializeData(ByteBuffer buffer) { + byte[] ipBuffer = new byte[16]; + InetAddress address = null; + buffer.get(ipBuffer); + try { + address = InetAddress.getByAddress(ipBuffer); + } catch (UnknownHostException e) { + } + return new Ipv6Address(address.getHostAddress()); + } + + protected interface Length { + int IPV6 = 16; + } + +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/KeyValueAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/KeyValueAddressSerializer.java new file mode 100644 index 000000000..58ce5de7d --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/KeyValueAddressSerializer.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class KeyValueAddressSerializer extends LcafSerializer { + + private static final KeyValueAddressSerializer INSTANCE = new KeyValueAddressSerializer(); + + // Private constructor prevents instantiation from other classes + private KeyValueAddressSerializer() { + } + + public static KeyValueAddressSerializer getInstance() { + return INSTANCE; + } + + @Override + protected byte getLcafType() { + return LispCanonicalAddressFormatEnum.KEY_VALUE.getLispCode(); + } + + @Override + protected short getLcafLength(LispAddress lispAddress) { + KeyValueAddress kva = (KeyValueAddress) lispAddress.getAddress(); + return (short) (SimpleAddressSerializer.getInstance().getAddressSize(kva.getKeyValueAddress().getKey()) + + SimpleAddressSerializer.getInstance().getAddressSize(kva.getKeyValueAddress().getValue())); + } + + @Override + protected short getAfi() { + return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + KeyValueAddress kva = (KeyValueAddress) lispAddress.getAddress(); + SimpleAddressSerializer.getInstance().serialize(buffer, kva.getKeyValueAddress().getKey()); + SimpleAddressSerializer.getInstance().serialize(buffer, kva.getKeyValueAddress().getValue()); + } + + @Override + protected Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(KeyValueAddressLcaf.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(deserializeData(buffer, ctx)); + return eb.build(); + } + + @Override + protected Rloc deserializeLcafRlocData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(KeyValueAddressLcaf.class); + rb.setVirtualNetworkId(null); + rb.setAddress(deserializeData(buffer, ctx)); + return rb.build(); + } + + private Address deserializeData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + SimpleAddress keyAddress = SimpleAddressSerializer.getInstance().deserialize(buffer, ctx); + SimpleAddress valueAddress = SimpleAddressSerializer.getInstance().deserialize(buffer, ctx); + KeyValueAddressBuilder kvab = new KeyValueAddressBuilder(); + kvab.setKey(keyAddress); + kvab.setValue(valueAddress); + return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder() + .setKeyValueAddress(kvab.build()).build(); + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LcafSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LcafSerializer.java new file mode 100644 index 000000000..975f76606 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LcafSerializer.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.serializer.address.factory.LispAddressSerializerFactory; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.util.AddressTypeMap; +import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; + +public class LcafSerializer extends LispAddressSerializer { + + private static final LcafSerializer INSTANCE = new LcafSerializer(); + + // Private constructor prevents instantiation from other classes + protected LcafSerializer() { + } + + public static LcafSerializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return Length.LCAF_HEADER + + LispAddressSerializerFactory.getSerializer(lispAddress.getAddressType()).getLcafLength(lispAddress); + } + + protected int getLcafHeaderSize() { + return Length.LCAF_HEADER; + } + + protected short getLcafLength(LispAddress lispAddress) { + throw new RuntimeException("Not implemented"); + } + + @Override + protected short getAfi() { + return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + LispAddressSerializer lcafSerializer = LispAddressSerializerFactory.getSerializer(lispAddress.getAddressType()); + serializeLCAFAddressHeader(buffer, lispAddress, lcafSerializer); + buffer.putShort(lcafSerializer.getLcafLength(lispAddress)); + lcafSerializer.serializeData(buffer, lispAddress); + } + + protected void serializeLCAFAddressHeaderForInstanceId(ByteBuffer buffer, LispAddress lispAddress) { + LispAddressSerializer lcafSerializer = InstanceIdSerializer.getInstance(); + serializeLCAFAddressHeader(buffer, lispAddress, lcafSerializer); + buffer.putShort((short) (lcafSerializer.getLcafLength(lispAddress) - + LispAddressSerializer.getInstance().getInstanceIdExtraSize())); + } + + private void serializeLCAFAddressHeader(ByteBuffer buffer, LispAddress lispAddress, + LispAddressSerializer serializer) { + buffer.putShort((short) 0); // RES + Flags. + buffer.put(serializer.getLcafType()); + buffer.put((byte) 0); + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + buffer.position(buffer.position() + Length.RES + Length.FLAGS); + byte lcafType = (byte) ByteUtil.getUnsignedByte(buffer); + Class addressType = AddressTypeMap.getLcafType(lcafType); + // TODO move these to ctx to shorten the list of arguments + byte res2 = buffer.get(); + short length = buffer.getShort(); + + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(addressType); + if (serializer == null) { + throw new LispSerializationException("Unknown LCAF type: " + lcafType); + } + // Reset the mask context here, since the general mask length field in mapping records doesn't apply to LCAF + // address types; except for Instance ID, since we don't store it as an LCAF + if (ctx != null && addressType != InstanceIdLcaf.class) { + ctx.setMaskLen(LispAddressSerializerContext.MASK_LEN_MISSING); + } + return serializer.deserializeLcafEidData(buffer, res2, length, ctx); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + buffer.position(buffer.position() + Length.RES + Length.FLAGS); + byte lcafType = (byte) ByteUtil.getUnsignedByte(buffer); + Class addressType = AddressTypeMap.getLcafType(lcafType); + byte res2 = buffer.get(); + short length = buffer.getShort(); + + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(addressType); + if (serializer == null) { + throw new LispSerializationException("Unknown LCAF type: " + lcafType); + } + return serializer.deserializeLcafRlocData(buffer, res2, length, null); + } + + private interface Length { + int RES = 1; + int FLAGS = 1; + + int LCAF_HEADER = 6; + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializer.java index aca356b6c..b3d08a8ab 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializer.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializer.java @@ -9,14 +9,23 @@ package org.opendaylight.lispflowmapping.lisp.serializer.address; import java.nio.ByteBuffer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.factory.LispAFIAddressSerializerFactory; +import org.opendaylight.lispflowmapping.lisp.serializer.address.factory.LispAddressSerializerFactory; import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; +import org.opendaylight.lispflowmapping.lisp.util.AddressTypeMap; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Lcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; public class LispAddressSerializer { private static final LispAddressSerializer INSTANCE = new LispAddressSerializer(); + public static final InstanceIdType DEFAULT_VNI = new InstanceIdType(0L); // Private constructor prevents instantiation from other classes protected LispAddressSerializer() { @@ -26,52 +35,138 @@ public class LispAddressSerializer { return INSTANCE; } - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - throw new RuntimeException("UnImplemented"); + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + throw new RuntimeException("Unimplemented"); } - protected LispAFIAddress deserializeData(ByteBuffer buffer) { - throw new RuntimeException("UnImplemented"); + protected void serializeData(ByteBuffer buffer, SimpleAddress lispAddress) { + throw new RuntimeException("Unimplemented"); } - public void serialize(ByteBuffer buffer, LispAFIAddress lispAddress) { - LispAddressSerializer serializer = LispAFIAddressSerializerFactory.getSerializer(AddressFamilyNumberEnum.valueOf(lispAddress.getAfi())); + protected void serializeData(ByteBuffer buffer, IpPrefix lispAddress) { + throw new RuntimeException("Unimplemented"); + } + + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + throw new RuntimeException("Unimplemented"); + } + + protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + throw new RuntimeException("Unimplemented"); + } + + protected Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, + LispAddressSerializerContext ctx) { + throw new RuntimeException("Unimplemented"); + } + + protected Rloc deserializeRlocData(ByteBuffer buffer) { + throw new RuntimeException("Unimplemented"); + } + + protected Rloc deserializeLcafRlocData(ByteBuffer buffer, byte res2, short length, + LispAddressSerializerContext ctx) { + throw new RuntimeException("Unimplemented"); + } + + protected short getAfi() { + throw new RuntimeException("Unimplemented"); + } + + protected byte getLcafType() { + throw new RuntimeException("Unimplemented"); + } + + protected short getLcafLength(LispAddress lispAddress) { + throw new RuntimeException("Unimplemented"); + } + + protected int getAddressSize(SimpleAddress address) { + throw new RuntimeException("Unimplemented"); + } + + protected InstanceIdType getVni(LispAddressSerializerContext ctx) { + if (ctx != null) { + return ctx.getVni(); + } + return null; + } + + public void serialize(ByteBuffer buffer, LispAddress lispAddress) { + if (lispAddress.getVirtualNetworkId() != null) { + serializeInstanceIdExtra(buffer, lispAddress); + } + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(lispAddress.getAddressType()); if (serializer == null) { - throw new LispSerializationException("Unknown AFI type=" + lispAddress.getAfi()); + throw new LispSerializationException("Unknown address type: " + + lispAddress.getAddressType().getSimpleName()); } - serializeAFIAddressHeader(buffer, lispAddress); + short afi = serializer.getAfi(); + if (afi == (short) AddressFamily.LispCanonicalAddressFormat.getIntValue()) { + serializer = LispAddressSerializerFactory.getSerializer(Lcaf.class); + } + buffer.putShort(afi); serializer.serializeData(buffer, lispAddress); } - protected static void serializeAFIAddressHeader(ByteBuffer buffer, LispAFIAddress lispAddress) { - buffer.putShort(lispAddress.getAfi()); + private void serializeInstanceIdExtra(ByteBuffer buffer, LispAddress lispAddress) { + buffer.putShort((short) AddressFamily.LispCanonicalAddressFormat.getIntValue()); + LcafSerializer.getInstance().serializeLCAFAddressHeaderForInstanceId(buffer, lispAddress); + InstanceIdSerializer.getInstance().serializeNonLcafAddress(buffer, lispAddress); } - public int getAddressSize(LispAFIAddress lispAddress) { - AddressFamilyNumberEnum afiType = AddressFamilyNumberEnum.valueOf(lispAddress.getAfi()); - LispAddressSerializer serializer = LispAFIAddressSerializerFactory.getSerializer(afiType); + public int getAddressSize(LispAddress lispAddress) { + int size = Length.AFI; + if (lispAddress.getVirtualNetworkId() != null) { + size += getInstanceIdExtraSize(); + } + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(lispAddress.getAddressType()); if (serializer == null) { - throw new LispSerializationException("Unknown AFI type=" + afiType); + throw new LispSerializationException("Unknown address type: " + + lispAddress.getAddressType().getSimpleName()); } - return Length.AFI + serializer.getAddressSize(lispAddress); + return size + serializer.getAddressSize(lispAddress); } - public LispAFIAddress deserialize(ByteBuffer buffer) { + int getInstanceIdExtraSize() { + return LcafSerializer.getInstance().getLcafHeaderSize() + + InstanceIdSerializer.getInstance().getInstanceIdSize() + + Length.AFI; + } + + public Eid deserializeEid(ByteBuffer buffer, LispAddressSerializerContext ctx) { short afi = buffer.getShort(); - AddressFamilyNumberEnum afiType = AddressFamilyNumberEnum.valueOf(afi); - LispAddressSerializer serializer = LispAFIAddressSerializerFactory.getSerializer(afiType); + // AddressTypeMap indexes IPv4 and IPv6 prefixes (vs simple addresses) with the negative AFI values -1 and -2 + if ((afi == 1 || afi == 2) && ctx.getMaskLen() != LispAddressSerializerContext.MASK_LEN_MISSING) { + afi *= -1; + } + Class addressType = AddressTypeMap.getAddressType(afi); + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(addressType); if (serializer == null) { - throw new LispSerializationException("Unknown AFI type=" + afiType); + throw new LispSerializationException("Unknown AFI: " + afi); } try { - return serializer.deserializeData(buffer); + return serializer.deserializeEidData(buffer, ctx); } catch (RuntimeException e) { - throw new LispSerializationException("Problem deserializing AFI=" + afiType, e); + throw new LispSerializationException("Problem deserializing AFI " + afi + " in EID context", e); + } + } + + public Rloc deserializeRloc(ByteBuffer buffer) { + short afi = buffer.getShort(); + Class addressType = AddressTypeMap.getAddressType(afi); + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(addressType); + if (serializer == null) { + throw new LispSerializationException("Unknown AFI: " + afi); + } + try { + return serializer.deserializeRlocData(buffer); + } catch (RuntimeException e) { + throw new LispSerializationException("Problem deserializing AFI " + afi + " in RLOC context", e); } } private interface Length { int AFI = 2; } - } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializerContext.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializerContext.java new file mode 100644 index 000000000..6b22f61c3 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispAddressSerializerContext.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.serializer.address; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType; + +/** + * @author Lorand Jakab + * + */ +public class LispAddressSerializerContext { + public static final short MASK_LEN_MISSING = -1; + private InstanceIdType vni; + private short maskLen; + + public LispAddressSerializerContext(InstanceIdType vni) { + this(vni, MASK_LEN_MISSING); + } + + public LispAddressSerializerContext(short maskLen) { + this(null, maskLen); + } + + public LispAddressSerializerContext(InstanceIdType vni, short maskLength) { + this.vni = vni; + this.maskLen = maskLength; + } + + InstanceIdType getVni() { + return vni; + } + + void setVni(InstanceIdType vni) { + this.vni = vni; + } + + short getMaskLen() { + return maskLen; + } + + void setMaskLen(short maskLen) { + this.maskLen = maskLen; + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispApplicationDataLCAFAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispApplicationDataLCAFAddressSerializer.java deleted file mode 100644 index d05dd8dd6..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispApplicationDataLCAFAddressSerializer.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.lisp.util.NumberUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafApplicationDataAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafapplicationdataaddress.AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafapplicationdata.LcafApplicationDataAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; - -public class LispApplicationDataLCAFAddressSerializer extends LispLCAFAddressSerializer { - - private static final LispApplicationDataLCAFAddressSerializer INSTANCE = new LispApplicationDataLCAFAddressSerializer(); - - // Private constructor prevents instantiation from other classes - private LispApplicationDataLCAFAddressSerializer() { - } - - public static LispApplicationDataLCAFAddressSerializer getInstance() { - return INSTANCE; - } - - @Override - protected short getLcafLength(LispAFIAddress lispAddress) { - return (short) (Length.ALL_FIELDS + LispAddressSerializer.getInstance().getAddressSize( - LispAFIConvertor.toAFIfromPrimitive(((LcafApplicationDataAddress) lispAddress).getAddress().getPrimitiveAddress()))); - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - LcafApplicationDataAddress applicationDataAddress = ((LcafApplicationDataAddress) lispAddress); - buffer.put(ByteUtil.partialIntToByteArray(NumberUtil.asInt(applicationDataAddress.getIpTos()), Length.TOC)); - buffer.put((byte) NumberUtil.asShort(applicationDataAddress.getProtocol())); - if (applicationDataAddress.getLocalPortLow() != null) { - buffer.putShort(NumberUtil.asShort(applicationDataAddress.getLocalPortLow().getValue().shortValue())); - } else { - buffer.putShort((short) 0); - } - if (applicationDataAddress.getLocalPortHigh() != null) { - buffer.putShort(NumberUtil.asShort(applicationDataAddress.getLocalPortHigh().getValue().shortValue())); - } else { - buffer.putShort((short) 0); - } - if (applicationDataAddress.getRemotePortLow() != null) { - buffer.putShort(NumberUtil.asShort(applicationDataAddress.getRemotePortLow().getValue().shortValue())); - } else { - buffer.putShort((short) 0); - } - if (applicationDataAddress.getRemotePortHigh() != null) { - buffer.putShort(NumberUtil.asShort(applicationDataAddress.getRemotePortHigh().getValue().shortValue())); - } else { - buffer.putShort((short) 0); - } - LispAddressSerializer.getInstance().serialize(buffer, - LispAFIConvertor.toAFIfromPrimitive(((LcafApplicationDataAddress) lispAddress).getAddress().getPrimitiveAddress())); - } - - @Override - protected LcafApplicationDataAddress deserializeData(ByteBuffer buffer, byte res2, short length) { - - LcafApplicationDataAddrBuilder builder = new LcafApplicationDataAddrBuilder(); - byte[] rawIPTos = new byte[3]; - buffer.get(rawIPTos); - builder.setIpTos(ByteUtil.getPartialInt(rawIPTos)); - builder.setProtocol((short) ByteUtil.getUnsignedByte(buffer)); - builder.setLocalPortLow(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); - builder.setLocalPortHigh(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); - builder.setRemotePortLow(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); - builder.setRemotePortHigh(new PortNumber(ByteUtil.asUnsignedShort(buffer.getShort()))); - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(buffer); - builder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType((short) LispCanonicalAddressFormatEnum.APPLICATION_DATA.getLispCode()) - .setAddress(new AddressBuilder().setPrimitiveAddress((PrimitiveAddress) LispAFIConvertor.toPrimitive(address)).build()); - - return builder.build(); - } - - private interface Length { - int LOCAL_PORT_LOW = 2; - int LOCAL_PORT_HIGH = 2; - int REMOTE_PORT_LOW = 2; - int REMOTE_PORT_HIGH = 2; - int TOC = 3; - int PROTOCOL = 1; - int ALL_FIELDS = LOCAL_PORT_LOW + LOCAL_PORT_HIGH + REMOTE_PORT_LOW + REMOTE_PORT_HIGH + TOC + PROTOCOL; - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispDistinguishedNameAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispDistinguishedNameAddressSerializer.java deleted file mode 100644 index 3043eabc3..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispDistinguishedNameAddressSerializer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispDistinguishedNameAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedNameBuilder; - -public class LispDistinguishedNameAddressSerializer extends LispAddressSerializer { - - private static final LispDistinguishedNameAddressSerializer INSTANCE = new LispDistinguishedNameAddressSerializer(); - - // Private constructor prevents instantiation from other classes - private LispDistinguishedNameAddressSerializer() { - } - - public static LispDistinguishedNameAddressSerializer getInstance() { - return INSTANCE; - } - - @Override - public int getAddressSize(LispAFIAddress lispAddress) { - return ((LispDistinguishedNameAddress) lispAddress).getDistinguishedName().length() + 1; - - } - - @Override - protected LispDistinguishedNameAddress deserializeData(ByteBuffer buffer) { - StringBuilder sb = new StringBuilder(); - byte b = buffer.get(); - while (b != 0) { - sb.append((char) b); - b = buffer.get(); - } - return new DistinguishedNameBuilder().setAfi(AddressFamilyNumberEnum.DISTINGUISHED_NAME.getIanaCode()).setDistinguishedName((sb.toString())) - .build(); - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - LispDistinguishedNameAddress distinguishedNameAddress = (LispDistinguishedNameAddress) lispAddress; - buffer.put(distinguishedNameAddress.getDistinguishedName().getBytes()); - buffer.put((byte) 0); - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv4AddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv4AddressSerializer.java deleted file mode 100644 index 08242ab8f..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv4AddressSerializer.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.net.Inet4Address; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispIpv4Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; - -public class LispIpv4AddressSerializer extends LispAddressSerializer { - - 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(LispAFIAddress lispAddress) { - return Length.IPV4; - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - LispIpv4Address lispIpvAddress = (LispIpv4Address) lispAddress; - try { - buffer.put(Inet4Address.getByName(lispIpvAddress.getIpv4Address().getValue()).getAddress()); - } catch (UnknownHostException e) { - } - } - - @Override - protected LispIpv4Address deserializeData(ByteBuffer buffer) { - byte[] ipBuffer = new byte[4]; - InetAddress address = null; - buffer.get(ipBuffer); - try { - address = InetAddress.getByAddress(ipBuffer); - } catch (UnknownHostException e) { - } - return new Ipv4AddressBuilder().setIpv4Address(new Ipv4Address(address.getHostAddress())).setAfi(AddressFamilyNumberEnum.IP.getIanaCode()).build(); - } - - private interface Length { - int IPV4 = 4; - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv6AddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv6AddressSerializer.java deleted file mode 100644 index 79465b35f..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispIpv6AddressSerializer.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispIpv6Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; - -public class LispIpv6AddressSerializer extends LispAddressSerializer { - - 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(LispAFIAddress lispAddress) { - return Length.IPV6; - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - LispIpv6Address lispIpvAddress = (LispIpv6Address) lispAddress; - try { - buffer.put(Inet6Address.getByName(lispIpvAddress.getIpv6Address().getValue()).getAddress()); - } catch (UnknownHostException e) { - } - } - - @Override - protected LispIpv6Address deserializeData(ByteBuffer buffer) { - byte[] ipBuffer = new byte[16]; - InetAddress address = null; - buffer.get(ipBuffer); - try { - address = InetAddress.getByAddress(ipBuffer); - } catch (UnknownHostException e) { - } - return new Ipv6AddressBuilder().setIpv6Address(new Ipv6Address(address.getHostAddress())).setAfi((short) AddressFamilyNumberEnum.IP6.getIanaCode()) - .build(); - } - - private interface Length { - int IPV6 = 16; - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispKeyValueLCAFSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispKeyValueLCAFSerializer.java deleted file mode 100644 index a8417715b..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispKeyValueLCAFSerializer.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafKeyValueAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafkeyvalueaddress.KeyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafkeyvalueaddress.ValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; - -public class LispKeyValueLCAFSerializer extends LispLCAFAddressSerializer { - - private static final LispKeyValueLCAFSerializer INSTANCE = new LispKeyValueLCAFSerializer(); - - // Private constructor prevents instantiation from other classes - private LispKeyValueLCAFSerializer() { - } - - public static LispKeyValueLCAFSerializer getInstance() { - return INSTANCE; - } - - @Override - protected short getLcafLength(LispAFIAddress lispAddress) { - return (short) (LispAddressSerializer.getInstance().getAddressSize( - LispAFIConvertor.toAFIfromPrimitive(((LcafKeyValueAddress) lispAddress).getKey().getPrimitiveAddress())) + LispAddressSerializer.getInstance() - .getAddressSize(LispAFIConvertor.toAFIfromPrimitive(((LcafKeyValueAddress) lispAddress).getValue().getPrimitiveAddress()))); - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - LcafKeyValueAddress lispKeyValueLCAFAddress = ((LcafKeyValueAddress) lispAddress); - LispAddressSerializer.getInstance().serialize(buffer, LispAFIConvertor.toAFIfromPrimitive(lispKeyValueLCAFAddress.getKey().getPrimitiveAddress())); - LispAddressSerializer.getInstance().serialize(buffer, LispAFIConvertor.toAFIfromPrimitive(lispKeyValueLCAFAddress.getValue().getPrimitiveAddress())); - } - - @Override - protected LcafKeyValueAddress deserializeData(ByteBuffer buffer, byte res2, short length) { - LispAFIAddress keyAddress = LispAddressSerializer.getInstance().deserialize(buffer); - LispAFIAddress valueAddress = LispAddressSerializer.getInstance().deserialize(buffer); - LcafKeyValueAddressAddrBuilder builder = new LcafKeyValueAddressAddrBuilder(); - builder.setKey(new KeyBuilder().setPrimitiveAddress((PrimitiveAddress) LispAFIConvertor.toPrimitive(keyAddress)).build()); - builder.setValue(new ValueBuilder().setPrimitiveAddress((PrimitiveAddress) LispAFIConvertor.toPrimitive(valueAddress)).build()); - builder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()); - builder.setLcafType((short) LispCanonicalAddressFormatEnum.KEY_VALUE.getLispCode()); - - return builder.build(); - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispLCAFAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispLCAFAddressSerializer.java deleted file mode 100644 index cc77f825f..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispLCAFAddressSerializer.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.serializer.address.factory.LispLCAFAddressSerializerFactory; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.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 - protected LispLcafAddress deserializeData(ByteBuffer buffer) { - buffer.position(buffer.position() + Length.RES + Length.FLAGS); - byte lispCode = (byte) ByteUtil.getUnsignedByte(buffer); - LispCanonicalAddressFormatEnum lcafType = LispCanonicalAddressFormatEnum.valueOf(lispCode); - byte res2 = buffer.get(); - short length = buffer.getShort(); - - LispLCAFAddressSerializer serializer = LispLCAFAddressSerializerFactory.getLCAFSerializer(lcafType); - if (serializer == null) { - throw new LispSerializationException("Unknown LispLCAFAddress type=" + lispCode); - } - return serializer.deserializeData(buffer, res2, length); - } - - protected LispLcafAddress deserializeData(ByteBuffer buffer, byte res2, short length) { - throw new RuntimeException("Not implemented"); - } - - @Override - public int getAddressSize(LispAFIAddress lispAddress) { - return Length.LCAF_HEADER - + LispLCAFAddressSerializerFactory.getLCAFSerializer( - LispCanonicalAddressFormatEnum.valueOf(((LispLcafAddress) lispAddress).getLcafType())).getLcafLength(lispAddress); - } - - protected short getLcafLength(LispAFIAddress lispAddress) { - throw new RuntimeException("Not implemented"); - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - serializeLCAFAddressHeader(buffer, lispAddress); - - LispLCAFAddressSerializer lcafSerializer = LispLCAFAddressSerializerFactory.getLCAFSerializer(LispCanonicalAddressFormatEnum - .valueOf(((LispLcafAddress) lispAddress).getLcafType())); - lcafSerializer.serializeData(buffer, lispAddress); - } - - private void serializeLCAFAddressHeader(ByteBuffer buffer, LispAFIAddress lispAddress) { - LispLcafAddress lispLcafAddress = (LispLcafAddress) lispAddress; - buffer.putShort((short) 0); // RES + Flags. - buffer.put(lispLcafAddress.getLcafType().byteValue()); - buffer.put((byte) 0); - LispLCAFAddressSerializer lcafSerializer = LispLCAFAddressSerializerFactory.getLCAFSerializer(LispCanonicalAddressFormatEnum - .valueOf(lispLcafAddress.getLcafType())); - buffer.putShort(lcafSerializer.getLcafLength(lispAddress)); - } - - private interface Length { - int RES = 1; - int FLAGS = 1; - - int LCAF_HEADER = 6; - } -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispListLCAFAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispListLCAFAddressSerializer.java deleted file mode 100644 index ded1f35a7..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispListLCAFAddressSerializer.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafListAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaflistaddress.Addresses; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaflistaddress.AddressesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaflist.LcafListAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; - -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 - protected short getLcafLength(LispAFIAddress lispAddress) { - short totalSize = 0; - for (Addresses address : ((LcafListAddress) lispAddress).getAddresses()) { - totalSize += LispAddressSerializer.getInstance().getAddressSize(LispAFIConvertor.toAFIfromPrimitive(address.getPrimitiveAddress())); - } - return totalSize; - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - for (Addresses address : ((LcafListAddress) lispAddress).getAddresses()) { - LispAddressSerializer.getInstance().serialize(buffer, LispAFIConvertor.toAFIfromPrimitive(address.getPrimitiveAddress())); - } - } - - @Override - public LcafListAddress deserializeData(ByteBuffer buffer, byte res2, short length) { - List addresses = new ArrayList(); - while (length > 0) { - PrimitiveAddress address = LispAFIConvertor.toPrimitive(LispAddressSerializer.getInstance().deserialize(buffer)); - length -= LispAddressSerializer.getInstance().getAddressSize(LispAFIConvertor.toAFIfromPrimitive(address)); - addresses.add(new AddressesBuilder().setName("Address " + (addresses.size()+1)) - .setPrimitiveAddress((PrimitiveAddress) address).build()); - } - return new LcafListAddrBuilder().setAddresses(addresses).setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()) - .setLcafType((short) LispCanonicalAddressFormatEnum.LIST.getLispCode()).build(); - } -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispMACAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispMACAddressSerializer.java deleted file mode 100644 index 8bb7266fb..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispMACAddressSerializer.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import javax.xml.bind.DatatypeConverter; - -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispMacAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; - -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(LispAFIAddress lispAddress) { - return Length.MAC; - } - - @Override - protected LispMacAddress deserializeData(ByteBuffer buffer) { - byte[] macBuffer = new byte[6]; - buffer.get(macBuffer); - StringBuilder sb = new StringBuilder(17); - for (byte b : macBuffer) { - if (sb.length() > 0) - sb.append(':'); - sb.append(String.format("%02x", b)); - } - return new MacAddressBuilder().setMacAddress(new MacAddress(sb.toString())).setAfi((short) 16389).build(); - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - LispMacAddress lispMACAddress = (LispMacAddress) lispAddress; - String macString = lispMACAddress.getMacAddress().getValue(); - macString = macString.replaceAll(":", ""); - buffer.put(DatatypeConverter.parseHexBinary(macString)); - } - - private interface Length { - int MAC = 6; - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispNoAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispNoAddressSerializer.java deleted file mode 100644 index 6ace1b233..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispNoAddressSerializer.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispNoAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.no.NoAddressBuilder; - -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 int getAddressSize(LispAFIAddress lispAddress) { - return Length.NO; - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - } - - @Override - protected LispNoAddress deserializeData(ByteBuffer buffer) { - return new NoAddressBuilder().setAfi(AddressFamilyNumberEnum.NO_ADDRESS.getIanaCode()).build(); - } - - private interface Length { - int NO = 0; - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSegmentLCAFAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSegmentLCAFAddressSerializer.java deleted file mode 100644 index a5318a705..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSegmentLCAFAddressSerializer.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafSegmentAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsegmentaddress.AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsegment.LcafSegmentAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; - -public class LispSegmentLCAFAddressSerializer extends LispLCAFAddressSerializer { - - private static final int MAX_INSTANCE_ID = 16777216; - private static final LispSegmentLCAFAddressSerializer INSTANCE = new LispSegmentLCAFAddressSerializer(); - - // Private constructor prevents instantiation from other classes - private LispSegmentLCAFAddressSerializer() { - } - - public static LispSegmentLCAFAddressSerializer getInstance() { - return INSTANCE; - } - - @Override - protected short getLcafLength(LispAFIAddress lispAddress) { - return (short) (Length.INSTANCE + LispAddressSerializer.getInstance().getAddressSize( - LispAFIConvertor.toAFIfromPrimitive(((LcafSegmentAddress) lispAddress).getAddress().getPrimitiveAddress()))); - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - // The IID mask-len field is in the LCAF header on the res2 position - buffer.put(buffer.position() - 3, ((LcafSegmentAddress) lispAddress).getIidMaskLength().byteValue()); - - buffer.putInt(((LcafSegmentAddress) lispAddress).getInstanceId().intValue()); - LispAddressSerializer.getInstance().serialize(buffer, LispAFIConvertor.toAFIfromPrimitive(((LcafSegmentAddress) lispAddress).getAddress().getPrimitiveAddress())); - } - - @Override - protected LcafSegmentAddress deserializeData(ByteBuffer buffer, byte res2, short length) { - long instanceId = (int) ByteUtil.asUnsignedInteger(buffer.getInt()); - - if (instanceId > MAX_INSTANCE_ID) { - throw new LispSerializationException("Instance ID is longer than 24 bits. got " + instanceId); - } - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(buffer); - LcafSegmentAddrBuilder builder = new LcafSegmentAddrBuilder(); - builder.setInstanceId(instanceId); - builder.setIidMaskLength((short) res2); - builder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType((short) LispCanonicalAddressFormatEnum.SEGMENT.getLispCode()) - .setAddress(new AddressBuilder().setPrimitiveAddress((PrimitiveAddress) LispAFIConvertor.toPrimitive(address)).build()); - - return builder.build(); - } - - private interface Length { - int INSTANCE = 4; - } -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSourceDestLCAFAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSourceDestLCAFAddressSerializer.java deleted file mode 100644 index d5e846586..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispSourceDestLCAFAddressSerializer.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafSourceDestAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.DstAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.SrcAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; - -public class LispSourceDestLCAFAddressSerializer extends LispLCAFAddressSerializer { - - private static final LispSourceDestLCAFAddressSerializer INSTANCE = new LispSourceDestLCAFAddressSerializer(); - - // Private constructor prevents instantiation from other classes - private LispSourceDestLCAFAddressSerializer() { - } - - public static LispSourceDestLCAFAddressSerializer getInstance() { - return INSTANCE; - } - - @Override - protected short getLcafLength(LispAFIAddress lispAddress) { - return (short) (Length.ALL_FIELDS - + LispAddressSerializer.getInstance().getAddressSize( - LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDestAddress) lispAddress).getSrcAddress().getPrimitiveAddress())) + LispAddressSerializer - .getInstance().getAddressSize(LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDestAddress) lispAddress).getDstAddress().getPrimitiveAddress()))); - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - LcafSourceDestAddress lispSourceDestLCAFAddress = ((LcafSourceDestAddress) lispAddress); - buffer.putShort((short) 0); - buffer.put(lispSourceDestLCAFAddress.getSrcMaskLength().byteValue()); - buffer.put(lispSourceDestLCAFAddress.getDstMaskLength().byteValue()); - LispAddressSerializer.getInstance().serialize(buffer, LispAFIConvertor.toAFIfromPrimitive(lispSourceDestLCAFAddress.getSrcAddress().getPrimitiveAddress())); - LispAddressSerializer.getInstance().serialize(buffer, LispAFIConvertor.toAFIfromPrimitive(lispSourceDestLCAFAddress.getDstAddress().getPrimitiveAddress())); - } - - @Override - protected LcafSourceDestAddress deserializeData(ByteBuffer buffer, byte res2, short length) { - short res = buffer.getShort(); - short srcMaskLength = (short) ByteUtil.getUnsignedByte(buffer); - short dstMaskLength = (short) ByteUtil.getUnsignedByte(buffer); - LispAFIAddress srcAddress = LispAddressSerializer.getInstance().deserialize(buffer); - srcAddress = MaskUtil.fixMask(srcAddress, srcMaskLength); - LispAFIAddress dstAddress = LispAddressSerializer.getInstance().deserialize(buffer); - dstAddress = MaskUtil.fixMask(dstAddress, dstMaskLength); - LcafSourceDestAddrBuilder builder = new LcafSourceDestAddrBuilder(); - builder.setDstMaskLength((short) dstMaskLength).setSrcMaskLength((short) srcMaskLength); - builder.setSrcAddress(new SrcAddressBuilder().setPrimitiveAddress((PrimitiveAddress) LispAFIConvertor.toPrimitive(srcAddress)).build()); - builder.setDstAddress(new DstAddressBuilder().setPrimitiveAddress((PrimitiveAddress) LispAFIConvertor.toPrimitive(dstAddress)).build()); - builder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()); - builder.setLcafType((short) LispCanonicalAddressFormatEnum.SOURCE_DEST.getLispCode()); - - return builder.build(); - } - - private interface Length { - int SOURCE_MASK_LENGTH = 1; - int DEST_MASK_LENGTH = 1; - int RESERVED = 2; - int ALL_FIELDS = SOURCE_MASK_LENGTH + DEST_MASK_LENGTH + RESERVED; - } -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispTrafficEngineeringLCAFAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispTrafficEngineeringLCAFAddressSerializer.java deleted file mode 100644 index fe93c1581..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/LispTrafficEngineeringLCAFAddressSerializer.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang3.BooleanUtils; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafTrafficEngineeringAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaftrafficengineeringaddress.Hops; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaftrafficengineeringaddress.HopsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaftrafficengineering.LcafTrafficEngineeringAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.reencaphop.HopBuilder; - -public class LispTrafficEngineeringLCAFAddressSerializer extends LispLCAFAddressSerializer { - - private static final LispTrafficEngineeringLCAFAddressSerializer INSTANCE = new LispTrafficEngineeringLCAFAddressSerializer(); - - // Private constructor prevents instantiation from other classes - private LispTrafficEngineeringLCAFAddressSerializer() { - } - - public static LispTrafficEngineeringLCAFAddressSerializer getInstance() { - return INSTANCE; - } - - @Override - protected short getLcafLength(LispAFIAddress lispAddress) { - short totalSize = 0; - if (((LcafTrafficEngineeringAddress) lispAddress).getHops() != null) { - for (Hops hop : ((LcafTrafficEngineeringAddress) lispAddress).getHops()) { - totalSize += LispAddressSerializer.getInstance().getAddressSize(LispAFIConvertor.toAFIfromPrimitive(hop.getHop().getPrimitiveAddress())) + 2; - } - } - return totalSize; - } - - @Override - protected void serializeData(ByteBuffer buffer, LispAFIAddress lispAddress) { - if (((LcafTrafficEngineeringAddress) lispAddress).getHops() != null) { - for (Hops hop : ((LcafTrafficEngineeringAddress) lispAddress).getHops()) { - buffer.put((byte) 0); - buffer.put((byte) (ByteUtil.boolToBit(BooleanUtils.isTrue(hop.isLookup()), Flags.LOOKUP) | // - ByteUtil.boolToBit(BooleanUtils.isTrue(hop.isRLOCProbe()), Flags.RLOC_PROBE) | // - ByteUtil.boolToBit(BooleanUtils.isTrue(hop.isStrict()), Flags.STRICT))); - LispAddressSerializer.getInstance().serialize(buffer, LispAFIConvertor.toAFIfromPrimitive(hop.getHop().getPrimitiveAddress())); - } - } - } - - @Override - protected LcafTrafficEngineeringAddress deserializeData(ByteBuffer buffer, byte res2, short length) { - List hops = new ArrayList(); - while (length > 0) { - byte flags = (byte) buffer.getShort(); - boolean lookup = ByteUtil.extractBit(flags, Flags.LOOKUP); - boolean RLOCProbe = ByteUtil.extractBit(flags, Flags.RLOC_PROBE); - boolean strict = ByteUtil.extractBit(flags, Flags.STRICT); - PrimitiveAddress address = LispAFIConvertor.toPrimitive(LispAddressSerializer.getInstance().deserialize(buffer)); - HopsBuilder builder = new HopsBuilder(); - builder.setLookup(lookup); - builder.setRLOCProbe(RLOCProbe); - builder.setStrict(strict); - builder.setHop(new HopBuilder().setPrimitiveAddress(address).build()); - builder.setName("Hop " + (hops.size()+1)); - length -= LispAddressSerializer.getInstance().getAddressSize(LispAFIConvertor.toAFIfromPrimitive(address)) + 2; - hops.add(builder.build()); - } - return new LcafTrafficEngineeringAddrBuilder().setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()) - .setLcafType((short) LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode()).setHops(hops).build(); - } - - private interface Flags { - int LOOKUP = 0x04; - int RLOC_PROBE = 0x02; - int STRICT = 0x01; - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/MacSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/MacSerializer.java new file mode 100644 index 000000000..70f7b0644 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/MacSerializer.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import javax.xml.bind.DatatypeConverter; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class MacSerializer extends LispAddressSerializer { + + private static final MacSerializer INSTANCE = new MacSerializer(); + + // Private constructor prevents instantiation from other classes + private MacSerializer() { + } + + public static MacSerializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return Length.MAC; + } + + @Override + public int getAddressSize(SimpleAddress simpleAddress) { + return Length.MAC; + } + + @Override + protected short getAfi() { + return (short) AddressFamily._48BitMac.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + Mac mac = (Mac) lispAddress.getAddress(); + String macString = mac.getMac().getValue(); + macString = macString.replaceAll(":", ""); + buffer.put(DatatypeConverter.parseHexBinary(macString)); + } + + @Override + protected void serializeData(ByteBuffer buffer, SimpleAddress simpleAddress) { + String macString = simpleAddress.getMacAddress().getValue(); + macString = macString.replaceAll(":", ""); + buffer.put(DatatypeConverter.parseHexBinary(macString)); + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(MacAfi.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(new MacBuilder().setMac(deserializeData(buffer)).build()); + return eb.build(); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(MacAfi.class); + rb.setVirtualNetworkId(null); + rb.setAddress(new MacBuilder().setMac(deserializeData(buffer)).build()); + return rb.build(); + } + + @Override + protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + return new SimpleAddress(deserializeData(buffer)); + } + + private MacAddress deserializeData(ByteBuffer buffer) { + byte[] macBuffer = new byte[6]; + buffer.get(macBuffer); + StringBuilder sb = new StringBuilder(17); + for (byte b : macBuffer) { + if (sb.length() > 0) + sb.append(':'); + sb.append(String.format("%02x", b)); + } + return new MacAddress(sb.toString()); + } + + private interface Length { + int MAC = 6; + } + +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/NoAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/NoAddressSerializer.java new file mode 100644 index 000000000..3911260db --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/NoAddressSerializer.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class NoAddressSerializer extends LispAddressSerializer { + + private static final NoAddressSerializer INSTANCE = new NoAddressSerializer(); + + // Private constructor prevents instantiation from other classes + private NoAddressSerializer() { + } + + public static NoAddressSerializer getInstance() { + return INSTANCE; + } + + @Override + public int getAddressSize(LispAddress lispAddress) { + return Length.NO; + } + + @Override + protected short getAfi() { + return (short) 0; + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + } + + @Override + protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(NoAddressAfi.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(new NoAddressBuilder().setNoAddress(true).build()); + return eb.build(); + } + + @Override + protected Rloc deserializeRlocData(ByteBuffer buffer) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(NoAddressAfi.class); + rb.setVirtualNetworkId(null); + rb.setAddress(new NoAddressBuilder().setNoAddress(true).build()); + return rb.build(); + } + + private interface Length { + int NO = 0; + } + +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SimpleAddressSerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SimpleAddressSerializer.java new file mode 100644 index 000000000..ed86c46d3 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SimpleAddressSerializer.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.serializer.address.factory.LispAddressSerializerFactory; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.util.AddressTypeMap; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; + +/** + * @author Lorand Jakab + * + */ +public class SimpleAddressSerializer { + + private static final SimpleAddressSerializer INSTANCE = new SimpleAddressSerializer(); + + // Private constructor prevents instantiation from other classes + protected SimpleAddressSerializer() { + } + + public static SimpleAddressSerializer getInstance() { + return INSTANCE; + } + + public int getAddressSize(SimpleAddress address) { + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer( + AddressTypeMap.getSimpleAddressInnerType(address)); + return Length.AFI + serializer.getAddressSize(address); + } + + public void serialize(ByteBuffer buffer, SimpleAddress address) { + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer( + AddressTypeMap.getSimpleAddressInnerType(address)); + buffer.putShort(serializer.getAfi()); + serializer.serializeData(buffer, address); + } + + public SimpleAddress deserialize(ByteBuffer buffer, LispAddressSerializerContext ctx) { + short afi = buffer.getShort(); + // AddressTypeMap indexes IPv4 and IPv6 prefixes (vs simple addresses) with the negative AFI values -1 and -2 + if ((afi == 1 || afi == 2) && ctx != null && + ctx.getMaskLen() != LispAddressSerializerContext.MASK_LEN_MISSING) { + afi *= -1; + } + Class addressType = AddressTypeMap.getAddressType(afi); + LispAddressSerializer serializer = LispAddressSerializerFactory.getSerializer(addressType); + if (serializer == null) { + throw new LispSerializationException("Unknown AFI: " + afi); + } + try { + return serializer.deserializeSimpleAddressData(buffer, ctx); + } catch (RuntimeException e) { + throw new LispSerializationException("Problem deserializing AFI " + afi + " in SimpleAddress context", e); + } + } + + private interface Length { + int AFI = 2; + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SourceDestKeySerializer.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SourceDestKeySerializer.java new file mode 100644 index 000000000..dd595c35e --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/SourceDestKeySerializer.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2014 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.lisp.serializer.address; + +import java.nio.ByteBuffer; + +import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; +import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; +import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class SourceDestKeySerializer extends LcafSerializer { + + private static final SourceDestKeySerializer INSTANCE = new SourceDestKeySerializer(); + + // Private constructor prevents instantiation from other classes + private SourceDestKeySerializer() { + } + + public static SourceDestKeySerializer getInstance() { + return INSTANCE; + } + + @Override + protected byte getLcafType() { + return LispCanonicalAddressFormatEnum.SOURCE_DEST.getLispCode(); + } + + @Override + protected short getLcafLength(LispAddress lispAddress) { + SourceDestKey sdk = (SourceDestKey) lispAddress.getAddress(); + return (short) (Length.ALL_FIELDS + + SimpleAddressSerializer.getInstance().getAddressSize(new SimpleAddress(sdk.getSourceDestKey().getSource())) + + SimpleAddressSerializer.getInstance().getAddressSize(new SimpleAddress(sdk.getSourceDestKey().getDest()))); + } + + @Override + protected short getAfi() { + return (short) AddressFamily.LispCanonicalAddressFormat.getIntValue(); + } + + @Override + protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) { + SourceDestKey sdk = (SourceDestKey) lispAddress.getAddress(); + buffer.putShort((short) 0); + buffer.put((byte) MaskUtil.getMaskForIpPrefix(sdk.getSourceDestKey().getSource())); + buffer.put((byte) MaskUtil.getMaskForIpPrefix(sdk.getSourceDestKey().getDest())); + SimpleAddressSerializer.getInstance().serialize(buffer, new SimpleAddress(sdk.getSourceDestKey().getSource())); + SimpleAddressSerializer.getInstance().serialize(buffer, new SimpleAddress(sdk.getSourceDestKey().getDest())); + } + + @Override + protected Eid deserializeLcafEidData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(SourceDestKeyLcaf.class); + eb.setVirtualNetworkId(getVni(ctx)); + eb.setAddress(deserializeData(buffer, ctx)); + return eb.build(); + } + + @Override + protected Rloc deserializeLcafRlocData(ByteBuffer buffer, byte res2, short length, LispAddressSerializerContext ctx) { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(SourceDestKeyLcaf.class); + rb.setVirtualNetworkId(null); + rb.setAddress(deserializeData(buffer, ctx)); + return rb.build(); + } + + private Address deserializeData(ByteBuffer buffer, LispAddressSerializerContext ctx) { + buffer.getShort(); // reserved bytes + short srcMaskLength = (short) ByteUtil.getUnsignedByte(buffer); + short dstMaskLength = (short) ByteUtil.getUnsignedByte(buffer); + ctx.setMaskLen(srcMaskLength); + SimpleAddress srcAddress = SimpleAddressSerializer.getInstance().deserialize(buffer, ctx); + ctx.setMaskLen(dstMaskLength); + SimpleAddress dstAddress = SimpleAddressSerializer.getInstance().deserialize(buffer, ctx); + SourceDestKeyBuilder sdb = new SourceDestKeyBuilder(); + sdb.setSource(srcAddress.getIpPrefix()); + sdb.setDest(dstAddress.getIpPrefix()); + return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder() + .setSourceDestKey(sdb.build()).build(); + } + + private interface Length { + int SOURCE_MASK_LENGTH = 1; + int DEST_MASK_LENGTH = 1; + int RESERVED = 2; + int ALL_FIELDS = SOURCE_MASK_LENGTH + DEST_MASK_LENGTH + RESERVED; + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAFIAddressSerializerFactory.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAFIAddressSerializerFactory.java deleted file mode 100644 index e99568df0..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAFIAddressSerializerFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address.factory; - -import java.util.HashMap; -import java.util.Map; - -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispDistinguishedNameAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispIpv4AddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispIpv6AddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispLCAFAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispMACAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispNoAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; - -public class LispAFIAddressSerializerFactory { - - private static Map afiToSearializerMap; - - private static void initializeMap() { - afiToSearializerMap = new HashMap(); - afiToSearializerMap.put(AddressFamilyNumberEnum.IP, LispIpv4AddressSerializer.getInstance()); - afiToSearializerMap.put(AddressFamilyNumberEnum.NO_ADDRESS, LispNoAddressSerializer.getInstance()); - afiToSearializerMap.put(AddressFamilyNumberEnum.IP6, LispIpv6AddressSerializer.getInstance()); - afiToSearializerMap.put(AddressFamilyNumberEnum.DISTINGUISHED_NAME, LispDistinguishedNameAddressSerializer.getInstance()); - afiToSearializerMap.put(AddressFamilyNumberEnum.LCAF, LispLCAFAddressSerializer.getInstance()); - afiToSearializerMap.put(AddressFamilyNumberEnum.MAC, LispMACAddressSerializer.getInstance()); - - } - - public static LispAddressSerializer getSerializer(AddressFamilyNumberEnum afi) { - if (afiToSearializerMap == null) { - initializeMap(); - } - return afiToSearializerMap.get(afi); - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAddressSerializerFactory.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAddressSerializerFactory.java new file mode 100644 index 000000000..21cea96f7 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispAddressSerializerFactory.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.serializer.address.factory; + +import java.util.HashMap; +import java.util.Map; + +import org.opendaylight.lispflowmapping.lisp.serializer.address.AfiListSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.ApplicationDataSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.DistinguishedNameSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.ExplicitLocatorPathSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.InstanceIdSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv4PrefixSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv6PrefixSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv6Serializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.KeyValueAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LcafSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv4Serializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.MacSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.NoAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.SourceDestKeySerializer; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AfiListLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ApplicationDataLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Lcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf; + +/** + * Factory for LispAddress (de)serializers + * + * @author Lorand Jakab + * + */ +public class LispAddressSerializerFactory { + private static Map, LispAddressSerializer> addressTypeToSerializerMap; + + private static void initializeMap() { + addressTypeToSerializerMap = new HashMap, LispAddressSerializer>(); + addressTypeToSerializerMap.put(NoAddressAfi.class, NoAddressSerializer.getInstance()); + addressTypeToSerializerMap.put(Ipv4Afi.class, Ipv4Serializer.getInstance()); + addressTypeToSerializerMap.put(Ipv4PrefixAfi.class, Ipv4PrefixSerializer.getInstance()); + addressTypeToSerializerMap.put(Ipv6Afi.class, Ipv6Serializer.getInstance()); + addressTypeToSerializerMap.put(Ipv6PrefixAfi.class, Ipv6PrefixSerializer.getInstance()); + addressTypeToSerializerMap.put(MacAfi.class, MacSerializer.getInstance()); + addressTypeToSerializerMap.put(DistinguishedNameAfi.class, DistinguishedNameSerializer.getInstance()); + addressTypeToSerializerMap.put(Lcaf.class, LcafSerializer.getInstance()); + addressTypeToSerializerMap.put(AfiListLcaf.class, AfiListSerializer.getInstance()); + addressTypeToSerializerMap.put(InstanceIdLcaf.class, InstanceIdSerializer.getInstance()); + addressTypeToSerializerMap.put(ApplicationDataLcaf.class, ApplicationDataSerializer.getInstance()); + addressTypeToSerializerMap.put(ExplicitLocatorPathLcaf.class, ExplicitLocatorPathSerializer.getInstance()); + addressTypeToSerializerMap.put(SourceDestKeyLcaf.class, SourceDestKeySerializer.getInstance()); + addressTypeToSerializerMap.put(KeyValueAddressLcaf.class, KeyValueAddressSerializer.getInstance()); + } + + public static LispAddressSerializer getSerializer(Class clazz) { + if (addressTypeToSerializerMap == null) { + initializeMap(); + } + return addressTypeToSerializerMap.get(clazz); + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispLCAFAddressSerializerFactory.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispLCAFAddressSerializerFactory.java deleted file mode 100644 index 12664c90f..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/address/factory/LispLCAFAddressSerializerFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.serializer.address.factory; - -import java.util.HashMap; -import java.util.Map; - -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispApplicationDataLCAFAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispKeyValueLCAFSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispLCAFAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispListLCAFAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispSegmentLCAFAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispSourceDestLCAFAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispTrafficEngineeringLCAFAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; - -public class LispLCAFAddressSerializerFactory { - - private static Map lcafToSearializerMap; - - private static void initializeMap() { - - lcafToSearializerMap = new HashMap(); - lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.LIST, LispListLCAFAddressSerializer.getInstance()); - lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.SEGMENT, LispSegmentLCAFAddressSerializer.getInstance()); - lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.APPLICATION_DATA, LispApplicationDataLCAFAddressSerializer.getInstance()); - lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING, LispTrafficEngineeringLCAFAddressSerializer.getInstance()); - lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.SOURCE_DEST, LispSourceDestLCAFAddressSerializer.getInstance()); - lcafToSearializerMap.put(LispCanonicalAddressFormatEnum.KEY_VALUE, LispKeyValueLCAFSerializer.getInstance()); - } - - public static LispLCAFAddressSerializer getLCAFSerializer(LispCanonicalAddressFormatEnum lcaf) { - if (lcafToSearializerMap == null) { - initializeMap(); - } - return lcafToSearializerMap.get(lcaf); - } - -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/type/AddressFamilyNumberEnum.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/type/AddressFamilyNumberEnum.java deleted file mode 100644 index dd22eb936..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/type/AddressFamilyNumberEnum.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.type; - -/** - * The AFI enum: - * http://www.iana.org/assignments/address-family-numbers/address-family - * -numbers.xhtml - */ -public enum AddressFamilyNumberEnum { - NO_ADDRESS(0), // - IP(1), // - IP6(2), // - DISTINGUISHED_NAME(17), // - AS(18), // - LCAF(16387), // - MAC(16389), // - UNKNOWN(-1); - - private short ianaCode; - - private AddressFamilyNumberEnum(int ianaCode) { - this.ianaCode = (short) ianaCode; - } - - public short getIanaCode() { - return ianaCode; - } - - public static AddressFamilyNumberEnum valueOf(short ianaCode) { - for (AddressFamilyNumberEnum val : values()) { - if (val.getIanaCode() == ianaCode) { - return val; - } - } - return UNKNOWN; - } -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/AddressTypeMap.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/AddressTypeMap.java new file mode 100644 index 000000000..dac6501fa --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/AddressTypeMap.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.util; + +import java.util.HashMap; +import java.util.Map; + +import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AfiListLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ApplicationDataLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AsNumberAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Lcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf; + +/** + * This class contains static HashMaps of AFIs and LCAF types to LispAddressFamily identities + * + * @author Lorand Jakab + * + */ +public final class AddressTypeMap { + private static Map> afiToAddressTypeMap; + private static Map> lcafToAddressTypeMap; + + private static void initializeAfiMap() { + afiToAddressTypeMap = new HashMap>(); + afiToAddressTypeMap.put((short) 0, NoAddressAfi.class); + afiToAddressTypeMap.put((short) AddressFamily.IpV4.getIntValue(), Ipv4Afi.class); + afiToAddressTypeMap.put((short) (AddressFamily.IpV4.getIntValue() * -1), Ipv4PrefixAfi.class); + afiToAddressTypeMap.put((short) AddressFamily.IpV6.getIntValue(), Ipv6Afi.class); + afiToAddressTypeMap.put((short) (AddressFamily.IpV6.getIntValue() * -1), Ipv6PrefixAfi.class); + afiToAddressTypeMap.put((short) AddressFamily.DistinguishedName.getIntValue(), DistinguishedNameAfi.class); + afiToAddressTypeMap.put((short) AddressFamily.AsNumber.getIntValue(), AsNumberAfi.class); + afiToAddressTypeMap.put((short) AddressFamily.LispCanonicalAddressFormat.getIntValue(), Lcaf.class); + afiToAddressTypeMap.put((short) AddressFamily._48BitMac.getIntValue(), MacAfi.class); + } + + private static void initializeLcafMap() { + lcafToAddressTypeMap = new HashMap>(); + lcafToAddressTypeMap.put((short) LispCanonicalAddressFormatEnum.LIST.getLispCode(), AfiListLcaf.class); + lcafToAddressTypeMap.put((short) LispCanonicalAddressFormatEnum.SEGMENT.getLispCode(), InstanceIdLcaf.class); + lcafToAddressTypeMap.put((short) LispCanonicalAddressFormatEnum.APPLICATION_DATA.getLispCode(), + ApplicationDataLcaf.class); + lcafToAddressTypeMap.put((short) LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode(), + ExplicitLocatorPathLcaf.class); + lcafToAddressTypeMap.put((short) LispCanonicalAddressFormatEnum.SOURCE_DEST.getLispCode(), + SourceDestKeyLcaf.class); + lcafToAddressTypeMap.put((short) LispCanonicalAddressFormatEnum.KEY_VALUE.getLispCode(), + KeyValueAddressLcaf.class); + // TODO + } + + public static Class getAddressType(short afi) { + if (afiToAddressTypeMap == null) { + initializeAfiMap(); + } + return afiToAddressTypeMap.get(afi); + } + + public static Class getLcafType(short lcafType) { + if (lcafToAddressTypeMap == null) { + initializeLcafMap(); + } + return lcafToAddressTypeMap.get(lcafType); + } + + public static Class getSimpleAddressInnerType(SimpleAddress address) { + if (address == null) { + return null; + } else if (address.getIpAddress() != null) { + if (address.getIpAddress().getIpv4Address() != null) { + return Ipv4Afi.class; + } else if (address.getIpAddress().getIpv6Address() != null) { + return Ipv6Afi.class; + } + } else if (address.getIpPrefix() != null) { + if (address.getIpPrefix().getIpv4Prefix() != null) { + return Ipv4PrefixAfi.class; + } else if (address.getIpPrefix().getIpv6Prefix() != null) { + return Ipv6PrefixAfi.class; + } + } else if (address.getMacAddress() != null) { + return MacAfi.class; + } else if (address.getAsNumber() != null) { + return AsNumberAfi.class; + } else if (address.getDistinguishedNameType() != null) { + return DistinguishedNameAfi.class; + } + return null; + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LcafSourceDestHelper.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LcafSourceDestHelper.java deleted file mode 100644 index d98e991ce..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LcafSourceDestHelper.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.util; - -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafSourceDestAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.DstAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.SrcAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSourceDest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author Florin Coras - * - */ - -public class LcafSourceDestHelper { - private final static Logger LOG = LoggerFactory.getLogger(LcafSourceDestHelper.class); - public static LispAFIAddress getSrcAfi(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return LispAFIConvertor.toAFI(addr); - } - return LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDest) addr.getAddress()).getLcafSourceDestAddr() - .getSrcAddress().getPrimitiveAddress()); - } - - public static LispAFIAddress getSrcAfi(LispAFIAddress addr) { - if (!isSrcDst(addr)) { - return addr; - } - return LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDestAddress) addr) - .getSrcAddress().getPrimitiveAddress()); - } - - public static LispAFIAddress getDstAfi(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return LispAFIConvertor.toAFI(addr); - } - return LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDest) addr.getAddress()).getLcafSourceDestAddr() - .getDstAddress().getPrimitiveAddress()); - } - - public static LispAFIAddress getDstAfi(LispAFIAddress addr) { - if (!isSrcDst(addr)) { - return addr; - } - return LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDestAddress) addr) - .getDstAddress().getPrimitiveAddress()); - } - - public static LispAddressContainer getSrc(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return addr; - } - return LispAFIConvertor.toContainer(LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDest) addr - .getAddress()).getLcafSourceDestAddr().getSrcAddress().getPrimitiveAddress())); } - - public static LispAddressContainer getDst(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return addr; - } - return LispAFIConvertor.toContainer(LispAFIConvertor.toAFIfromPrimitive(((LcafSourceDest) addr - .getAddress()).getLcafSourceDestAddr().getDstAddress().getPrimitiveAddress())); - } - - public static short getSrcMask(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return 0; - } - return ((LcafSourceDest) addr.getAddress()).getLcafSourceDestAddr().getSrcMaskLength(); - } - - public static short getDstMask(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return 0; - } - return ((LcafSourceDest) addr.getAddress()).getLcafSourceDestAddr().getDstMaskLength(); - } - - public static short getSrcMask(LispAFIAddress addr) { - if (!isSrcDst(addr)) { - return 0; - } - return ((LcafSourceDestAddress) addr).getSrcMaskLength(); - } - - public static short getDstMask(LispAFIAddress addr) { - if (!isSrcDst(addr)) { - return 0; - } - return ((LcafSourceDestAddress) addr).getDstMaskLength(); - } - - public static DstAddress getDstAddress(LispAFIAddress addr) { - if (!isSrcDst(addr)) { - return null; - } - return ((LcafSourceDestAddress)addr).getDstAddress(); - } - - public static SrcAddress getSrcAddress(LispAFIAddress addr) { - if (!isSrcDst(addr)) { - return null; - } - return ((LcafSourceDestAddress)addr).getSrcAddress(); - } - - public static DstAddress getDstAddress(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return null; - } - return ((LcafSourceDest)addr.getAddress()).getLcafSourceDestAddr().getDstAddress(); - } - - public static SrcAddress getSrcAddress(LispAddressContainer addr) { - if (!isSrcDst(addr)) { - return null; - } - return ((LcafSourceDest)addr.getAddress()).getLcafSourceDestAddr().getSrcAddress(); - } - - - private static boolean isSrcDst(LispAFIAddress addr) { - if (!(addr instanceof LcafSourceDestAddress)) { - LOG.warn("Address {} is not a valid SourceDest LCAF", addr); - return false; - } - return true; - } - - private static boolean isSrcDst(LispAddressContainer addr) { - if (!(addr.getAddress() instanceof LcafSourceDest)) { - LOG.warn("Address {} is not a valid SourceDest LCAF", addr); - return false; - } - return true; - } -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAFIConvertor.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAFIConvertor.java deleted file mode 100644 index a9b345816..000000000 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAFIConvertor.java +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright (c) 2014 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.lisp.util; - -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.InetAddress; - -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafkeyvalueaddress.KeyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafkeyvalueaddress.ValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainerBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.DistinguishedNameBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv4Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.MacBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.distinguishedname.DistinguishedNameAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.mac.MacAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; - -public class LispAFIConvertor { - - public static LispAddressContainer toContainer(LispAFIAddress address) { - Address addr = null; - - if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4Address) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4Builder() - .setIpv4Address( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4Address) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6Address) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6Builder() - .setIpv6Address( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6Address) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaftrafficengineering.LcafTrafficEngineeringAddr) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafTrafficEngineeringBuilder() - .setLcafTrafficEngineeringAddr( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaftrafficengineering.LcafTrafficEngineeringAddr) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.as.AS) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ASBuilder() - .setAS((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.as.AS) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedName) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.DistinguishedNameBuilder() - .setDistinguishedName( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedName) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafapplicationdata.LcafApplicationDataAddr) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafApplicationDataBuilder() - .setLcafApplicationDataAddr( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafapplicationdata.LcafApplicationDataAddr) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddr) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafKeyValueBuilder() - .setLcafKeyValueAddressAddr( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddr) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaflist.LcafListAddr) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafListBuilder() - .setLcafListAddr( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaflist.LcafListAddr) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsegment.LcafSegmentAddr) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSegmentBuilder() - .setLcafSegmentAddr( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsegment.LcafSegmentAddr) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddr) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSourceDestBuilder() - .setLcafSourceDestAddr( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddr) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddress) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.MacBuilder() - .setMacAddress( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddress) address) - .build(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.no.NoAddress) { - addr = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.NoBuilder() - .setNoAddress( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.no.NoAddress) address) - .build(); - } - return new LispAddressContainerBuilder().setAddress(addr).build(); - } - - public static LispAddressContainer toContainer(InetAddress address) { - if (address instanceof Inet4Address) { - return toContainer(asIPAfiAddress(address.getHostAddress())); - } - - if (address instanceof Inet6Address) { - return toContainer(asIPv6AfiAddress(address.getHostAddress())); - } - - return null; - } - - public static LispAFIAddress toAFI(LispAddressContainer container) { - Address address = container.getAddress(); - LispAFIAddress addr = null; - - if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4) address) - .getIpv4Address(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6) address) - .getIpv6Address(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafTrafficEngineering) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafTrafficEngineering) address) - .getLcafTrafficEngineeringAddr(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.AS) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.AS) address) - .getAS(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.DistinguishedName) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.DistinguishedName) address) - .getDistinguishedName(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafApplicationData) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafApplicationData) address) - .getLcafApplicationDataAddr(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafKeyValue) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafKeyValue) address) - .getLcafKeyValueAddressAddr(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafList) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafList) address) - .getLcafListAddr(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSegment) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSegment) address) - .getLcafSegmentAddr(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSourceDest) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSourceDest) address) - .getLcafSourceDestAddr(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Mac) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Mac) address) - .getMacAddress(); - } else if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.No) { - return ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.No) address) - .getNoAddress(); - } - - return addr; - } - - public static PrimitiveAddress toPrimitive(LispAFIAddress address) { - if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4Address) { - return new Ipv4Builder() - .setIpv4Address( - new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.ipv4.Ipv4AddressBuilder( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispIpv4Address) address) - .build()).build(); - } - if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6Address) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv6Builder() - .setIpv6Address( - new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.ipv6.Ipv6AddressBuilder( - (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispIpv6Address) address) - .build()).build(); - } - if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddress) { - return new MacBuilder() - .setMacAddress( - new MacAddressBuilder() - .setMacAddress( - ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddress) address) - .getMacAddress()) - .setAfi(address.getAfi()).build()).build(); - } - if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedName) { - return new DistinguishedNameBuilder() - .setDistinguishedNameAddress( - new DistinguishedNameAddressBuilder() - .setDistinguishedName( - ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedName) address) - .getDistinguishedName()) - .setAfi(address.getAfi()).build()).build(); - } - return null; - } - - public static LispAFIAddress toAFIfromPrimitive(PrimitiveAddress primitive) { - - if (primitive instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv4) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispsimpleaddress.primitiveaddress.Ipv4) primitive) - .getIpv4Address()).build(); - } - if (primitive instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv6) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispsimpleaddress.primitiveaddress.Ipv6) primitive) - .getIpv6Address()).build(); - } - if (primitive instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Mac) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddressBuilder() - .setAfi(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Mac) primitive) - .getMacAddress().getAfi()) - .setMacAddress( - ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Mac) primitive) - .getMacAddress().getMacAddress()).build(); - } - if (primitive instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.DistinguishedName) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedNameBuilder() - .setAfi(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.DistinguishedName) primitive) - .getDistinguishedNameAddress().getAfi()) - .setDistinguishedName( - ((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.DistinguishedName) primitive) - .getDistinguishedNameAddress() - .getDistinguishedName()).build(); - } - if (primitive instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.AS) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.as.ASBuilder() - .setAfi(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.AS) primitive) - .getASAddress().getAfi()) - .setAS(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.AS) primitive) - .getASAddress().getAS()).build(); - } - return null; - } - - public static LispAddressContainer getIPContainer(String ip) { - return toContainer(asIPAfiAddress(ip)); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedName asDistinguishedNameAddress( - String distName) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedNameBuilder() - .setAfi(AddressFamilyNumberEnum.DISTINGUISHED_NAME.getIanaCode()) - .setDistinguishedName(distName).build(); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4Address asIPAfiAddress( - String ip) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder() - .setIpv4Address(new Ipv4Address(ip)) - .setAfi((short) AddressFamilyNumberEnum.IP.getIanaCode()) - .build(); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6Address asIPv6AfiAddress( - String ip) { - return new Ipv6AddressBuilder().setIpv6Address(new Ipv6Address(ip)) - .setAfi((short) AddressFamilyNumberEnum.IP6.getIanaCode()) - .build(); - } - - public static LispAddressContainer asIPv4Address(String ip) { - return new LispAddressContainerBuilder().setAddress(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4Builder() - .setIpv4Address(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder() - .setIpv4Address(new Ipv4Address(ip)).setAfi((short) AddressFamilyNumberEnum.IP.getIanaCode()).setMask((short)32).build()).build()).build(); - } - - public static LispAFIAddress asIPv4AfiPrefix(String ip, int mask) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder() - .setIpv4Address(new Ipv4Address(MaskUtil.normalizeIPString(ip, mask))).setAfi((short) AddressFamilyNumberEnum.IP.getIanaCode()).setMask((short)mask).build(); - } - - public static LispAddressContainer asIPv4Prefix(String ip, int mask) { - return new LispAddressContainerBuilder().setAddress(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4Builder() - .setIpv4Address(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder() - .setIpv4Address(new Ipv4Address(MaskUtil.normalizeIPString(ip, mask))).setAfi((short) AddressFamilyNumberEnum.IP.getIanaCode()).setMask((short)mask).build()).build()).build(); - } - - public static LispAddressContainer asIPv6Address(String ip) { - return new LispAddressContainerBuilder().setAddress(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6Builder() - .setIpv6Address(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder() - .setIpv6Address(new Ipv6Address(ip)).setAfi((short) AddressFamilyNumberEnum.IP6.getIanaCode()).setMask((short)128).build()).build()).build(); - } - - public static LispAFIAddress asIPv6AfiPrefix(String ip, int mask) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder() - .setIpv6Address(new Ipv6Address(MaskUtil.normalizeIPString(ip, mask))).setAfi((short) AddressFamilyNumberEnum.IP6.getIanaCode()).setMask((short)mask).build(); - } - - public static LispAddressContainer asIPv6Prefix(String ip, int mask) { - return new LispAddressContainerBuilder().setAddress(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6Builder() - .setIpv6Address(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder() - .setIpv6Address(new Ipv6Address(MaskUtil.normalizeIPString(ip, mask))).setAfi((short) AddressFamilyNumberEnum.IP6.getIanaCode()).setMask((short)mask).build()).build()).build(); - } - - public static LcafKeyValueAddressAddr asKeyValue(String key, - PrimitiveAddress value) { - return new LcafKeyValueAddressAddrBuilder() - .setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()) - .setLcafType( - (short) LispCanonicalAddressFormatEnum.KEY_VALUE - .getLispCode()) - .setKey(new KeyBuilder() - .setPrimitiveAddress( - new DistinguishedNameBuilder() - .setDistinguishedNameAddress( - new DistinguishedNameAddressBuilder() - .setAfi(AddressFamilyNumberEnum.DISTINGUISHED_NAME - .getIanaCode()) - .setDistinguishedName( - key).build()) - .build()).build()) - .setValue(new ValueBuilder().setPrimitiveAddress(value).build()) - .build(); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv4 asPrimitiveIPAfiAddress( - String ip) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv4Builder() - .setIpv4Address( - new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.ipv4.Ipv4AddressBuilder() - .setIpv4Address(new Ipv4Address(ip)) - .setAfi((short) AddressFamilyNumberEnum.IP - .getIanaCode()).build()).build(); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv4 asPrimitiveIPv4AfiPrefix( - String ip, int mask) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv4Builder() - .setIpv4Address( - new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.ipv4.Ipv4AddressBuilder() - .setIpv4Address(new Ipv4Address(ip)) - .setAfi((short) AddressFamilyNumberEnum.IP.getIanaCode()).setMask((short) mask).build()) - .build(); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv6 asPrimitiveIPv6AfiPrefix( - String ip, int mask) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv6Builder() - .setIpv6Address( - new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.ipv6.Ipv6AddressBuilder() - .setIpv6Address(new Ipv6Address(ip)) - .setAfi((short) AddressFamilyNumberEnum.IP6.getIanaCode()).setMask((short) mask).build()) - .build(); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddress asMacAfiAddress( - String mac) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.mac.MacAddressBuilder() - .setMacAddress(new MacAddress(mac)) - .setAfi((short) AddressFamilyNumberEnum.MAC.getIanaCode()) - .build(); - } - - public static org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Mac asPrimitiveMacAfiAddress( - String mac) { - return new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.MacBuilder() - .setMacAddress( - new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.mac.MacAddressBuilder() - .setMacAddress(new MacAddress(mac)) - .setAfi((short) AddressFamilyNumberEnum.MAC - .getIanaCode()).build()).build(); - } -} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java index df4b9f6e7..fce4fa040 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressStringifier.java @@ -9,26 +9,25 @@ package org.opendaylight.lispflowmapping.lisp.util; import java.util.List; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaflistaddress.Addresses; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaftrafficengineeringaddress.Hops; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.AS; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.DistinguishedName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafApplicationData; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafKeyValue; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafList; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSegment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSourceDest; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafTrafficEngineering; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Mac; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.No; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafapplicationdata.LcafApplicationDataAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiList; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationData; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumber; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPath; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.InstanceId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop.LrsBits; import com.google.common.base.Preconditions; @@ -65,62 +64,68 @@ public class LispAddressStringifier { URL; } - public static String getString(LispAddressContainer container) { - return getAddrString(Destination.USER, container); + public static String getString(LispAddress lispAddress) { + return getAddrString(Destination.USER, lispAddress); } - public static String getURIString(LispAddressContainer container) { - return getString(Destination.URI, container); + public static String getURIString(LispAddress lispAddress) { + return getAddrString(Destination.URI, lispAddress); } - public static String getURLString(LispAddressContainer container) { - return getString(Destination.URL, container); + public static String getURLString(LispAddress lispAddress) { + return getAddrString(Destination.URL, lispAddress); } - private static String getAddrString(Destination dst, LispAddressContainer container) { - Preconditions.checkNotNull(container, "address should not be null"); - Address addr = container.getAddress(); + private static String getAddrString(Destination dst, LispAddress lispAddress) { + Preconditions.checkNotNull(lispAddress, "lispAddress should not be null"); + Address addr = lispAddress.getAddress(); String prefix = null; String address = null; if (addr instanceof Ipv4) { prefix = "ipv4" + PREFIX_SEPARATOR; address = getStringFromIpv4(dst, (Ipv4) addr); + } else if (addr instanceof Ipv4Prefix) { + prefix = "ipv4" + PREFIX_SEPARATOR; + address = getStringFromIpv4Prefix(dst, (Ipv4Prefix) addr); } else if (addr instanceof Ipv6) { prefix = "ipv6" + PREFIX_SEPARATOR; address = getStringFromIpv6(dst, (Ipv6) addr); + } else if (addr instanceof Ipv6Prefix) { + prefix = "ipv6" + PREFIX_SEPARATOR; + address = getStringFromIpv6Prefix(dst, (Ipv6Prefix) addr); } else if (addr instanceof Mac) { prefix = "mac" + PREFIX_SEPARATOR; address = getStringFromMac(dst, (Mac) addr); - } else if (addr instanceof LcafSegment) { - PrimitiveAddress pa = ((LcafSegment) addr).getLcafSegmentAddr().getAddress().getPrimitiveAddress(); + } else if (addr instanceof InstanceId) { + SimpleAddress pa = ((InstanceId)addr).getInstanceId().getAddress(); // Instance ID is a separate parent hierarchy, so we use the simple address prefix - prefix = LispPrimitiveAddressStringifier.getURLPrefix(pa) + PREFIX_SEPARATOR; - address = getStringFromLcafSegment(dst, (LcafSegment) addr); - } else if (addr instanceof No) { + prefix = LispSimpleAddressStringifier.getURLPrefix(pa) + PREFIX_SEPARATOR; + address = getStringFromInstanceId(dst, (InstanceId) addr); + } else if (addr instanceof NoAddress) { prefix = "no" + PREFIX_SEPARATOR; - address = getStringFromNo(dst, (No) addr); + address = getStringFromNoAddress(dst, (NoAddress) addr); } else if (addr instanceof DistinguishedName) { prefix = "dn" + PREFIX_SEPARATOR; address = getStringFromDistinguishedName(dst, (DistinguishedName) addr); - } else if (addr instanceof AS) { + } else if (addr instanceof AsNumber) { prefix = "as" + PREFIX_SEPARATOR; - address = getStringFromAS(dst, (AS) addr); - } else if (addr instanceof LcafList) { + address = getStringFromAsNumber(dst, (AsNumber) addr); + } else if (addr instanceof AfiList) { prefix = "list" + PREFIX_SEPARATOR; - address = getStringFromLcafList(dst, (LcafList) addr); - } else if (addr instanceof LcafApplicationData) { + address = getStringFromAfiList(dst, (AfiList) addr); + } else if (addr instanceof ApplicationData) { prefix = "appdata" + PREFIX_SEPARATOR; - address = getStringFromLcafApplicationData(dst, (LcafApplicationData) addr); - } else if (addr instanceof LcafTrafficEngineering) { + address = getStringFromApplicationData(dst, (ApplicationData) addr); + } else if (addr instanceof ExplicitLocatorPath) { prefix = "elp" + PREFIX_SEPARATOR; - address = getStringFromLcafTrafficEngineering(dst, (LcafTrafficEngineering) addr); - } else if (addr instanceof LcafSourceDest) { + address = getStringFromExplicitLocatorPath(dst, (ExplicitLocatorPath) addr); + } else if (addr instanceof SourceDestKey) { prefix = "srcdst" + PREFIX_SEPARATOR; - address = getStringFromLcafSourceDest(dst, (LcafSourceDest) addr); - } else if (addr instanceof LcafKeyValue) { + address = getStringFromSourceDestKey(dst, (SourceDestKey) addr); + } else if (addr instanceof KeyValueAddress) { prefix = "kv" + PREFIX_SEPARATOR; - address = getStringFromLcafKeyValue(dst, (LcafKeyValue) addr); + address = getStringFromKeyValueAddress(dst, (KeyValueAddress) addr); } if (dst == Destination.USER) { @@ -131,23 +136,15 @@ public class LispAddressStringifier { } - private static String getString(Destination dst, LispAddressContainer container) { - if (MaskUtil.isMaskable(container)) { - return (getAddrString(dst, container) + getMaskSeparator(dst) + MaskUtil.getMaskForAddress(container)); - } else { - return getAddrString(dst, container); - } - } - - private static String getMaskSeparator(Destination dst) { + private static String getPrefixString(Destination dst, String prefix) { if (dst == Destination.URL) { - return "%2f"; + return prefix.replace("/", "%2f"); } else { - return "/"; + return prefix; } } - protected static String getStringFromNo(Destination dst, No addr) { + protected static String getStringFromNoAddress(Destination dst, NoAddress addr) { // AFI = 0 if (dst == Destination.USER) { return "No Address Present"; @@ -158,88 +155,102 @@ public class LispAddressStringifier { protected static String getStringFromIpv4(Destination dst, Ipv4 addr) { // AFI = 1; IPv4 - return addr.getIpv4Address().getIpv4Address().getValue(); + return addr.getIpv4().getValue(); + } + + protected static String getStringFromIpv4Prefix(Destination dst, Ipv4Prefix addr) { + // AFI = 1; IPv4 + String prefix = addr.getIpv4Prefix().getValue(); + return getPrefixString(dst, prefix); } protected static String getStringFromIpv6(Destination dst, Ipv6 addr) { // AFI = 2; IPv6 - return addr.getIpv6Address().getIpv6Address().getValue(); + return addr.getIpv6().getValue(); + } + + protected static String getStringFromIpv6Prefix(Destination dst, Ipv6Prefix addr) { + // AFI = 2; IPv6 + return addr.getIpv6Prefix().getValue(); } protected static String getStringFromDistinguishedName(Destination dst, DistinguishedName addr) { // AFI = 17; Distinguished Name - return addr.getDistinguishedName().getDistinguishedName(); + return addr.getDistinguishedName().getValue(); } - protected static String getStringFromAS(Destination dst, AS addr) { + protected static String getStringFromAsNumber(Destination dst, AsNumber addr) { // AFI = 18; Autonomous System Number - return "AS" + addr.getAS().getAS(); + return "AS" + addr.getAsNumber().getValue(); } - protected static String getStringFromLcafList(Destination dst, LcafList addr) { + protected static String getStringFromAfiList(Destination dst, AfiList addr) { // AFI 16387, LCAF Type 1; Address List // Example rendering: // {192.0.2.1,192.0.2.2,2001:db8::1} - List addresses = addr.getLcafListAddr().getAddresses(); + List addresses = addr.getAfiList().getAddressList(); StringBuilder sb = new StringBuilder("{"); boolean needComma = false; - for (Addresses a : addresses) { + for (SimpleAddress a : addresses) { if (needComma) { sb.append(","); } - sb.append(LispPrimitiveAddressStringifier.getString(dst, a.getPrimitiveAddress())); + sb.append(a.getValue()); needComma = true; } sb.append("}"); return sb.toString(); } - protected static String getStringFromLcafSegment(Destination dst, LcafSegment addr) { + protected static String getStringFromInstanceId(Destination dst, InstanceId addr) { // AFI = 16387, LCAF Type 2; Instance ID // Example rendering: // [223] 192.0.2.0/24 - PrimitiveAddress pa = addr.getLcafSegmentAddr().getAddress().getPrimitiveAddress(); + SimpleAddress pa = addr.getInstanceId().getAddress(); if (dst == Destination.USER) { - return "[" + addr.getLcafSegmentAddr().getInstanceId() + "] " - + LispPrimitiveAddressStringifier.getString(dst, pa); + return "[" + addr.getInstanceId().getIid().getValue() + "] " + + LispSimpleAddressStringifier.getString(dst, pa); } else { - return LispPrimitiveAddressStringifier.getString(dst, pa); + return LispSimpleAddressStringifier.getString(dst, pa); } } - protected static String getStringFromLcafApplicationData(Destination dst, LcafApplicationData addr) { + protected static String getStringFromApplicationData(Destination dst, ApplicationData addr) { // AFI = 16387, LCAF Type 4; Application Data // Example rendering: // 192.0.2.1!128!17!80-81!6667-7000 - LcafApplicationDataAddr a = addr.getLcafApplicationDataAddr(); - return LispPrimitiveAddressStringifier.getString(dst, a.getAddress().getPrimitiveAddress()) - + "!" + a.getIpTos() + "!" + a.getProtocol() - + "!" + a.getLocalPortLow() + "-" + a.getLocalPortHigh() - + "!" + a.getRemotePortLow() + "-" + a.getRemotePortHigh(); - + return LispSimpleAddressStringifier.getString(dst, addr.getApplicationData().getAddress()) + + "!" + addr.getApplicationData().getIpTos() + + "!" + addr.getApplicationData().getProtocol() + + "!" + addr.getApplicationData().getLocalPortLow() + + "-" + addr.getApplicationData().getLocalPortHigh() + + "!" + addr.getApplicationData().getRemotePortLow() + + "-" + addr.getApplicationData().getRemotePortHigh(); } - protected static String getStringFromLcafTrafficEngineering(Destination dst, LcafTrafficEngineering addr) { + + protected static String getStringFromExplicitLocatorPath(Destination dst, ExplicitLocatorPath addr) { // AFI = 16387, LCAF Type 10, Explicit Locator Path // Example rendering: // {192.0.2.1->192.0.2.2|lps->192.0.2.3} - List hops = addr.getLcafTrafficEngineeringAddr().getHops(); + List hops = addr.getExplicitLocatorPath().getHop(); StringBuilder sb = new StringBuilder(); sb.append("{"); boolean needArrow = false; - for (Hops hop : hops) { + for (Hop hop : hops) { if (needArrow) { sb.append("->"); } - sb.append(LispPrimitiveAddressStringifier.getString(dst, hop.getHop().getPrimitiveAddress())); - if (hop.isLookup() || hop.isRLOCProbe() || hop.isStrict()) { + sb.append(LispSimpleAddressStringifier.getString(dst, hop.getAddress())); + LrsBits lrs = hop.getLrsBits(); + if (lrs.isLookup() || lrs.isRlocProbe() || lrs.isStrict()) { sb.append("|"); } - if (hop.isLookup()) { + if (lrs.isLookup()) { sb.append("l"); } - if (hop.isRLOCProbe()) { + if (lrs.isRlocProbe()) { sb.append("p"); } - if (hop.isStrict()) { + if (lrs.isStrict()) { sb.append("s"); } needArrow = true; @@ -248,29 +259,25 @@ public class LispAddressStringifier { return sb.toString(); } - protected static String getStringFromLcafSourceDest(Destination dst, LcafSourceDest addr) { + protected static String getStringFromSourceDestKey(Destination dst, SourceDestKey addr) { // AFI = 16387, LCAF Type 12, Source/Destination Key // Example rendering: // 192.0.2.1/32|192.0.2.2/32 - LcafSourceDestAddr a = ((LcafSourceDest) addr).getLcafSourceDestAddr(); - return LispPrimitiveAddressStringifier.getString(dst, a.getSrcAddress().getPrimitiveAddress()) - + getMaskSeparator(dst) + a.getSrcMaskLength() + "|" - + LispPrimitiveAddressStringifier.getString(dst, a.getDstAddress().getPrimitiveAddress()) - + getMaskSeparator(dst) + a.getDstMaskLength(); + return getPrefixString(dst, (new String(addr.getSourceDestKey().getSource().getValue())) + + "|" + getPrefixString(dst, new String(addr.getSourceDestKey().getDest().getValue()))); } - protected static String getStringFromLcafKeyValue(Destination dst, LcafKeyValue addr) { + protected static String getStringFromKeyValueAddress(Destination dst, KeyValueAddress addr) { // AFI = 16387, LCAF Type 15, Key/Value Address Pair // Example rendering: // 192.0.2.1=>192.0.2.2 - LcafKeyValueAddressAddr a = addr.getLcafKeyValueAddressAddr(); - return LispPrimitiveAddressStringifier.getString(dst, a.getKey().getPrimitiveAddress()) + "=>" - + LispPrimitiveAddressStringifier.getString(dst, a.getValue().getPrimitiveAddress()); + return getPrefixString(dst, new String(addr.getKeyValueAddress().getKey().getValue()) + + "=>" + getPrefixString(dst, new String(addr.getKeyValueAddress().getValue().getValue()))); } protected static String getStringFromMac(Destination dst, Mac addr) { // AFI = 16389; MAC - return addr.getMacAddress().getMacAddress().getValue(); + return addr.getMac().getValue(); } } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressUtil.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressUtil.java new file mode 100644 index 000000000..f9a5a8747 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispAddressUtil.java @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2014 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.lisp.util; + +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AsNumberAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; + +public class LispAddressUtil { + private static Pattern IP4_PATTERN = null; + private static Pattern IP6_PATTERN = null; + private static final String ip4Pattern = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])"; + private static final String ip6Pattern = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}"; + static { + try { + IP4_PATTERN = Pattern.compile(ip4Pattern, Pattern.CASE_INSENSITIVE); + IP6_PATTERN = Pattern.compile(ip6Pattern, Pattern.CASE_INSENSITIVE); + } catch (PatternSyntaxException e) { + } + } + + public static Class addressTypeFromSimpleAddress(SimpleAddress address) { + if (address.getIpAddress() != null) { + return addressTypeFromIpAddress(address.getIpAddress()); + } else if (address.getIpPrefix() != null) { + return addressTypeFromIpPrefix(address.getIpPrefix()); + } else if (address.getMacAddress() != null) { + return MacAfi.class; + } else if (address.getDistinguishedNameType() != null) { + return DistinguishedNameAfi.class; + } else if (address.getAsNumber() != null) { + return AsNumberAfi.class; + } + return null; + } + + public static Address addressFromSimpleAddress(SimpleAddress address) { + if (address.getIpAddress() != null) { + return addressFromIpAddress(address.getIpAddress()); + } else if (address.getIpPrefix() != null) { + return addressFromIpPrefix(address.getIpPrefix()); + } + // TODO the rest of the types + return null; + } + + public static Class addressTypeFromInet(InetAddress address) { + if (address instanceof Inet4Address) { + return Ipv4Afi.class; + } else if (address instanceof Inet6Address) { + return Ipv6Afi.class; + } + return null; + } + + public static Address addressFromInet(InetAddress address) { + if (address instanceof Inet4Address) { + return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder() + .setIpv4(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address(address.getHostAddress())).build(); + } else if (address instanceof Inet6Address) { + return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder() + .setIpv6(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address(address.getHostAddress())).build(); + } + return null; + } + + public static Class addressTypeFromIpAddress(IpAddress address) { + if (address == null) { + return null; + } else if (address.getIpv4Address() != null) { + return Ipv4Afi.class; + } else if (address.getIpv6Address() != null) { + return Ipv6Afi.class; + } + return null; + } + + public static Address addressFromIpAddress(IpAddress address) { + if (address == null) { + return null; + } else if (address.getIpv4Address() != null) { + return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder().setIpv4(address.getIpv4Address()).build(); + } else if (address.getIpv6Address() != null) { + return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder().setIpv6(address.getIpv6Address()).build(); + } + return null; + } + + public static Class addressTypeFromIpPrefix(IpPrefix address) { + if (address == null) { + return null; + } else if (address.getIpv4Prefix() != null) { + return Ipv4PrefixAfi.class; + } else if (address.getIpv6Prefix() != null) { + return Ipv6PrefixAfi.class; + } + return null; + } + + public static Address addressFromIpPrefix(IpPrefix address) { + if (address == null) { + return null; + } else if (address.getIpv4Prefix() != null) { + return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder().setIpv4Prefix(address.getIpv4Prefix()).build(); + } else if (address.getIpv6Prefix() != null) { + return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder().setIpv6Prefix(address.getIpv6Prefix()).build(); + } + return null; + } + + public static Rloc toRloc(SimpleAddress address) { + RlocBuilder builder = new RlocBuilder(); + builder.setAddressType(addressTypeFromSimpleAddress(address)); + builder.setVirtualNetworkId(null); + builder.setAddress(addressFromSimpleAddress(address)); + return builder.build(); + } + + public static Rloc toRloc(InetAddress address) { + RlocBuilder builder = new RlocBuilder(); + builder.setAddressType(addressTypeFromInet(address)); + builder.setVirtualNetworkId(null); + builder.setAddress(addressFromInet(address)); + return builder.build(); + } + + public static Rloc toRloc(Ipv4Address address) { + RlocBuilder builder = new RlocBuilder(); + builder.setAddressType(Ipv4Afi.class); + builder.setVirtualNetworkId(null); + builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build()); + return builder.build(); + } + + public static Rloc toRloc(Ipv6Address address) { + RlocBuilder builder = new RlocBuilder(); + builder.setAddressType(Ipv6Afi.class); + builder.setVirtualNetworkId(null); + builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build()); + return builder.build(); + } + + public static Rloc asIpv4Rloc(String address) { + return toRloc(new Ipv4Address(address)); + } + + public static Rloc asIpv6Rloc(String address) { + return toRloc(new Ipv6Address(address)); + } + + public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(Ipv4PrefixAfi.class); + builder.setVirtualNetworkId(vni); + builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build()); + return builder.build(); + } + + public static Eid toEid(Ipv4Address prefix, InstanceIdType vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(Ipv4Afi.class); + builder.setVirtualNetworkId(vni); + builder.setAddress((Address) new Ipv4Builder().setIpv4(prefix).build()); + return builder.build(); + } + + public static Eid toEid(Eid eid, IpPrefix prefix) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(eid.getAddressType()); + builder.setVirtualNetworkId(eid.getVirtualNetworkId()); + // XXX Not sure if the below actually works as expected... also, what happens to AFI? + builder.setAddress(addressFromIpPrefix(prefix)); + return builder.build(); + } + + public static Eid toEid(IpPrefix prefix, int vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddress(addressFromIpPrefix(prefix)); + builder.setAddressType(addressTypeFromIpPrefix(prefix)); + builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni))); + return builder.build(); + } + + public static Eid asIpv4PrefixEid(String prefix) { + return toEid(new Ipv4Prefix(prefix), null); + } + + public static Eid asIpv4Eid(String address) { + return toEid(new Ipv4Address(address), null); + } + + public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(Ipv6PrefixAfi.class); + builder.setVirtualNetworkId(vni); + builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build()); + return builder.build(); + } + + public static Eid toEid(Ipv6Address prefix, InstanceIdType vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(Ipv6Afi.class); + builder.setVirtualNetworkId(vni); + builder.setAddress((Address) new Ipv6Builder().setIpv6(prefix).build()); + return builder.build(); + } + + public static Eid asIpv6Eid(String address, long vni) { + return toEid(new Ipv6Address(address), new InstanceIdType(vni)); + } + + public static Eid asIpv6PrefixEid(String prefix) { + return toEid(new Ipv6Prefix(prefix), null); + } + + public static Eid asIpv6Eid(String address) { + return toEid(new Ipv6Address(address), null); + } + + public static Eid asIpv4Eid(String address, long vni) { + return toEid(new Ipv4Address(address), new InstanceIdType(vni)); + } + + public static int ipVersionFromString(String ip) { + if (IP4_PATTERN.matcher(ip).matches()) { + return 4; + } else if (IP6_PATTERN.matcher(ip).matches()) { + return 6; + } else { + return 0; + } + } + + public static IpPrefix asIpPrefix(String addr, int mask) { + int version = ipVersionFromString(addr); + if (version == 4 && (mask >= 0 && mask <= 32)) { + return new IpPrefix(new Ipv4Prefix(addr + "/" + mask)); + } else if (version == 6 && (mask >=0 && mask <= 128)) { + return new IpPrefix(new Ipv6Prefix(addr + "/" + mask)); + } else { + return null; + } + } + + public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(eid.getAddressType()); + builder.setVirtualNetworkId(eid.getVirtualNetworkId()); + builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(new Ipv4Prefix(getStringPrefix(address, mask))).build()); + return builder.build(); + } + + public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(eid.getAddressType()); + builder.setVirtualNetworkId(eid.getVirtualNetworkId()); + builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(new Ipv6Prefix(getStringPrefix(address, mask))).build()); + return builder.build(); + } + + public static Eid toEid(MacAddress mac, InstanceIdType vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(MacAfi.class); + builder.setVirtualNetworkId(vni); + builder.setAddress((Address) new MacBuilder().setMac(mac).build()); + return builder.build(); + } + + public static Eid asMacEid(String address, long vni) { + return toEid(new MacAddress(address), new InstanceIdType(vni)); + } + + public static Eid asMacEid(String address) { + return toEid(new MacAddress(address), null); + } + + public static Rloc asKeyValueAddress(String key, SimpleAddress value) { + KeyValueAddressBuilder kvab = new KeyValueAddressBuilder(); + kvab.setKey(new SimpleAddress(new DistinguishedNameType(key))); + kvab.setValue(value); + KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder() + .setKeyValueAddress(kvab.build()).build(); + RlocBuilder builder = new RlocBuilder(); + builder.setAddressType(KeyValueAddressLcaf.class); + builder.setVirtualNetworkId(null); + builder.setAddress((Address) address); + return builder.build(); + } + + private static String getStringPrefix(InetAddress address, short mask) { + StringBuilder sb = new StringBuilder(); + sb.append(address.getHostAddress()); + sb.append("/"); + sb.append(mask); + return sb.toString(); + } + + public static SourceDestKey asSrcDst(String src, String dst, int smask, int dmask) { + SourceDestKeyBuilder builder = new SourceDestKeyBuilder(); + builder.setSource(asIpPrefix(src, smask)); + builder.setDest(asIpPrefix(dst, dmask)); + return builder.build(); + } + + public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, int vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(SourceDestKeyLcaf.class); + builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni))); + builder.setAddress( + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder() + .setSourceDestKey(asSrcDst(src, dst, smask, dmask)).build()); + + return builder.build(); + } + + public static Eid asSrcDstEid(SourceDestKey sd, int vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(SourceDestKeyLcaf.class); + builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni))); + builder.setAddress( + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder() + .setSourceDestKey(sd).build()); + return builder.build(); + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispPrimitiveAddressStringifier.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispSimpleAddressStringifier.java similarity index 51% rename from mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispPrimitiveAddressStringifier.java rename to mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispSimpleAddressStringifier.java index 969d402c3..fbd3c08d0 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispPrimitiveAddressStringifier.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/LispSimpleAddressStringifier.java @@ -8,13 +8,13 @@ package org.opendaylight.lispflowmapping.lisp.util; import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier.Destination; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.PrimitiveAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.AS; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.DistinguishedName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Mac; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.No; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumber; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddress; import com.google.common.base.Preconditions; @@ -25,26 +25,26 @@ import com.google.common.base.Preconditions; * @author Lorand Jakab * */ -public class LispPrimitiveAddressStringifier { +public class LispSimpleAddressStringifier { - public static String getString(PrimitiveAddress addr) { + public static String getString(SimpleAddress addr) { return getString(Destination.USER, addr); } - public static String getString(Destination dst, PrimitiveAddress addr) { + public static String getString(Destination dst, SimpleAddress addr) { Preconditions.checkNotNull(addr, "address should not be null"); if (addr instanceof Ipv4) { - return ((Ipv4) addr).getIpv4Address().getIpv4Address().getValue(); + return ((Ipv4) addr).getIpv4().getValue(); } else if (addr instanceof Ipv6) { - return ((Ipv6) addr).getIpv6Address().getIpv6Address().getValue(); + return ((Ipv6) addr).getIpv6().getValue(); } else if (addr instanceof Mac) { - return ((Mac) addr).getMacAddress().getMacAddress().getValue(); + return ((Mac) addr).getMac().getValue(); } else if (addr instanceof DistinguishedName) { - return ((DistinguishedName) addr).getDistinguishedNameAddress().getDistinguishedName(); - } else if (addr instanceof AS) { - return "AS" + ((AS) addr).getASAddress().getAS(); - } else if (addr instanceof No) { + return ((DistinguishedName) addr).getDistinguishedName().getValue(); + } else if (addr instanceof AsNumber) { + return "AS" + ((AsNumber) addr).getAsNumber().getValue(); + } else if (addr instanceof NoAddress) { if (dst == Destination.USER) { return "No Address Present"; } else { @@ -55,7 +55,7 @@ public class LispPrimitiveAddressStringifier { return null; } - protected static String getURLPrefix(PrimitiveAddress addr) { + protected static String getURLPrefix(SimpleAddress addr) { Preconditions.checkNotNull(addr, "address should not be null"); if (addr instanceof Ipv4) { @@ -66,9 +66,9 @@ public class LispPrimitiveAddressStringifier { return "mac"; } else if (addr instanceof DistinguishedName) { return "dn"; - } else if (addr instanceof AS) { + } else if (addr instanceof AsNumber) { return "as"; - } else if (addr instanceof No) { + } else if (addr instanceof NoAddress) { return "no"; } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapNotifyBuilderHelper.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapNotifyBuilderHelper.java index c6f9155af..981c4dfdf 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapNotifyBuilderHelper.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapNotifyBuilderHelper.java @@ -11,14 +11,14 @@ import java.util.ArrayList; import java.util.Arrays; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; public class MapNotifyBuilderHelper { public static void setFromMapRegister(MapNotifyBuilder builder, MapRegister mapRegister) { - if (builder.getEidToLocatorRecord() == null) { - builder.setEidToLocatorRecord(new ArrayList()); + if (builder.getMappingRecordItem() == null) { + builder.setMappingRecordItem(new ArrayList()); } builder.setNonce(mapRegister.getNonce()); builder.setKeyId(mapRegister.getKeyId()); @@ -29,8 +29,8 @@ public class MapNotifyBuilderHelper { } builder.setAuthenticationData(authenticationData); - for (EidToLocatorRecord eidToLocator : mapRegister.getEidToLocatorRecord()) { - builder.getEidToLocatorRecord().add(eidToLocator); + for (MappingRecordItem eidToLocator : mapRegister.getMappingRecordItem()) { + builder.getMappingRecordItem().add(eidToLocator); } } } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapRequestUtil.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapRequestUtil.java index 065915d4f..4dfba5160 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapRequestUtil.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapRequestUtil.java @@ -12,15 +12,16 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Random; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRequest; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRloc; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRlocBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.SourceEidBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequestBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; public class MapRequestUtil { public static InetAddress selectItrRloc(MapRequest request) { @@ -29,17 +30,17 @@ public class MapRequestUtil { } InetAddress selectedItrRloc = null; for (ItrRloc itr : request.getItrRloc()) { - Address addr = itr.getLispAddressContainer().getAddress(); + Address addr = itr.getRloc().getAddress(); if (addr instanceof Ipv4) { try { - selectedItrRloc = InetAddress.getByName(((Ipv4) addr).getIpv4Address().getIpv4Address().getValue()); + selectedItrRloc = InetAddress.getByName(((Ipv4) addr).getIpv4().getValue()); } catch (UnknownHostException e) { } break; } if (addr instanceof Ipv6) { try { - selectedItrRloc = InetAddress.getByName((((Ipv6) addr).getIpv6Address().getIpv6Address().getValue())); + selectedItrRloc = InetAddress.getByName(((Ipv6) addr).getIpv6().getValue()); } catch (UnknownHostException e) { } break; @@ -48,7 +49,7 @@ public class MapRequestUtil { return selectedItrRloc; } - public static MapRequestBuilder prepareSMR(LispAddressContainer srcEid, LispAddressContainer itrRloc) { + public static MapRequestBuilder prepareSMR(Eid srcEid, Rloc itrRloc) { MapRequestBuilder builder = new MapRequestBuilder(); builder.setAuthoritative(false); builder.setMapDataPresent(false); @@ -57,9 +58,9 @@ public class MapRequestUtil { builder.setSmr(true); builder.setSmrInvoked(false); - builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer(srcEid).build()); + builder.setSourceEid(new SourceEidBuilder().setEid(srcEid).build()); builder.setItrRloc(new ArrayList()); - builder.getItrRloc().add(new ItrRlocBuilder().setLispAddressContainer(itrRloc).build()); + builder.getItrRloc().add(new ItrRlocBuilder().setRloc(itrRloc).build()); builder.setMapReply(null); builder.setNonce(new Random().nextLong()); diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapServerMapResolverUtil.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapServerMapResolverUtil.java index d377f5c68..cc6a6a3fd 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapServerMapResolverUtil.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MapServerMapResolverUtil.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.lispflowmapping.lisp.util; - +/* import java.util.ArrayList; import java.util.List; @@ -19,7 +19,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.ei import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegisterBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequestBuilder; - +*/ /** * Utilities to prepare MapRegister and MapRequest object for interaction with * the IFlowMapping API. @@ -28,17 +28,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.ma * */ public class MapServerMapResolverUtil { - +/* public static MapRegister getMapRegister(EidToLocatorRecord mapping) { MapRegisterBuilder mrb = new MapRegisterBuilder(); mrb.setEidToLocatorRecord(getEidToLocatorRecord(mapping)); return mrb.build(); } - public static MapRequest getMapRequest(LispAddressContainer address, short mask) { + public static MapRequest getMapRequest(LispAddress address) { MapRequestBuilder mrb = new MapRequestBuilder(); mrb.setPitr(false); - mrb.setEidRecord(getEidRecord(address, mask)); + mrb.setEidRecord(getEidRecord(address)); return mrb.build(); } @@ -49,7 +49,7 @@ public class MapServerMapResolverUtil { etlrb.setMapVersion(mapping.getMapVersion()); etlrb.setAction(mapping.getAction()); etlrb.setAuthoritative(mapping.isAuthoritative()); - etlrb.setLispAddressContainer(mapping.getLispAddressContainer()); + etlrb.setEid(mapping.getEid()); etlrb.setLocatorRecord(mapping.getLocatorRecord()); List mappings = @@ -58,13 +58,16 @@ public class MapServerMapResolverUtil { return mappings; } - public static List getEidRecord(LispAddressContainer address, short mask) { + public static List getEidRecord(LispAddress address) { EidRecordBuilder erb = new EidRecordBuilder(); - erb.setLispAddressContainer(address); - erb.setMask(mask); + erb.setEid(address); + erb.setAddress(address.getAddress()); + erb.setAfi(address.getAfi()); + erb.setVirtualNetworkId(address.getVirtualNetworkId()); List records = new ArrayList(); records.add(erb.build()); return records; } + */ } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MaskUtil.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MaskUtil.java index 97e883631..802a79f90 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MaskUtil.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/MaskUtil.java @@ -14,152 +14,82 @@ import java.net.UnknownHostException; import java.nio.ByteBuffer; import org.apache.commons.lang3.exception.ExceptionUtils; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafSegmentAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafSourceDestAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispIpv4Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispIpv6Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsegmentaddress.AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsegmentaddress.Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.DstAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.DstAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.SrcAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.SrcAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainerBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv6Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSegment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSegmentBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSourceDest; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.LcafSourceDestBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsegment.LcafSegmentAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsegment.LcafSegmentAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddrBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.InstanceId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MaskUtil { private static final Logger LOG = LoggerFactory.getLogger(MaskUtil.class); - public static boolean isMaskable(LispAFIAddress address) { - if (address instanceof Ipv4Address || address instanceof Ipv6Address || address instanceof LcafSegmentAddr) { + private static final short IPV4_MAX_MASK = 32; + private static final short IPV6_MAX_MASK = 128; + + public static boolean isMaskable(Address address) { + if (address instanceof Ipv4Prefix || address instanceof Ipv6Prefix || address instanceof SourceDestKey) { return true; + } else if (address instanceof InstanceId) { + return isMaskable(((InstanceId)address).getInstanceId().getAddress()); } return false; } - public static boolean isMaskable(LispAddressContainer address) { - if (address.getAddress() instanceof Ipv4 || address.getAddress() instanceof Ipv6) { + public static boolean isMaskable(SimpleAddress address) { + if (address.getIpPrefix() != null) { return true; - } else if (address.getAddress() instanceof LcafSegment) { - return isMaskable(LispAFIConvertor.toAFIfromPrimitive(((LcafSegment) address.getAddress()) - .getLcafSegmentAddr().getAddress().getPrimitiveAddress())); - } else if (address.getAddress() instanceof LcafSourceDestAddress) { - LcafSourceDestAddr sd = ((LcafSourceDest) address.getAddress()).getLcafSourceDestAddr(); - return isMaskable(LispAFIConvertor.toAFIfromPrimitive(sd.getSrcAddress().getPrimitiveAddress())) - && isMaskable(LispAFIConvertor.toAFIfromPrimitive(sd.getDstAddress().getPrimitiveAddress())); } return false; } - public static LispAFIAddress normalize(LispAFIAddress address, short mask) { + public static Eid normalize(Eid eid, short mask) { + Address address = eid.getAddress(); try { - if (address instanceof Ipv4Address) { - return LispAFIConvertor.asIPAfiAddress(normalizeIP( - Inet4Address.getByName(((Ipv4Address) address).getIpv4Address().getValue()), - mask).getHostAddress()); - } else if (address instanceof Ipv6Address) { - return LispAFIConvertor.asIPv6AfiAddress(normalizeIP( - Inet6Address.getByName(((Ipv6Address) address).getIpv6Address().getValue()), - mask).getHostAddress()); - } else if (address instanceof LcafSegmentAddr) { - LcafSegmentAddr segAddr = (LcafSegmentAddr) address; - LispAFIAddress afiAddr = LispAFIConvertor - .toAFIfromPrimitive(segAddr.getAddress().getPrimitiveAddress()); - Address normalizedAddr = new AddressBuilder().setPrimitiveAddress( - LispAFIConvertor.toPrimitive(normalize(afiAddr, mask))).build(); - return new LcafSegmentAddrBuilder(segAddr).setAddress(normalizedAddr).build(); + if (address instanceof Ipv4Prefix) { + String[] v4prefix = String.valueOf(((Ipv4Prefix)address).getIpv4Prefix().getValue()).split("/"); + InetAddress normalized = normalizeIP(Inet4Address.getByName(v4prefix[0]), mask); + return LispAddressUtil.asIpv4PrefixEid(eid, (Inet4Address)normalized, mask); + } else if (address instanceof Ipv6Prefix) { + String[] v6prefix = String.valueOf(((Ipv6Prefix)address).getIpv6Prefix().getValue()).split("/"); + InetAddress normalized = normalizeIP(Inet6Address.getByName(v6prefix[0]), mask); + return LispAddressUtil.asIpv6PrefixEid(eid, (Inet6Address)normalized, mask); + } else if (address instanceof InstanceId) { + // TODO - not absolutely necessary, but should be implemented + return eid; } } catch (UnknownHostException e) { - LOG.trace("Failed to normalize " + address + ": " + ExceptionUtils.getStackTrace(e)); - } - return address; - } - - public static LispAFIAddress normalize(LispAFIAddress address) { - if (address instanceof Ipv4Address) { - return normalize(address, ((Ipv4Address) address).getMask()); - } else if (address instanceof Ipv6Address) { - return normalize(address, ((Ipv6Address) address).getMask()); - } else if (address instanceof LcafSegmentAddr) { - LcafSegmentAddr segAddr = (LcafSegmentAddr) address; - LispAFIAddress afiAddr = LispAFIConvertor.toAFIfromPrimitive(segAddr.getAddress().getPrimitiveAddress()); - short mask = getMaskForAfiAddress(afiAddr); - if (mask == 0) { - return address; - } - Address normalizedAddr = new AddressBuilder().setPrimitiveAddress( - LispAFIConvertor.toPrimitive(normalize(afiAddr, mask))).build(); - return new LcafSegmentAddrBuilder(segAddr).setAddress(normalizedAddr).build(); + LOG.trace("Failed to normalize eid {} with mask {}: {}", eid, mask, ExceptionUtils.getStackTrace(e)); } - return address; + return eid; } - public static LispAddressContainer normalize(LispAddressContainer address, short mask) { + public static Eid normalize(Eid eid) { + Address address = eid.getAddress(); try { - if (address.getAddress() instanceof Ipv4) { - return LispAFIConvertor.asIPv4Prefix(normalizeIP( - Inet4Address.getByName(((Ipv4) address.getAddress()).getIpv4Address().getIpv4Address().getValue()), - mask).getHostAddress(), mask); - } else if (address.getAddress() instanceof Ipv6) { - return LispAFIConvertor.asIPv6Prefix(normalizeIP( - Inet6Address.getByName(((Ipv6) address.getAddress()).getIpv6Address().getIpv6Address().getValue()), - mask).getHostAddress(), mask); - } else if (address.getAddress() instanceof LcafSegment) { - LcafSegmentAddress segAddr = ((LcafSegment) address.getAddress()).getLcafSegmentAddr(); - LispAFIAddress afiAddr = LispAFIConvertor - .toAFIfromPrimitive(segAddr.getAddress().getPrimitiveAddress()); - Address normalizedAddr = new AddressBuilder().setPrimitiveAddress( - LispAFIConvertor.toPrimitive(normalize(afiAddr, mask))).build(); - return new LispAddressContainerBuilder().setAddress( - new LcafSegmentBuilder().setLcafSegmentAddr( - new LcafSegmentAddrBuilder(segAddr).setAddress(normalizedAddr).build()).build()) - .build(); + if (address instanceof Ipv4Prefix) { + String[] v4prefix = String.valueOf(((Ipv4Prefix)address).getIpv4Prefix().getValue()).split("/"); + short mask = Short.parseShort(v4prefix[1]); + InetAddress normalized = normalizeIP(Inet4Address.getByName(v4prefix[0]), mask); + return LispAddressUtil.asIpv4PrefixEid(eid, (Inet4Address)normalized, mask); + } else if (address instanceof Ipv6Prefix) { + String[] v6prefix = String.valueOf(((Ipv6Prefix)address).getIpv6Prefix().getValue()).split("/"); + short mask = Short.parseShort(v6prefix[1]); + InetAddress normalized = normalizeIP(Inet6Address.getByName(v6prefix[0]), mask); + return LispAddressUtil.asIpv6PrefixEid(eid, (Inet6Address)normalized, mask); + } else if (address instanceof InstanceId) { + // TODO - not absolutely necessary, but should be implemented + return eid; } } catch (UnknownHostException e) { - LOG.trace("Failed to normalize " + address + ": " + ExceptionUtils.getStackTrace(e)); - } - return address; - } - - public static LispAddressContainer normalize(LispAddressContainer address) { - if (address.getAddress() instanceof Ipv4) { - return normalize(address, ((Ipv4)address.getAddress()).getIpv4Address().getMask()); - } else if (address.getAddress() instanceof Ipv6) { - return normalize(address, ((Ipv6)address.getAddress()).getIpv6Address().getMask()); - } else if (address.getAddress() instanceof LcafSegment) { - LcafSegmentAddress segAddr = ((LcafSegment) address.getAddress()).getLcafSegmentAddr(); - LispAFIAddress afiAddr = LispAFIConvertor - .toAFIfromPrimitive(segAddr.getAddress().getPrimitiveAddress()); - short mask = getMaskForAfiAddress(afiAddr); - if (mask == 0) { - return address; - } - Address normalizedAddr = new AddressBuilder().setPrimitiveAddress( - LispAFIConvertor.toPrimitive(normalize(afiAddr, mask))).build(); - return new LispAddressContainerBuilder().setAddress( - new LcafSegmentBuilder().setLcafSegmentAddr( - new LcafSegmentAddrBuilder(segAddr).setAddress(normalizedAddr).build()).build()) - .build(); + LOG.trace("Failed to normalize eid {}: {}", eid, ExceptionUtils.getStackTrace(e)); } - return address; + return eid; } private static InetAddress normalizeIP(InetAddress address, int mask) throws UnknownHostException { @@ -180,157 +110,53 @@ public class MaskUtil { return InetAddress.getByAddress(byteRepresentation.array()); } - public static String normalizeIPString(String addr, int mask) { - short afi = getIpAfiForString(addr); - try { - if (afi == 1) { - return normalizeIP(Inet4Address.getByName(addr), mask).getHostAddress(); - } else if (afi == 2) { - return normalizeIP(Inet6Address.getByName(addr), mask).getHostAddress(); - } else { - LOG.debug("The string {} is not a valid IP address!", addr); - return null; - } - } catch (Exception e){ - LOG.trace("Failed to normalize " + addr + ": " + ExceptionUtils.getStackTrace(e)); - } - return null; - } - - public static int getMaxMask(LispAFIAddress address) { - if (address instanceof Ipv4Address) { - return 32; - } - if (address instanceof Ipv6Address) { - return 128; - } - return -1; - } - - public static byte getMaxMaskForAfi(int afi) { - if (afi == 1) { - return (byte) 32; - } else if (afi == 2) { - return (byte) 128; + public static int getMaxMask(Address address) { + if (address instanceof Ipv4 || address instanceof Ipv4Prefix) { + return IPV4_MAX_MASK; + } else if (address instanceof Ipv6 || address instanceof Ipv6Prefix) { + return IPV6_MAX_MASK; } else { - return (byte) -1; - } - } - - private static short getMaskForAfiAddress(LispAFIAddress addr) { - if (addr instanceof Ipv4Address) { - Short res = ((Ipv4Address) addr).getMask(); - return (res != null) ? res.shortValue() : 32; - } else if (addr instanceof Ipv6Address) { - Short res = ((Ipv6Address) addr).getMask(); - return (res != null) ? res.shortValue() : 128; - } else { - return 0; - } - } - - public static short getMaskForAddress(LispAddressContainer addr) { - if (addr.getAddress() instanceof Ipv4) { - Short res = ((Ipv4)addr.getAddress()).getIpv4Address().getMask(); - return (res != null) ? res.shortValue() : 32; - } else if (addr.getAddress() instanceof Ipv6) { - Short res = ((Ipv6)addr.getAddress()).getIpv6Address().getMask(); - return (res != null) ? res.shortValue() : 128; - } else if (addr.getAddress() instanceof LcafSegment) { - return getMaskForAfiAddress(LispAFIConvertor.toAFIfromPrimitive((((LcafSegment) addr.getAddress()) - .getLcafSegmentAddr()).getAddress().getPrimitiveAddress())); + return -1; } - return 0; } - private static short getIpAfiForString(String addr) { - if(addr.matches("([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])") == true){ - return 1; + public static short getMaskForAddress(SimpleAddress address) { + if (address.getIpPrefix() == null) { + return -1; } - else if(addr.matches("([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)") == true){ - return 2; - } - return -1; + return getMaskForIpPrefix(address.getIpPrefix()); } - public static LispAddressContainer setMask(LispAddressContainer addr, int mask) { - if (addr.getAddress() instanceof Ipv4) { - return new LispAddressContainerBuilder().setAddress( - new Ipv4Builder().setIpv4Address( - new Ipv4AddressBuilder(((Ipv4) addr.getAddress()).getIpv4Address()).setMask((short) mask) - .build()).build()).build(); - - } else if (addr.getAddress() instanceof Ipv6) { - return new LispAddressContainerBuilder().setAddress( - new Ipv6Builder().setIpv6Address( - new Ipv6AddressBuilder(((Ipv6) addr.getAddress()).getIpv6Address()).setMask((short) mask) - .build()).build()).build(); - } else if (addr.getAddress() instanceof LcafSegment) { - setMask(LispAFIConvertor.toAFIfromPrimitive(((LcafSegment) addr.getAddress()).getLcafSegmentAddr() - .getAddress().getPrimitiveAddress()), mask); - } - return addr; + public static short getMaskForIpPrefix(IpPrefix prefix) { + return Short.parseShort(String.valueOf(prefix.getValue()).split("/")[1]); } - public static LispAFIAddress setMask(LispAFIAddress addr, int mask) { - if (addr instanceof LispIpv4Address) { - return new Ipv4AddressBuilder().setIpv4Address(((LispIpv4Address) addr).getIpv4Address()) - .setAfi(addr.getAfi()).setMask((short)mask).build(); - } else if (addr instanceof LispIpv6Address) { - return new Ipv6AddressBuilder().setIpv6Address(((LispIpv6Address) addr).getIpv6Address()) - .setAfi(addr.getAfi()).setMask((short)mask).build(); - } else if (addr instanceof LcafSegmentAddress) { - LispAFIAddress afiAddr = LispAFIConvertor.toAFIfromPrimitive(((LcafSegmentAddress) addr).getAddress() - .getPrimitiveAddress()); - afiAddr = setMask(afiAddr, mask); - return new LcafSegmentAddrBuilder((LcafSegmentAddress) addr).setAddress( - new AddressBuilder().setPrimitiveAddress(LispAFIConvertor.toPrimitive(afiAddr)).build()).build(); - } - return addr; + public static String getAddressStringForIpPrefix(IpPrefix prefix) { + return String.valueOf(prefix.getValue()).split("/")[0]; } - public static LispAFIAddress setMaskSourceDest(LispAFIAddress addr, int srcMask, int dstMask) { - DstAddress dst = LcafSourceDestHelper.getDstAddress(addr); - LispAFIAddress dstAfi = LispAFIConvertor.toAFIfromPrimitive(dst.getPrimitiveAddress()); - DstAddress newDst = new DstAddressBuilder(dst).setPrimitiveAddress(LispAFIConvertor.toPrimitive(setMask(dstAfi, dstMask))).build(); - SrcAddress src = LcafSourceDestHelper.getSrcAddress(addr); - LispAFIAddress srcAfi = LispAFIConvertor.toAFIfromPrimitive(src.getPrimitiveAddress()); - SrcAddress newSrc = new SrcAddressBuilder(src).setPrimitiveAddress(LispAFIConvertor.toPrimitive(setMask(srcAfi, srcMask))).build(); - return new LcafSourceDestAddrBuilder((LcafSourceDestAddress)addr).setDstAddress(newDst).setSrcAddress(newSrc).build(); + public static String getAddressStringForIpv4Prefix(Ipv4Prefix prefix) { + return String.valueOf(prefix.getIpv4Prefix().getValue()).split("/")[0]; } - public static LispAddressContainer setMaskSourceDest(LispAddressContainer addr, int srcMask, int dstMask) { - return new LispAddressContainerBuilder().setAddress( - new LcafSourceDestBuilder((LcafSourceDest) addr.getAddress()).setLcafSourceDestAddr( - (LcafSourceDestAddr) setMaskSourceDest( - ((LcafSourceDest) addr.getAddress()).getLcafSourceDestAddr(), srcMask, dstMask)) - .build()).build(); + public static String getAddressStringForIpv6Prefix(Ipv6Prefix prefix) { + return String.valueOf(prefix.getIpv6Prefix().getValue()).split("/")[0]; } - /** - * RFC6830 defines masks and EIDs as separate fields of larger, encompassing blocks of LISP messages. However within - * LispFlowMapping masks are internal fields of EIDs. The fixMask methods should be used in deserializers and RPC - * handlers to ensure that masks for EIDs reflect accordingly the mask field values carried in LISP messages or RPC - * input objects respectively. - */ - public static LispAFIAddress fixMask(LispAFIAddress addr, short mask) { - if (addr instanceof LispIpv4Address || addr instanceof LispIpv6Address || addr instanceof LcafSegmentAddress) { - return MaskUtil.setMask(addr, mask); - } else if (addr instanceof LcafSourceDestAddress) { - return MaskUtil.setMaskSourceDest(addr, LcafSourceDestHelper.getSrcMask(addr), - LcafSourceDestHelper.getDstMask(addr)); + public static short getMaskForAddress(Address address) { + if (address instanceof Ipv4) { + return IPV4_MAX_MASK; + } else if (address instanceof Ipv6) { + return IPV6_MAX_MASK; + } else if (address instanceof Ipv4Prefix) { + String[] prefix = String.valueOf(((Ipv4Prefix)address).getIpv4Prefix().getValue()).split("/"); // TODO use something more efficient + return Short.parseShort(prefix[1]); + } else if (address instanceof Ipv6Prefix) { + String[] prefix = String.valueOf(((Ipv6Prefix)address).getIpv6Prefix().getValue()).split("/"); // TODO use something more efficient + return Short.parseShort(prefix[1]); + } else if (address instanceof InstanceId) { + return getMaskForAddress(((InstanceId)address).getInstanceId().getAddress()); } - return addr; - } - - public static LispAddressContainer fixMask(LispAddressContainer addr, short mask) { - if (addr.getAddress() instanceof Ipv4 || addr.getAddress() instanceof Ipv6 - || addr.getAddress() instanceof LcafSegment) { - return MaskUtil.setMask(addr, mask); - } else if (addr.getAddress() instanceof LcafSourceDest) { - return MaskUtil.setMaskSourceDest(addr, LcafSourceDestHelper.getSrcMask(addr), - LcafSourceDestHelper.getDstMask(addr)); - } - return addr; + return -1; } } diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/SourceDestKeyHelper.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/SourceDestKeyHelper.java new file mode 100644 index 000000000..8873d217e --- /dev/null +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/util/SourceDestKeyHelper.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. 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.lisp.util; + +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Lorand Jakab + * + */ + +public class SourceDestKeyHelper { + private final static Logger LOG = LoggerFactory.getLogger(SourceDestKeyHelper.class); + public static Eid getSrc(Eid eid) { + Address addr = eid.getAddress(); + if (addr instanceof SourceDestKey) { + return LispAddressUtil.toEid(eid, ((SourceDestKey)addr).getSourceDestKey().getSource()); + } else { + return eid; + } + } + + public static Eid getDst(Eid eid) { + Address addr = eid.getAddress(); + if (addr instanceof SourceDestKey) { + return LispAddressUtil.toEid(eid, ((SourceDestKey)addr).getSourceDestKey().getDest()); + } else { + return eid; + } + } + + public static short getSrcMask(Eid eid) { + Address addr = eid.getAddress(); + if (!isSrcDst(addr)) { + return 0; + } + return MaskUtil.getMaskForIpPrefix(((SourceDestKey)addr).getSourceDestKey().getSource()); + } + + public static short getDstMask(Eid eid) { + Address addr = eid.getAddress(); + if (!isSrcDst(addr)) { + return 0; + } + return MaskUtil.getMaskForIpPrefix(((SourceDestKey)addr).getSourceDestKey().getDest()); + } + + private static boolean isSrcDst(Address addr) { + if (!(addr instanceof SourceDestKey)) { + LOG.warn("Address {} is not a valid SourceDest LCAF", addr); + return false; + } + return true; + } +} diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java index 2ee404284..b6620efc3 100644 --- a/mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java +++ b/mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java @@ -1,5 +1,9 @@ package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefixBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; + /** * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. @@ -12,8 +16,52 @@ package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addre */ public class SimpleAddressBuilder { - public static SimpleAddress getDefaultInstance(java.lang.String defaultValue) { - throw new java.lang.UnsupportedOperationException("Not yet implemented"); + public static SimpleAddress getDefaultInstance(String defaultValue) { + SimpleAddress address = tryIpAddress(defaultValue); + if (address != null) { + return address; + } + + address = tryIpPrefix(defaultValue); + if (address != null) { + return address; + } + + address = tryMacAddress(defaultValue); + if (address != null) { + return address; + } + + // XXX need support for MAC addresses and AS numbers + address = new SimpleAddress(new DistinguishedNameType(defaultValue)); + + return address; } + private static SimpleAddress tryIpAddress(String defaultValue) { + try { + SimpleAddress address = new SimpleAddress(IpAddressBuilder.getDefaultInstance(defaultValue)); + return address; + } catch (IllegalArgumentException e) { + return null; + } + } + + private static SimpleAddress tryIpPrefix(String defaultValue) { + try { + SimpleAddress address = new SimpleAddress(IpPrefixBuilder.getDefaultInstance(defaultValue)); + return address; + } catch (IllegalArgumentException e) { + return null; + } + } + + private static SimpleAddress tryMacAddress(String defaultValue) { + try { + SimpleAddress address = new SimpleAddress(new MacAddress(defaultValue)); + return address; + } catch (IllegalArgumentException e) { + return null; + } + } } diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapNotifySerializationTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapNotifySerializationTest.java index a455be4d4..28b384d36 100644 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapNotifySerializationTest.java +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapNotifySerializationTest.java @@ -20,28 +20,34 @@ import junitx.framework.ArrayAssert; import org.junit.Test; import org.opendaylight.lispflowmapping.lisp.serializer.MapNotifySerializer; import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; +import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord.Action; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.no.NoAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder; public class MapNotifySerializationTest extends BaseTestCase { @Test public void serialize__Fields() throws Exception { MapNotifyBuilder mnBuilder = new MapNotifyBuilder(); - mnBuilder.setEidToLocatorRecord(new ArrayList()); - mnBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))) + mnBuilder.setMappingRecordItem(new ArrayList()); + mnBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")).build()) .build()); - mnBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.73"))) + mnBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32")).build()) .build()); mnBuilder.setNonce(6161616161L); @@ -73,14 +79,16 @@ public class MapNotifySerializationTest extends BaseTestCase { } @Test - public void serialize__deserizlise() throws Exception { + public void serialize__deserialize() throws Exception { MapNotifyBuilder mnBuilder = new MapNotifyBuilder(); - mnBuilder.setEidToLocatorRecord(new ArrayList()); - mnBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))) + mnBuilder.setMappingRecordItem(new ArrayList()); + mnBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")).build()) .build()); - mnBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.73"))) + mnBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32")).build()) .build()); mnBuilder.setNonce(6161616161L); @@ -123,7 +131,7 @@ public class MapNotifySerializationTest extends BaseTestCase { assertTrue(mn.isXtrSiteIdPresent()); - assertEquals(1, mn.getEidToLocatorRecord().size()); + assertEquals(1, mn.getMappingRecordItem().size()); assertEquals(0xFFBB000000000000L, mn.getNonce().longValue()); assertEquals(0x0000, mn.getKeyId().shortValue()); byte[] expectedAuthenticationData = {}; @@ -133,10 +141,11 @@ public class MapNotifySerializationTest extends BaseTestCase { @Test public void serialize__NoAuthenticationData() throws Exception { MapNotifyBuilder mnBuilder = new MapNotifyBuilder(); - mnBuilder.setEidToLocatorRecord(new ArrayList()); - mnBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setRecordTtl(55) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))).build()); + mnBuilder.setMappingRecordItem(new ArrayList()); + mnBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")) + .setRecordTtl(55).build()).build()); ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mnBuilder.build()); bb.position(bb.position() + 14); // jump to AuthenticationDataLength @@ -161,12 +170,14 @@ public class MapNotifySerializationTest extends BaseTestCase { @Test public void serialize__NoPrefixInEidToLocator() throws Exception { MapNotifyBuilder mnBuilder = new MapNotifyBuilder(); - mnBuilder.setEidToLocatorRecord(new ArrayList()); - mnBuilder.getEidToLocatorRecord().add(new EidToLocatorRecordBuilder().build()); - mnBuilder.getEidToLocatorRecord().add(new EidToLocatorRecordBuilder().setLispAddressContainer(null).build()); - mnBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer( - LispAFIConvertor.toContainer(new NoAddressBuilder().setAfi(AddressFamilyNumberEnum.NO_ADDRESS.getIanaCode()).build())).build()); + mnBuilder.setMappingRecordItem(new ArrayList()); + mnBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().build()).build()); + mnBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord + (new MappingRecordBuilder().setEid(null).build()).build()); + mnBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(new EidBuilder().setAddressType(NoAddressAfi.class).setAddress( + (Address) new NoAddressBuilder().setNoAddress(true).build()).build()).build()).build()); ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mnBuilder.build()); bb.position(bb.position() + 16); // jump to first record prefix AFI @@ -207,15 +218,15 @@ public class MapNotifySerializationTest extends BaseTestCase { + "ff 00 00 05 00 01 c0 a8 88 0d " // contd )); - assertEquals(4, mn.getEidToLocatorRecord().size()); - assertEquals(LispAFIConvertor.asIPv4Address("153.16.254.1"), mn.getEidToLocatorRecord().get(0) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.asIPv4Address("151.16.254.1"), mn.getEidToLocatorRecord().get(2) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.11")), mn.getEidToLocatorRecord().get(1) - .getLocatorRecord().get(0).getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.13")), mn.getEidToLocatorRecord().get(3) - .getLocatorRecord().get(0).getLispAddressContainer()); + assertEquals(4, mn.getMappingRecordItem().size()); + assertEquals(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"), mn.getMappingRecordItem().get(0) + .getMappingRecord().getEid()); + assertEquals(LispAddressUtil.asIpv4PrefixEid("151.16.254.1/32"), mn.getMappingRecordItem().get(2) + .getMappingRecord().getEid()); + assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.11"), mn.getMappingRecordItem().get(1) + .getMappingRecord().getLocatorRecord().get(0).getRloc()); + assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.13"), mn.getMappingRecordItem().get(3) + .getMappingRecord().getLocatorRecord().get(0).getRloc()); } @Test @@ -241,12 +252,12 @@ public class MapNotifySerializationTest extends BaseTestCase { + "00 01 c0 a8 88 0a " // Locator )); - assertEquals(1, mn.getEidToLocatorRecord().size()); - EidToLocatorRecord eidToLocator = mn.getEidToLocatorRecord().get(0); - assertEquals(3, eidToLocator.getLocatorRecord().size()); - LocatorRecord loc0 = eidToLocator.getLocatorRecord().get(0); - LocatorRecord loc1 = eidToLocator.getLocatorRecord().get(1); - LocatorRecord loc2 = eidToLocator.getLocatorRecord().get(2); + assertEquals(1, mn.getMappingRecordItem().size()); + MappingRecordItem eidToLocator = mn.getMappingRecordItem().get(0); + assertEquals(3, eidToLocator.getMappingRecord().getLocatorRecord().size()); + LocatorRecord loc0 = eidToLocator.getMappingRecord().getLocatorRecord().get(0); + LocatorRecord loc1 = eidToLocator.getMappingRecord().getLocatorRecord().get(1); + LocatorRecord loc2 = eidToLocator.getMappingRecord().getLocatorRecord().get(2); assertEquals((byte) 0x01, loc0.getPriority().byteValue()); assertEquals((byte) 0x67, loc1.getPriority().byteValue()); assertEquals((byte) 0x60, loc2.getPriority().byteValue()); @@ -275,8 +286,8 @@ public class MapNotifySerializationTest extends BaseTestCase { assertFalse(loc1.isRouted()); assertTrue(loc2.isRouted()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.10")), loc0.getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("204.170.170.17")), loc1.getLispAddressContainer()); + assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.10"), loc0.getRloc()); + assertEquals(LispAddressUtil.asIpv4Rloc("204.170.170.17"), loc1.getRloc()); } @Test @@ -307,12 +318,12 @@ public class MapNotifySerializationTest extends BaseTestCase { + "ff 00 00 05 00 01 c0 a8 88 0d " // contd )); - assertEquals(4, mn.getEidToLocatorRecord().size()); + assertEquals(4, mn.getMappingRecordItem().size()); - EidToLocatorRecord record0 = mn.getEidToLocatorRecord().get(0); - EidToLocatorRecord record1 = mn.getEidToLocatorRecord().get(1); - EidToLocatorRecord record2 = mn.getEidToLocatorRecord().get(2); - EidToLocatorRecord record3 = mn.getEidToLocatorRecord().get(3); + MappingRecord record0 = mn.getMappingRecordItem().get(0).getMappingRecord(); + MappingRecord record1 = mn.getMappingRecordItem().get(1).getMappingRecord(); + MappingRecord record2 = mn.getMappingRecordItem().get(2).getMappingRecord(); + MappingRecord record3 = mn.getMappingRecordItem().get(3).getMappingRecord(); assertEquals(10, record0.getRecordTtl().intValue()); assertEquals(13, record3.getRecordTtl().intValue()); @@ -345,8 +356,8 @@ public class MapNotifySerializationTest extends BaseTestCase { + "00 0a 01 20 F0 00 00 00 00 01 99 10 fe 01 01 64 " // + "ff 00 00 05 00 01 c0 a8 88 0a")); - assertEquals(1, mn.getEidToLocatorRecord().size()); - assertEquals(Action.NoAction, mn.getEidToLocatorRecord().get(0).getAction()); + assertEquals(1, mn.getMappingRecordItem().size()); + assertEquals(Action.NoAction, mn.getMappingRecordItem().get(0).getMappingRecord().getAction()); } @Test(expected = LispSerializationException.class) @@ -392,7 +403,7 @@ public class MapNotifySerializationTest extends BaseTestCase { assertFalse(mn.isXtrSiteIdPresent()); - assertEquals(1, mn.getEidToLocatorRecord().size()); + assertEquals(1, mn.getMappingRecordItem().size()); assertEquals(0xFFBB000000000000L, mn.getNonce().longValue()); assertEquals(0x0001, mn.getKeyId().shortValue()); byte[] expectedAuthenticationData = { (byte) 0x2c, (byte) 0x61, (byte) 0xb9, (byte) 0xc9, (byte) 0x9a, (byte) 0x20, (byte) 0xba, (byte) 0xd8, // @@ -425,7 +436,7 @@ public class MapNotifySerializationTest extends BaseTestCase { assertFalse(mn.isXtrSiteIdPresent()); - assertEquals(1, mn.getEidToLocatorRecord().size()); + assertEquals(1, mn.getMappingRecordItem().size()); assertEquals(0xFFBB000000000000L, mn.getNonce().longValue()); assertEquals(0x0002, mn.getKeyId().shortValue()); byte[] expectedAuthenticationData = { (byte) 0x70, (byte) 0x30, (byte) 0xd4, (byte) 0xc6, (byte) 0x10, (byte) 0x44, (byte) 0x0d, (byte) 0x83, diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRegisterSerializationTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRegisterSerializationTest.java index c91951ac5..ec990dbd5 100644 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRegisterSerializationTest.java +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRegisterSerializationTest.java @@ -21,15 +21,19 @@ import org.junit.Test; import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer; import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer.Length; import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; +import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord.Action; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.no.NoAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegisterBuilder; public class MapRegisterSerializationTest extends BaseTestCase { @@ -37,14 +41,16 @@ public class MapRegisterSerializationTest extends BaseTestCase { @Test public void serialize__Fields() throws Exception { MapRegisterBuilder mrBuilder = new MapRegisterBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); - EidToLocatorRecordBuilder etlrBuilder = new EidToLocatorRecordBuilder(); - etlrBuilder.setLocatorRecord(new ArrayList()); - etlrBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))); + mrBuilder.setMappingRecordItem(new ArrayList()); + MappingRecordBuilder recordBuilder = new MappingRecordBuilder(); + recordBuilder.setLocatorRecord(new ArrayList()); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")); - mrBuilder.getEidToLocatorRecord().add(etlrBuilder.build()); - etlrBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.73"))); - mrBuilder.getEidToLocatorRecord().add(etlrBuilder.build()); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32")); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); mrBuilder.setNonce(6161616161L); mrBuilder.setKeyId((short) 0x0001); @@ -73,10 +79,10 @@ public class MapRegisterSerializationTest extends BaseTestCase { bb.get(actualAuthenticationData); ArrayAssert.assertEquals(authenticationData, actualAuthenticationData); - bb.position(bb.position() + 12); /* EID in first record */ + bb.position(bb.position() + 12); // EID in first record assertEquals(0x1, bb.getInt()); - bb.position(bb.position() + 12); /* EID in second record */ + bb.position(bb.position() + 12); // EID in second record assertEquals(73, bb.getInt()); byte[] actualXtrId = new byte[Length.XTRID_SIZE]; @@ -93,18 +99,21 @@ public class MapRegisterSerializationTest extends BaseTestCase { @Test public void serialize__deserialize() throws Exception { MapRegisterBuilder mrBuilder = new MapRegisterBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); - EidToLocatorRecordBuilder etlrBuilder = new EidToLocatorRecordBuilder(); - etlrBuilder.setLocatorRecord(new ArrayList()); - etlrBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))); - - etlrBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.73"))); - mrBuilder.getEidToLocatorRecord().add(etlrBuilder.build()); - - etlrBuilder.setAction(Action.NoAction); - etlrBuilder.setMapVersion((short) 0); - etlrBuilder.setMaskLength((short) 0); - etlrBuilder.setRecordTtl(0); + mrBuilder.setMappingRecordItem(new ArrayList()); + MappingRecordBuilder recordBuilder = new MappingRecordBuilder(); + recordBuilder.setLocatorRecord(new ArrayList()); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")); + + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32")); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); + + recordBuilder.setAction(Action.NoAction); + recordBuilder.setMapVersion((short) 0); + recordBuilder.setMaskLength((short) 0); + recordBuilder.setRecordTtl(0); mrBuilder.setNonce(6161616161L); mrBuilder.setKeyId((short) 0x0001); mrBuilder.setWantMapNotify(true); @@ -125,10 +134,10 @@ public class MapRegisterSerializationTest extends BaseTestCase { @Test public void serialize__NoAuthenticationData() throws Exception { MapRegisterBuilder mrBuilder = new MapRegisterBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); - mrBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setRecordTtl(55) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))).build()); + mrBuilder.setMappingRecordItem(new ArrayList()); + mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setRecordTtl(55) + .setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")).build()).build()); // mrBuilder.addEidToLocator(new EidToLocatorRecord().setPrefix(new // LispIpv4Address(1)).setRecordTtl(55)); @@ -155,12 +164,14 @@ public class MapRegisterSerializationTest extends BaseTestCase { @Test public void serialize__NoPrefixInEidToLocator() throws Exception { MapRegisterBuilder mrBuilder = new MapRegisterBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); - mrBuilder.getEidToLocatorRecord().add(new EidToLocatorRecordBuilder().build()); - mrBuilder.getEidToLocatorRecord().add(new EidToLocatorRecordBuilder().setLispAddressContainer(null).build()); - mrBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer( - LispAFIConvertor.toContainer(new NoAddressBuilder().setAfi(AddressFamilyNumberEnum.NO_ADDRESS.getIanaCode()).build())).build()); + mrBuilder.setMappingRecordItem(new ArrayList()); + mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().build()).build()); + mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(null).build()).build()); + mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord( + new MappingRecordBuilder().setEid(new EidBuilder().setAddressType(NoAddressAfi.class).setAddress( + (Address) new NoAddressBuilder().setNoAddress(true).build()).build()).build()).build()); ByteBuffer bb = MapRegisterSerializer.getInstance().serialize(mrBuilder.build()); bb.position(bb.position() + 16); // jump to first record prefix AFI @@ -194,7 +205,7 @@ public class MapRegisterSerializationTest extends BaseTestCase { assertTrue(mr.isProxyMapReply()); assertTrue(mr.isWantMapNotify()); - assertEquals(1, mr.getEidToLocatorRecord().size()); + assertEquals(1, mr.getMappingRecordItem().size()); assertEquals(0xFFBB000000000000L, mr.getNonce().longValue()); assertEquals(0x0000, mr.getKeyId().shortValue()); byte[] expectedAuthenticationData = {}; @@ -206,7 +217,7 @@ public class MapRegisterSerializationTest extends BaseTestCase { ByteBuffer bb = hexToByteBuffer("32 00 01 01 63 99 " + "83 64 23 06 a8 be 00 01 00 14 b8 c2 a2 e1 dc 4a " + "08 0c f6 01 b0 9d 70 5a d4 88 95 f8 73 dd 00 00 " - + "05 a0 01 20 10 00 00 00 40 03 00 00 02 20 00 0a " + + "05 a0 01 20 10 00 00 00 40 03 00 00 02 00 00 0a " + "00 00 00 01 00 01 c3 a8 c8 01 0a 32 ff 00 00 04 " + "00 01 ac 10 01 02 15 1a 39 80 e3 35 e6 c4 49 a6 " + "90 87 20 65 9a b7 00 00 00 00 00 00 00 00 "); @@ -245,15 +256,15 @@ public class MapRegisterSerializationTest extends BaseTestCase { + "ff 00 00 05 00 01 c0 a8 88 0d " // contd )); - assertEquals(4, mr.getEidToLocatorRecord().size()); - assertEquals(LispAFIConvertor.asIPv4Address("153.16.254.1"), mr.getEidToLocatorRecord().get(0) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.asIPv4Address("151.16.254.1"), mr.getEidToLocatorRecord().get(2) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.11")), mr.getEidToLocatorRecord().get(1) - .getLocatorRecord().get(0).getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.13")), mr.getEidToLocatorRecord().get(3) - .getLocatorRecord().get(0).getLispAddressContainer()); + assertEquals(4, mr.getMappingRecordItem().size()); + assertEquals(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"), mr.getMappingRecordItem().get(0) + .getMappingRecord().getEid()); + assertEquals(LispAddressUtil.asIpv4PrefixEid("151.16.254.1/32"), mr.getMappingRecordItem().get(2) + .getMappingRecord().getEid()); + assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.11"), mr.getMappingRecordItem().get(1) + .getMappingRecord().getLocatorRecord().get(0).getRloc()); + assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.13"), mr.getMappingRecordItem().get(3) + .getMappingRecord().getLocatorRecord().get(0).getRloc()); } @Test @@ -279,12 +290,12 @@ public class MapRegisterSerializationTest extends BaseTestCase { + "00 01 c0 a8 88 0a " // Locator )); - assertEquals(1, mr.getEidToLocatorRecord().size()); - EidToLocatorRecord eidToLocator = mr.getEidToLocatorRecord().get(0); - assertEquals(3, eidToLocator.getLocatorRecord().size()); - LocatorRecord loc0 = eidToLocator.getLocatorRecord().get(0); - LocatorRecord loc1 = eidToLocator.getLocatorRecord().get(1); - LocatorRecord loc2 = eidToLocator.getLocatorRecord().get(2); + assertEquals(1, mr.getMappingRecordItem().size()); + MappingRecordItem eidToLocator = mr.getMappingRecordItem().get(0); + assertEquals(3, eidToLocator.getMappingRecord().getLocatorRecord().size()); + LocatorRecord loc0 = eidToLocator.getMappingRecord().getLocatorRecord().get(0); + LocatorRecord loc1 = eidToLocator.getMappingRecord().getLocatorRecord().get(1); + LocatorRecord loc2 = eidToLocator.getMappingRecord().getLocatorRecord().get(2); assertEquals((byte) 0x01, loc0.getPriority().byteValue()); assertEquals((byte) 0x67, loc1.getPriority().byteValue()); assertEquals((byte) 0x60, loc2.getPriority().byteValue()); @@ -313,8 +324,8 @@ public class MapRegisterSerializationTest extends BaseTestCase { assertFalse(loc1.isRouted()); assertTrue(loc2.isRouted()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.10")), loc0.getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("204.170.170.17")), loc1.getLispAddressContainer()); + assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.10"), loc0.getRloc()); + assertEquals(LispAddressUtil.asIpv4Rloc("204.170.170.17"), loc1.getRloc()); } @Test @@ -345,12 +356,12 @@ public class MapRegisterSerializationTest extends BaseTestCase { + "ff 00 00 05 00 01 c0 a8 88 0d " // contd )); - assertEquals(4, mr.getEidToLocatorRecord().size()); + assertEquals(4, mr.getMappingRecordItem().size()); - EidToLocatorRecord record0 = mr.getEidToLocatorRecord().get(0); - EidToLocatorRecord record1 = mr.getEidToLocatorRecord().get(1); - EidToLocatorRecord record2 = mr.getEidToLocatorRecord().get(2); - EidToLocatorRecord record3 = mr.getEidToLocatorRecord().get(3); + MappingRecord record0 = mr.getMappingRecordItem().get(0).getMappingRecord(); + MappingRecord record1 = mr.getMappingRecordItem().get(1).getMappingRecord(); + MappingRecord record2 = mr.getMappingRecordItem().get(2).getMappingRecord(); + MappingRecord record3 = mr.getMappingRecordItem().get(3).getMappingRecord(); assertEquals(10, record0.getRecordTtl().intValue()); assertEquals(13, record3.getRecordTtl().intValue()); @@ -383,8 +394,8 @@ public class MapRegisterSerializationTest extends BaseTestCase { + "00 0a 01 20 F0 00 00 00 00 01 99 10 fe 01 01 64 " // + "ff 00 00 05 00 01 c0 a8 88 0a")); - assertEquals(1, mr.getEidToLocatorRecord().size()); - assertEquals(Action.NoAction, mr.getEidToLocatorRecord().get(0).getAction()); + assertEquals(1, mr.getMappingRecordItem().size()); + assertEquals(Action.NoAction, mr.getMappingRecordItem().get(0).getMappingRecord().getAction()); } @Test(expected = LispSerializationException.class) @@ -431,7 +442,7 @@ public class MapRegisterSerializationTest extends BaseTestCase { assertTrue(mr.isProxyMapReply()); assertTrue(mr.isWantMapNotify()); - assertEquals(1, mr.getEidToLocatorRecord().size()); + assertEquals(1, mr.getMappingRecordItem().size()); assertEquals(0xFFBB000000000000L, mr.getNonce().longValue()); assertEquals(0x0001, mr.getKeyId().shortValue()); byte[] expectedAuthenticationData = { (byte) 0x2c, (byte) 0x61, (byte) 0xb9, (byte) 0xc9, (byte) 0x9a, (byte) 0x20, (byte) 0xba, (byte) 0xd8, // @@ -465,7 +476,7 @@ public class MapRegisterSerializationTest extends BaseTestCase { assertTrue(mr.isProxyMapReply()); assertTrue(mr.isWantMapNotify()); - assertEquals(1, mr.getEidToLocatorRecord().size()); + assertEquals(1, mr.getMappingRecordItem().size()); assertEquals(0xFFBB000000000000L, mr.getNonce().longValue()); assertEquals(0x0002, mr.getKeyId().shortValue()); byte[] expectedAuthenticationData = { (byte) 0x70, (byte) 0x30, (byte) 0xd4, (byte) 0xc6, (byte) 0x10, (byte) 0x44, (byte) 0x0d, (byte) 0x83, @@ -474,5 +485,4 @@ public class MapRegisterSerializationTest extends BaseTestCase { (byte) 0x11, (byte) 0x23, (byte) 0xb9, (byte) 0x38 }; ArrayAssert.assertEquals(expectedAuthenticationData, mr.getAuthenticationData()); } - } diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapReplySerializationTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapReplySerializationTest.java index a7b9a19de..d3d03d894 100644 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapReplySerializationTest.java +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapReplySerializationTest.java @@ -18,14 +18,18 @@ import junitx.framework.ArrayAssert; import org.junit.Ignore; import org.junit.Test; import org.opendaylight.lispflowmapping.lisp.serializer.MapReplySerializer; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; +import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord.Action; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapReply; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder; public class MapReplySerializationTest extends BaseTestCase { @@ -41,10 +45,11 @@ public class MapReplySerializationTest extends BaseTestCase { @Test public void serialize__SomeFlags() throws Exception { MapReplyBuilder mr = new MapReplyBuilder(); - mr.setEidToLocatorRecord(new ArrayList()); - mr.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))) - .build()); + mr.setMappingRecordItem(new ArrayList()); + MappingRecordBuilder recordBuilder = new MappingRecordBuilder(); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")); + mr.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); mr.setProbe(true); mr.setEchoNonceEnabled(false); @@ -83,61 +88,64 @@ public class MapReplySerializationTest extends BaseTestCase { + "00 02 00 01 00 02 00 03 " // + "00 04 00 05 00 06 00 07 00 08 00 00 00 00 00 10 30 00 00 02 00 01 04 03 00 00")); assertEquals(2, mr.getNonce().longValue()); - assertEquals(LispAFIConvertor.asIPv4Address(("1.2.3.4")), mr.getEidToLocatorRecord().get(0) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.asIPv4Prefix(("4.3.2.1"), 16), mr.getEidToLocatorRecord().get(1) - .getLispAddressContainer()); - assertEquals(false, mr.getEidToLocatorRecord().get(0).isAuthoritative()); - assertEquals(true, mr.getEidToLocatorRecord().get(1).isAuthoritative()); - assertEquals(Action.NoAction, mr.getEidToLocatorRecord().get(0).getAction()); - assertEquals(Action.NativelyForward, mr.getEidToLocatorRecord().get(1).getAction()); - assertEquals(0, mr.getEidToLocatorRecord().get(0).getMapVersion().shortValue()); - assertEquals(2, mr.getEidToLocatorRecord().get(1).getMapVersion().shortValue()); - assertEquals(32, mr.getEidToLocatorRecord().get(0).getMaskLength().shortValue()); - assertEquals(16, mr.getEidToLocatorRecord().get(1).getMaskLength().shortValue()); - assertEquals(2, mr.getEidToLocatorRecord().get(0).getRecordTtl().byteValue()); - assertEquals(0, mr.getEidToLocatorRecord().get(1).getRecordTtl().byteValue()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPv6AfiAddress(("1:2:3:4:5:6:7:8"))), mr.getEidToLocatorRecord().get(0) - .getLocatorRecord().get(1).getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("10.10.10.10"))), mr.getEidToLocatorRecord().get(0) - .getLocatorRecord().get(0).getLispAddressContainer()); - assertEquals(1, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getPriority().byteValue()); - assertEquals(2, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getWeight().byteValue()); - assertEquals(3, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getMulticastPriority().byteValue()); - assertEquals(4, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getMulticastWeight().byteValue()); - assertEquals(4, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getPriority().byteValue()); - assertEquals(3, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getWeight().byteValue()); - assertEquals(2, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getMulticastPriority().byteValue()); - assertEquals(1, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getMulticastWeight().byteValue()); - assertEquals(true, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).isLocalLocator()); - assertEquals(true, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).isRlocProbed()); - assertEquals(false, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).isRouted()); - assertEquals(false, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).isLocalLocator()); - assertEquals(false, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).isRlocProbed()); - assertEquals(true, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).isRouted()); + assertEquals("1.2.3.4/32", ((Ipv4Prefix) mr.getMappingRecordItem().get(0) + .getMappingRecord().getEid().getAddress()).getIpv4Prefix().getValue()); + // XXX Why here normalized and other cases not normalized? + assertEquals("4.3.0.0/16", ((Ipv4Prefix) mr.getMappingRecordItem().get(1) + .getMappingRecord().getEid().getAddress()).getIpv4Prefix().getValue()); + assertEquals(false, mr.getMappingRecordItem().get(0).getMappingRecord().isAuthoritative()); + assertEquals(true, mr.getMappingRecordItem().get(1).getMappingRecord().isAuthoritative()); + assertEquals(Action.NoAction, mr.getMappingRecordItem().get(0).getMappingRecord().getAction()); + assertEquals(Action.NativelyForward, mr.getMappingRecordItem().get(1).getMappingRecord().getAction()); + assertEquals(0, mr.getMappingRecordItem().get(0).getMappingRecord().getMapVersion().shortValue()); + assertEquals(2, mr.getMappingRecordItem().get(1).getMappingRecord().getMapVersion().shortValue()); + assertEquals(32, mr.getMappingRecordItem().get(0).getMappingRecord().getMaskLength().shortValue()); + assertEquals(16, mr.getMappingRecordItem().get(1).getMappingRecord().getMaskLength().shortValue()); + assertEquals(2, mr.getMappingRecordItem().get(0).getMappingRecord().getRecordTtl().byteValue()); + assertEquals(0, mr.getMappingRecordItem().get(1).getMappingRecord().getRecordTtl().byteValue()); + assertEquals("1:2:3:4:5:6:7:8", ((Ipv6) mr.getMappingRecordItem().get(0).getMappingRecord() + .getLocatorRecord().get(1).getRloc().getAddress()).getIpv6().getValue()); + assertEquals("10.10.10.10", ((Ipv4) mr.getMappingRecordItem().get(0).getMappingRecord() + .getLocatorRecord().get(0).getRloc().getAddress()).getIpv4().getValue()); + assertEquals(1, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0).getPriority().byteValue()); + assertEquals(2, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0).getWeight().byteValue()); + assertEquals(3, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0).getMulticastPriority().byteValue()); + assertEquals(4, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0).getMulticastWeight().byteValue()); + assertEquals(4, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(1).getPriority().byteValue()); + assertEquals(3, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(1).getWeight().byteValue()); + assertEquals(2, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(1).getMulticastPriority().byteValue()); + assertEquals(1, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(1).getMulticastWeight().byteValue()); + assertEquals(true, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0).isLocalLocator()); + assertEquals(true, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0).isRlocProbed()); + assertEquals(false, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0).isRouted()); + assertEquals(false, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(1).isLocalLocator()); + assertEquals(false, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(1).isRlocProbed()); + assertEquals(true, mr.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(1).isRouted()); } @Test public void serialize__MultipleRecordsWithoutRLOCs() throws Exception { MapReplyBuilder mrBuilder = new MapReplyBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); - mrBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer( - LispAFIConvertor.toContainer(LispAFIConvertor.asIPv6AfiAddress(("0:0:0:0:0:0:0:8")))).build()); - mrBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("8.2.4.5"))) - .build()); + mrBuilder.setMappingRecordItem(new ArrayList()); + MappingRecordBuilder recordBuilder = new MappingRecordBuilder(); + recordBuilder.setEid(LispAddressUtil.asIpv6PrefixEid("0:0:0:0:0:0:0:8/128")); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); + + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("8.2.4.5/32")); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build()); assertEquals(2, packet.get(3)); - packet.position(24); /* EID in first record */ + packet.position(24); // EID in first record byte[] expected = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08 }; byte[] actual = new byte[16]; packet.get(actual); ArrayAssert.assertEquals(expected, actual); - packet.position(packet.position() + 12); /* EID in second record */ + packet.position(packet.position() + 12); // EID in second record assertEquals(0x08020405, packet.getInt()); } @@ -146,29 +154,31 @@ public class MapReplySerializationTest extends BaseTestCase { MapReply mr = MapReplySerializer.getInstance().deserialize(hexToByteBuffer("20 00 00 02 00 00 " // + "00 00 00 00 00 00 00 00 00 01 00 20 00 00 00 00 00 01 01 02 03 04 00 00 00 00 00 10 30 00 00 02 00 01 04 03 00 00")); - assertEquals(LispAFIConvertor.asIPv4Address(("1.2.3.4")), mr.getEidToLocatorRecord().get(0) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.asIPv4Prefix("4.3.2.1", 16), mr.getEidToLocatorRecord().get(1) - .getLispAddressContainer()); - assertEquals(false, mr.getEidToLocatorRecord().get(0).isAuthoritative()); - assertEquals(true, mr.getEidToLocatorRecord().get(1).isAuthoritative()); - assertEquals(Action.NoAction, mr.getEidToLocatorRecord().get(0).getAction()); - assertEquals(Action.NativelyForward, mr.getEidToLocatorRecord().get(1).getAction()); - assertEquals(0, mr.getEidToLocatorRecord().get(0).getMapVersion().shortValue()); - assertEquals(2, mr.getEidToLocatorRecord().get(1).getMapVersion().shortValue()); - assertEquals(32, mr.getEidToLocatorRecord().get(0).getMaskLength().shortValue()); - assertEquals(16, mr.getEidToLocatorRecord().get(1).getMaskLength().shortValue()); - assertEquals(1, mr.getEidToLocatorRecord().get(0).getRecordTtl().byteValue()); - assertEquals(0, mr.getEidToLocatorRecord().get(1).getRecordTtl().byteValue()); + assertEquals("1.2.3.4/32", ((Ipv4Prefix) mr.getMappingRecordItem().get(0) + .getMappingRecord().getEid().getAddress()).getIpv4Prefix().getValue()); + // XXX Why here normalized and other cases not normalized? + assertEquals("4.3.0.0/16", ((Ipv4Prefix) mr.getMappingRecordItem().get(1) + .getMappingRecord().getEid().getAddress()).getIpv4Prefix().getValue()); + assertEquals(false, mr.getMappingRecordItem().get(0).getMappingRecord().isAuthoritative()); + assertEquals(true, mr.getMappingRecordItem().get(1).getMappingRecord().isAuthoritative()); + assertEquals(Action.NoAction, mr.getMappingRecordItem().get(0).getMappingRecord().getAction()); + assertEquals(Action.NativelyForward, mr.getMappingRecordItem().get(1).getMappingRecord().getAction()); + assertEquals(0, mr.getMappingRecordItem().get(0).getMappingRecord().getMapVersion().shortValue()); + assertEquals(2, mr.getMappingRecordItem().get(1).getMappingRecord().getMapVersion().shortValue()); + assertEquals(32, mr.getMappingRecordItem().get(0).getMappingRecord().getMaskLength().shortValue()); + assertEquals(16, mr.getMappingRecordItem().get(1).getMappingRecord().getMaskLength().shortValue()); + assertEquals(1, mr.getMappingRecordItem().get(0).getMappingRecord().getRecordTtl().byteValue()); + assertEquals(0, mr.getMappingRecordItem().get(1).getMappingRecord().getRecordTtl().byteValue()); } @Test public void serialize__EidRecordDefaultAction() throws Exception { MapReplyBuilder mrBuilder = new MapReplyBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); - mrBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("0.0.0.1")))) - .build()); + mrBuilder.setMappingRecordItem(new ArrayList()); + MappingRecordBuilder recordBuilder = new MappingRecordBuilder(); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build()); @@ -179,10 +189,12 @@ public class MapReplySerializationTest extends BaseTestCase { @Test public void serialize__EidRecordNullActionShouldTranslateToDefault() throws Exception { MapReplyBuilder mrBuilder = new MapReplyBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); - mrBuilder.getEidToLocatorRecord().add( - new EidToLocatorRecordBuilder().setAction(null) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("0.0.0.1")))).build()); + mrBuilder.setMappingRecordItem(new ArrayList()); + MappingRecordBuilder recordBuilder = new MappingRecordBuilder(); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")); + recordBuilder.setAction(null); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build()); ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build()); @@ -193,52 +205,52 @@ public class MapReplySerializationTest extends BaseTestCase { @Test public void serialize__EidRecordFields() throws Exception { MapReplyBuilder mrBuilder = new MapReplyBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); + mrBuilder.setMappingRecordItem(new ArrayList()); - EidToLocatorRecordBuilder eidToLocator1 = new EidToLocatorRecordBuilder(); - eidToLocator1.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))); + MappingRecordBuilder eidToLocator1 = new MappingRecordBuilder(); + eidToLocator1.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")); eidToLocator1.setRecordTtl(7); eidToLocator1.setAction(Action.SendMapRequest); eidToLocator1.setAuthoritative(true); eidToLocator1.setMapVersion((short) 3072); - mrBuilder.getEidToLocatorRecord().add(eidToLocator1.build()); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(eidToLocator1.build()).build()); - EidToLocatorRecordBuilder eidToLocator2 = new EidToLocatorRecordBuilder(); - eidToLocator2.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.7"))); + MappingRecordBuilder eidToLocator2 = new MappingRecordBuilder(); + eidToLocator2.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.7/32")); eidToLocator2.setRecordTtl(1000000); eidToLocator2.setAction(Action.Drop); eidToLocator2.setAuthoritative(false); eidToLocator2.setMapVersion((short) 29); - mrBuilder.getEidToLocatorRecord().add(eidToLocator2.build()); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(eidToLocator2.build()).build()); ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build()); - packet.position(12); /* First record */ + packet.position(12); // First record assertEquals(7, packet.getInt()); - packet.position(packet.position() + 2); /* - * skip Locator Count & Mask-len - */ + packet.position(packet.position() + 2); // skip Locator Count & Mask-len + assertHexEquals((byte) 0x50, packet.get()); - packet.position(packet.position() + 1); /* skip Reserved byte */ + packet.position(packet.position() + 1); // skip Reserved byte assertEquals((short) 3072, packet.getShort()); - packet.position(packet.position() + 6); /* Second record */ + packet.position(packet.position() + 6); // Second record assertEquals(1000000, packet.getInt()); - packet.position(packet.position() + 2); /* - * skip Locator Count & Mask-len - */ + packet.position(packet.position() + 2); // skip Locator Count & Mask-len + assertHexEquals((byte) 0x60, packet.get()); - packet.position(packet.position() + 1); /* skip Reserved byte */ + packet.position(packet.position() + 1); // skip Reserved byte assertEquals((short) 29, packet.getShort()); } @Test public void serialize__LocatorRecordFields() throws Exception { MapReplyBuilder mrBuilder = new MapReplyBuilder(); - mrBuilder.setEidToLocatorRecord(new ArrayList()); + mrBuilder.setMappingRecordItem(new ArrayList()); - EidToLocatorRecordBuilder eidToLocatorBuilder = new EidToLocatorRecordBuilder(); - eidToLocatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))); + MappingRecordBuilder eidToLocatorBuilder = new MappingRecordBuilder(); + eidToLocatorBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")); eidToLocatorBuilder.setLocatorRecord(new ArrayList()); LocatorRecordBuilder locatorBuilder1 = new LocatorRecordBuilder(); @@ -246,7 +258,7 @@ public class MapReplySerializationTest extends BaseTestCase { locatorBuilder1.setWeight((short) 0xF6); locatorBuilder1.setMulticastPriority((short) 0xA3); locatorBuilder1.setMulticastWeight((short) 0x06); - locatorBuilder1.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))); + locatorBuilder1.setRloc(LispAddressUtil.asIpv4Rloc("0.0.0.1")); locatorBuilder1.setLocalLocator(true); locatorBuilder1.setRlocProbed(true); locatorBuilder1.setRouted(true); @@ -257,17 +269,18 @@ public class MapReplySerializationTest extends BaseTestCase { locatorBuilder2.setWeight((short) 0x06); locatorBuilder2.setMulticastPriority((short) 0x03); locatorBuilder2.setMulticastWeight((short) 0xF1); - locatorBuilder2.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.2"))); + locatorBuilder2.setRloc(LispAddressUtil.asIpv4Rloc("0.0.0.2")); locatorBuilder2.setLocalLocator(false); locatorBuilder2.setRlocProbed(false); locatorBuilder2.setRouted(false); eidToLocatorBuilder.getLocatorRecord().add(locatorBuilder2.build()); - mrBuilder.getEidToLocatorRecord().add(eidToLocatorBuilder.build()); + mrBuilder.getMappingRecordItem().add( + new MappingRecordItemBuilder().setMappingRecord(eidToLocatorBuilder.build()).build()); ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build()); - packet.position(12 + 16); /* First locator record */ + packet.position(12 + 16); // First locator record assertHexEquals((byte) 0xF3, packet.get()); assertHexEquals((byte) 0xF6, packet.get()); assertHexEquals((byte) 0xA3, packet.get()); @@ -275,7 +288,7 @@ public class MapReplySerializationTest extends BaseTestCase { packet.position(packet.position() + 1); assertHexEquals((byte) 0x07, packet.get()); - packet.position(packet.position() + 6); /* Second locator record */ + packet.position(packet.position() + 6); // Second locator record assertHexEquals((byte) 0x03, packet.get()); assertHexEquals((byte) 0x06, packet.get()); assertHexEquals((byte) 0x03, packet.get()); diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRequestSerializationTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRequestSerializationTest.java index e29f3575e..da825357e 100644 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRequestSerializationTest.java +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/MapRequestSerializationTest.java @@ -18,22 +18,27 @@ import java.util.ArrayList; import org.junit.Test; import org.opendaylight.lispflowmapping.lisp.serializer.MapRequestSerializer; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; +import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord.Action; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRequest; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidrecords.EidRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidrecords.EidRecordBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainerBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.NoBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.no.NoAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRloc; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRlocBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.MapReply; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.MapReplyBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.SourceEidBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequestBuilder; @@ -43,17 +48,13 @@ public class MapRequestSerializationTest extends BaseTestCase { @Test public void prefix__NoPrefix() throws Exception { MapRequestBuilder mrBuilder = new MapRequestBuilder(); - mrBuilder.setEidRecord(new ArrayList()); - mrBuilder.getEidRecord().add( - new EidRecordBuilder().setLispAddressContainer( - new LispAddressContainerBuilder().setAddress( - new NoBuilder().setNoAddress( - new NoAddressBuilder().setAfi((short) 0) - .build()).build()).build()).build()); + mrBuilder.setEidItem(new ArrayList()); + mrBuilder.getEidItem().add(new EidItemBuilder().setEid( + new EidBuilder().setAddressType(NoAddressAfi.class).setAddress( + (Address) new NoAddressBuilder().setNoAddress(true).build()).build()).build()); - assertEquals(AddressFamilyNumberEnum.NO_ADDRESS.getIanaCode(), - LispAFIConvertor.toAFI(mrBuilder.getEidRecord().get(0).getLispAddressContainer()).getAfi().shortValue()); + assertEquals(NoAddressAfi.class, mrBuilder.getEidItem().get(0).getEid().getAddressType()); } @Test @@ -93,8 +94,9 @@ public class MapRequestSerializationTest extends BaseTestCase { + "38 66 00 20 00 01 01 02 03 04 00 00 00 0a 01 20 " // + "10 00 00 00 00 01 01 01 01 01 01 64 ff 00 00 05 " // + "00 01 c0 a8 38 66")); - assertEquals("1.1.1.1", ((Ipv4) mr.getSourceEid().getLispAddressContainer().getAddress()).getIpv4Address().getIpv4Address().getValue()); - assertEquals("1.2.3.4", ((Ipv4) mr.getEidRecord().get(0).getLispAddressContainer().getAddress()).getIpv4Address().getIpv4Address().getValue()); + assertEquals("1.1.1.1", ((Ipv4) mr.getSourceEid().getEid().getAddress()).getIpv4().getValue()); + assertEquals("1.2.3.4/32", + ((Ipv4Prefix) mr.getEidItem().get(0).getEid().getAddress()).getIpv4Prefix().getValue()); } @@ -162,17 +164,16 @@ public class MapRequestSerializationTest extends BaseTestCase { } @Test - public void deserialize__SingleEidRecord() throws Exception { + public void deserialize__SingleEidItem() throws Exception { 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")); - assertEquals(1, mr.getEidRecord().size()); - EidRecord eid = mr.getEidRecord().get(0); - assertEquals(0x20, eid.getMask().byteValue()); - assertEquals(LispAFIConvertor.asIPv4Address("1.2.3.4"), eid.getLispAddressContainer()); + assertEquals(1, mr.getEidItem().size()); + Eid eid = mr.getEidItem().get(0).getEid(); + assertEquals("1.2.3.4/32", ((Ipv4Prefix) eid.getAddress()).getIpv4Prefix().getValue()); } @Test @@ -189,42 +190,39 @@ public class MapRequestSerializationTest extends BaseTestCase { )); - assertEquals(1, mr.getEidRecord().size()); - EidRecord eid = mr.getEidRecord().get(0); - assertEquals(0x20, eid.getMask().byteValue()); - assertEquals(LispAFIConvertor.asIPv4Prefix("1.2.3.4", 0x20), eid.getLispAddressContainer()); - MapReply mapReply = mr.getMapReply(); - assertEquals(LispAFIConvertor.asIPv4Address(("1.2.3.4")), mapReply.getLispAddressContainer()); - assertEquals(false, mapReply.isAuthoritative()); - assertEquals(Action.NoAction, mapReply.getAction()); - assertEquals(0, mapReply.getMapVersion().shortValue()); - assertEquals(32, mapReply.getMaskLength().shortValue()); - assertEquals(2, mapReply.getRecordTtl().byteValue()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("10.10.10.10"))), mapReply.getLocatorRecord().get(0) - .getLispAddressContainer()); - assertEquals(1, mapReply.getLocatorRecord().get(0).getPriority().byteValue()); - assertEquals(2, mapReply.getLocatorRecord().get(0).getWeight().byteValue()); - assertEquals(3, mapReply.getLocatorRecord().get(0).getMulticastPriority().byteValue()); - assertEquals(4, mapReply.getLocatorRecord().get(0).getMulticastWeight().byteValue()); - assertEquals(true, mapReply.getLocatorRecord().get(0).isLocalLocator()); - assertEquals(true, mapReply.getLocatorRecord().get(0).isRlocProbed()); - assertEquals(false, mapReply.getLocatorRecord().get(0).isRouted()); + assertEquals(1, mr.getEidItem().size()); + Eid eid = mr.getEidItem().get(0).getEid(); + assertEquals("1.2.3.4/32", ((Ipv4Prefix) eid.getAddress()).getIpv4Prefix().getValue()); + MappingRecord record = mr.getMapReply().getMappingRecord(); + assertEquals("1.2.3.4/32", ((Ipv4Prefix) record.getEid().getAddress()).getIpv4Prefix().getValue()); + assertEquals(false, record.isAuthoritative()); + assertEquals(Action.NoAction, record.getAction()); + assertEquals(0, record.getMapVersion().shortValue()); + assertEquals(32, record.getMaskLength().shortValue()); + assertEquals(2, record.getRecordTtl().byteValue()); + assertEquals("10.10.10.10", + ((Ipv4) record.getLocatorRecord().get(0).getRloc().getAddress()).getIpv4().getValue()); + assertEquals(1, record.getLocatorRecord().get(0).getPriority().byteValue()); + assertEquals(2, record.getLocatorRecord().get(0).getWeight().byteValue()); + assertEquals(3, record.getLocatorRecord().get(0).getMulticastPriority().byteValue()); + assertEquals(4, record.getLocatorRecord().get(0).getMulticastWeight().byteValue()); + assertEquals(true, record.getLocatorRecord().get(0).isLocalLocator()); + assertEquals(true, record.getLocatorRecord().get(0).isRlocProbed()); + assertEquals(false, record.getLocatorRecord().get(0).isRouted()); } @Test - public void serialize__SingleEidRecord() throws Exception { + public void serialize__SingleEidItem() throws Exception { MapRequestBuilder mrBuilder = new MapRequestBuilder(); - mrBuilder.setEidRecord(new ArrayList()); - mrBuilder.getEidRecord().add( - new EidRecordBuilder().setMask((short) 32) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); + mrBuilder.setEidItem(new ArrayList()); + mrBuilder.getEidItem().add(new EidItemBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("1.2.3.4/32")).build()); ByteBuffer expected = hexToByteBuffer("10 00 00 01 00 00 " // + "00 00 00 00 00 00 00 00 00 20 00 01 01 02 03 04"); assertArrayEquals(expected.array(), MapRequestSerializer.getInstance().serialize(mrBuilder.build()).array()); } @Test - public void deserialize__MultipleEidRecord() throws Exception { + public void deserialize__MultipleEidItem() throws Exception { MapRequest mr = MapRequestSerializer.getInstance().deserialize(hexToByteBuffer("16 80 00 " // + "02 " // 2 records @@ -232,27 +230,21 @@ public class MapRequestSerializationTest extends BaseTestCase { + "00 20 00 01 01 02 03 04 " // + "00 80 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05")); - assertEquals(2, mr.getEidRecord().size()); + assertEquals(2, mr.getEidItem().size()); - EidRecord eid = mr.getEidRecord().get(0); - assertEquals(0x0020, eid.getMask().shortValue()); - assertEquals(LispAFIConvertor.asIPv4Address("1.2.3.4"), eid.getLispAddressContainer()); + Eid eid = mr.getEidItem().get(0).getEid(); + assertEquals("1.2.3.4/32", ((Ipv4Prefix) eid.getAddress()).getIpv4Prefix().getValue()); - eid = mr.getEidRecord().get(1); - assertEquals(0x0080, eid.getMask().shortValue()); - assertEquals(LispAFIConvertor.asIPv6Address("0:0:0:0:0:0:0:5"), eid.getLispAddressContainer()); + eid = mr.getEidItem().get(1).getEid(); + assertEquals("0:0:0:0:0:0:0:5/128", ((Ipv6Prefix) eid.getAddress()).getIpv6Prefix().getValue()); } @Test - public void serialize__MultipleEidRecord() throws Exception { + public void serialize__MultipleEidItem() throws Exception { MapRequestBuilder mrBuilder = new MapRequestBuilder(); - mrBuilder.setEidRecord(new ArrayList()); - mrBuilder.getEidRecord().add( - new EidRecordBuilder().setMask((short) 32) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); - mrBuilder.getEidRecord().add( - new EidRecordBuilder().setMask((short) 0) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("4.3.2.1"))).build()); + mrBuilder.setEidItem(new ArrayList()); + mrBuilder.getEidItem().add(new EidItemBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("1.2.3.4/32")).build()); + mrBuilder.getEidItem().add(new EidItemBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("4.3.2.1/0")).build()); ByteBuffer expected = hexToByteBuffer("10 00 00 02 00 00 " // + "00 00 00 00 00 00 00 00 00 20 00 01 01 02 03 04 00 00 00 01 04 03 02 01"); assertArrayEquals(expected.array(), MapRequestSerializer.getInstance().serialize(mrBuilder.build()).array()); @@ -268,16 +260,14 @@ public class MapRequestSerializationTest extends BaseTestCase { + "00 20 00 01 01 02 03 04")); assertEquals(1, mr.getItrRloc().size()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.10")), mr.getItrRloc().get(0) - .getLispAddressContainer()); + assertEquals("192.168.136.10", ((Ipv4) mr.getItrRloc().get(0).getRloc().getAddress()).getIpv4().getValue()); } @Test public void serialize__SingleItrRloc() throws Exception { MapRequestBuilder mrBuilder = new MapRequestBuilder(); mrBuilder.setItrRloc(new ArrayList()); - mrBuilder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); + mrBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc("1.2.3.4")).build()); ByteBuffer expected = hexToByteBuffer("10 00 00 00 00 00 " // + "00 00 00 00 00 00 00 00 00 01 01 02 03 04"); assertArrayEquals(expected.array(), MapRequestSerializer.getInstance().serialize(mrBuilder.build()).array()); @@ -287,10 +277,8 @@ public class MapRequestSerializationTest extends BaseTestCase { public void serialize__MultipleItrRloc() throws Exception { MapRequestBuilder mrBuilder = new MapRequestBuilder(); mrBuilder.setItrRloc(new ArrayList()); - mrBuilder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); - mrBuilder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("4.3.2.1"))).build()); + mrBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc("1.2.3.4")).build()); + mrBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc("4.3.2.1")).build()); ByteBuffer expected = hexToByteBuffer("10 00 01 00 00 00 " // + "00 00 00 00 00 00 00 00 00 01 01 02 03 04 00 01 04 03 02 01"); assertArrayEquals(expected.array(), MapRequestSerializer.getInstance().serialize(mrBuilder.build()).array()); @@ -309,11 +297,9 @@ public class MapRequestSerializationTest extends BaseTestCase { + "00 20 00 01 01 02 03 04")); assertEquals(3, mr.getItrRloc().size()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("192.168.136.10")), mr.getItrRloc().get(0) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:1")), mr.getItrRloc().get(1) - .getLispAddressContainer()); - assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("17.34.52.86")), mr.getItrRloc().get(2).getLispAddressContainer()); + assertEquals("192.168.136.10", ((Ipv4) mr.getItrRloc().get(0).getRloc().getAddress()).getIpv4().getValue()); + assertEquals("0:0:0:0:0:0:0:1", ((Ipv6) mr.getItrRloc().get(1).getRloc().getAddress()).getIpv6().getValue()); + assertEquals("17.34.52.86", ((Ipv4) mr.getItrRloc().get(2).getRloc().getAddress()).getIpv4().getValue()); } @Test @@ -322,18 +308,12 @@ public class MapRequestSerializationTest extends BaseTestCase { mrBuilder.setProbe(true); mrBuilder.setPitr(true); mrBuilder.setNonce((long) 13); - mrBuilder.setSourceEid(new SourceEidBuilder().setLispAddressContainer( - LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("10.0.0.1"))).build()); + mrBuilder.setSourceEid(new SourceEidBuilder().setEid(LispAddressUtil.asIpv4Eid(("10.0.0.1"))).build()); mrBuilder.setItrRloc(new ArrayList()); - mrBuilder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); - mrBuilder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPv6AfiAddress("1:2:3:4:5:6:7:8"))) - .build()); - mrBuilder.setEidRecord(new ArrayList()); - mrBuilder.getEidRecord().add( - new EidRecordBuilder().setMask((short) 32) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); + mrBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc("1.2.3.4")).build()); + mrBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv6Rloc("1:2:3:4:5:6:7:8")).build()); + mrBuilder.setEidItem(new ArrayList()); + mrBuilder.getEidItem().add(new EidItemBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("1.2.3.4/32")).build()); ByteBuffer expected = hexToByteBuffer("12 80 01 01 00 00 " // + "00 00 00 00 00 0D 00 01 0a 00 00 01 00 01 01 02 03 04 00 02 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 20 00 01 01 02 03 04"); assertArrayEquals(expected.array(), MapRequestSerializer.getInstance().serialize(mrBuilder.build()).array()); @@ -346,26 +326,22 @@ public class MapRequestSerializationTest extends BaseTestCase { mapRequestBuilder.setMapDataPresent(true); mapRequestBuilder.setPitr(true); mapRequestBuilder.setNonce((long) 13); - mapRequestBuilder.setSourceEid(new SourceEidBuilder().setLispAddressContainer( - LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("10.0.0.1"))).build()); + mapRequestBuilder.setSourceEid(new SourceEidBuilder().setEid(LispAddressUtil.asIpv4Eid(("10.0.0.1"))).build()); mapRequestBuilder.setItrRloc(new ArrayList()); - mapRequestBuilder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); - mapRequestBuilder.getItrRloc().add( - new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPv6AfiAddress("1:2:3:4:5:6:7:8"))) - .build()); - mapRequestBuilder.setEidRecord(new ArrayList()); - mapRequestBuilder.getEidRecord().add( - new EidRecordBuilder().setMask((short) 32) - .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.2.3.4"))).build()); + mapRequestBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc("1.2.3.4")).build()); + mapRequestBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv6Rloc("1:2:3:4:5:6:7:8")).build()); + mapRequestBuilder.setEidItem(new ArrayList()); + mapRequestBuilder.getEidItem().add(new EidItemBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("1.2.3.4/32")).build()); MapReplyBuilder mapreplyBuilder = new MapReplyBuilder(); + MappingRecordBuilder recordBuilder = new MappingRecordBuilder(); - mapreplyBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1"))); - mapreplyBuilder.setLocatorRecord(new ArrayList()); + recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/0")); + recordBuilder.setLocatorRecord(new ArrayList()); LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder(); - locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.2"))); - mapreplyBuilder.getLocatorRecord().add(locatorBuilder.build()); + locatorBuilder.setRloc(LispAddressUtil.asIpv4Rloc("0.0.0.2")); + recordBuilder.getLocatorRecord().add(locatorBuilder.build()); + mapreplyBuilder.setMappingRecord(recordBuilder.build()); mapRequestBuilder.setMapReply(mapreplyBuilder.build()); ByteBuffer expected = hexToByteBuffer("16 80 01 01 00 00 " // @@ -374,5 +350,4 @@ public class MapRequestSerializationTest extends BaseTestCase { + "00 00 00 00 01 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 02"); assertArrayEquals(expected.array(), MapRequestSerializer.getInstance().serialize(mapRequestBuilder.build()).array()); } - } diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/AfiListSerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/AfiListSerializerTest.java new file mode 100644 index 000000000..c2da6876d --- /dev/null +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/AfiListSerializerTest.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2014 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.serializer.address; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import junitx.framework.ArrayAssert; +import junitx.framework.Assert; + +import org.junit.Test; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AfiListLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiList; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.afi.list.AfiListBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class AfiListSerializerTest extends BaseTestCase { + + @Test + public void deserialize__Simple() throws Exception { + Rloc address = LispAddressSerializer.getInstance().deserializeRloc(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 + + assertEquals(AfiListLcaf.class, address.getAddressType()); + AfiList afiList = (AfiList) address.getAddress(); + + List addressList = afiList.getAfiList().getAddressList(); + assertEquals(2, addressList.size()); + + assertEquals("170.187.204.221", String.valueOf(addressList.get(0).getValue())); + assertEquals("1122:3344:1122:3344:1122:3344:1122:3344", String.valueOf(addressList.get(1).getValue())); + } + + @Test + public void deserialize__NoAddresses() throws Exception { + Rloc address = LispAddressSerializer.getInstance().deserializeRloc(hexToByteBuffer("40 03 00 00 " + // + "01 00 00 00 ")); + + assertEquals(AfiListLcaf.class, address.getAddressType()); + AfiList afiList = (AfiList) address.getAddress(); + + List addressList = afiList.getAfiList().getAddressList(); + assertEquals(0, addressList.size()); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer() throws Exception { + LispAddressSerializer.getInstance().deserializeRloc(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")); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer2() throws Exception { + LispAddressSerializer.getInstance().deserializeRloc(hexToByteBuffer("40 03 00 00 " + // + "01 00 00 18 ")); + } + + @Test + public void serialize__Simple() throws Exception { + AfiListBuilder listBuilder = new AfiListBuilder(); + List addressList = new ArrayList(); + addressList.add(SimpleAddressBuilder.getDefaultInstance("170.187.204.221")); + addressList.add(SimpleAddressBuilder.getDefaultInstance("1122:3344:1122:3344:1122:3344:1122:3344")); + listBuilder.setAddressList(addressList); + + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(AfiListLcaf.class); + rb.setVirtualNetworkId(null); + rb.setAddress((Address) + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiListBuilder() + .setAfiList(listBuilder.build()).build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(rb.build())); + LispAddressSerializer.getInstance().serialize(buf, rb.build()); + ByteBuffer expectedBuf = 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"); + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } + + @Test + public void serialize__NoAddresses() throws Exception { + AfiListBuilder listBuilder = new AfiListBuilder(); + List addressList = new ArrayList(); + listBuilder.setAddressList(addressList); + + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(AfiListLcaf.class); + rb.setVirtualNetworkId(null); + rb.setAddress((Address) + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiListBuilder() + .setAfiList(listBuilder.build()).build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(rb.build())); + LispAddressSerializer.getInstance().serialize(buf, rb.build()); + ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // + "01 00 00 00"); + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } + + @Test + public void equals__Simple() throws Exception { + SimpleAddress ip1 = SimpleAddressBuilder.getDefaultInstance("0:0:0:0:0:0:0:1"); + SimpleAddress ip2 = SimpleAddressBuilder.getDefaultInstance("0:0:0:0:0:0:0:2"); + + AfiListBuilder listBuilder = new AfiListBuilder().setAddressList(new ArrayList()); + + listBuilder.getAddressList().add(ip1); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.afi.list.AfiList address1 = listBuilder.build(); + listBuilder.setAddressList(new ArrayList()); + listBuilder.getAddressList().add(ip1); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.afi.list.AfiList address2 = listBuilder.build(); + listBuilder.setAddressList(new ArrayList()); + listBuilder.getAddressList().add(ip2); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.afi.list.AfiList address3 = listBuilder.build(); + + assertEquals(address1, address2); + Assert.assertNotEquals(address2, address3); + Assert.assertNotEquals(address1, address3); + } +} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ApplicationDataSerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ApplicationDataSerializerTest.java new file mode 100644 index 000000000..5d94db247 --- /dev/null +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ApplicationDataSerializerTest.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2014 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.serializer.address; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; + +import junitx.framework.ArrayAssert; + +import org.junit.Test; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; +import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ApplicationDataLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationData; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.application.data.ApplicationDataBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; + +public class ApplicationDataSerializerTest extends BaseTestCase { + + @Test + public void deserialize__Simple() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "04 20 00 0E " + // + "AA BB CC DD " + // IPTOS & protocol + "A6 A1 A6 A2 " + // local port range + "FF DD FF DE " + // remote port range + "00 01 11 22 33 44"), null); // AFI=1, IP=0x11223344 + + assertEquals(ApplicationDataLcaf.class, address.getAddressType()); + ApplicationData appAddress = (ApplicationData) address.getAddress(); + + assertEquals("17.34.51.68", String.valueOf(appAddress.getApplicationData().getAddress().getValue())); + assertEquals(ByteUtil.getPartialInt(new byte[] { (byte) 0xAA, (byte) 0xBB, (byte) 0xCC }), + appAddress.getApplicationData().getIpTos().intValue()); + assertEquals((byte) 0xDD, appAddress.getApplicationData().getProtocol().byteValue()); + assertEquals((short) 0xA6A1, appAddress.getApplicationData().getLocalPortLow().getValue().shortValue()); + assertEquals((short) 0xA6A2, appAddress.getApplicationData().getLocalPortHigh().getValue().shortValue()); + assertEquals((short) 0xFFDD, appAddress.getApplicationData().getRemotePortLow().getValue().shortValue()); + assertEquals((short) 0xFFDE, appAddress.getApplicationData().getRemotePortHigh().getValue().shortValue()); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "04 20 00 0A " + // + "AA BB "), null); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__UnknownLCAFType() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "AA 20 00 12 " + // Type AA is unknown + "AA BB CC DD " + // IPTOS & protocol + "A6 A1 A6 A2 " + // local port range + "FF DD FF DE " + // remote port range + "00 01 11 22 33 44"), null); // AFI=1, IP=0x11223344 + } + + @Test + public void deserialize__Ipv6() throws Exception { + Eid appAddress = LispAddressSerializer.getInstance().deserializeEid( + hexToByteBuffer("40 03 00 00 " + // + "04 20 00 1E " + // + "AA BB CC DD " + // IPTOS & protocol + "A6 A1 A6 A2 " + // local port range + "FF DD FF DE " + // remote port range + "00 02 11 22 33 44 55 66 77 88 99 AA BB CC AA BB CC DD"), null); // AFI=2, + // IPv6 + + assertEquals("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd", String.valueOf( + ((ApplicationData) appAddress.getAddress()).getApplicationData().getAddress().getValue())); + } + + @Test + public void serialize__Simple() throws Exception { + ApplicationDataBuilder addressBuilder = new ApplicationDataBuilder(); + addressBuilder.setIpTos(ByteUtil.getPartialInt(new byte[] { (byte) 0xAA, (byte) 0xBB, (byte) 0xCC })); + addressBuilder.setProtocol((short) 0xDD); + addressBuilder.setLocalPortLow(new PortNumber(0xA6A1)); + addressBuilder.setLocalPortHigh(new PortNumber(0xA6A2)); + addressBuilder.setRemotePortLow(new PortNumber(0xFFDD)); + addressBuilder.setRemotePortHigh(new PortNumber(0xFFDE)); + addressBuilder.setAddress(new SimpleAddress(new IpAddress(new Ipv4Address("17.34.51.68")))); + + EidBuilder eb = new EidBuilder(); + eb.setAddressType(ApplicationDataLcaf.class); + eb.setVirtualNetworkId(null); + eb.setAddress((Address) + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationDataBuilder() + .setApplicationData(addressBuilder.build()).build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(eb.build())); + LispAddressSerializer.getInstance().serialize(buf, eb.build()); + ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // + "04 00 00 12 " + // + "AA BB CC DD " + // IPTOS & protocol + "A6 A1 A6 A2 " + // local port range + "FF DD FF DE " + // remote port range + "00 01 11 22 33 44"); // AFI=1, IP=0x11223344 + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } +} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/DistinguishedNameSerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/DistinguishedNameSerializerTest.java new file mode 100644 index 000000000..f2cedfdc8 --- /dev/null +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/DistinguishedNameSerializerTest.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2014 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.serializer.address; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; + +import junitx.framework.ArrayAssert; + +import org.junit.Test; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AfiListLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiList; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; + +public class DistinguishedNameSerializerTest extends BaseTestCase { + + @Test + public void deserialize__EmptyString() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("00 11 00"), null); + + assertEquals(DistinguishedNameAfi.class, address.getAddressType()); + DistinguishedName distinguishedName = (DistinguishedName) address.getAddress(); + + assertEquals("", distinguishedName.getDistinguishedName().getValue()); + + } + + @Test + public void deserialize__DavidString() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("00 11 64 61 76 69 64 00"), + null); + + assertEquals(DistinguishedNameAfi.class, address.getAddressType()); + DistinguishedName distinguishedName = (DistinguishedName) address.getAddress(); + + assertEquals("david", distinguishedName.getDistinguishedName().getValue()); + + } + + @Test + public void deserialize__inList() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "01 00 00 8 " + // + "00 11 64 61 76 69 64 00"), null); + + assertEquals(AfiListLcaf.class, address.getAddressType()); + assertEquals("david", ((AfiList) address.getAddress()).getAfiList().getAddressList().get(0) + .getDistinguishedNameType().getValue()); + + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "01 00 00 10 " + // + "00 11 64 61 76 69 64 00"), null); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer2() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "01 00 00 18 "), null); + } + + @Test + public void deserialize__ReadUntilZero() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("00 11 64 61 76 00 69 64"), + null); + + DistinguishedName distinguishedName = (DistinguishedName) address.getAddress(); + + assertEquals("dav", distinguishedName.getDistinguishedName().getValue()); + } + + @Test + public void serialize__Simple() throws Exception { + EidBuilder eb = new EidBuilder(); + eb.setAddressType(DistinguishedNameAfi.class); + eb.setVirtualNetworkId(null); + eb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(new DistinguishedNameType("david")).build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(eb.build())); + LispAddressSerializer.getInstance().serialize(buf, eb.build()); + ByteBuffer expectedBuf = hexToByteBuffer("00 11 64 61 76 69 64 00"); + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } + +} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ExplicitLocatorPathSerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ExplicitLocatorPathSerializerTest.java new file mode 100644 index 000000000..0a1e47b2b --- /dev/null +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/ExplicitLocatorPathSerializerTest.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2014 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.serializer.address; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import junitx.framework.ArrayAssert; + +import org.junit.Test; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPath; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.ExplicitLocatorPathBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.HopBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; + +public class ExplicitLocatorPathSerializerTest extends BaseTestCase { + + @Test + public void deserialize__Simple() throws Exception { + Rloc address = LispAddressSerializer.getInstance().deserializeRloc(hexToByteBuffer("40 03 00 00 " + // + "0A 00 00 10 " + // + "00 00 00 01 AA BB CC DD " + // IPv4 + "00 00 00 01 11 22 33 44")); // IPv4 + + assertEquals(ExplicitLocatorPathLcaf.class, address.getAddressType()); + ExplicitLocatorPath elp = (ExplicitLocatorPath) address.getAddress(); + + List hops = elp.getExplicitLocatorPath().getHop(); + assertEquals(2, hops.size()); + + assertEquals("170.187.204.221", String.valueOf(hops.get(0).getAddress().getValue())); + assertEquals("17.34.51.68", String.valueOf(hops.get(1).getAddress().getValue())); + } + + @Test + public void deserialize__Bits() throws Exception { + Rloc address = LispAddressSerializer.getInstance().deserializeRloc(hexToByteBuffer("40 03 00 00 " + // + "0A 00 00 10 " + // + "00 05 00 01 AA BB CC DD " + // IPv4 + "00 02 00 01 11 22 33 44")); // IPv4 + + assertEquals(ExplicitLocatorPathLcaf.class, address.getAddressType()); + ExplicitLocatorPath elp = (ExplicitLocatorPath) address.getAddress(); + + List hops = elp.getExplicitLocatorPath().getHop(); + assertEquals(2, hops.size()); + + assertEquals("170.187.204.221", String.valueOf(hops.get(0).getAddress().getValue())); + assertEquals(true, hops.get(0).getLrsBits().isLookup().booleanValue()); + assertEquals(false, hops.get(0).getLrsBits().isRlocProbe().booleanValue()); + assertEquals(true, hops.get(0).getLrsBits().isStrict().booleanValue()); + assertEquals("17.34.51.68", String.valueOf(hops.get(1).getAddress().getValue())); + assertEquals(false, hops.get(1).getLrsBits().isLookup().booleanValue()); + assertEquals(true, hops.get(1).getLrsBits().isRlocProbe().booleanValue()); + assertEquals(false, hops.get(1).getLrsBits().isStrict().booleanValue()); + } + + @Test + public void deserialize__NoAddresses() throws Exception { + Rloc address = LispAddressSerializer.getInstance().deserializeRloc(hexToByteBuffer("40 03 00 00 " + // + "0A 00 00 00 ")); + + assertEquals(ExplicitLocatorPathLcaf.class, address.getAddressType()); + ExplicitLocatorPath elp = (ExplicitLocatorPath) address.getAddress(); + + List hops = elp.getExplicitLocatorPath().getHop(); + assertEquals(0, hops.size()); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer() throws Exception { + LispAddressSerializer.getInstance().deserializeRloc(hexToByteBuffer("40 03 00 00 " + // + "0A 00 00 18 " + // + "00 01 AA BB CC DD " + // IPv4 + "00 02 11 22 33 44 11 22 33 44 11 22 33 44")); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer2() throws Exception { + LispAddressSerializer.getInstance().deserializeRloc(hexToByteBuffer("40 03 00 00 " + // + "0A 00 00 18 ")); + } + + @Test + public void serialize__Simple() throws Exception { + List hops = new ArrayList(); + hops.add(new HopBuilder().setAddress(SimpleAddressBuilder.getDefaultInstance("170.187.204.221")).build()); + hops.add(new HopBuilder().setAddress(SimpleAddressBuilder.getDefaultInstance("17.34.51.68")).build()); + + ExplicitLocatorPathBuilder elpb = new ExplicitLocatorPathBuilder(); + elpb.setHop(hops); + + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(ExplicitLocatorPathLcaf.class); + rb.setVirtualNetworkId(null); + rb.setAddress((Address) + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder() + .setExplicitLocatorPath(elpb.build()).build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(rb.build())); + LispAddressSerializer.getInstance().serialize(buf, rb.build()); + ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // + "0A 00 00 10 " + // + "00 00 00 01 AA BB CC DD " + // IPv4 + "00 00 00 01 11 22 33 44"); // IPv4 + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } + + @Test + public void serialize__NoAddresses() throws Exception { + RlocBuilder rb = new RlocBuilder(); + rb.setAddressType(ExplicitLocatorPathLcaf.class); + rb.setVirtualNetworkId(null); + rb.setAddress((Address) + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder().build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(rb.build())); + LispAddressSerializer.getInstance().serialize(buf, rb.build()); + ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // + "0A 00 00 00"); + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } +} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/InstanceIdSerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/InstanceIdSerializerTest.java new file mode 100644 index 000000000..a0ed3a441 --- /dev/null +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/InstanceIdSerializerTest.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2014 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.serializer.address; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; + +import junitx.framework.ArrayAssert; + +import org.junit.Test; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializerContext; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; +import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; + +public class InstanceIdSerializerTest extends BaseTestCase { + + @Test + public void deserialize__Simple() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "02 20 00 0A " + // + "00 BB CC DD " + // instance ID + "00 01 11 22 33 44"), // AFI=1, IP=0x11223344 + new LispAddressSerializerContext(null)); + + assertEquals(Ipv4Afi.class, address.getAddressType()); + Ipv4 ipv4 = (Ipv4) address.getAddress(); + + assertEquals("17.34.51.68", ipv4.getIpv4().getValue()); + assertEquals(0x00BBCCDD, address.getVirtualNetworkId().getValue().longValue()); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "02 20 00 0A " + // + "AA BB "), + new LispAddressSerializerContext(null)); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__UnknownLCAFType() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "AA 20 00 0A " + // Type AA is unknown + "00 BB CC DD " + // instance ID + "00 01 11 22 33 44"), // AFI=1, IP=0x11223344 + new LispAddressSerializerContext(null)); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__LongInstanceID() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "02 20 00 0A " + // Type AA is unknown + "AA BB CC DD " + // instance ID + "00 01 11 22 33 44"), // AFI=1, IP=0x11223344 + new LispAddressSerializerContext(null)); + } + + @Test + public void deserialize__Ipv6() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "02 20 00 0A " + // + "00 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, + new LispAddressSerializerContext(null)); + // IPv6 + + assertEquals("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd", ((Ipv6) address.getAddress()).getIpv6().getValue()); + + } + + @Test + public void serialize__Simple() throws Exception { + Eid eid = LispAddressUtil.asIpv4Eid("17.34.51.68", (long) 0x00020304); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(eid)); + LispAddressSerializer.getInstance().serialize(buf, eid); + ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // + "02 00 00 0A " + // + "00 02 03 04 " + // instance ID + "00 01 11 22 33 44"); + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } +} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispIpv6AddressTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/Ipv6SerializerTest.java similarity index 51% rename from mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispIpv6AddressTest.java rename to mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/Ipv6SerializerTest.java index 37baa9e58..2d3927e6a 100644 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispIpv6AddressTest.java +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/Ipv6SerializerTest.java @@ -12,28 +12,29 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; +import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.ipv6.Ipv6Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; -public class LispIpv6AddressTest extends BaseTestCase { +public class Ipv6SerializerTest extends BaseTestCase { @Test public void constructor__Name() throws Exception { - Ipv6Address ip = (Ipv6Address) LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:0"); + Rloc rloc = LispAddressUtil.asIpv6Rloc("0:0:0:0:0:0:0:0"); - assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), ip.getAfi().shortValue()); - assertEquals(18, LispAddressSerializer.getInstance().getAddressSize(ip)); - assertEquals("0:0:0:0:0:0:0:0", ip.getIpv6Address().getValue()); + assertEquals(Ipv6Afi.class, rloc.getAddressType()); + assertEquals(18, LispAddressSerializer.getInstance().getAddressSize(rloc)); + assertEquals("0:0:0:0:0:0:0:0", ((Ipv6) rloc.getAddress()).getIpv6().getValue()); } @Test public void constructor__Buffer() throws Exception { - Ipv6Address ip = (Ipv6Address) LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:1"); + Rloc rloc = LispAddressUtil.asIpv6Rloc("0:0:0:0:0:0:0:1"); - assertEquals(AddressFamilyNumberEnum.IP6.getIanaCode(), ip.getAfi().shortValue()); - assertEquals(18, LispAddressSerializer.getInstance().getAddressSize(ip)); - assertEquals("0:0:0:0:0:0:0:1", ip.getIpv6Address().getValue()); + assertEquals(Ipv6Afi.class, rloc.getAddressType()); + assertEquals(18, LispAddressSerializer.getInstance().getAddressSize(rloc)); + assertEquals("0:0:0:0:0:0:0:1", ((Ipv6) rloc.getAddress()).getIpv6().getValue()); } } diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/KeyValueAddressSerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/KeyValueAddressSerializerTest.java new file mode 100644 index 000000000..f124f62ce --- /dev/null +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/KeyValueAddressSerializerTest.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 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.serializer.address; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; + +import junitx.framework.ArrayAssert; + +import org.junit.Test; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; + +public class KeyValueAddressSerializerTest extends BaseTestCase { + + @Test + public void deserialize__Simple() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "0F 20 00 0C " + // + "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 + "00 01 22 33 44 55"), null); // AFI=1, IP=0x22334455 + + assertEquals(KeyValueAddressLcaf.class, address.getAddressType()); + KeyValueAddress srcDestAddress = (KeyValueAddress) address.getAddress(); + + assertEquals("17.34.51.68", String.valueOf(srcDestAddress.getKeyValueAddress().getKey().getValue())); + assertEquals("34.51.68.85", String.valueOf(srcDestAddress.getKeyValueAddress().getValue().getValue())); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "02 20 00 0A " + // + "AA BB "), null); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__UnknownLCAFType() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "AA 20 00 0A " + // Type AA is unknown + "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 + "00 01 22 33 44 55"), null); // AFI=1, IP=0x22334455 + } + + @Test + public void deserialize__Ipv6() throws Exception { + Eid srcAddress = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "0F 20 00 24 " + // + "00 02 11 22 33 44 55 66 77 88 99 AA BB CC AA BB CC DD " + // AFI=2, + "00 02 44 33 22 11 88 77 66 55 99 AA BB CC AA BB CC DD"), null); // AFI=2, + // IPv6 + + assertEquals("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd", String.valueOf( + ((KeyValueAddress) srcAddress.getAddress()).getKeyValueAddress().getKey().getValue())); + assertEquals("4433:2211:8877:6655:99aa:bbcc:aabb:ccdd", String.valueOf( + ((KeyValueAddress) srcAddress.getAddress()).getKeyValueAddress().getValue().getValue())); + } + + @Test + public void serialize__Simple() throws Exception { + KeyValueAddressBuilder addressBuilder = new KeyValueAddressBuilder(); + addressBuilder.setKey(new SimpleAddress(new IpAddress(new Ipv4Address("17.34.51.68")))); + addressBuilder.setValue(new SimpleAddress(new IpAddress(new Ipv4Address("34.51.68.85")))); + + EidBuilder eb = new EidBuilder(); + eb.setAddressType(KeyValueAddressLcaf.class); + eb.setVirtualNetworkId(null); + eb.setAddress((Address) + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder() + .setKeyValueAddress(addressBuilder.build()).build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(eb.build())); + LispAddressSerializer.getInstance().serialize(buf, eb.build()); + + ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // + "0F 00 00 0C " + // + "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 + "00 01 22 33 44 55"); // AFI=1, IP=0x22334455 + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } +} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispApplicationDataLCAFAddressTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispApplicationDataLCAFAddressTest.java deleted file mode 100644 index a0609e1d1..000000000 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispApplicationDataLCAFAddressTest.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2014 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.serializer.address; - -import static org.junit.Assert.assertEquals; - -import java.nio.ByteBuffer; - -import junitx.framework.ArrayAssert; - -import org.junit.Test; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.ByteUtil; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafApplicationDataAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafapplicationdataaddress.AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafapplicationdata.LcafApplicationDataAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; - -public class LispApplicationDataLCAFAddressTest extends BaseTestCase { - - @Test - public void deserialize__Simple() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "04 20 00 0E " + // - "AA BB CC DD " + // IPTOS & protocol - "A6 A1 A6 A2 " + // local port range - "FF DD FF DE " + // remote port range - "00 01 11 22 33 44")); // AFI=1, IP=0x11223344 - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafApplicationDataAddress appAddress = (LcafApplicationDataAddress) address; - - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68"), appAddress.getAddress().getPrimitiveAddress()); - assertEquals(ByteUtil.getPartialInt(new byte[] { (byte) 0xAA, (byte) 0xBB, (byte) 0xCC }), appAddress.getIpTos().intValue()); - assertEquals((byte) 0xDD, appAddress.getProtocol().byteValue()); - assertEquals((short) 0xA6A1, appAddress.getLocalPortLow().getValue().shortValue()); - assertEquals((short) 0xA6A2, appAddress.getLocalPortHigh().getValue().shortValue()); - assertEquals((short) 0xFFDD, appAddress.getRemotePortLow().getValue().shortValue()); - assertEquals((short) 0xFFDE, appAddress.getRemotePortHigh().getValue().shortValue()); - assertEquals(LispCanonicalAddressFormatEnum.APPLICATION_DATA.getLispCode(), appAddress.getLcafType().byteValue()); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "04 20 00 0A " + // - "AA BB ")); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__UnknownLCAFType() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "AA 20 00 12 " + // Type AA is unknown - "AA BB CC DD " + // IPTOS & protocol - "A6 A1 A6 A2 " + // local port range - "FF DD FF DE " + // remote port range - "00 01 11 22 33 44")); // AFI=1, IP=0x11223344 - } - - @Test - public void deserialize__Ipv6() throws Exception { - LcafApplicationDataAddress appAddress = (LcafApplicationDataAddress) LispAddressSerializer.getInstance().deserialize( - hexToByteBuffer("40 03 00 00 " + // - "04 20 00 1E " + // - "AA BB CC DD " + // IPTOS & protocol - "A6 A1 A6 A2 " + // local port range - "FF DD FF DE " + // remote port range - "00 02 11 22 33 44 55 66 77 88 99 AA BB CC AA BB CC DD")); // AFI=2, - // IPv6 - - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd")), appAddress - .getAddress().getPrimitiveAddress()); - - } - - @Test - public void serialize__Simple() throws Exception { - LcafApplicationDataAddrBuilder addressBuilder = new LcafApplicationDataAddrBuilder(); - addressBuilder.setIpTos(ByteUtil.getPartialInt(new byte[] { (byte) 0xAA, (byte) 0xBB, (byte) 0xCC })); - addressBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType( - (short) LispCanonicalAddressFormatEnum.APPLICATION_DATA.getLispCode()); - addressBuilder.setProtocol((short) 0xDD); - addressBuilder.setLocalPortLow(new PortNumber(0xA6A1)); - addressBuilder.setLocalPortHigh(new PortNumber(0xA6A2)); - addressBuilder.setRemotePortLow(new PortNumber(0xFFDD)); - addressBuilder.setRemotePortHigh(new PortNumber(0xFFDE)); - addressBuilder.setAddress(new AddressBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68")).build()); - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(addressBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, addressBuilder.build()); - ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // - "04 00 00 12 " + // - "AA BB CC DD " + // IPTOS & protocol - "A6 A1 A6 A2 " + // local port range - "FF DD FF DE " + // remote port range - "00 01 11 22 33 44"); // AFI=1, IP=0x11223344 - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } -} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispDistinguishedNameAddressSerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispDistinguishedNameAddressSerializerTest.java deleted file mode 100644 index aa661ac7c..000000000 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispDistinguishedNameAddressSerializerTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2014 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.serializer.address; - -import static org.junit.Assert.assertEquals; - -import java.nio.ByteBuffer; - -import junitx.framework.ArrayAssert; - -import org.junit.Test; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafListAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispDistinguishedNameAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedNameBuilder; - -public class LispDistinguishedNameAddressSerializerTest extends BaseTestCase { - - @Test - public void deserialize__EmptyString() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("00 11 00")); - - assertEquals(AddressFamilyNumberEnum.DISTINGUISHED_NAME.getIanaCode(), address.getAfi().shortValue()); - LispDistinguishedNameAddress distinguishedNameAddress = (LispDistinguishedNameAddress) address; - - assertEquals("", distinguishedNameAddress.getDistinguishedName()); - - } - - @Test - public void deserialize__DavidString() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("00 11 64 61 76 69 64 00")); - - assertEquals(AddressFamilyNumberEnum.DISTINGUISHED_NAME.getIanaCode(), address.getAfi().shortValue()); - LispDistinguishedNameAddress distinguishedNameAddress = (LispDistinguishedNameAddress) address; - - assertEquals("david", distinguishedNameAddress.getDistinguishedName()); - - } - - @Test - public void deserialize__inList() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "01 00 00 8 " + // - "00 11 64 61 76 69 64 00")); - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafListAddress lispLCAFAddress = (LcafListAddress) address; - - assertEquals(LispCanonicalAddressFormatEnum.LIST.getLispCode(), lispLCAFAddress.getLcafType().byteValue()); - - LispDistinguishedNameAddress distinguishedNameAddress = (LispDistinguishedNameAddress) LispAFIConvertor.toAFIfromPrimitive(lispLCAFAddress.getAddresses().get(0) - .getPrimitiveAddress()); - - assertEquals("david", distinguishedNameAddress.getDistinguishedName()); - - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "01 00 00 10 " + // - "00 11 64 61 76 69 64 00")); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer2() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "01 00 00 18 ")); - } - - @Test - public void deserialize__ReadUntilZero() throws Exception { - LispDistinguishedNameAddress address = (LispDistinguishedNameAddress) LispAddressSerializer.getInstance().deserialize( - hexToByteBuffer("00 11 64 61 76 00 69 64")); - assertEquals("dav", address.getDistinguishedName()); - } - - @Test - public void serialize__Simple() throws Exception { - DistinguishedNameBuilder distinguishedName = new DistinguishedNameBuilder().setDistinguishedName("david").setAfi( - AddressFamilyNumberEnum.DISTINGUISHED_NAME.getIanaCode()); - - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(distinguishedName.build())); - LispAddressSerializer.getInstance().serialize(buf, distinguishedName.build()); - ByteBuffer expectedBuf = hexToByteBuffer("00 11 64 61 76 69 64 00"); - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } - -} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispKeyValueLCAFAddressTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispKeyValueLCAFAddressTest.java deleted file mode 100644 index 64d94ac2a..000000000 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispKeyValueLCAFAddressTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2014 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.serializer.address; - -import static org.junit.Assert.assertEquals; - -import java.nio.ByteBuffer; - -import junitx.framework.ArrayAssert; - -import org.junit.Test; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafKeyValueAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafkeyvalueaddress.KeyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafkeyvalueaddress.ValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddrBuilder; - -public class LispKeyValueLCAFAddressTest extends BaseTestCase { - - @Test - public void deserialize__Simple() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0F 20 00 0C " + // - "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 - "00 01 22 33 44 55")); // AFI=1, IP=0x22334455 - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafKeyValueAddress srcDestAddress = (LcafKeyValueAddress) address; - - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68"), srcDestAddress.getKey().getPrimitiveAddress()); - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("34.51.68.85"), srcDestAddress.getValue().getPrimitiveAddress()); - assertEquals(LispCanonicalAddressFormatEnum.KEY_VALUE.getLispCode(), srcDestAddress.getLcafType().byteValue()); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "02 20 00 0A " + // - "AA BB ")); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__UnknownLCAFType() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "AA 20 00 0A " + // Type AA is unknown - "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 - "00 01 22 33 44 55")); // AFI=1, IP=0x22334455 - } - - @Test - public void deserialize__Ipv6() throws Exception { - LcafKeyValueAddress srcAddress = (LcafKeyValueAddress) LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0F 20 00 24 " + // - "00 02 11 22 33 44 55 66 77 88 99 AA BB CC AA BB CC DD " + // AFI=2, - "00 02 44 33 22 11 88 77 66 55 99 AA BB CC AA BB CC DD")); // AFI=2, - // IPv6 - - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd")), srcAddress.getKey() - .getPrimitiveAddress()); - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("4433:2211:8877:6655:99aa:bbcc:aabb:ccdd")), srcAddress - .getValue().getPrimitiveAddress()); - } - - @Test - public void serialize__Simple() throws Exception { - LcafKeyValueAddressAddrBuilder addressBuilder = new LcafKeyValueAddressAddrBuilder(); - addressBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType((short) LispCanonicalAddressFormatEnum.KEY_VALUE.getLispCode()); - addressBuilder.setKey(new KeyBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68")).build()); - addressBuilder.setValue(new ValueBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("34.51.68.85")).build()); - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(addressBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, addressBuilder.build()); - ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // - "0F 00 00 0C " + // - "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 - "00 01 22 33 44 55"); // AFI=1, IP=0x22334455 - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } -} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispListLCAFAddressTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispListLCAFAddressTest.java deleted file mode 100644 index 8dc3b28a1..000000000 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispListLCAFAddressTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2014 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.serializer.address; - -import static org.junit.Assert.assertEquals; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; - -import junitx.framework.ArrayAssert; -import junitx.framework.Assert; - -import org.junit.Test; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafListAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaflistaddress.Addresses; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaflistaddress.AddressesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaflist.LcafListAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaflist.LcafListAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispsimpleaddress.primitiveaddress.Ipv6; - -public class LispListLCAFAddressTest extends BaseTestCase { - - @Test - public void deserialize__Simple() throws Exception { - LispAFIAddress 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 - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafListAddress lcafList = (LcafListAddress) address; - - assertEquals(LispCanonicalAddressFormatEnum.LIST.getLispCode(), lcafList.getLcafType().byteValue()); - - List addressList = lcafList.getAddresses(); - assertEquals(2, addressList.size()); - - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPAfiAddress("170.187.204.221")), addressList.get(0).getPrimitiveAddress()); - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("1122:3344:1122:3344:1122:3344:1122:3344")), addressList.get(1) - .getPrimitiveAddress()); - } - - @Test - public void deserialize__NoAddresses() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "01 00 00 00 ")); - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafListAddress lcafList = (LcafListAddress) address; - - assertEquals(LispCanonicalAddressFormatEnum.LIST.getLispCode(), lcafList.getLcafType().byteValue()); - - List addressList = lcafList.getAddresses(); - assertEquals(0, addressList.size()); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer() throws Exception { - 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")); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer2() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "01 00 00 18 ")); - } - - @Test - public void serialize__Simple() throws Exception { - LcafListAddrBuilder listBuilder = new LcafListAddrBuilder(); - listBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()); - listBuilder.setLcafType((short) LispCanonicalAddressFormatEnum.LIST.getLispCode()); - List addressList = new ArrayList(); - addressList.add(new AddressesBuilder().setPrimitiveAddress(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPAfiAddress("170.187.204.221"))) - .build()); - addressList.add(new AddressesBuilder().setPrimitiveAddress( - LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("1122:3344:1122:3344:1122:3344:1122:3344"))).build()); - listBuilder.setAddresses(addressList); - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(listBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, listBuilder.build()); - ByteBuffer expectedBuf = 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"); - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } - - @Test - public void serialize__NoAddresses() throws Exception { - LcafListAddrBuilder listBuilder = new LcafListAddrBuilder(); - listBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()); - listBuilder.setLcafType((short) LispCanonicalAddressFormatEnum.LIST.getLispCode()); - List addressList = new ArrayList(); - listBuilder.setAddresses(addressList); - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(listBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, listBuilder.build()); - ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // - "01 00 00 00"); - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } - - @Test - public void equals__Simple() throws Exception { - Ipv6 ip1 = (Ipv6) LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:1")); - Ipv6 ip2 = (Ipv6) LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:2")); - LcafListAddrBuilder listBuilder = new LcafListAddrBuilder().setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()) - .setLcafType((short) LispCanonicalAddressFormatEnum.LIST.getLispCode()).setAddresses(new ArrayList()); - listBuilder.getAddresses().add(new AddressesBuilder().setPrimitiveAddress(ip1).build()); - LcafListAddr address1 = listBuilder.build(); - listBuilder.setAddresses(new ArrayList()); - listBuilder.getAddresses().add(new AddressesBuilder().setPrimitiveAddress(ip1).build()); - LcafListAddr address2 = listBuilder.build(); - listBuilder.setAddresses(new ArrayList()); - listBuilder.getAddresses().add(new AddressesBuilder().setPrimitiveAddress(ip2).build()); - LcafListAddr address3 = listBuilder.build(); - - assertEquals(address1, address2); - Assert.assertNotEquals(address2, address3); - Assert.assertNotEquals(address1, address3); - } -} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSegmentLCAFAddressTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSegmentLCAFAddressTest.java deleted file mode 100644 index 2381d0beb..000000000 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSegmentLCAFAddressTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2014 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.serializer.address; - -import static org.junit.Assert.assertEquals; - -import java.nio.ByteBuffer; - -import junitx.framework.ArrayAssert; - -import org.junit.Test; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafSegmentAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsegmentaddress.AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsegment.LcafSegmentAddrBuilder; - -public class LispSegmentLCAFAddressTest extends BaseTestCase { - - @Test - public void deserialize__Simple() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "02 20 00 0A " + // - "00 BB CC DD " + // instance ID - "00 01 11 22 33 44")); // AFI=1, IP=0x11223344 - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafSegmentAddress segAddress = (LcafSegmentAddress) address; - - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68"), segAddress.getAddress().getPrimitiveAddress()); - assertEquals(0x00BBCCDD, segAddress.getInstanceId().intValue()); - assertEquals(LispCanonicalAddressFormatEnum.SEGMENT.getLispCode(), segAddress.getLcafType().byteValue()); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "02 20 00 0A " + // - "AA BB ")); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__UnknownLCAFType() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "AA 20 00 0A " + // Type AA is unknown - "00 BB CC DD " + // instance ID - "00 01 11 22 33 44")); // AFI=1, IP=0x11223344 - } - - @Test(expected = LispSerializationException.class) - public void deserialize__LongInstanceID() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "02 20 00 0A " + // Type AA is unknown - "AA BB CC DD " + // instance ID - "00 01 11 22 33 44")); // AFI=1, IP=0x11223344 - } - - @Test - public void deserialize__Ipv6() throws Exception { - LcafSegmentAddress segAddress = (LcafSegmentAddress) LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "02 20 00 0A " + // - "00 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, - // IPv6 - - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd")), segAddress - .getAddress().getPrimitiveAddress()); - - } - - @Test - public void serialize__Simple() throws Exception { - LcafSegmentAddrBuilder addressBuilder = new LcafSegmentAddrBuilder(); - addressBuilder.setInstanceId((long) 0x00020304); - addressBuilder.setIidMaskLength((short) 0); - addressBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType((short) LispCanonicalAddressFormatEnum.SEGMENT.getLispCode()); - addressBuilder.setAddress(new AddressBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68")).build()); - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(addressBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, addressBuilder.build()); - ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // - "02 00 00 0A " + // - "00 02 03 04 " + // instance ID - "00 01 11 22 33 44"); - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } - -} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSourceDestLCAFAddressTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSourceDestLCAFAddressTest.java deleted file mode 100644 index b44daa830..000000000 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispSourceDestLCAFAddressTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2014 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.serializer.address; - -import static org.junit.Assert.assertEquals; - -import java.nio.ByteBuffer; - -import junitx.framework.ArrayAssert; - -import org.junit.Test; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafSourceDestAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.DstAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcafsourcedestaddress.SrcAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddrBuilder; - -public class LispSourceDestLCAFAddressTest extends BaseTestCase { - - @Test - public void deserialize__Simple() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0C 20 00 10 " + // - "00 00 10 18 " + // reserved + masks - "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 - "00 01 22 33 44 55")); // AFI=1, IP=0x22334455 - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafSourceDestAddress srcDestAddress = (LcafSourceDestAddress) address; - - assertEquals((byte) 0x10, srcDestAddress.getSrcMaskLength().byteValue()); - assertEquals((byte) 0x18, srcDestAddress.getDstMaskLength().byteValue()); - - assertEquals(LispAFIConvertor.asPrimitiveIPv4AfiPrefix("17.34.51.68", 16), srcDestAddress.getSrcAddress().getPrimitiveAddress()); - assertEquals(LispAFIConvertor.asPrimitiveIPv4AfiPrefix("34.51.68.85", 24), srcDestAddress.getDstAddress().getPrimitiveAddress()); - assertEquals(LispCanonicalAddressFormatEnum.SOURCE_DEST.getLispCode(), srcDestAddress.getLcafType().byteValue()); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "02 20 00 0A " + // - "AA BB ")); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__UnknownLCAFType() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "AA 20 00 0A " + // Type AA is unknown - "00 00 CC DD " + // reserved + masks - "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 - "00 01 22 33 44 55")); // AFI=1, IP=0x22334455 - } - - @Test - public void deserialize__Ipv6() throws Exception { - LcafSourceDestAddress srcAddress = (LcafSourceDestAddress) LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0C 20 00 28 " + // - "00 00 78 78 " + // reserved + masks - "00 02 11 22 33 44 55 66 77 88 99 AA BB CC AA BB CC 00 " + // AFI=2, - "00 02 44 33 22 11 88 77 66 55 99 AA BB CC AA BB CC 00")); // AFI=2, - // IPv6 - - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiPrefix("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd", 0x78)), srcAddress - .getSrcAddress().getPrimitiveAddress()); - assertEquals(LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiPrefix("4433:2211:8877:6655:99aa:bbcc:aabb:ccdd", 0x78)), srcAddress - .getDstAddress().getPrimitiveAddress()); - } - - @Test - public void serialize__Simple() throws Exception { - LcafSourceDestAddrBuilder addressBuilder = new LcafSourceDestAddrBuilder(); - addressBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType( - (short) LispCanonicalAddressFormatEnum.SOURCE_DEST.getLispCode()); - addressBuilder.setSrcMaskLength((short) 0xCC); - addressBuilder.setDstMaskLength((short) 0xDD); - addressBuilder.setSrcAddress(new SrcAddressBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68")).build()); - addressBuilder.setDstAddress(new DstAddressBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("34.51.68.85")).build()); - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(addressBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, addressBuilder.build()); - ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // - "0C 00 00 10 " + // - "00 00 CC DD " + // reserved + masks - "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 - "00 01 22 33 44 55"); // AFI=1, IP=0x22334455 - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } -} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispTrafficEngineeringLCAFAddressTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispTrafficEngineeringLCAFAddressTest.java deleted file mode 100644 index 01247450c..000000000 --- a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/LispTrafficEngineeringLCAFAddressTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2014 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.serializer.address; - -import static org.junit.Assert.assertEquals; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; - -import junitx.framework.ArrayAssert; - -import org.junit.Test; -import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; -import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; -import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum; -import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum; -import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor; -import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LcafTrafficEngineeringAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaftrafficengineeringaddress.Hops; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lcaftrafficengineeringaddress.HopsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.lcaftrafficengineering.LcafTrafficEngineeringAddrBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.reencaphop.HopBuilder; - -public class LispTrafficEngineeringLCAFAddressTest extends BaseTestCase { - - @Test - public void deserialize__Simple() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0A 00 00 10 " + // - "00 00 00 01 AA BB CC DD " + // IPv4 - "00 00 00 01 11 22 33 44")); // IPv4 - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafTrafficEngineeringAddress trafficEngineering = (LcafTrafficEngineeringAddress) address; - - assertEquals(LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode(), trafficEngineering.getLcafType().byteValue()); - - List hops = trafficEngineering.getHops(); - assertEquals(2, hops.size()); - - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("170.187.204.221"), hops.get(0).getHop().getPrimitiveAddress()); - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68"), hops.get(1).getHop().getPrimitiveAddress()); - } - - @Test - public void deserialize__Bits() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0A 00 00 10 " + // - "00 05 00 01 AA BB CC DD " + // IPv4 - "00 02 00 01 11 22 33 44")); // IPv4 - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafTrafficEngineeringAddress trafficEngineering = (LcafTrafficEngineeringAddress) address; - - assertEquals(LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode(), trafficEngineering.getLcafType().byteValue()); - - List hops = trafficEngineering.getHops(); - assertEquals(2, hops.size()); - - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("170.187.204.221"), hops.get(0).getHop().getPrimitiveAddress()); - assertEquals(true, hops.get(0).isLookup().booleanValue()); - assertEquals(false, hops.get(0).isRLOCProbe().booleanValue()); - assertEquals(true, hops.get(0).isStrict().booleanValue()); - assertEquals(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68"), hops.get(1).getHop().getPrimitiveAddress()); - assertEquals(false, hops.get(1).isLookup().booleanValue()); - assertEquals(true, hops.get(1).isRLOCProbe().booleanValue()); - assertEquals(false, hops.get(1).isStrict().booleanValue()); - } - - @Test - public void deserialize__NoAddresses() throws Exception { - LispAFIAddress address = LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0A 00 00 00 ")); - - assertEquals(AddressFamilyNumberEnum.LCAF.getIanaCode(), address.getAfi().shortValue()); - LcafTrafficEngineeringAddress trafficEngineering = (LcafTrafficEngineeringAddress) address; - - assertEquals(LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode(), trafficEngineering.getLcafType().byteValue()); - - List hops = trafficEngineering.getHops(); - assertEquals(0, hops.size()); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0A 00 00 18 " + // - "00 01 AA BB CC DD " + // IPv4 - "00 02 11 22 33 44 11 22 33 44 11 22 33 44")); - } - - @Test(expected = LispSerializationException.class) - public void deserialize__ShorterBuffer2() throws Exception { - LispAddressSerializer.getInstance().deserialize(hexToByteBuffer("40 03 00 00 " + // - "0A 00 00 18 ")); - } - - @Test - public void serialize__Simple() throws Exception { - List hops = new ArrayList(); - hops.add(new HopsBuilder().setHop(new HopBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("170.187.204.221")).build()) - .build()); - hops.add(new HopsBuilder().setHop(new HopBuilder().setPrimitiveAddress(LispAFIConvertor.asPrimitiveIPAfiAddress("17.34.51.68")).build()) - .build()); - LcafTrafficEngineeringAddrBuilder trafficBuilder = new LcafTrafficEngineeringAddrBuilder(); - trafficBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType( - (short) LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode()); - trafficBuilder.setHops(hops); - - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(trafficBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, trafficBuilder.build()); - ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // - "0A 00 00 10 " + // - "00 00 00 01 AA BB CC DD " + // IPv4 - "00 00 00 01 11 22 33 44"); // IPv4 - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } - - @Test - public void serialize__NoAddresses() throws Exception { - LcafTrafficEngineeringAddrBuilder addressBuilder = new LcafTrafficEngineeringAddrBuilder(); - addressBuilder.setAfi(AddressFamilyNumberEnum.LCAF.getIanaCode()).setLcafType( - (short) LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING.getLispCode()); - - ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(addressBuilder.build())); - LispAddressSerializer.getInstance().serialize(buf, addressBuilder.build()); - ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // - "0A 00 00 00"); - ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); - } -} diff --git a/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/SourceDestKeySerializerTest.java b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/SourceDestKeySerializerTest.java new file mode 100644 index 000000000..cd9338642 --- /dev/null +++ b/mappingservice/lisp-proto/src/test/java/org/opendaylight/lispflowmapping/serializer/address/SourceDestKeySerializerTest.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2014 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.serializer.address; + +import static org.junit.Assert.assertEquals; + +import java.nio.ByteBuffer; + +import junitx.framework.ArrayAssert; + +import org.junit.Test; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializerContext; +import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException; +import org.opendaylight.lispflowmapping.lisp.util.MaskUtil; +import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder; + +public class SourceDestKeySerializerTest extends BaseTestCase { + + @Test + public void deserialize__Simple() throws Exception { + Eid address = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "0C 20 00 10 " + // + "00 00 10 18 " + // reserved + masks + "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 + "00 01 22 33 44 55"), // AFI=1, IP=0x22334455 + new LispAddressSerializerContext(null)); + + assertEquals(SourceDestKeyLcaf.class, address.getAddressType()); + SourceDestKey srcDestAddress = (SourceDestKey) address.getAddress(); + + assertEquals((byte) 0x10, MaskUtil.getMaskForIpPrefix(srcDestAddress.getSourceDestKey().getSource())); + assertEquals((byte) 0x18, MaskUtil.getMaskForIpPrefix(srcDestAddress.getSourceDestKey().getDest())); + + assertEquals("17.34.51.68/16", String.valueOf(srcDestAddress.getSourceDestKey().getSource().getValue())); + assertEquals("34.51.68.85/24", String.valueOf(srcDestAddress.getSourceDestKey().getDest().getValue())); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__ShorterBuffer() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "02 20 00 0A " + // + "AA BB "), new LispAddressSerializerContext(null)); + } + + @Test(expected = LispSerializationException.class) + public void deserialize__UnknownLCAFType() throws Exception { + LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "AA 20 00 0A " + // Type AA is unknown + "00 00 CC DD " + // reserved + masks + "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 + "00 01 22 33 44 55"), // AFI=1, IP=0x22334455 + new LispAddressSerializerContext(null)); + } + + @Test + public void deserialize__Ipv6() throws Exception { + Eid srcAddress = LispAddressSerializer.getInstance().deserializeEid(hexToByteBuffer("40 03 00 00 " + // + "0C 20 00 28 " + // + "00 00 78 78 " + // reserved + masks + "00 02 11 22 33 44 55 66 77 88 99 AA BB CC AA BB CC DD " + // AFI=2, + "00 02 44 33 22 11 88 77 66 55 99 AA BB CC AA BB CC DD"), // AFI=2, + new LispAddressSerializerContext(null)); + // IPv6 + + assertEquals("1122:3344:5566:7788:99aa:bbcc:aabb:ccdd/120", String.valueOf( + ((SourceDestKey) srcAddress.getAddress()).getSourceDestKey().getSource().getValue())); + assertEquals("4433:2211:8877:6655:99aa:bbcc:aabb:ccdd/120", String.valueOf( + ((SourceDestKey) srcAddress.getAddress()).getSourceDestKey().getDest().getValue())); + } + + @Test + public void serialize__Simple() throws Exception { + SourceDestKeyBuilder addressBuilder = new SourceDestKeyBuilder(); + addressBuilder.setSource(new IpPrefix(new Ipv4Prefix("17.34.51.68/8"))); + addressBuilder.setDest(new IpPrefix(new Ipv4Prefix("34.51.68.85/16"))); + + EidBuilder eb = new EidBuilder(); + eb.setAddressType(SourceDestKeyLcaf.class); + eb.setVirtualNetworkId(null); + eb.setAddress((Address) + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder() + .setSourceDestKey(addressBuilder.build()).build()); + + ByteBuffer buf = ByteBuffer.allocate(LispAddressSerializer.getInstance().getAddressSize(eb.build())); + LispAddressSerializer.getInstance().serialize(buf, eb.build()); + + ByteBuffer expectedBuf = hexToByteBuffer("40 03 00 00 " + // + "0C 00 00 10 " + // + "00 00 08 10 " + // reserved + masks + "00 01 11 22 33 44 " + // AFI=1, IP=0x11223344 + "00 01 22 33 44 55"); // AFI=1, IP=0x22334455 + ArrayAssert.assertEquals(expectedBuf.array(), buf.array()); + } +} -- 2.36.6