Bump upstreams
[lispflowmapping.git] / mappingservice / lisp-proto / src / main / java / org / opendaylight / lispflowmapping / lisp / util / LispAddressUtil.java
index 1db6e968cc0d468ca561af6cb0262b86ef687636..f38856a4115c94e2eb068ec1e9639d0995b39677 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.lispflowmapping.lisp.util;
 
+import static org.opendaylight.yangtools.yang.common.UintConversions.fromJava;
+
 import com.google.common.base.Preconditions;
 import com.google.common.net.InetAddresses;
 import java.net.Inet4Address;
@@ -85,6 +87,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lo
 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;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -102,17 +105,17 @@ public final class LispAddressUtil {
     private LispAddressUtil() {
     }
 
-    public static Class<? extends LispAddressFamily> addressTypeFromSimpleAddress(SimpleAddress address) {
+    public static LispAddressFamily addressTypeFromSimpleAddress(SimpleAddress address) {
         if (address.getIpAddress() != null) {
             return binaryAddressTypeFromIpAddress(address.getIpAddress());
         } else if (address.getIpPrefix() != null) {
             return addressTypeFromIpPrefix(address.getIpPrefix());
         } else if (address.getMacAddress() != null) {
-            return MacAfi.class;
+            return MacAfi.VALUE;
         } else if (address.getDistinguishedNameType() != null) {
-            return DistinguishedNameAfi.class;
+            return DistinguishedNameAfi.VALUE;
         } else if (address.getAsNumber() != null) {
-            return AsNumberAfi.class;
+            return AsNumberAfi.VALUE;
         }
         return null;
     }
@@ -143,53 +146,53 @@ public final class LispAddressUtil {
 
     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
+            return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
                     .rev151105.lisp.address.address.Ipv4Builder()
-                    .setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address)).build();
+                    .setIpv4(IetfInetUtil.ipv4AddressFor(address)).build();
         } else if (address instanceof Inet6Address) {
-            return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
+            return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
                     .rev151105.lisp.address.address.Ipv6Builder()
-                    .setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address)).build();
+                    .setIpv6(IetfInetUtil.ipv6AddressFor(address)).build();
         }
         return null;
     }
 
-    public static Class<? extends LispAddressFamily> binaryAddressTypeFromInet(InetAddress address) {
+    public static LispAddressFamily binaryAddressTypeFromInet(InetAddress address) {
         if (address instanceof Inet4Address) {
-            return Ipv4BinaryAfi.class;
+            return Ipv4BinaryAfi.VALUE;
         } else if (address instanceof Inet6Address) {
-            return Ipv6BinaryAfi.class;
+            return Ipv6BinaryAfi.VALUE;
         }
         return null;
     }
 
     public static Address binaryAddressFromInet(InetAddress address) {
         if (address instanceof Inet4Address) {
-            return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(address.getAddress())).build();
+            return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(address.getAddress())).build();
         } else if (address instanceof Inet6Address) {
-            return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(address.getAddress())).build();
+            return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(address.getAddress())).build();
         }
         return null;
     }
 
