Bugfix: try to use parent LCAF class for serializing NAT address
Change-Id: I792377de77344c0c493c77f9674ec4c55700f874
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java
index dae9e10..650d765 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java
@@ -24,8 +24,9 @@
import org.onosproject.lisp.msg.exceptions.LispReaderException;
import org.onosproject.lisp.msg.exceptions.LispWriterException;
import org.onosproject.lisp.msg.types.LispAfiAddress;
+import org.onosproject.lisp.msg.types.LispLcafAddress.LcafAddressReader;
+import org.onosproject.lisp.msg.types.LispLcafAddress.LcafAddressWriter;
import org.onosproject.lisp.msg.types.LispNatLcafAddress;
-import org.onosproject.lisp.msg.types.LispNatLcafAddress.NatLcafAddressWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -244,7 +245,9 @@
@Override
public LispInfoReply readFrom(ByteBuf byteBuf) throws LispParseError, LispReaderException {
LispInfo lispInfo = DefaultLispInfo.deserialize(byteBuf);
- LispNatLcafAddress natLcafAddress = new LispNatLcafAddress.NatLcafAddressReader().readFrom(byteBuf);
+
+ LispNatLcafAddress natLcafAddress = (LispNatLcafAddress)
+ new LcafAddressReader().readFrom(byteBuf);
return new DefaultInfoReplyBuilder()
.withIsInfoReply(lispInfo.isInfoReply())
@@ -265,9 +268,7 @@
public void writeTo(ByteBuf byteBuf, LispInfoReply message) throws LispWriterException {
DefaultLispInfo.serialize(byteBuf, message);
- // NAT LCAF address
- NatLcafAddressWriter writer = new NatLcafAddressWriter();
- writer.writeTo(byteBuf, message.getNatLcafAddress());
+ new LcafAddressWriter().writeTo(byteBuf, message.getNatLcafAddress());
}
}
}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java
index 93dfc65..30f6ad8 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispLcafAddress.java
@@ -19,13 +19,31 @@
import org.onosproject.lisp.msg.exceptions.LispParseError;
import org.onosproject.lisp.msg.exceptions.LispReaderException;
import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.types.LispAppDataLcafAddress.AppDataLcafAddressReader;
+import org.onosproject.lisp.msg.types.LispAppDataLcafAddress.AppDataLcafAddressWriter;
+import org.onosproject.lisp.msg.types.LispListLcafAddress.ListLcafAddressReader;
+import org.onosproject.lisp.msg.types.LispListLcafAddress.ListLcafAddressWriter;
+import org.onosproject.lisp.msg.types.LispNatLcafAddress.NatLcafAddressReader;
+import org.onosproject.lisp.msg.types.LispNatLcafAddress.NatLcafAddressWriter;
+import org.onosproject.lisp.msg.types.LispSegmentLcafAddress.SegmentLcafAddressReader;
+import org.onosproject.lisp.msg.types.LispSegmentLcafAddress.SegmentLcafAddressWriter;
+import org.onosproject.lisp.msg.types.LispSourceDestLcafAddress.SourceDestLcafAddressReader;
+import org.onosproject.lisp.msg.types.LispSourceDestLcafAddress.SourceDestLcafAddressWriter;
+import org.onosproject.lisp.msg.types.LispTeLcafAddress.TeLcafAddressReader;
+import org.onosproject.lisp.msg.types.LispTeLcafAddress.TeLcafAddressWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Objects;
import static com.google.common.base.MoreObjects.toStringHelper;
-import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.*;
+import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.APPLICATION_DATA;
+import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.LIST;
+import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.NAT;
+import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.SEGMENT;
+import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.SOURCE_DEST;
+import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.TRAFFIC_ENGINEERING;
+
/**
* LISP Canonical Address Formatted address class.
@@ -383,31 +401,30 @@
int index = byteBuf.readerIndex();
// LCAF type -> 8 bits
- byte lcafType = (byte) byteBuf
- .getUnsignedByte(index + LCAF_TYPE_FIELD_INDEX);
+ byte lcafType = (byte) byteBuf.getUnsignedByte(index + LCAF_TYPE_FIELD_INDEX);
if (lcafType == APPLICATION_DATA.getLispCode()) {
- return new LispAppDataLcafAddress
- .AppDataLcafAddressReader().readFrom(byteBuf);
+ return new AppDataLcafAddressReader().readFrom(byteBuf);
+ }
+
+ if (lcafType == NAT.getLispCode()) {
+ return new NatLcafAddressReader().readFrom(byteBuf);
}
if (lcafType == LIST.getLispCode()) {
- return new LispListLcafAddress
- .ListLcafAddressReader().readFrom(byteBuf);
+ return new ListLcafAddressReader().readFrom(byteBuf);
}
if (lcafType == SEGMENT.getLispCode()) {
- return new LispSegmentLcafAddress
- .SegmentLcafAddressReader().readFrom(byteBuf);
+ return new SegmentLcafAddressReader().readFrom(byteBuf);
}
if (lcafType == SOURCE_DEST.getLispCode()) {
- return new LispSourceDestLcafAddress
- .SourceDestLcafAddressReader().readFrom(byteBuf);
+ return new SourceDestLcafAddressReader().readFrom(byteBuf);
}
if (lcafType == TRAFFIC_ENGINEERING.getLispCode()) {
- return new LispTeLcafAddress.TeLcafAddressReader().readFrom(byteBuf);
+ return new TeLcafAddressReader().readFrom(byteBuf);
}
log.warn("Unsupported LCAF type, please specify a correct LCAF type");
@@ -427,23 +444,27 @@
throws LispWriterException {
switch (address.getType()) {
case APPLICATION_DATA:
- new LispAppDataLcafAddress.AppDataLcafAddressWriter()
- .writeTo(byteBuf, (LispAppDataLcafAddress) address);
+ new AppDataLcafAddressWriter().writeTo(byteBuf,
+ (LispAppDataLcafAddress) address);
+ break;
+ case NAT:
+ new NatLcafAddressWriter().writeTo(byteBuf,
+ (LispNatLcafAddress) address);
break;
case LIST:
- new LispListLcafAddress.ListLcafAddressWriter().writeTo(byteBuf,
+ new ListLcafAddressWriter().writeTo(byteBuf,
(LispListLcafAddress) address);
break;
case SEGMENT:
- new LispSegmentLcafAddress.SegmentLcafAddressWriter()
- .writeTo(byteBuf, (LispSegmentLcafAddress) address);
+ new SegmentLcafAddressWriter().writeTo(byteBuf,
+ (LispSegmentLcafAddress) address);
break;
case SOURCE_DEST:
- new LispSourceDestLcafAddress.SourceDestLcafAddressWriter()
- .writeTo(byteBuf, (LispSourceDestLcafAddress) address);
+ new SourceDestLcafAddressWriter().writeTo(byteBuf,
+ (LispSourceDestLcafAddress) address);
break;
case TRAFFIC_ENGINEERING:
- new LispTeLcafAddress.TeLcafAddressWriter().writeTo(byteBuf,
+ new TeLcafAddressWriter().writeTo(byteBuf,
(LispTeLcafAddress) address);
break;
default: