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/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispAuthenticationFactory.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispAuthenticationFactory.java
index 5866e3d..5224aee 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispAuthenticationFactory.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispAuthenticationFactory.java
@@ -35,18 +35,17 @@
*
* @param authType authentication key type
* @param authKey authentication key string
+ * @param data authentication data
* @return authentication data
*/
public byte[] createAuthenticationData(LispAuthenticationKeyEnum authType,
- String authKey) {
+ String authKey, byte[] data) {
LispMacAuthentication macAuth = new LispMacAuthentication(authType);
- int authLength;
byte[] authData;
switch (authType) {
case SHA1:
case SHA256:
- authLength = macAuth.getAuthenticationLength();
- authData = macAuth.getAuthenticationData(authKey, new byte[authLength]);
+ authData = macAuth.getAuthenticationData(authKey, data);
break;
case NONE:
case UNKNOWN:
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispMessage.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispMessage.java
new file mode 100644
index 0000000..2cc0480
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispMessage.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.lisp.msg.protocols;
+
+import io.netty.buffer.ByteBuf;
+import org.onosproject.lisp.msg.exceptions.LispWriterException;
+
+import java.net.InetSocketAddress;
+
+/**
+ * Abstract LISP message.
+ */
+public abstract class AbstractLispMessage implements LispMessage {
+
+ protected InetSocketAddress sender;
+
+ @Override
+ public LispType getType() {
+ return null;
+ }
+
+ @Override
+ public void configSender(InetSocketAddress sender) {
+ this.sender = sender;
+ }
+
+ @Override
+ public InetSocketAddress getSender() {
+ return sender;
+ }
+
+ @Override
+ public void writeTo(ByteBuf byteBuf) throws LispWriterException {
+ }
+
+ @Override
+ public Builder createBuilder() {
+ return null;
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControl.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControl.java
index 36782c2..e615810 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControl.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControl.java
@@ -34,7 +34,7 @@
/**
* Default LISP Encapsulated Control message class.
*/
-public final class DefaultLispEncapsulatedControl
+public final class DefaultLispEncapsulatedControl extends AbstractLispMessage
implements LispEncapsulatedControl {
private final boolean isSecurity;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfo.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfo.java
index 7413245..1f8f771 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfo.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfo.java
@@ -29,7 +29,7 @@
/**
* A class that contains a set of helper methods for LISP info request and reply.
*/
-public class DefaultLispInfo implements LispInfo {
+public class DefaultLispInfo extends AbstractLispMessage implements LispInfo {
protected final boolean infoReply;
protected final long nonce;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
index cb18b8f..248d118 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
@@ -33,7 +33,8 @@
/**
* Default LISP map notify message class.
*/
-public final class DefaultLispMapNotify implements LispMapNotify {
+public final class DefaultLispMapNotify extends AbstractLispMessage
+ implements LispMapNotify {
private final long nonce;
private final short keyId;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
index e044c34..a3166c1 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
@@ -36,7 +36,8 @@
/**
* Default LISP map register message class.
*/
-public final class DefaultLispMapRegister implements LispMapRegister {
+public final class DefaultLispMapRegister extends AbstractLispMessage
+ implements LispMapRegister {
private final long nonce;
private final short keyId;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
index 5773be8..fea7f52 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
@@ -32,7 +32,8 @@
/**
* Default LISP map reply message class.
*/
-public final class DefaultLispMapReply implements LispMapReply {
+public final class DefaultLispMapReply extends AbstractLispMessage
+ implements LispMapReply {
private final long nonce;
private final boolean probe;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
index 110fe3e..21b0c38 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
@@ -35,7 +35,8 @@
/**
* Default LISP map request message class.
*/
-public final class DefaultLispMapRequest implements LispMapRequest {
+public final class DefaultLispMapRequest extends AbstractLispMessage
+ implements LispMapRequest {
private final long nonce;
private final LispAfiAddress sourceEid;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java
index 4e3cdfa..77ebfb6 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessage.java
@@ -18,6 +18,8 @@
import io.netty.buffer.ByteBuf;
import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import java.net.InetSocketAddress;
+
/**
* LISP message interface.
*/
@@ -31,6 +33,22 @@
LispType getType();
/**
+ * Configures the sender's IP address with port number.
+ * Note that this information is used to make the UDP datagram packet.
+ *
+ * @param sender LISP message sender
+ */
+ void configSender(InetSocketAddress sender);
+
+ /**
+ * Obtains the sender's IP address with port number.
+ * Note that this information is used to make the UDP datagram packet.
+ *
+ * @return send's IP address with port number
+ */
+ InetSocketAddress getSender();
+
+ /**
* Writes LISP message object into communication channel.
*
* @param byteBuf byte buffer
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/authentication/LispAuthenticationTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/authentication/LispAuthenticationTest.java
index a68d529..2e994b6 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/authentication/LispAuthenticationTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/authentication/LispAuthenticationTest.java
@@ -38,10 +38,10 @@
public void testAuthData() {
String authKey = "testKey";
- byte[] noneAuthData = factory.createAuthenticationData(NONE, authKey);
- byte[] unknownAuthData = factory.createAuthenticationData(UNKNOWN, authKey);
- byte[] sha1AuthData = factory.createAuthenticationData(SHA1, authKey);
- byte[] sha256AuthData = factory.createAuthenticationData(SHA256, authKey);
+ byte[] noneAuthData = factory.createAuthenticationData(NONE, authKey, new byte[0]);
+ byte[] unknownAuthData = factory.createAuthenticationData(UNKNOWN, authKey, new byte[0]);
+ byte[] sha1AuthData = factory.createAuthenticationData(SHA1, authKey, new byte[0]);
+ byte[] sha256AuthData = factory.createAuthenticationData(SHA256, authKey, new byte[0]);
assertThat(noneAuthData, is(new byte[0]));
assertThat(unknownAuthData, is(new byte[0]));