-    public static Class<? extends LispAddressFamily> addressTypeFromIpAddress(IpAddress address) {
+    public static LispAddressFamily addressTypeFromIpAddress(IpAddress address) {
         if (address == null) {
             return null;
         } else if (address.getIpv4Address() != null) {
-            return Ipv4Afi.class;
+            return Ipv4Afi.VALUE;
         } else if (address.getIpv6Address() != null) {
-            return Ipv6Afi.class;
+            return Ipv6Afi.VALUE;
         }
         return null;
     }
 
-    public static Class<? extends LispAddressFamily> binaryAddressTypeFromIpAddress(IpAddress address) {
+    public static LispAddressFamily binaryAddressTypeFromIpAddress(IpAddress address) {
         if (address == null) {
             return null;
         } else if (address.getIpv4Address() != null) {
-            return Ipv4BinaryAfi.class;
+            return Ipv4BinaryAfi.VALUE;
         } else if (address.getIpv6Address() != null) {
-            return Ipv6BinaryAfi.class;
+            return Ipv6BinaryAfi.VALUE;
         }
         return null;
     }
@@ -198,10 +201,10 @@ public final class LispAddressUtil {
         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
+            return 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
+            return 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;
@@ -212,22 +215,22 @@ public final class LispAddressUtil {
         if (address == null) {
             return null;
         } else if (address.getIpv4Address() != null) {
-            return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(
+            return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(
                     InetAddresses.forString(address.getIpv4Address().getValue()).getAddress())).build();
         } else if (address.getIpv6Address() != null) {
-            return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(
+            return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(
                     InetAddresses.forString(address.getIpv6Address().getValue()).getAddress())).build();
         }
         return null;
     }
 
-    public static Class<? extends LispAddressFamily> addressTypeFromIpPrefix(IpPrefix address) {
+    public static LispAddressFamily addressTypeFromIpPrefix(IpPrefix address) {
         if (address == null) {
             return null;
         } else if (address.getIpv4Prefix() != null) {
-            return Ipv4PrefixAfi.class;
+            return Ipv4PrefixAfi.VALUE;
         } else if (address.getIpv6Prefix() != null) {
-            return Ipv6PrefixAfi.class;
+            return Ipv6PrefixAfi.VALUE;
         }
         return null;
     }
@@ -236,10 +239,10 @@ public final class LispAddressUtil {
         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
+            return 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
+            return 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;
@@ -249,7 +252,7 @@ public final class LispAddressUtil {
         if (address == null) {
             return null;
         } else {
-            return (Address) new MacBuilder().setMac(address).build();
+            return new MacBuilder().setMac(address).build();
         }
     }
 
@@ -257,7 +260,7 @@ public final class LispAddressUtil {
         if (address == null) {
             return null;
         } else {
-            return (Address) new ServicePathBuilder().setServicePath(address).build();
+            return new ServicePathBuilder().setServicePath(address).build();
         }
     }
 
@@ -265,7 +268,7 @@ public final class LispAddressUtil {
         if (address == null) {
             return null;
         } else {
-            return (Address) new DistinguishedNameBuilder().setDistinguishedName(address).build();
+            return new DistinguishedNameBuilder().setDistinguishedName(address).build();
         }
     }
 
@@ -273,7 +276,7 @@ public final class LispAddressUtil {
         if (address == null) {
             return null;
         } else {
-            return (Address) new AsNumberBuilder().setAsNumber(address).build();
+            return new AsNumberBuilder().setAsNumber(address).build();
         }
     }
 
@@ -295,33 +298,33 @@ public final class LispAddressUtil {
 
     public static Rloc toRloc(Ipv4Address address) {
         RlocBuilder builder = new RlocBuilder();
-        builder.setAddressType(Ipv4Afi.class);
+        builder.setAddressType(Ipv4Afi.VALUE);
         builder.setVirtualNetworkId(null);
-        builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
+        builder.setAddress(new Ipv4Builder().setIpv4(address).build());
         return builder.build();
     }
 
     public static Rloc toRloc(Ipv4AddressBinary address) {
         RlocBuilder builder = new RlocBuilder();
-        builder.setAddressType(Ipv4BinaryAfi.class);
+        builder.setAddressType(Ipv4BinaryAfi.VALUE);
         builder.setVirtualNetworkId(null);
-        builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
+        builder.setAddress(new Ipv4BinaryBuilder().setIpv4Binary(address).build());
         return builder.build();
     }
 
     public static Rloc toRloc(Ipv6Address address) {
         RlocBuilder builder = new RlocBuilder();
-        builder.setAddressType(Ipv6Afi.class);
+        builder.setAddressType(Ipv6Afi.VALUE);
         builder.setVirtualNetworkId(null);
-        builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
+        builder.setAddress(new Ipv6Builder().setIpv6(address).build());
         return builder.build();
     }
 
     public static Rloc toRloc(Ipv6AddressBinary address) {
         RlocBuilder builder = new RlocBuilder();
-        builder.setAddressType(Ipv6BinaryAfi.class);
+        builder.setAddressType(Ipv6BinaryAfi.VALUE);
         builder.setVirtualNetworkId(null);
-        builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
+        builder.setAddress(new Ipv6BinaryBuilder().setIpv6Binary(address).build());
         return builder.build();
     }
 
@@ -335,41 +338,41 @@ public final class LispAddressUtil {
 
     public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv4PrefixAfi.class);
+        builder.setAddressType(Ipv4PrefixAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
+        builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
         return builder.build();
     }
 
     public static Eid toEid(Ipv4PrefixBinary prefix, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv4PrefixBinaryAfi.class);
+        builder.setAddressType(Ipv4PrefixBinaryAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) prefix);
+        builder.setAddress(prefix);
         return builder.build();
     }
 
     public static Eid toEid(Ipv6PrefixBinary prefix, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv6PrefixBinaryAfi.class);
+        builder.setAddressType(Ipv6PrefixBinaryAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) prefix);
+        builder.setAddress(prefix);
         return builder.build();
     }
 
     public static Eid toEid(Ipv4Address address, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv4Afi.class);
+        builder.setAddressType(Ipv4Afi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
+        builder.setAddress(new Ipv4Builder().setIpv4(address).build());
         return builder.build();
     }
 
     public static Eid toEid(Ipv4AddressBinary address, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv4BinaryAfi.class);
+        builder.setAddressType(Ipv4BinaryAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
+        builder.setAddress(new Ipv4BinaryBuilder().setIpv4Binary(address).build());
         return builder.build();
     }
 
@@ -383,41 +386,41 @@ public final class LispAddressUtil {
 
     public static Eid toEid(Ipv6Address address, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv6Afi.class);
+        builder.setAddressType(Ipv6Afi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
+        builder.setAddress(new Ipv6Builder().setIpv6(address).build());
         return builder.build();
     }
 
     public static Eid toEid(Ipv6AddressBinary address, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv6BinaryAfi.class);
+        builder.setAddressType(Ipv6BinaryAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
+        builder.setAddress(new Ipv6BinaryBuilder().setIpv6Binary(address).build());
         return builder.build();
     }
 
     public static Eid toEid(DistinguishedNameType dn, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(DistinguishedNameAfi.class);
+        builder.setAddressType(DistinguishedNameAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new DistinguishedNameBuilder().setDistinguishedName(dn).build());
+        builder.setAddress(new DistinguishedNameBuilder().setDistinguishedName(dn).build());
         return builder.build();
     }
 
     public static Eid toEid(MacAddress mac, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(MacAfi.class);
+        builder.setAddressType(MacAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new MacBuilder().setMac(mac).build());
+        builder.setAddress(new MacBuilder().setMac(mac).build());
         return builder.build();
     }
 
     public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv6PrefixAfi.class);
+        builder.setAddressType(Ipv6PrefixAfi.VALUE);
         builder.setVirtualNetworkId(vni);
-        builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
+        builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
         return builder.build();
     }
 
@@ -431,8 +434,8 @@ public final class LispAddressUtil {
 
     public static Eid toIpPrefixEid(IpAddress addr, int vni) {
         // If you touch this, be sure that sfclisp compiles!
-        int mask = addressTypeFromIpAddress(addr) == Ipv4Afi.class ? 32 : 128;
-        IpPrefix prefix = asIpPrefix(String.valueOf(addr.getValue()), mask);
+        int mask = Ipv4Afi.VALUE.equals(addressTypeFromIpAddress(addr)) ? 32 : 128;
+        IpPrefix prefix = asIpPrefix(addr.stringValue(), mask);
         // XXX getMapping rcp fails if VNI set to 0
         return toEidNoVni(prefix);
     }
@@ -451,7 +454,7 @@ public final class LispAddressUtil {
     }
 
     public static Eid asIpv4PrefixEid(Ipv4Address addr, InstanceIdType vni) {
-        return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(addr)), vni);
+        return toEid(new IpPrefix(IetfInetUtil.ipv4PrefixFor(addr)), vni);
     }
 
     public static Eid asIpv4PrefixEid(final String prefix, final InstanceIdType iiType) {
@@ -460,10 +463,10 @@ public final class LispAddressUtil {
 
     public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv4PrefixAfi.class);
+        builder.setAddressType(Ipv4PrefixAfi.VALUE);
         builder.setVirtualNetworkId(eid.getVirtualNetworkId());
         builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(
-                IetfInetUtil.INSTANCE.ipv4PrefixFor(address, mask)).build());
+                IetfInetUtil.ipv4PrefixFor(address, mask)).build());
         return builder.build();
     }
 
