X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Fimplementation%2Futil%2FLispNotificationHelper.java;h=56519d8a29dd0298d41f567b584f3211a4581e1c;hb=105e3c2a4c62a7ab0bb1e94cdd86923ab499f5b1;hp=398e362388f60d836f17e416d0d7145a9f66fdae;hpb=732b08045e97183fb519a8b35aaa97c3348a74d9;p=lispflowmapping.git diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java index 398e36238..56519d8a2 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java @@ -7,144 +7,147 @@ */ package org.opendaylight.lispflowmapping.implementation.util; -import java.net.Inet4Address; +import com.google.common.base.Splitter; +import com.google.common.net.InetAddresses; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; +import java.util.Iterator; 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.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.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; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationData; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress; +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.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.augmented.lisp.address.address.Ipv4Binary; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary; +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; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegister; +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.transport.address.TransportAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.EidUri; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; -import org.opendaylight.lispflowmapping.implementation.serializer.LispMessage; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.AddMapping; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.EidToLocatorRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafApplicationDataAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispAFIAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispDistinguishedNameAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.LispAddressContainer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.lcafkeyvalue.LcafKeyValueAddressAddr; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispsimpleaddress.PrimitiveAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapregisternotification.MapRegister; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapregisternotification.MapRegisterBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapreplynotification.MapReply; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapreplynotification.MapReplyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequestnotification.MapRequest; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequestnotification.MapRequestBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.transportaddress.TransportAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.transportaddress.TransportAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.EidUri; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.MappingOrigin; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.db.instance.Mapping; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.db.instance.MappingBuilder; -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.IpAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +public final class LispNotificationHelper { + protected static final Logger LOG = LoggerFactory.getLogger(LispNotificationHelper.class); + private static final Splitter COLON_SPLITTER = Splitter.on(':'); -public class LispNotificationHelper { - - public static MapRegister convertMapRegister(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRegister mapRegister) { - return new MapRegisterBuilder().setAuthenticationData(mapRegister.getAuthenticationData()) - .setEidToLocatorRecord(mapRegister.getEidToLocatorRecord()).setKeyId(mapRegister.getKeyId()).setNonce(mapRegister.getNonce()) - .setProxyMapReply(mapRegister.isProxyMapReply()).setWantMapNotify(mapRegister.isWantMapNotify()) - .setXtrSiteIdPresent(mapRegister.isXtrSiteIdPresent()).setXtrId(mapRegister.getXtrId()).setSiteId(mapRegister.getSiteId()).build(); - } - - public static MapRequest convertMapRequest(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRequest mapRequest) { - return new MapRequestBuilder().setAuthoritative(mapRequest.isAuthoritative()).setEidRecord(mapRequest.getEidRecord()) - .setItrRloc(mapRequest.getItrRloc()).setMapDataPresent(mapRequest.isMapDataPresent()).setMapReply(mapRequest.getMapReply()) - .setNonce(mapRequest.getNonce()).setPitr(mapRequest.isPitr()).setProbe(mapRequest.isProbe()).setSmr(mapRequest.isSmr()) - .setSmrInvoked(mapRequest.isSmrInvoked()).setSourceEid(mapRequest.getSourceEid()).build(); - } - - public static MapReply convertMapReply(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapReply mapReply) { - return new MapReplyBuilder().setEchoNonceEnabled(mapReply.isEchoNonceEnabled()).setEidToLocatorRecord(mapReply.getEidToLocatorRecord()) - .setNonce(mapReply.getNonce()).setProbe(mapReply.isProbe()).setSecurityEnabled(mapReply.isSecurityEnabled()).build(); - } - - public static IpAddress getIpAddressFromInetAddress(InetAddress inetAddress) { - if (inetAddress == null) { - inetAddress = InetAddress.getLoopbackAddress(); - } - if (inetAddress instanceof Inet4Address) { - return new IpAddress(new Ipv4Address(inetAddress.getHostAddress())); - } else { - return new IpAddress(new Ipv6Address(inetAddress.getHostAddress())); - } + // Utility class, should not be instantiated + private LispNotificationHelper() { } - public static InetAddress getInetAddressFromIpAddress(IpAddress ipAddress) { - InetAddress address = null; - if (ipAddress != null) { - if (ipAddress.getIpv4Address() != null) { - address = getAddressByName(ipAddress.getIpv4Address().getValue()); - } else if (ipAddress.getIpv6Address() != null) { - address = getAddressByName(ipAddress.getIpv6Address().getValue()); - } - } - if (address == null) { - address = InetAddress.getLoopbackAddress(); - } - return address; - } - - public static TransportAddress getTransportAddressFromContainer(LispAddressContainer container) { + public static TransportAddress getTransportAddressFromRloc(Rloc rloc) { TransportAddressBuilder tab = new TransportAddressBuilder(); - LispAFIAddress address = LispAFIConvertor.toAFI(container); - if (address instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.ipv4.Ipv4Address) { - tab.setIpAddress(IpAddressBuilder.getDefaultInstance(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.ipv4.Ipv4Address) address).getIpv4Address().getValue())); + 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) { + 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) { + 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 Ipv4Binary) { + Ipv4AddressBinary ipv6 = ((Ipv4Binary) address).getIpv4Binary(); + tab.setIpAddress(new IpAddressBinary(ipv6)); + tab.setPort(new PortNumber(LispMessage.PORT_NUM)); + } else if (address instanceof Ipv6Binary) { + Ipv6AddressBinary ipv6 = ((Ipv6Binary) address).getIpv6Binary(); + tab.setIpAddress(new IpAddressBinary(ipv6)); tab.setPort(new PortNumber(LispMessage.PORT_NUM)); - } else if (address instanceof LcafKeyValueAddressAddr) { - PrimitiveAddress primitiveAddress = ((LcafKeyValueAddressAddr) address).getValue().getPrimitiveAddress(); - if (primitiveAddress instanceof LispDistinguishedNameAddress) { - String value = ((LispDistinguishedNameAddress) primitiveAddress).getDistinguishedName(); - String ip = value.split(":")[0]; - int port = Integer.valueOf(value.split(":")[1]); - tab.setIpAddress(IpAddressBuilder.getDefaultInstance(ip)); + } else if (address instanceof KeyValueAddress) { + SimpleAddress sa = ((KeyValueAddress) address).getKeyValueAddress().getValue(); + if (sa.getDistinguishedNameType() != null) { + final Iterator it = COLON_SPLITTER.split(sa.getDistinguishedNameType().getValue()).iterator(); + String ip = it.next(); + int port = Integer.valueOf(it.next()); + + tab.setIpAddress(IpAddressBinaryBuilder.getDefaultInstance(InetAddresses.forString(ip).getAddress())); tab.setPort(new PortNumber(port)); } } else if (address instanceof DistinguishedName) { DistinguishedName dname = (DistinguishedName) address; - String value = dname.getDistinguishedName(); - String ip = value.split(":")[0]; - int port = Integer.valueOf(value.split(":")[1]); + final Iterator it = COLON_SPLITTER.split(dname.getDistinguishedName().getValue()).iterator(); + 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 LcafApplicationDataAddress) { - LcafApplicationDataAddress appData = (LcafApplicationDataAddress) address; - tab.setIpAddress(IpAddressBuilder.getDefaultInstance(((org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispsimpleaddress.primitiveaddress.Ipv4) appData.getAddress().getPrimitiveAddress()).getIpv4Address() - .getIpv4Address().getValue())); - tab.setPort(new PortNumber(appData.getLocalPortLow())); + } else if (address instanceof ApplicationData) { + ApplicationData appData = (ApplicationData) address; + tab.setIpAddress(getIpAddressBinary(appData.getApplicationData().getAddress().getIpAddress())); + tab.setPort(new PortNumber(appData.getApplicationData().getLocalPortLow())); } return tab.build(); } - public static InetAddress getAddressByName(String IPAddress) { + public static InetAddress getAddressByName(String ipAddress) { try { - InetAddress address = InetAddress.getByName(IPAddress); + InetAddress address = InetAddress.getByName(ipAddress); return address; } catch (UnknownHostException e) { + LOG.debug("Unknown host {}", ipAddress, e); return null; } } public static List getMapping(AddMapping mapRegisterNotification) { List mappings = new ArrayList(); - for (int i=0; i getSiteId(MapRegister mapRegister) { + if (mapRegister.isXtrSiteIdPresent()) { + List siteIds = new ArrayList(); + SiteId siteId = new SiteId(mapRegister.getSiteId()); + siteIds.add(siteId); + return siteIds; + } else { + 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; + } }