Switch source-rloc and transport-address to binary 96/38496/4
authorLorand Jakab <lojakab@cisco.com>
Thu, 12 May 2016 16:06:24 +0000 (19:06 +0300)
committerLorand Jakab <lojakab@cisco.com>
Wed, 18 May 2016 05:03:24 +0000 (08:03 +0300)
Change-Id: Iea80f965091dc09667af6804f116e20c0c06d7a9
Signed-off-by: Lorand Jakab <lojakab@cisco.com>
14 files changed:
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mapcache/SimpleMapCache.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/MappingMergeUtil.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/LispMappingServiceTest.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/mapcache/SimpleMapCacheTest.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/util/MappingMergeUtilTest.java
mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MapRegisterSerializer.java
mappingservice/lisp-proto/src/main/yang/odl-lisp-proto.yang
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundPlugin.java
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispSouthboundHandler.java
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispXtrSouthboundHandler.java
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/util/LispNotificationHelper.java

index adf81a0ba1c14c65d03d2ea732f42cf48bda81c1..9fb9c09181943916d9dfeba4a4e813ea69a90273 100644 (file)
@@ -35,9 +35,9 @@ import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
 import org.opendaylight.lispflowmapping.lisp.util.MapNotifyBuilderHelper;
 import org.opendaylight.lispflowmapping.lisp.util.MapRequestUtil;
 import org.opendaylight.lispflowmapping.lisp.util.SourceDestKeyHelper;
-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.PortNumber;
 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.inet.binary.types.rev160303.IpAddressBinary;
 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.SiteId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