@@ -471,22 +474,35 @@ public final class LispAddressUtil {
         return asIpv4PrefixBinaryEid(prefix, null);
     }
 
+    public static Eid asIpv4PrefixBinaryEid(long vni, final String prefix) {
+        InstanceIdType iid = new InstanceIdType(fromJava(vni));
+        return asIpv4PrefixBinaryEid(prefix, iid);
+    }
+
     public static Eid asIpv4PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
         String address = MaskUtil.getPrefixAddress(prefix);
-        short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
+        short mask = Short.parseShort(MaskUtil.getPrefixMask(prefix));
         byte[] ipv4 = InetAddresses.forString(address).getAddress();
         return toEid(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(ipv4))
-                .setIpv4MaskLength(mask).build(), iiType);
+                .setIpv4MaskLength(fromJava(mask)).build(), iiType);
     }
 
     public static Eid asIpv4PrefixBinaryEid(Eid eid, byte[] address, short mask) {
+        return asIpv4PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
+    }
+
+    public static Eid asIpv4PrefixBinaryEid(long vni, byte[] address, short mask) {
+        return asIpv4PrefixBinaryEid(new InstanceIdType(fromJava(vni)), address, mask);
+    }
+
+    public static Eid asIpv4PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
         Preconditions.checkArgument(address.length == 4,
                 "asIpv4PrefixBinaryEid called with incorrect length byte array ({})", address.length);
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv4PrefixBinaryAfi.class);
-        builder.setVirtualNetworkId(eid.getVirtualNetworkId());
+        builder.setAddressType(Ipv4PrefixBinaryAfi.VALUE);
+        builder.setVirtualNetworkId(vni);
         builder.setAddress(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(address))
-                .setIpv4MaskLength(mask).build());
+                .setIpv4MaskLength(fromJava(mask)).build());
         return builder.build();
     }
 
@@ -495,7 +511,8 @@ public final class LispAddressUtil {
     }
 
     public static Eid asIpv4Eid(String address, long vni) {
-        return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
+        return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()),
+                new InstanceIdType(fromJava(vni)));
     }
 
     public static Eid asIpv6Eid(String address) {
@@ -503,7 +520,8 @@ public final class LispAddressUtil {
     }
 
     public static Eid asIpv6Eid(String address, long vni) {
-        return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
+        return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()),
+                new InstanceIdType(fromJava(vni)));
     }
 
     public static Eid asIpv6PrefixEid(String prefix) {
@@ -511,15 +529,15 @@ public final class LispAddressUtil {
     }
 
     public static Eid asIpv6PrefixEid(Ipv6Address addr, InstanceIdType vni) {
-        return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(addr)), vni);
+        return toEid(new IpPrefix(IetfInetUtil.ipv6PrefixFor(addr)), vni);
     }
 
     public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv6PrefixAfi.class);
+        builder.setAddressType(Ipv6PrefixAfi.VALUE);
         builder.setVirtualNetworkId(eid.getVirtualNetworkId());
         builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(
-                IetfInetUtil.INSTANCE.ipv6PrefixFor(address, mask)).build());
+                IetfInetUtil.ipv6PrefixFor(address, mask)).build());
         return builder.build();
     }
 
