Fix the LispMessageEncoder to reply with UDP message sender
- Add AbstractLispMessage to store sender IP address per message
- Fix the LispMacAuthentication class to accept byte array as input
- Rename LispMessageEncoderTest class
- Try to use MessageToMessageEncoder to result in UDP message
Change-Id: I977302cdadf5c96c60c889be291ad5d90e3bc7cf
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 d628838..6c723a6 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,6 +19,7 @@
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
+import io.netty.util.ReferenceCountUtil;
import org.onosproject.lisp.msg.protocols.LispEncapsulatedControl;
import org.onosproject.lisp.msg.protocols.LispMapNotify;
import org.onosproject.lisp.msg.protocols.LispMapRegister;
@@ -46,10 +47,12 @@
if (msg instanceof LispMapRegister) {
LispMapServer mapServer = new LispMapServer();
- LispMapNotify mapNotify =
- (LispMapNotify) mapServer.processMapRegister((LispMapRegister) msg);
+ LispMapNotify mapNotify = mapServer.processMapRegister((LispMapRegister) msg);
- // TODO: deserialize mapNotify message and write to channel
+ // try to remove the received map-register message from buffer
+ ReferenceCountUtil.release(msg);
+
+ ctx.writeAndFlush(mapNotify);
}
if (msg instanceof LispMapRequest) {
@@ -57,7 +60,7 @@
LispMapReply mapReply =
(LispMapReply) mapResolver.processMapRequest((LispMapRequest) msg);
- // TODO: deserialize mapReply message and write to channel
+ // TODO: serialize mapReply message and write to channel
}
}
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
index d021a8f..9f6ab35 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.lisp.ctl;
+import org.onosproject.lisp.msg.protocols.LispMapReply;
import org.onosproject.lisp.msg.protocols.LispMessage;
/**
@@ -23,8 +24,8 @@
*/
public class LispMapResolver {
- public LispMessage processMapRequest(LispMessage message) {
- // TODO: need to implement map-register message processing logic
+ public LispMapReply processMapRequest(LispMessage message) {
+ // TODO: need to implement map-request message processing logic
return null;
}
}
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
index 409d360..7c82672 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.lisp.ctl;
+import org.onosproject.lisp.msg.protocols.LispMapNotify;
import org.onosproject.lisp.msg.protocols.LispMessage;
/**
@@ -23,8 +24,8 @@
*/
public class LispMapServer {
- public LispMessage processMapRegister(LispMessage message) {
- // TODO: need to implement map-request message processing logic
+ public LispMapNotify processMapRegister(LispMessage message) {
+ // TODO: need to implement map-register message processing logic
return null;
}
}
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
index 94668d3..75a6ab8 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
@@ -36,6 +36,7 @@
ByteBuf byteBuf = msg.content();
LispMessageReader reader = LispMessageReaderFactory.getReader(byteBuf);
LispMessage message = (LispMessage) reader.readFrom(byteBuf);
+ message.configSender(msg.sender());
list.add(message);
}
}
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
index 3ddbf64..562ccf9 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
@@ -17,8 +17,10 @@
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.MessageToByteEncoder;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.handler.codec.MessageToMessageEncoder;
import org.onosproject.lisp.msg.protocols.LispMessage;
import java.util.List;
@@ -27,13 +29,14 @@
* Encode a LISP message for output into a ByteBuffer,
* for use in a netty pipeline.
*/
-public class LispMessageEncoder extends MessageToByteEncoder {
+public class LispMessageEncoder extends MessageToMessageEncoder {
@Override
- protected void encode(ChannelHandlerContext ctx, Object msg,
- ByteBuf out) throws Exception {
+ protected void encode(ChannelHandlerContext ctx, Object msg, List out) throws Exception {
if (!(msg instanceof List)) {
- ((LispMessage) msg).writeTo(out);
+ ByteBuf byteBuf = Unpooled.buffer();
+ ((LispMessage) msg).writeTo(byteBuf);
+ out.add(new DatagramPacket(byteBuf, ((LispMessage) msg).getSender()));
return;
}
@@ -41,7 +44,9 @@
for (LispMessage message : msgList) {
if (message != null) {
- message.writeTo(out);
+ ByteBuf byteBuf = Unpooled.buffer();
+ message.writeTo(byteBuf);
+ out.add(new DatagramPacket(byteBuf, ((LispMessage) msg).getSender()));
}
}
}