Added support for receiving map reply on XTR port 76/10576/1
authorYair Zinger <yair.zinger@contextream.com>
Sun, 31 Aug 2014 15:00:44 +0000 (18:00 +0300)
committerDavid Goldberg <david.goldberg@contextream.com>
Mon, 1 Sep 2014 13:36:31 +0000 (16:36 +0300)
Signed-off-by: Yair Zinger <yair.zinger@contextream.com>
mappingservice/implementation/pom.xml
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/LispNotificationHelper.java
mappingservice/southbound/pom.xml
mappingservice/southbound/src/main/java/org/opendaylight/lispflowmapping/southbound/lisp/LispXtrSouthboundService.java
mappingservice/yangmodel/pom.xml
mappingservice/yangmodel/src/main/yang/mappingservice.yang

index 5a46552300f8097698002cfbf28646b487f0c42f..e0f641b51284dccbdce1c00853b76af31c8754b1 100644 (file)
@@ -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,
index 33759f2dabc1ebb676d97bfc6becae69d71fba12..bdc07cc49f56396988f7489b7ff4bf466ba1e21b 100644 (file)
@@ -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();
index 115e1f903815471d123068f94abf56cd497ac1f7..a4314c6ed8d8223573f80a758238160b6f530660 100644 (file)
@@ -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,
index eeef317d89307c53453bdf591e3919236ebf48a7..7e7b99021693243bbdfea71974c17b7141f79647 100644 (file)
@@ -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);
+        }
+
+    }
 }
index 28747e51c42007765747c78a402fb953429c02d3..8eeac61d2b8fe3f8b4afc00fb4397dba771d8255 100755 (executable)
@@ -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,
index 35334a3ea6da9625949ea95ecde5e4b6d15e1278..0cebd9cff1a8225ed4cd2b9684a1a2fae0eb4cf5 100755 (executable)
        
     }
     
+    grouping MapReplyNotification {
+       container MapReply {
+               uses MapReply;
+       }
+    
+    }
+    
+    
     rpc sendMapNotify {
        input {
                uses MapNotifyMessage;
        uses MapRequestNotification;
     }
     
+    notification xtrReplyMapping {
+       uses MapReplyNotification;
+    }
 }