@@ -527,22 +545,35 @@ public final class LispAddressUtil {
         return asIpv6PrefixBinaryEid(prefix, null);
     }
 
+    public static Eid asIpv6PrefixBinaryEid(long vni, final String prefix) {
+        InstanceIdType iid = new InstanceIdType(fromJava(vni));
+        return asIpv6PrefixBinaryEid(prefix, iid);
+    }
+
     public static Eid asIpv6PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
         String address = MaskUtil.getPrefixAddress(prefix);
-        short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
+        short mask = Short.parseShort(MaskUtil.getPrefixMask(prefix));
         byte[] ipv6 = InetAddresses.forString(address).getAddress();
         return toEid(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(ipv6))
-                .setIpv6MaskLength(mask).build(), iiType);
+                .setIpv6MaskLength(fromJava(mask)).build(), iiType);
     }
 
     public static Eid asIpv6PrefixBinaryEid(Eid eid, byte[] address, short mask) {
+        return asIpv6PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
+    }
+
+    public static Eid asIpv6PrefixBinaryEid(long vni, byte[] address, short mask) {
+        return asIpv6PrefixBinaryEid(new InstanceIdType(fromJava(vni)), address, mask);
+    }
+
+    public static Eid asIpv6PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
         Preconditions.checkArgument(address.length == 16,
                 "asIpv6PrefixBinaryEid called with incorrect length byte array ({})", address.length);
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(Ipv6PrefixBinaryAfi.class);
-        builder.setVirtualNetworkId(eid.getVirtualNetworkId());
+        builder.setAddressType(Ipv6PrefixBinaryAfi.VALUE);
+        builder.setVirtualNetworkId(vni);
         builder.setAddress(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(address))
-                .setIpv6MaskLength(mask).build());
+                .setIpv6MaskLength(fromJava(mask)).build());
         return builder.build();
     }
 
