Bugfix: handle LISP map-request message that is encapsulated in ECM

Change-Id: If7ed64f4999719d2d13cd2f5c59bcaf920157bfe
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
index 136831a..d628838 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
@@ -19,10 +19,12 @@
 import io.netty.channel.ChannelInboundHandlerAdapter;
 import io.netty.handler.timeout.IdleState;
 import io.netty.handler.timeout.IdleStateEvent;
+import org.onosproject.lisp.msg.protocols.LispEncapsulatedControl;
 import org.onosproject.lisp.msg.protocols.LispMapNotify;
 import org.onosproject.lisp.msg.protocols.LispMapRegister;
-import org.onosproject.lisp.msg.protocols.LispMapReply;
 import org.onosproject.lisp.msg.protocols.LispMapRequest;
+import org.onosproject.lisp.msg.protocols.LispMapReply;
+import org.onosproject.lisp.msg.protocols.LispMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,6 +39,11 @@
     @Override
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
 
+        // first we need to check whether this is an ECM
+        if (msg instanceof LispEncapsulatedControl) {
+            msg = extractMapRequest((LispEncapsulatedControl) msg);
+        }
+
         if (msg instanceof LispMapRegister) {
             LispMapServer mapServer = new LispMapServer();
             LispMapNotify mapNotify =
@@ -79,4 +86,14 @@
         log.warn(cause.getMessage());
         ctx.close();
     }
+
+    /**
+     * Extracts LISP message from encapsulated control message.
+     *
+     * @param ecm Encapsulated Control Message
+     * @return extracted LISP message
+     */
+    private LispMessage extractMapRequest(LispEncapsulatedControl ecm) {
+        return ecm.getControlMessage();
+    }
 }