X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Flisp-proto%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Flisp%2Futil%2FLispAddressUtil.java;h=f7fac320f0b0815dd9eea349e4fccae2fd2d6f31;hb=4a99f1d24037d5b7947658b7360a8c53baeedbf6;hp=83b0ffc7906e5dfd9fdd1a2a3f6990d5195025d3;hpb=1f051e788b136bc72e8ef483aa2055fe49b3c224;p=lispflowmapping.git 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 index 83b0ffc79..f7fac320f 100644 --- 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 @@ -7,19 +7,20 @@ */ 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; import java.net.Inet6Address; import java.net.InetAddress; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; - import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; @@ -56,6 +57,16 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addres 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.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePathBuilder; +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.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.service.path.ServicePath; +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.rev130715.MacAddress; +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.binary.address.types.rev160504.Ipv4BinaryAfi; @@ -76,16 +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.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.service.path.ServicePath; -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.rev130715.MacAddress; -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.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil; +import org.opendaylight.yangtools.yang.common.Empty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -277,6 +279,7 @@ public final class LispAddressUtil { return (Address) new AsNumberBuilder().setAsNumber(address).build(); } } + public static Rloc toRloc(SimpleAddress address) { RlocBuilder builder = new RlocBuilder(); builder.setAddressType(addressTypeFromSimpleAddress(address)); @@ -373,26 +376,66 @@ public final class LispAddressUtil { return builder.build(); } - // XXX getMapping rcp fails if VNI set to 0 - public static Eid toEidNoVni(IpPrefix prefix) { + public static Eid toEid(IpPrefix prefix, InstanceIdType vni) { EidBuilder builder = new EidBuilder(); builder.setAddress(addressFromIpPrefix(prefix)); builder.setAddressType(addressTypeFromIpPrefix(prefix)); + builder.setVirtualNetworkId(vni); return builder.build(); } - public static Eid toEid(IpPrefix prefix, InstanceIdType vni) { + public static Eid toEid(Ipv6Address address, InstanceIdType vni) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(Ipv6Afi.class); + builder.setVirtualNetworkId(vni); + builder.setAddress((Address) 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.setVirtualNetworkId(vni); + builder.setAddress((Address) 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.setVirtualNetworkId(vni); + builder.setAddress((Address) 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.setVirtualNetworkId(vni); + builder.setAddress((Address) 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.setVirtualNetworkId(vni); + builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build()); + return builder.build(); + } + + // XXX getMapping rcp fails if VNI set to 0 + public static Eid toEidNoVni(IpPrefix prefix) { EidBuilder builder = new EidBuilder(); builder.setAddress(addressFromIpPrefix(prefix)); builder.setAddressType(addressTypeFromIpPrefix(prefix)); - builder.setVirtualNetworkId(vni); return builder.build(); } 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); + IpPrefix prefix = asIpPrefix(addr.stringValue(), mask); // XXX getMapping rcp fails if VNI set to 0 return toEidNoVni(prefix); } @@ -410,76 +453,128 @@ public final class LispAddressUtil { return asIpv4PrefixEid(prefix, null); } + public static Eid asIpv4PrefixEid(Ipv4Address addr, InstanceIdType vni) { + return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(addr)), vni); + } + public static Eid asIpv4PrefixEid(final String prefix, final InstanceIdType iiType) { return toEid(new Ipv4Prefix(prefix), iiType); } + public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(Ipv4PrefixAfi.class); + builder.setVirtualNetworkId(eid.getVirtualNetworkId()); + builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix( + IetfInetUtil.INSTANCE.ipv4PrefixFor(address, mask)).build()); + return builder.build(); + } + public static Eid asIpv4PrefixBinaryEid(final String prefix) { 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)); 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 asIpv4Eid(String address) { - return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), null); + public static Eid asIpv4PrefixBinaryEid(Eid eid, byte[] address, short mask) { + return asIpv4PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask); } - 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 asIpv4PrefixBinaryEid(long vni, byte[] address, short mask) { + return asIpv4PrefixBinaryEid(new InstanceIdType(fromJava(vni)), address, mask); } - public static Eid toEid(Ipv6Address address, InstanceIdType vni) { + 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(Ipv6Afi.class); + builder.setAddressType(Ipv4PrefixBinaryAfi.class); builder.setVirtualNetworkId(vni); - builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build()); + builder.setAddress(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(address)) + .setIpv4MaskLength(fromJava(mask)).build()); return builder.build(); } - public static Eid toEid(Ipv6AddressBinary address, InstanceIdType vni) { - EidBuilder builder = new EidBuilder(); - builder.setAddressType(Ipv6BinaryAfi.class); - builder.setVirtualNetworkId(vni); - builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build()); - return builder.build(); + public static Eid asIpv4Eid(String address) { + return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), null); + } + + public static Eid asIpv4Eid(String address, long vni) { + return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), + new InstanceIdType(fromJava(vni))); + } + + public static Eid asIpv6Eid(String address) { + return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), null); } 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) { return toEid(new Ipv6Prefix(prefix), null); } - public static Eid asIpv6Eid(String address) { - return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), null); + public static Eid asIpv6PrefixEid(Ipv6Address addr, InstanceIdType vni) { + return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(addr)), vni); + } + + public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) { + EidBuilder builder = new EidBuilder(); + builder.setAddressType(Ipv6PrefixAfi.class); + builder.setVirtualNetworkId(eid.getVirtualNetworkId()); + builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix( + IetfInetUtil.INSTANCE.ipv6PrefixFor(address, mask)).build()); + return builder.build(); } public static Eid asIpv6PrefixBinaryEid(final String prefix) { 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)); 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 asIpv4Eid(String address, long vni) { - return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni)); + 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(vni); + builder.setAddress(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(address)) + .setIpv6MaskLength(fromJava(mask)).build()); + return builder.build(); } public static Eid asBinaryEid(SimpleAddress address, InstanceIdType iid) { @@ -501,6 +596,28 @@ public final class LispAddressUtil { return LispAddressUtil.asEid(address, iid); } + public static Eid asIpPrefixBinaryEid(Eid eid) { + Address address = eid.getAddress(); + if (address instanceof Ipv4Binary) { + return LispAddressUtil.asIpv4PrefixBinaryEid(eid, ((Ipv4Binary) address).getIpv4Binary().getValue(), + (short) 32); + } else if (address instanceof Ipv6Binary) { + return LispAddressUtil.asIpv6PrefixBinaryEid(eid, ((Ipv6Binary) address).getIpv6Binary().getValue(), + (short) 128); + } else if (address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) { + return eid; + } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address + .types.rev151105.lisp.address.address.Ipv4) { + return LispAddressUtil.asIpv4PrefixBinaryEid(((Ipv4) address).getIpv4().getValue() + "/32", + eid.getVirtualNetworkId()); + } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address + .types.rev151105.lisp.address.address.Ipv6) { + return LispAddressUtil.asIpv6PrefixBinaryEid(((Ipv6) address).getIpv6().getValue() + "/128", + eid.getVirtualNetworkId()); + } + return convertToBinary(eid); + } + public static int ipVersionFromString(String ip) { if (IP4_PATTERN.matcher(ip).matches()) { return 4; @@ -515,102 +632,38 @@ public final class LispAddressUtil { 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)) { + } else if (version == 6 && (mask >= 0 && mask <= 128)) { return new IpPrefix(new Ipv6Prefix(addr + "/" + mask)); } else { return null; } } - public static Eid asIpv4PrefixEid(Ipv4Address addr, InstanceIdType vni) { - return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(addr)), vni); - } - - public static Eid asIpv6PrefixEid(Ipv6Address addr, InstanceIdType vni) { - return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(addr)), vni); - } - - public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) { - EidBuilder builder = new EidBuilder(); - builder.setAddressType(Ipv4PrefixAfi.class); - builder.setVirtualNetworkId(eid.getVirtualNetworkId()); - builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix( - IetfInetUtil.INSTANCE.ipv4PrefixFor(address, mask)).build()); - return builder.build(); - } - - public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) { - EidBuilder builder = new EidBuilder(); - builder.setAddressType(Ipv6PrefixAfi.class); - builder.setVirtualNetworkId(eid.getVirtualNetworkId()); - builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix( - IetfInetUtil.INSTANCE.ipv6PrefixFor(address, mask)).build()); - return builder.build(); - } - - public static Eid asIpv4PrefixBinaryEid(Eid eid, 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.setAddress(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(address)) - .setIpv4MaskLength(mask).build()); - return builder.build(); - } - - public static Eid asIpv6PrefixBinaryEid(Eid eid, 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.setAddress(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(address)) - .setIpv6MaskLength(mask).build()); - return builder.build(); - } - public static Eid asServicePathEid(long vni, long servicePathId, short serviceIndex) { EidBuilder eb = new EidBuilder(); eb.setAddressType(ServicePathLcaf.class); 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 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)); + return toEid(new MacAddress(address), new InstanceIdType(fromJava(vni))); } public static Eid asMacEid(String address) { return toEid(new MacAddress(address), null); } - public static Eid toEid(DistinguishedNameType dn, InstanceIdType vni) { - EidBuilder builder = new EidBuilder(); - builder.setAddressType(DistinguishedNameAfi.class); - builder.setVirtualNetworkId(vni); - builder.setAddress((Address) new DistinguishedNameBuilder().setDistinguishedName(dn).build()); - return builder.build(); - } - 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) { @@ -656,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.setVirtualNetworkId(new InstanceIdType(fromJava(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() @@ -678,11 +731,6 @@ public final class LispAddressUtil { } public static Rloc asTeLcafRloc(List hopList) { - RlocBuilder teBuilder = new RlocBuilder(); - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105 - .lisp.address.address.ExplicitLocatorPathBuilder elpBuilder = - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105 - .lisp.address.address.ExplicitLocatorPathBuilder(); ExplicitLocatorPathBuilder teAddrBuilder = new ExplicitLocatorPathBuilder(); teAddrBuilder.setHop(new ArrayList()); for (IpAddress hop : hopList) { @@ -693,7 +741,13 @@ public final class LispAddressUtil { teAddrBuilder.getHop().add(hopBuilder.build()); } + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105 + .lisp.address.address.ExplicitLocatorPathBuilder elpBuilder = + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105 + .lisp.address.address.ExplicitLocatorPathBuilder(); elpBuilder.setExplicitLocatorPath(teAddrBuilder.build()); + + RlocBuilder teBuilder = new RlocBuilder(); teBuilder.setAddress(elpBuilder.build()); teBuilder.setAddressType(ExplicitLocatorPathLcaf.class); return teBuilder.build(); @@ -703,8 +757,9 @@ public final class LispAddressUtil { List 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()); } @@ -715,7 +770,7 @@ public final class LispAddressUtil { EidBuilder builder = new EidBuilder(); builder.setAddressType(NoAddressAfi.class); builder.setVirtualNetworkId(null); - builder.setAddress(new NoAddressBuilder().setNoAddress(true).build()); + builder.setAddress(new NoAddressBuilder().setNoAddress(Empty.getInstance()).build()); return builder.build(); } @@ -738,53 +793,29 @@ 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(); } - 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( - prefix.getIpv4AddressBinary().getValue(), - prefix.getIpv4MaskLength())).build(); - } - private static Ipv6PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix prefix) { 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(); } - 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( - prefix.getIpv6AddressBinary().getValue(), - prefix.getIpv6MaskLength())).build(); -} - private static Ipv4Binary convertToBinary(Ipv4 address) { byte[] addr = InetAddresses.forString(address.getIpv4().getValue()).getAddress(); return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(addr)).build(); } - private static Ipv4 convertFromBinary(Ipv4Binary address) { - return new Ipv4Builder().setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address.getIpv4Binary().getValue())) - .build(); - } - private static Ipv6Binary convertToBinary(Ipv6 address) { byte[] addr = InetAddresses.forString(address.getIpv6().getValue()).getAddress(); return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(addr)).build(); } - private static Ipv6 convertFromBinary(Ipv6Binary address) { - return new Ipv6Builder().setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address.getIpv6Binary().getValue())) - .build(); - } - private static Pair, Address> convertToBinary(Address addr) { Address convAddr = null; Class convType = null; @@ -808,6 +839,81 @@ public final class LispAddressUtil { return new ImmutablePair, Address>(convType, convAddr); } + public static Eid convertToBinary(Eid eid) { + Pair, Address> converted = convertToBinary(eid.getAddress()); + if (converted.getRight() == null) { + return eid; + } + EidBuilder eb = new EidBuilder(eid); + eb.setAddressType(converted.getLeft()); + eb.setAddress(converted.getRight()); + return eb.build(); + } + + public static Rloc convertToBinary(Rloc rloc) { + Pair, Address> converted = convertToBinary(rloc.getAddress()); + if (converted.getRight() == null) { + return rloc; + } + RlocBuilder rb = new RlocBuilder(rloc); + rb.setAddressType(converted.getLeft()); + rb.setAddress(converted.getRight()); + return rb.build(); + } + + /** + * Converts the {@link InetAddress} into Ipv4 or Ipv6 {@link IpAddressBinary}. If null parameter is passed, method + * returns the Ipv4 loopback address (127.0.0.1). + * + * @param inetAddress Any Ipv4 or Ipv6 InetAddress. + * @return The converted Ipv4 or Ipv6 IpAddressBinary, or Ipv4 loopback address (127.0.0.1) if null is passed. + */ + public static IpAddressBinary addressBinaryFromInet(InetAddress inetAddress) { + if (inetAddress == null) { + inetAddress = Inet4Address.getLoopbackAddress(); + } + + if (inetAddress instanceof Inet4Address) { + return new IpAddressBinary(new Ipv4AddressBinary(inetAddress.getAddress())); + } else if (inetAddress instanceof Inet6Address) { + return new IpAddressBinary(new Ipv6AddressBinary(inetAddress.getAddress())); + } + 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( + prefix.getIpv4AddressBinary().getValue(), + 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( + prefix.getIpv6AddressBinary().getValue(), + prefix.getIpv6MaskLength().toJava())).build(); + } + + private static Ipv4 convertFromBinary(Ipv4Binary address) { + return new Ipv4Builder().setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address.getIpv4Binary().getValue())) + .build(); + } + + private static Ipv6 convertFromBinary(Ipv6Binary address) { + return new Ipv6Builder().setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address.getIpv6Binary().getValue())) + .build(); + } + private static Pair, Address> convertFromBinary(Address addr) { Address convAddr = null; Class convType = null; @@ -827,17 +933,6 @@ public final class LispAddressUtil { return new ImmutablePair, Address>(convType, convAddr); } - public static Eid convertToBinary(Eid eid) { - Pair, Address> converted = convertToBinary(eid.getAddress()); - if (converted.getRight() == null) { - return eid; - } - EidBuilder eb = new EidBuilder(eid); - eb.setAddressType(converted.getLeft()); - eb.setAddress(converted.getRight()); - return eb.build(); - } - public static Eid convertFromBinary(Eid eid) { Pair, Address> converted = convertFromBinary(eid.getAddress()); if (converted.getRight() == null) { @@ -849,17 +944,6 @@ public final class LispAddressUtil { return eb.build(); } - public static Rloc convertToBinary(Rloc rloc) { - Pair, Address> converted = convertToBinary(rloc.getAddress()); - if (converted.getRight() == null) { - return rloc; - } - RlocBuilder rb = new RlocBuilder(rloc); - rb.setAddressType(converted.getLeft()); - rb.setAddress(converted.getRight()); - return rb.build(); - } - public static Rloc convertFromBinary(Rloc rloc) { Pair, Address> converted = convertFromBinary(rloc.getAddress()); if (converted.getRight() == null) { @@ -872,10 +956,10 @@ public final class LispAddressUtil { } public static boolean addressNeedsConversionToBinary(Address address) { - if (address instanceof Ipv4 || address instanceof Ipv6 || - address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf - .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix || - address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf + if (address instanceof Ipv4 || address instanceof Ipv6 + || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf + .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix + || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) { return true; } @@ -883,33 +967,32 @@ public final class LispAddressUtil { } public static boolean addressNeedsConversionFromBinary(Address address) { - if (address instanceof Ipv4Binary || address instanceof Ipv6Binary || - address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) { + if (address instanceof Ipv4Binary || address instanceof Ipv6Binary + || address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) { return true; } return false; } - public static int compareIpAddressByteArrays(byte[] a, byte[] b) { - int i; - if (a.length < b.length) { + public static int compareIpAddressByteArrays(byte[] one, byte[] two) { + if (one.length < two.length) { return -1; - } else if (a.length > b.length) { + } else if (one.length > two.length) { return 1; - } else if (a.length == 4 && b.length == 4) { - for (i = 0; i < 4; i++) { - if (a[i] < b[i]) { + } else if (one.length == 4 && two.length == 4) { + for (int i = 0; i < 4; i++) { + if (one[i] < two[i]) { return -1; - } else if (a[i] > b[i]) { + } else if (one[i] > two[i]) { return 1; } } return 0; - } else if (a.length == 16 && b.length == 16) { - for (i = 0; i < 16; i++) { - if (a[i] < b[i]) { + } else if (one.length == 16 && two.length == 16) { + for (int i = 0; i < 16; i++) { + if (one[i] < two[i]) { return -1; - } else if (a[i] > b[i]) { + } else if (one[i] > two[i]) { return 1; } } @@ -921,9 +1004,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; }