@@ -599,9 +630,9 @@ public final class LispAddressUtil {
 
     public static IpPrefix asIpPrefix(String addr, int mask) {
         int version = ipVersionFromString(addr);
-        if (version == 4 && (mask >= 0 && mask <= 32)) {
+        if (version == 4 && mask >= 0 && mask <= 32) {
             return new IpPrefix(new Ipv4Prefix(addr + "/" + mask));
-        } else if (version == 6 && (mask >= 0 && mask <= 128)) {
+        } else if (version == 6 && mask >= 0 && mask <= 128) {
             return new IpPrefix(new Ipv6Prefix(addr + "/" + mask));
         } else {
             return null;
@@ -610,21 +641,21 @@ public final class LispAddressUtil {
 
     public static Eid asServicePathEid(long vni, long servicePathId, short serviceIndex) {
         EidBuilder eb = new EidBuilder();
-        eb.setAddressType(ServicePathLcaf.class);
+        eb.setAddressType(ServicePathLcaf.VALUE);
         if (vni >= 0) {
-            eb.setVirtualNetworkId(new InstanceIdType(vni));
+            eb.setVirtualNetworkId(new InstanceIdType(fromJava(vni)));
         }
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
                 .lisp.address.address.service.path.ServicePathBuilder spb =
                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
                 .lisp.address.address.service.path.ServicePathBuilder();
-        spb.setServicePathId(new ServicePathIdType(servicePathId));
-        spb.setServiceIndex(serviceIndex);
+        spb.setServicePathId(new ServicePathIdType(fromJava(servicePathId)));
+        spb.setServiceIndex(fromJava(serviceIndex));
         return eb.setAddress(addressFromServicePath(spb.build())).build();
     }
 
     public static Eid asMacEid(String address, long vni) {
-        return toEid(new MacAddress(address), new InstanceIdType(vni));
+        return toEid(new MacAddress(address), new InstanceIdType(fromJava(vni)));
     }
 
     public static Eid asMacEid(String address) {
@@ -632,7 +663,7 @@ public final class LispAddressUtil {
     }
 
     public static Eid asDistinguishedNameEid(String address, long vni) {
-        return toEid(new MacAddress(address), new InstanceIdType(vni));
+        return toEid(new MacAddress(address), new InstanceIdType(fromJava(vni)));
     }
 
     public static Eid asDistinguishedNameEid(String address) {
@@ -647,9 +678,9 @@ public final class LispAddressUtil {
                 .rev151105.lisp.address.address.KeyValueAddressBuilder()
                 .setKeyValueAddress(kvab.build()).build();
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(KeyValueAddressLcaf.class);
+        builder.setAddressType(KeyValueAddressLcaf.VALUE);
         builder.setVirtualNetworkId(null);
-        builder.setAddress((Address) address);
+        builder.setAddress(address);
         return builder.build();
     }
 
@@ -661,9 +692,9 @@ public final class LispAddressUtil {
                 .rev151105.lisp.address.address.KeyValueAddressBuilder()
                 .setKeyValueAddress(kvab.build()).build();
         RlocBuilder builder = new RlocBuilder();
-        builder.setAddressType(KeyValueAddressLcaf.class);
+        builder.setAddressType(KeyValueAddressLcaf.VALUE);
         builder.setVirtualNetworkId(null);
-        builder.setAddress((Address) address);
+        builder.setAddress(address);
         return builder.build();
     }
 
@@ -678,10 +709,10 @@ public final class LispAddressUtil {
         return builder.build();
     }
 
-    public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, int vni) {
+    public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, long vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(SourceDestKeyLcaf.class);
-        builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
+        builder.setAddressType(SourceDestKeyLcaf.VALUE);
+        builder.setVirtualNetworkId(new InstanceIdType(fromJava(vni)));
         builder.setAddress(
                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
                         .lisp.address.address.SourceDestKeyBuilder()
@@ -692,7 +723,7 @@ public final class LispAddressUtil {
 
     public static Eid asSrcDstEid(SourceDestKey sd, InstanceIdType vni) {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(SourceDestKeyLcaf.class);
+        builder.setAddressType(SourceDestKeyLcaf.VALUE);
         builder.setVirtualNetworkId(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());
@@ -718,16 +749,17 @@ public final class LispAddressUtil {
 
         RlocBuilder teBuilder = new RlocBuilder();
         teBuilder.setAddress(elpBuilder.build());
-        teBuilder.setAddressType(ExplicitLocatorPathLcaf.class);
+        teBuilder.setAddressType(ExplicitLocatorPathLcaf.VALUE);
         return teBuilder.build();
     }
 
     public static List<LocatorRecord> asLocatorRecords(List<Rloc> locators) {
-        List<LocatorRecord> locatorRecords = new ArrayList<LocatorRecord>();
+        List<LocatorRecord> locatorRecords = new ArrayList<>();
         for (Rloc locator : locators) {
             LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder();
-            locatorBuilder.setLocalLocator(false).setRlocProbed(false).setWeight((short) 1).setPriority((short) 1)
-                    .setMulticastWeight((short) 1).setMulticastPriority((short) 1).setRouted(true)
+            locatorBuilder.setLocalLocator(false).setRlocProbed(false)
+                    .setWeight(fromJava((short) 1)).setPriority(fromJava((short) 1))
+                    .setMulticastWeight(fromJava((short) 1)).setMulticastPriority(fromJava((short) 1)).setRouted(true)
                     .setRloc(locator).setLocatorId("SFC_LISP").build();
             locatorRecords.add(locatorBuilder.build());
         }
@@ -736,9 +768,9 @@ public final class LispAddressUtil {
 
     public static Eid getNoAddressEid() {
         EidBuilder builder = new EidBuilder();
-        builder.setAddressType(NoAddressAfi.class);
+        builder.setAddressType(NoAddressAfi.VALUE);
         builder.setVirtualNetworkId(null);
-        builder.setAddress(new NoAddressBuilder().setNoAddress(true).build());
+        builder.setAddress(new NoAddressBuilder().setNoAddress(Empty.value()).build());
         return builder.build();
     }
 
@@ -761,7 +793,7 @@ public final class LispAddressUtil {
         Ipv4PrefixBinaryBuilder pb = new Ipv4PrefixBinaryBuilder();
         byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv4Prefix(prefix)).getAddress();
         pb.setIpv4AddressBinary(new Ipv4AddressBinary(address));
-        pb.setIpv4MaskLength(MaskUtil.getMaskForAddress(prefix));
+        pb.setIpv4MaskLength(fromJava(MaskUtil.getMaskForAddress(prefix)));
         return pb.build();
     }
 
@@ -770,7 +802,7 @@ public final class LispAddressUtil {
         Ipv6PrefixBinaryBuilder pb = new Ipv6PrefixBinaryBuilder();
         byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv6Prefix(prefix)).getAddress();
         pb.setIpv6AddressBinary(new Ipv6AddressBinary(address));
-        pb.setIpv6MaskLength(MaskUtil.getMaskForAddress(prefix));
+        pb.setIpv6MaskLength(fromJava(MaskUtil.getMaskForAddress(prefix)));
         return pb.build();
     }
 
@@ -784,31 +816,34 @@ public final class LispAddressUtil {
         return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(addr)).build();
     }
 
-    private static Pair<Class<? extends LispAddressFamily>, Address> convertToBinary(Address addr) {
-        Address convAddr = null;
-        Class<? extends LispAddressFamily> convType = null;
+    private static Pair<LispAddressFamily, Address> convertToBinary(Address addr) {
+        final Address convAddr;
+        final LispAddressFamily convType;
         if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
                 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) {
             convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
                     .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) addr);
-            convType = Ipv4PrefixBinaryAfi.class;
+            convType = Ipv4PrefixBinaryAfi.VALUE;
         } else if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
                 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
             convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
                     .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) addr);
-            convType = Ipv6PrefixBinaryAfi.class;
+            convType = Ipv6PrefixBinaryAfi.VALUE;
         } else if (addr instanceof Ipv4) {
             convAddr = convertToBinary((Ipv4) addr);
-            convType = Ipv4BinaryAfi.class;
+            convType = Ipv4BinaryAfi.VALUE;
         } else if (addr instanceof Ipv6) {
             convAddr = convertToBinary((Ipv6) addr);
-            convType = Ipv6BinaryAfi.class;
+            convType = Ipv6BinaryAfi.VALUE;
+        } else {
+            convAddr = null;
+            convType = null;
         }
-        return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
+        return new ImmutablePair<>(convType, convAddr);
     }
 
     public static Eid convertToBinary(Eid eid) {
-        Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(eid.getAddress());
+        Pair<LispAddressFamily, Address> converted = convertToBinary(eid.getAddress());
         if (converted.getRight() == null) {
             return eid;
         }
@@ -819,7 +854,7 @@ public final class LispAddressUtil {
     }
 
     public static Rloc convertToBinary(Rloc rloc) {
-        Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(rloc.getAddress());
+        Pair<LispAddressFamily, Address> converted = convertToBinary(rloc.getAddress());
         if (converted.getRight() == null) {
             return rloc;
         }
@@ -849,51 +884,63 @@ public final class LispAddressUtil {
         return null;
     }
 
+    public static IpAddressBinary addressBinaryFromAddress(Address address) {
+        if (address instanceof Ipv4Binary) {
+            return new IpAddressBinary(((Ipv4Binary) address).getIpv4Binary());
+        } else if (address instanceof Ipv6Binary) {
+            return new IpAddressBinary(((Ipv6Binary) address).getIpv6Binary());
+        }
+        return null;
+    }
+
     private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
             .lisp.address.address.Ipv4Prefix convertFromBinary(Ipv4PrefixBinary prefix) {
-        return new Ipv4PrefixBuilder().setIpv4Prefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(
+        return new Ipv4PrefixBuilder().setIpv4Prefix(IetfInetUtil.ipv4PrefixFor(
                 prefix.getIpv4AddressBinary().getValue(),
-                prefix.getIpv4MaskLength())).build();
+                prefix.getIpv4MaskLength().toJava())).build();
     }
 
     private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
             .lisp.address.address.Ipv6Prefix convertFromBinary(Ipv6PrefixBinary prefix) {
-        return new Ipv6PrefixBuilder().setIpv6Prefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(
+        return new Ipv6PrefixBuilder().setIpv6Prefix(IetfInetUtil.ipv6PrefixFor(
                 prefix.getIpv6AddressBinary().getValue(),
-                prefix.getIpv6MaskLength())).build();
+                prefix.getIpv6MaskLength().toJava())).build();
     }
 
     private static Ipv4 convertFromBinary(Ipv4Binary address) {
-        return new Ipv4Builder().setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address.getIpv4Binary().getValue()))
+        return new Ipv4Builder().setIpv4(IetfInetUtil.ipv4AddressFor(address.getIpv4Binary().getValue()))
                 .build();
     }
 
     private static Ipv6 convertFromBinary(Ipv6Binary address) {
-        return new Ipv6Builder().setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address.getIpv6Binary().getValue()))
+        return new Ipv6Builder().setIpv6(IetfInetUtil.ipv6AddressFor(address.getIpv6Binary().getValue()))
                 .build();
     }
 
