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();
+ }
}
diff --git a/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/LispMessageDecoderTest.java b/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/LispMessageDecoderTest.java
index 5e9be94..b808ef1 100644
--- a/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/LispMessageDecoderTest.java
+++ b/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/LispMessageDecoderTest.java
@@ -52,7 +52,7 @@
// fill up message payload
// second byte denotes the number of RLOCs
- byte[] messageData = {0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+ byte[] messageData = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
byte[] eidData = {0x0, 0x1, 0x0, 0x0, 0x0, 0x0};
byte[] rlocData = {0x0, 0x1, 0x0, 0x0, 0x0, 0x0};
buffer.writeBytes(messageData);