@@ -140,15 +140,15 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener {
             MapNotifyBuilder builder = new MapNotifyBuilder();
             List<TransportAddress> rlocs = null;
             if (merge) {
-                Set<IpAddress> notifyRlocs = new HashSet<IpAddress>();
+                Set<IpAddressBinary> notifyRlocs = new HashSet<IpAddressBinary>();
                 List<MappingRecordItem> mergedMappings = new ArrayList<MappingRecordItem>();
                 for (MappingRecordItem record : mapRegister.getMappingRecordItem()) {
                     MappingRecord mapping = record.getMappingRecord();
                     MappingRecord currentRecord = (MappingRecord) mapService.getMapping(MappingOrigin.Southbound,
                             mapping.getEid());
                     mergedMappings.add(new MappingRecordItemBuilder().setMappingRecord(currentRecord).build());
-                    Set<IpAddress> sourceRlocs = (Set<IpAddress>) mapService.getData(MappingOrigin.Southbound,
-                            mapping.getEid(), SubKeys.SRC_RLOCS);
+                    Set<IpAddressBinary> sourceRlocs = (Set<IpAddressBinary>) mapService.getData(
+                            MappingOrigin.Southbound, mapping.getEid(), SubKeys.SRC_RLOCS);
                     if (sourceRlocs != null) {
                         notifyRlocs.addAll(sourceRlocs);
                     }
@@ -169,9 +169,9 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener {
         }
     }
 
-    private static List<TransportAddress> getTransportAddresses(Set<IpAddress> addresses) {
+    private static List<TransportAddress> getTransportAddresses(Set<IpAddressBinary> addresses) {
         List<TransportAddress> rlocs = new ArrayList<TransportAddress>();
-        for (IpAddress address : addresses) {
+        for (IpAddressBinary address : addresses) {
             TransportAddressBuilder tab = new TransportAddressBuilder();
             tab.setIpAddress(address);
             tab.setPort(new PortNumber(LispMessage.PORT_NUM));
index 23eb25d60e7c2e5b9cd97d2acf8f63138efbc68f..43e11e6b1a415a5377a09910d5cfe5def1dafe0b 100644 (file)
@@ -23,9 +23,9 @@ import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry;
 import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
 import org.opendaylight.lispflowmapping.interfaces.mapcache.IMapCache;
 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
-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.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.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
 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.mapping.record.container.MappingRecord;
@@ -120,7 +120,7 @@ public class SimpleMapCache implements IMapCache {
 
         if (shouldMerge) {
             List<XtrId> expiredMappings = new ArrayList<XtrId>();
-            Set<IpAddress> sourceRlocs = new HashSet<IpAddress>();
+            Set<IpAddressBinary> sourceRlocs = new HashSet<IpAddressBinary>();
             MappingRecord mergedEntry = MappingMergeUtil.mergeXtrIdMappings(getXtrIdMappingList(xtrIdDao),
                     expiredMappings, sourceRlocs);
             removeExpiredXtrIdTableEntries(xtrIdDao, expiredMappings);
index 8b1176838cc5d3da4d2bd3117e9a6eec11531bf3..f10158612c8a67dfd8d2da0066b19ac02ac35fe9 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.lispflowmapping.implementation.util;
 
 import com.google.common.base.Splitter;
+import com.google.common.net.InetAddresses;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -17,6 +18,8 @@ import java.util.List;
 
 import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinaryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.AddMapping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
@@ -28,7 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev15090
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.Mapping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.MappingBuilder;
-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.IpAddress;
 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.SimpleAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
@@ -51,11 +54,16 @@ public final class LispNotificationHelper {
     public static TransportAddress getTransportAddressFromRloc(Rloc rloc) {
         TransportAddressBuilder tab = new TransportAddressBuilder();
         Address address = rloc.getAddress();
+        // once we switch to using Ipv4Binary and Ipv6Binary by default for RLOCs, we will only need to keep the below
+        // for backwards compatibility reasons, but the default will be to just return the reference for the binary
+        // object, yey!
         if (address instanceof Ipv4) {
-            tab.setIpAddress(IpAddressBuilder.getDefaultInstance(((Ipv4) address).getIpv4().getValue()));
+            String ipv4 = ((Ipv4) address).getIpv4().getValue();
+            tab.setIpAddress(IpAddressBinaryBuilder.getDefaultInstance(InetAddresses.forString(ipv4).getAddress()));
             tab.setPort(new PortNumber(LispMessage.PORT_NUM));
         } else if (address instanceof Ipv6) {
-            tab.setIpAddress(IpAddressBuilder.getDefaultInstance(((Ipv6) address).getIpv6().getValue()));
+            String ipv6 = ((Ipv6) address).getIpv6().getValue();
+            tab.setIpAddress(IpAddressBinaryBuilder.getDefaultInstance(InetAddresses.forString(ipv6).getAddress()));
             tab.setPort(new PortNumber(LispMessage.PORT_NUM));
         } else if (address instanceof KeyValueAddress) {
             SimpleAddress sa = ((KeyValueAddress) address).getKeyValueAddress().getValue();
@@ -64,7 +72,7 @@ public final class LispNotificationHelper {
                 String ip = it.next();
                 int port = Integer.valueOf(it.next());
 
-                tab.setIpAddress(IpAddressBuilder.getDefaultInstance(ip));
+                tab.setIpAddress(IpAddressBinaryBuilder.getDefaultInstance(InetAddresses.forString(ip).getAddress()));
                 tab.setPort(new PortNumber(port));
             }
         } else if (address instanceof DistinguishedName) {
@@ -73,11 +81,11 @@ public final class LispNotificationHelper {
             String ip = it.next();
             int port = Integer.valueOf(it.next());
 
-            tab.setIpAddress(IpAddressBuilder.getDefaultInstance(ip));
+            tab.setIpAddress(IpAddressBinaryBuilder.getDefaultInstance(InetAddresses.forString(ip).getAddress()));
             tab.setPort(new PortNumber(port));
         } else if (address instanceof ApplicationData) {
             ApplicationData appData = (ApplicationData) address;
-            tab.setIpAddress(appData.getApplicationData().getAddress().getIpAddress());
+            tab.setIpAddress(getIpAddressBinary(appData.getApplicationData().getAddress().getIpAddress()));
             tab.setPort(new PortNumber(appData.getApplicationData().getLocalPortLow()));
         }
         return tab.build();
@@ -119,4 +127,17 @@ public final class LispNotificationHelper {
             return null;
         }
     }
+
+    // We will see if we need to keep this method post full binary-migration, and if yes, will probably move to
+    // LispAddressUtil (and add tests!)
+    private static IpAddressBinary getIpAddressBinary(IpAddress address) {
+        if (address.getIpv4Address() != null) {
+            String ipv4 = address.getIpv4Address().getValue();
+            return IpAddressBinaryBuilder.getDefaultInstance(InetAddresses.forString(ipv4).getAddress());
+        } else if (address.getIpv6Address() != null) {
+            String ipv6 = address.getIpv6Address().getValue();
+            return IpAddressBinaryBuilder.getDefaultInstance(InetAddresses.forString(ipv6).getAddress());
+        }
+        return null;
+    }
 }
index aab708237a1a2fe35a48b29dcc7652a3a2999fa7..d814d0a135314a83bf6f35193924d91eeec6a738 100644 (file)
@@ -16,7 +16,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-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.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
@@ -28,6 +27,7 @@ import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
 import org.opendaylight.lispflowmapping.lisp.util.SourceDestKeyHelper;
 import org.opendaylight.lispflowmapping.implementation.config.ConfigIni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
 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;
@@ -163,7 +163,7 @@ public final class MappingMergeUtil {
     }
 
     public static MappingRecord mergeXtrIdMappings(List<Object> records, List<XtrId> expiredMappings,
-            Set<IpAddress> sourceRlocs) {
+            Set<IpAddressBinary> sourceRlocs) {
         MappingRecordBuilder mrb = null;
         XtrId xtrId = null;
         Long timestamp = Long.MAX_VALUE;
index 6812296f390d21be5502d4f764a89b3408d5a909..08d35489f06984af7f3609df9c5d3549ff16dd64 100644 (file)
@@ -11,8 +11,10 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
 import com.google.common.collect.Lists;
+
 import java.util.ArrayList;
 import java.util.List;
+
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.MutablePair;
 import org.apache.commons.lang3.tuple.Pair;
@@ -27,9 +29,9 @@ import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolverAsync;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServerAsync;
 import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
-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.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.AddMapping;
 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.MapReply;
@@ -66,8 +68,9 @@ public class LispMappingServiceTest {
     @Mock private static MapRegister mapRegisterMock;
     @InjectMocks private static LispMappingService lispMappingService;
 
+    private static final byte[] IPV4_BYTES_1 =       new byte[] {1, 2, 3, 0};
+    private static final byte[] IPV4_BYTES_2 =       new byte[] {1, 2, 4, 0};
     private static final String IPV4_STRING_1 =      "1.2.3.0";
-    private static final String IPV4_STRING_2 =      "1.2.4.0";
     private static final String IPV4_SOURCE_STRING = "192.168.0.1";
     private static final String IPV4_PREFIX_STRING = "/24";
 
@@ -80,13 +83,13 @@ public class LispMappingServiceTest {
             .setMappingRecord(new MappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build());
 
     private static final TransportAddress TRANSPORT_ADDRESS_1 = new TransportAddressBuilder()
-            .setIpAddress(new IpAddress(Ipv4Address.getDefaultInstance(IPV4_STRING_1)))
+            .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_1)))
             .setPort(new PortNumber(9999)).build();
     private static final TransportAddress TRANSPORT_ADDRESS_2 = new TransportAddressBuilder()
-            .setIpAddress(new IpAddress(Ipv4Address.getDefaultInstance(IPV4_STRING_2)))
+            .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_2)))
             .setPort(new PortNumber(8888)).build();
     private static final TransportAddress TRANSPORT_ADDRESS = new TransportAddressBuilder()
-            .setIpAddress(new IpAddress(Ipv4Address.getDefaultInstance(IPV4_STRING_1)))
+            .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_1)))
             .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
 
     /**
index d55109d2c626c9f587bdd066fdf47f37669d83a6..32c2830b46f5e8164cd135e6d46b4434bbd0398a 100644 (file)
@@ -11,12 +11,14 @@ import static org.junit.Assert.assertEquals;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
+
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -33,9 +35,9 @@ import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingServic
 import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
 import org.opendaylight.lispflowmapping.lisp.util.SourceDestKeyHelper;
-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.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
 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.SiteId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
@@ -75,7 +77,7 @@ public class MapServerTest {
     private static MapServer mapServer;
     private static MapRegister mapRegister;
 
-    private static final String IPV4_STRING_1 =          "1.2.3.0";
+    private static final String IPV4_STRING_1 =        "1.2.3.0";
     private static final String IPV4_STRING_2 =        "1.2.4.0";
     private static final String IPV4_STRING_3 =        "192.168.0.1";
     private static final String IPV4_STRING_4 =        "192.168.0.2";
@@ -106,6 +108,11 @@ public class MapServerTest {
     private static final Rloc RLOC_5 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_5);
     private static final Rloc RLOC_6 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_6);
 
+    private static final IpAddressBinary IPV4_BINARY_1 =
+            new IpAddressBinary(new Ipv4AddressBinary(new byte[] {1, 2, 3, 0}));
+    private static final IpAddressBinary IPV4_BINARY_2 =
+            new IpAddressBinary(new Ipv4AddressBinary(new byte[] {1, 2, 4, 0}));
+
     private static final long TWO_DAYS = 86400000L * 2;
 
     private static final SubscriberRLOC SUBSCRIBER_RLOC_1 = new SubscriberRLOC(RLOC_1,         // timedOut() == true
@@ -134,7 +141,7 @@ public class MapServerTest {
     private static final MappingRecord OLD_MAPPING_RECORD_2 = getDefaultMappingRecordBuilder()
             .setLocatorRecord(Lists.newArrayList(LOCATOR_RECORD_2)).build();
 
-    private static final Set<IpAddress> DEFAULT_IP_ADDRESS_SET = getDefaultIpAddressSet();
+    private static final Set<IpAddressBinary> DEFAULT_IP_ADDRESS_SET = getDefaultIpAddressSet();
 
     @Before
     public void init() throws NoSuchFieldException, IllegalAccessException  {
@@ -490,26 +497,24 @@ public class MapServerTest {
         mappingMergeField.setBoolean(CONFIG_INI, value);
     }
 
-    private static Set<IpAddress> getDefaultIpAddressSet() {
-        final IpAddress ipAddress = new IpAddress(new Ipv4Address(IPV4_STRING_3));
-        final IpAddress ipAddress_2 = new IpAddress(new Ipv4Address(IPV4_STRING_4));
-        final Set<IpAddress> addressSet = Sets.newHashSet(ipAddress, ipAddress_2);
+    private static Set<IpAddressBinary> getDefaultIpAddressSet() {
+        final Set<IpAddressBinary> addressSet = Sets.newHashSet(IPV4_BINARY_1, IPV4_BINARY_2);
 
         return addressSet;
     }
 
     private static List<TransportAddress> getTransportAddressList() {
         TransportAddressBuilder transportAddressBuilder_1 = new TransportAddressBuilder()
-                .setIpAddress(new IpAddress(new Ipv4Address(IPV4_STRING_3)))
+                .setIpAddress(IPV4_BINARY_1)
                 .setPort(new PortNumber(LispMessage.PORT_NUM));
 
         TransportAddressBuilder transportAddressBuilder_2 = new TransportAddressBuilder()
-                .setIpAddress(new IpAddress(new Ipv4Address(IPV4_STRING_4)))
+                .setIpAddress(IPV4_BINARY_2)
                 .setPort(new PortNumber(LispMessage.PORT_NUM));
 
         final List<TransportAddress> transportAddressList = Lists.newArrayList(
-                transportAddressBuilder_2.build(),
-                transportAddressBuilder_1.build());
+                transportAddressBuilder_1.build(),
+                transportAddressBuilder_2.build());
 
         return transportAddressList;
     }
index d14affb6f81d9b58e1e856f1791674f4f8805ca2..1eaf0d139ef7481dc1579caa723cd630799dfe70 100644 (file)
@@ -29,9 +29,9 @@ import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry;
 import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
-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.InstanceIdType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
 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.mapping.record.container.MappingRecord;
@@ -56,12 +56,12 @@ public class SimpleMapCacheTest {
     private static SimpleMapCache simpleMapCache;
 
     private static final String IPV4_STRING_1 =      "1.2.3.0";
-    private static final String IPV4_STRING_2 =      "1.2.4.0";
     private static final String IPV4_STRING_DST =    "192.168.0.1";
     private static final String IPV4_PREFIX_STRING = "/24";
     private static final short MASK = 24;
     private static final long VNI_0 = 0L;
     private static final long VNI_100 = 100L;
+    private static final byte[] IPV4_RLOC_BINARY = new byte[] {0, 1, 4, 0};
     private static final byte[] XTR_ID = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
 
     private static final Eid EID_IPV4_PREFIX_1_VNI = LispAddressUtil
@@ -75,7 +75,7 @@ public class SimpleMapCacheTest {
     private static final Eid NORMALIZED_EID_2 = MaskUtil.normalize(EID_IPV4_PREFIX_2);
     private static final Eid NORMALIZED_EID_IPV4 = MaskUtil.normalize(EID_IPV4);
 
-    private static final IpAddress IP_ADDRESS = new IpAddress(new Ipv4Address(IPV4_STRING_2));
+    private static final IpAddressBinary IP_ADDRESS = new IpAddressBinary(new Ipv4AddressBinary(IPV4_RLOC_BINARY));
     private static final ConfigIni CONFIG_INI = ConfigIni.getInstance();
     private static final long REGISTRATION_VALIDITY = CONFIG_INI.getRegistrationValiditySb();
     private static final MappingAuthkey MAPPING_AUTHKEY = new MappingAuthkeyBuilder()
@@ -501,7 +501,7 @@ public class SimpleMapCacheTest {
         Mockito.when(tableMock.getSpecific(NORMALIZED_EID_1, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
         Mockito.when(mappingRecordMock.getXtrId()).thenReturn(new XtrId(XTR_ID));
 
-        Set<IpAddress> ipAddresses = Sets.newHashSet(IP_ADDRESS);
+        Set<IpAddressBinary> ipAddresses = Sets.newHashSet(IP_ADDRESS);
         List<Object> records = Lists.newArrayList(getDefaultMappingRecordBuilder().build());
         PowerMockito.doReturn(records).when(simpleMapCache,         // stubs private getXtrIdMappingList method
                 PowerMockito.method(SimpleMapCache.class, "getXtrIdMappingList", ILispDAO.class))
index 93a3f318217ffde9df9afeee2ed86e3df1804ffd..17228676335066669d8742d6efd28c43f42091ca 100644 (file)
@@ -15,17 +15,19 @@ import static org.junit.Assert.assertTrue;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.opendaylight.lispflowmapping.implementation.config.ConfigIni;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
-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.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
@@ -61,9 +63,12 @@ public class MappingMergeUtilTest {
     private static final Rloc IPV4_RLOC_2 = LispAddressUtil.asIpv4Rloc(IPV4_RLOC_STRING_2);
     private static final Rloc IPV4_RLOC_3 = LispAddressUtil.asIpv4Rloc(IPV4_RLOC_STRING_3);
     private static final Rloc IPV4_RLOC_4 = LispAddressUtil.asIpv4Rloc(IPV4_RLOC_STRING_4);
-    private static final IpAddress IPV4_SOURCE_RLOC_1 = new IpAddress(new Ipv4Address("192.168.0.1"));
-    private static final IpAddress IPV4_SOURCE_RLOC_2 = new IpAddress(new Ipv4Address("192.168.0.2"));
-    private static final IpAddress IPV4_SOURCE_RLOC_3 = new IpAddress(new Ipv4Address("192.168.0.3"));
+    private static final IpAddressBinary IPV4_SOURCE_RLOC_1 = new IpAddressBinary(
+            new Ipv4AddressBinary(new byte[] {1, 1, 1, 1}));
+    private static final IpAddressBinary IPV4_SOURCE_RLOC_2 = new IpAddressBinary(
+            new Ipv4AddressBinary(new byte[] {2, 2, 2, 2}));
+    private static final IpAddressBinary IPV4_SOURCE_RLOC_3 = new IpAddressBinary(
+            new Ipv4AddressBinary(new byte[] {3, 3, 3, 3}));
 
     private static final String LOCATOR_ID_STRING = "locator-id";
 
@@ -449,7 +454,7 @@ public class MappingMergeUtilTest {
                 .setXtrId(XTR_ID_3)
                 .setTimestamp(timestamp_3).build();
 
-        Set<IpAddress> sourceRlocs = Sets.newHashSet();
+        Set<IpAddressBinary> sourceRlocs = Sets.newHashSet();
         final List<XtrId> expiredMappings = Lists.newArrayList();
         final List<Object> mappingRecords =
                 Lists.newArrayList(expiredMappingRecord_1, expiredMappingRecord_2, expiredMappingRecord_3);
index 38beabcf9e6afc90ee5866af26cf2cd7a738952c..fc23523d1c8c7d36baf42fe040a6637fb037f8de 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.lispflowmapping.lisp.serializer;
 
 import java.net.Inet4Address;
+import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
@@ -17,9 +18,9 @@ import org.apache.commons.lang3.BooleanUtils;
 import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException;
 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.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.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv6AddressBinary;
 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.MessageType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
@@ -147,16 +148,18 @@ public final class MapRegisterSerializer {
 
     }
 
-    private static IpAddress getSourceRloc(InetAddress sourceRloc) {
+    private static IpAddressBinary getSourceRloc(InetAddress sourceRloc) {
         if (sourceRloc == null) {
-            sourceRloc = InetAddress.getLoopbackAddress();
+            sourceRloc = Inet4Address.getLoopbackAddress();
         }
 
         if (sourceRloc instanceof Inet4Address) {
-            return new IpAddress(new Ipv4Address(sourceRloc.getHostAddress()));
-        } else {
-            return new IpAddress(new Ipv6Address(sourceRloc.getHostAddress()));
+            return new IpAddressBinary(new Ipv4AddressBinary(sourceRloc.getAddress()));
+        } else if (sourceRloc instanceof Inet6Address) {
+            return new IpAddressBinary(new Ipv6AddressBinary(sourceRloc.getAddress()));
         }
+
+        return null;
     }
 
     private interface Flags {
index 312f3363275dc01569b4c0fb787604fe666af984..0642dbcd7f7425ca171a395bc877185dd1d6c20c 100644 (file)
@@ -5,6 +5,7 @@ module odl-lisp-proto {
     prefix "lisp-proto";
 
     import ietf-inet-types { prefix inet; revision-date 2010-09-24; }
+    import odl-inet-binary-types { prefix inet-bin; revision-date 2016-03-03; }
     import odl-lisp-address-types { prefix odl-lisp-address; revision-date 2016-05-04; }
 
     organization "LISP Flow Mapping";
@@ -40,7 +41,7 @@ module odl-lisp-proto {
     grouping transport-address {
         container transport-address {
             leaf ipAddress {
-                type inet:ip-address;
+                type inet-bin:ip-address-binary;
                 reference "http://www.iana.org/assignments/safi-namespace/safi-namespace.xhtml";
             }
             leaf port {
@@ -116,7 +117,7 @@ module odl-lisp-proto {
                 "64 bit site identifier.";
         }
         leaf source-rloc {
-            type inet:ip-address;
+            type inet-bin:ip-address-binary;
             description
                 "The Source IP address used for sending the enclosing control
                  packet in RLOC space.";
index 4a260f2201f2f8871974f1180b1e7c3a3b4964d6..c89cccbfd9cb8555f8456e9729039535dc80fb05 100644 (file)
@@ -22,8 +22,10 @@ import io.netty.util.concurrent.DefaultThreadFactory;
 
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
 import java.util.concurrent.ThreadFactory;
+
 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
@@ -31,13 +33,14 @@ import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
 import org.opendaylight.lispflowmapping.southbound.lisp.LispSouthboundHandler;
 import org.opendaylight.lispflowmapping.southbound.lisp.LispXtrSouthboundHandler;
 import org.opendaylight.lispflowmapping.type.sbplugin.IConfigLispSouthboundPlugin;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MessageType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.OdlLispSbService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.net.InetAddresses;
+import com.google.common.base.Preconditions;
 
 public class LispSouthboundPlugin implements IConfigLispSouthboundPlugin, AutoCloseable {
     protected static final Logger LOG = LoggerFactory.getLogger(LispSouthboundPlugin.class);
@@ -156,7 +159,7 @@ public class LispSouthboundPlugin implements IConfigLispSouthboundPlugin, AutoCl
 
     public void handleSerializedLispBuffer(TransportAddress address, ByteBuffer outBuffer,
             final MessageType packetType) {
-        InetAddress ip = InetAddresses.forString(new String(address.getIpAddress().getValue()));
+        InetAddress ip = getInetAddress(address);
         InetSocketAddress recipient = new InetSocketAddress(ip, address.getPort().getValue());
         // the wrappedBuffer() method doesn't copy data, so this conversion shouldn't hurt performance
         ByteBuf data = wrappedBuffer(outBuffer.array());
@@ -180,6 +183,21 @@ public class LispSouthboundPlugin implements IConfigLispSouthboundPlugin, AutoCl
         channel.flush();
     }
 
+    private InetAddress getInetAddress(TransportAddress address) {
+        Preconditions.checkNotNull(address, "TransportAddress must not be null");
+        IpAddressBinary ip = address.getIpAddress();
+        try {
+            if (ip.getIpv4AddressBinary() != null) {
+                return InetAddress.getByAddress(ip.getIpv4AddressBinary().getValue());
+            } else if (ip.getIpv6AddressBinary() != null) {
+                return InetAddress.getByAddress(ip.getIpv6AddressBinary().getValue());
+            }
+        } catch (UnknownHostException e) {
+            LOG.debug("Could not convert TransportAddress {} to InetAddress", address, e);
+        }
+        return null;
+    }
+
     public LispSouthboundStats getStats() {
         return statistics;
     }
index 649f207476d5ab031ee899cae6df33a1696329f0..b1728c1b8cc56314f558b407c53331f93fbd5594 100644 (file)
@@ -110,7 +110,7 @@ public class LispSouthboundHandler extends SimpleChannelInboundHandler<DatagramP
             requestMappingBuilder.setMapRequest(LispNotificationHelper.convertMapRequest(request));
             TransportAddressBuilder transportAddressBuilder = new TransportAddressBuilder();
             transportAddressBuilder.setIpAddress(
-                    LispNotificationHelper.getIpAddressFromInetAddress(finalSourceAddress));
+                    LispNotificationHelper.getIpAddressBinaryFromInetAddress(finalSourceAddress));
             transportAddressBuilder.setPort(new PortNumber(port));
             requestMappingBuilder.setTransportAddress(transportAddressBuilder.build());
             if (notificationPublishService != null) {
@@ -155,7 +155,8 @@ public class LispSouthboundHandler extends SimpleChannelInboundHandler<DatagramP
             AddMappingBuilder addMappingBuilder = new AddMappingBuilder();
             addMappingBuilder.setMapRegister(LispNotificationHelper.convertMapRegister(mapRegister));
             TransportAddressBuilder transportAddressBuilder = new TransportAddressBuilder();
-            transportAddressBuilder.setIpAddress(LispNotificationHelper.getIpAddressFromInetAddress(sourceAddress));
+            transportAddressBuilder.setIpAddress(LispNotificationHelper
+                    .getIpAddressBinaryFromInetAddress(sourceAddress));
             transportAddressBuilder.setPort(new PortNumber(port));
             addMappingBuilder.setTransportAddress(transportAddressBuilder.build());
             if (notificationPublishService != null) {
@@ -178,7 +179,8 @@ public class LispSouthboundHandler extends SimpleChannelInboundHandler<DatagramP
             GotMapNotifyBuilder gotMapNotifyBuilder = new GotMapNotifyBuilder();
             gotMapNotifyBuilder.setMapNotify(LispNotificationHelper.convertMapNotify(mapNotify));
             TransportAddressBuilder transportAddressBuilder = new TransportAddressBuilder();
-            transportAddressBuilder.setIpAddress(LispNotificationHelper.getIpAddressFromInetAddress(sourceAddress));
+            transportAddressBuilder.setIpAddress(LispNotificationHelper
+                    .getIpAddressBinaryFromInetAddress(sourceAddress));
             transportAddressBuilder.setPort(new PortNumber(port));
             gotMapNotifyBuilder.setTransportAddress(transportAddressBuilder.build());
             if (notificationPublishService != null) {
@@ -201,7 +203,8 @@ public class LispSouthboundHandler extends SimpleChannelInboundHandler<DatagramP
             GotMapReplyBuilder gotMapReplyBuilder = new GotMapReplyBuilder();
             gotMapReplyBuilder.setMapReply(LispNotificationHelper.convertMapReply(mapReply));
             TransportAddressBuilder transportAddressBuilder = new TransportAddressBuilder();
-            transportAddressBuilder.setIpAddress(LispNotificationHelper.getIpAddressFromInetAddress(sourceAddress));
+            transportAddressBuilder.setIpAddress(LispNotificationHelper
+                    .getIpAddressBinaryFromInetAddress(sourceAddress));
             transportAddressBuilder.setPort(new PortNumber(port));
             gotMapReplyBuilder.setTransportAddress(transportAddressBuilder.build());
             if (notificationPublishService != null) {
index 61d3f6951b56ecb66f55c200db8de2c8432cc6c4..cb0e03550d2ee1151edf88e1b2709036a6902c08 100644 (file)
@@ -69,7 +69,7 @@ public class LispXtrSouthboundHandler extends SimpleChannelInboundHandler<Datagr
             requestMappingBuilder.setMapRequest(LispNotificationHelper.convertMapRequest(request));
             TransportAddressBuilder transportAddressBuilder = new TransportAddressBuilder();
             transportAddressBuilder.setIpAddress(
-                    LispNotificationHelper.getIpAddressFromInetAddress(finalSourceAddress));
+                    LispNotificationHelper.getIpAddressBinaryFromInetAddress(finalSourceAddress));
             transportAddressBuilder.setPort(new PortNumber(LispMessage.PORT_NUM));
             requestMappingBuilder.setTransportAddress(transportAddressBuilder.build());
             if (notificationPublishService != null) {
index 207a3b148b1cc96938fc949d7d0d3317d658f68c..fa1f172e1ca785cb5ebcb478775a0d03a9cf3d36 100644 (file)
@@ -9,6 +9,8 @@ package org.opendaylight.lispflowmapping.southbound.util;
 
 import java.net.InetAddress;
 
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinaryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifynotification.MapNotify;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifynotification.MapNotifyBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegister;
@@ -17,8 +19,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.ma
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplynotification.MapReplyBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequest;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequestBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IetfInetUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 
 public final class LispNotificationHelper {
     // Utility class, should not be instantiated
@@ -52,12 +52,12 @@ public final class LispNotificationHelper {
                 .setProbe(mapReply.isProbe()).setSecurityEnabled(mapReply.isSecurityEnabled()).build();
     }
 
-    public static IpAddress getIpAddressFromInetAddress(InetAddress address) {
+    public static IpAddressBinary getIpAddressBinaryFromInetAddress(InetAddress address) {
         InetAddress inetAddress = address;
         if (inetAddress == null) {
             inetAddress = InetAddress.getLoopbackAddress();
         }
 
-        return IetfInetUtil.INSTANCE.ipAddressFor(address);
+        return IpAddressBinaryBuilder.getDefaultInstance(address.getAddress());
     }
 }