-    private static Pair<Class<? extends LispAddressFamily>, Address> convertFromBinary(Address addr) {
-        Address convAddr = null;
-        Class<? extends LispAddressFamily> convType = null;
+    private static Pair<LispAddressFamily, Address> convertFromBinary(Address addr) {
+        final Address convAddr;
+        final LispAddressFamily convType;
         if (addr instanceof Ipv4PrefixBinary) {
             convAddr = convertFromBinary((Ipv4PrefixBinary) addr);
-            convType = Ipv4PrefixAfi.class;
+            convType = Ipv4PrefixAfi.VALUE;
         } else if (addr instanceof Ipv6PrefixBinary) {
             convAddr = convertFromBinary((Ipv6PrefixBinary) addr);
-            convType = Ipv6PrefixAfi.class;
+            convType = Ipv6PrefixAfi.VALUE;
         } else if (addr instanceof Ipv4Binary) {
             convAddr = convertFromBinary((Ipv4Binary) addr);
-            convType = Ipv4Afi.class;
+            convType = Ipv4Afi.VALUE;
         } else if (addr instanceof Ipv6Binary) {
             convAddr = convertFromBinary((Ipv6Binary) addr);
-            convType = Ipv6Afi.class;
+            convType = Ipv6Afi.VALUE;
+        } else {
+            convAddr = null;
+            convType = null;
         }
-        return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
+        return new ImmutablePair<>(convType, convAddr);
     }
 
     public static Eid convertFromBinary(Eid eid) {
-        Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(eid.getAddress());
+        Pair<LispAddressFamily, Address> converted = convertFromBinary(eid.getAddress());
         if (converted.getRight() == null) {
             return eid;
         }
@@ -904,7 +951,7 @@ public final class LispAddressUtil {
     }
 
     public static Rloc convertFromBinary(Rloc rloc) {
-        Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(rloc.getAddress());
+        Pair<LispAddressFamily, Address> converted = convertFromBinary(rloc.getAddress());
         if (converted.getRight() == null) {
             return rloc;
         }
@@ -963,9 +1010,9 @@ public final class LispAddressUtil {
     public static short getIpPrefixMask(Eid eid) {
         Address addr = eid.getAddress();
         if (addr instanceof Ipv4PrefixBinary) {
-            return ((Ipv4PrefixBinary) addr).getIpv4MaskLength();
+            return ((Ipv4PrefixBinary) addr).getIpv4MaskLength().toJava();
         } else if (addr instanceof Ipv6PrefixBinary) {
-            return ((Ipv6PrefixBinary) addr).getIpv6MaskLength();
+            return ((Ipv6PrefixBinary) addr).getIpv6MaskLength().toJava();
         }
         return 0;
     }