From: Yair Zinger Date: Sun, 31 Aug 2014 15:00:44 +0000 (+0300) Subject: Added support for receiving map reply on XTR port X-Git-Tag: release/helium~10 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F76%2F10576%2F1;p=lispflowmapping.git Added support for receiving map reply on XTR port Signed-off-by: Yair Zinger --- diff --git a/mappingservice/implementation/pom.xml b/mappingservice/implementation/pom.xml index 5a4655230..e0f641b51 100644 --- a/mappingservice/implementation/pom.xml +++ b/mappingservice/implementation/pom.xml @@ -54,6 +54,7 @@ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplymessage, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification, + org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplynotification, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.transportaddress, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924, 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 33759f2da..bdc07cc49 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 @@ -23,6 +23,8 @@ import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispad import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.PrimitiveAddress; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegister; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder; +import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplynotification.MapReply; +import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplynotification.MapReplyBuilder; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequest; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequestBuilder; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.transportaddress.TransportAddress; @@ -49,6 +51,11 @@ public class LispNotificationHelper { .setSmrInvoked(mapRequest.isSmrInvoked()).setSourceEid(mapRequest.getSourceEid()).build(); } + public static MapReply convertMapReply(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.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(); diff --git a/mappingservice/southbound/pom.xml b/mappingservice/southbound/pom.xml index 115e1f903..a4314c6ed 100644 --- a/mappingservice/southbound/pom.xml +++ b/mappingservice/southbound/pom.xml @@ -37,6 +37,7 @@ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapnotifymessage, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplymessage, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestmessage, + org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplynotification, com.google.common.net, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924, org.opendaylight.controller.sal.core, diff --git a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispXtrSouthboundService.java b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispXtrSouthboundService.java index eeef317d8..7e7b99021 100644 --- a/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispXtrSouthboundService.java +++ b/mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispXtrSouthboundService.java @@ -15,12 +15,15 @@ import java.nio.ByteBuffer; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.lispflowmapping.implementation.serializer.LispMessage; import org.opendaylight.lispflowmapping.implementation.serializer.LispMessageEnum; +import org.opendaylight.lispflowmapping.implementation.serializer.MapReplySerializer; import org.opendaylight.lispflowmapping.implementation.serializer.MapRequestSerializer; import org.opendaylight.lispflowmapping.implementation.util.ByteUtil; import org.opendaylight.lispflowmapping.implementation.util.LispNotificationHelper; import org.opendaylight.lispflowmapping.implementation.util.MapRequestUtil; import org.opendaylight.lispflowmapping.southbound.lisp.exception.LispMalformedPacketException; +import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapReply; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest; +import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.XtrReplyMappingBuilder; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.XtrRequestMappingBuilder; import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.transportaddress.TransportAddressBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; @@ -41,6 +44,9 @@ public class LispXtrSouthboundService implements ILispSouthboundService { if (lispType == LispMessageEnum.MapRequest) { logger.trace("Received packet of type MapRequest for xTR"); handleMapRequest(inBuffer); + } else if (lispType == LispMessageEnum.MapReply){ + logger.trace("Received packet of type MapReply for xTR"); + handleMapReply(inBuffer); } else { logger.warn("Received unknown packet type"); } @@ -70,4 +76,23 @@ public class LispXtrSouthboundService implements ILispSouthboundService { throw new LispMalformedPacketException("Couldn't deserialize Map-Request (len=" + inBuffer.capacity() + ")", re); } } + + private void handleMapReply(ByteBuffer buffer) { + try { + MapReply reply = MapReplySerializer.getInstance().deserialize(buffer); + + XtrReplyMappingBuilder replyMappingBuilder = new XtrReplyMappingBuilder(); + replyMappingBuilder.setMapReply(LispNotificationHelper.convertMapReply(reply)); + + if (notificationProvider != null) { + notificationProvider.publish(replyMappingBuilder.build()); + logger.trace("MapReply was published!"); + } else { + logger.warn("Notification Provider is null!"); + } + } catch (RuntimeException re) { + throw new LispMalformedPacketException("Couldn't deserialize Map-Reply (len=" + buffer.capacity() + ")", re); + } + + } } diff --git a/mappingservice/yangmodel/pom.xml b/mappingservice/yangmodel/pom.xml index 28747e51c..8eeac61d2 100755 --- a/mappingservice/yangmodel/pom.xml +++ b/mappingservice/yangmodel/pom.xml @@ -42,6 +42,7 @@ org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapnotifymessage, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification, + org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplynotification, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapreplymessage, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest, org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestmessage, diff --git a/mappingservice/yangmodel/src/main/yang/mappingservice.yang b/mappingservice/yangmodel/src/main/yang/mappingservice.yang index 35334a3ea..0cebd9cff 100755 --- a/mappingservice/yangmodel/src/main/yang/mappingservice.yang +++ b/mappingservice/yangmodel/src/main/yang/mappingservice.yang @@ -534,6 +534,14 @@ } + grouping MapReplyNotification { + container MapReply { + uses MapReply; + } + + } + + rpc sendMapNotify { input { uses MapNotifyMessage; @@ -564,6 +572,9 @@ uses MapRequestNotification; } + notification xtrReplyMapping { + uses MapReplyNotification; + } }