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();
+ }
}