[ONOS-5945] Initial implementation of MapReferral message type
1. Add skeleton code of LispMapReferral message type
2. Refactor LispLocatorRecord and LispMapRecord
Change-Id: Icbe6243e5892a0bfb784ba3c0daa22ab73c7e977
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMapResolver.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMapResolver.java
index 2436dd7..1db6559 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMapResolver.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMapResolver.java
@@ -23,7 +23,7 @@
import org.onosproject.lisp.msg.protocols.LispEidRecord;
import org.onosproject.lisp.msg.protocols.LispEncapsulatedControl;
import org.onosproject.lisp.msg.protocols.LispEncapsulatedControl.EcmBuilder;
-import org.onosproject.lisp.msg.protocols.LispLocatorRecord;
+import org.onosproject.lisp.msg.protocols.LispLocator;
import org.onosproject.lisp.msg.protocols.LispMapRecord;
import org.onosproject.lisp.msg.protocols.LispMapRecord.MapRecordBuilder;
import org.onosproject.lisp.msg.protocols.LispMapReply.ReplyBuilder;
@@ -194,7 +194,7 @@
MapRecordBuilder recordBuilder = new DefaultMapRecordBuilder();
recordBuilder.withRecordTtl(MAP_REPLY_RECORD_TTL);
recordBuilder.withLocators(Lists.newArrayList());
- recordBuilder.withAuthoritative(false);
+ recordBuilder.withIsAuthoritative(false);
recordBuilder.withMapVersionNumber(MAP_VERSION_NUMBER);
recordBuilder.withAction(LispMapReplyAction.NativelyForward);
@@ -239,7 +239,7 @@
for (LispMapRecord mapRecord : mapRecords) {
// we only select the first locator record in all cases...
- LispLocatorRecord locatorRecord = mapRecord.getLocators().get(0);
+ LispLocator locatorRecord = mapRecord.getLocators().get(0);
if (locatorRecord != null) {
addresses.add(new InetSocketAddress(((LispIpAddress)
locatorRecord.getLocatorAfi()).getAddress()
diff --git a/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispControllerImplTest.java b/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispControllerImplTest.java
index 106770a..09e0bd1 100644
--- a/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispControllerImplTest.java
+++ b/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispControllerImplTest.java
@@ -340,7 +340,7 @@
return builder1
.withRecordTtl(100)
- .withAuthoritative(true)
+ .withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
diff --git a/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispMappingDatabaseTest.java b/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispMappingDatabaseTest.java
index 6f6c603..b929e25 100644
--- a/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispMappingDatabaseTest.java
+++ b/protocols/lisp/ctl/src/test/java/org/onosproject/lisp/ctl/impl/LispMappingDatabaseTest.java
@@ -19,11 +19,11 @@
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.IpAddress;
+import org.onosproject.lisp.msg.protocols.DefaultLispLocator.DefaultLocatorBuilder;
import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.DefaultMapRecordBuilder;
import org.onosproject.lisp.msg.protocols.LispEidRecord;
-import org.onosproject.lisp.msg.protocols.LispLocatorRecord;
+import org.onosproject.lisp.msg.protocols.LispLocator;
import org.onosproject.lisp.msg.protocols.LispMapRecord;
-import org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.DefaultLocatorRecordBuilder;
import org.onosproject.lisp.msg.protocols.LispMapRecord.MapRecordBuilder;
import org.onosproject.lisp.msg.types.LispIpv4Address;
@@ -37,53 +37,73 @@
*/
public class LispMappingDatabaseTest {
+ private static final String LOCATOR_IP_1_1 = "123.1.1.1";
+ private static final String LOCATOR_IP_1_2 = "123.1.1.2";
+ private static final String LOCATOR_IP_1_3 = "123.1.1.3";
+
+ private static final String LOCATOR_IP_2_1 = "123.2.1.1";
+ private static final String LOCATOR_IP_2_2 = "123.2.1.2";
+
+ private static final String LOCATOR_IP_3_1 = "123.3.1.1";
+
+ private static final String EID_IP_1 = "10.1.1.1";
+ private static final String EID_IP_2 = "10.1.2.0";
+ private static final String EID_IP_3 = "10.2.0.0";
+
+ private static final String EID_IP_PREFIX_1_32 = "10.2.1.1";
+ private static final String EID_IP_PREFIX_1_24 = "10.2.1.0";
+ private static final String EID_IP_PREFIX_1_16 = "10.2.0.0";
+
+ private static final String EID_IP_PREFIX_2_32 = "10.1.2.1";
+ private static final String EID_IP_PREFIX_2_24 = "10.1.2.0";
+
final LispMappingDatabase mapDb = LispMappingDatabase.getInstance();
@Before
public void setup() {
byte cidr1 = (byte) 32;
- LispIpv4Address eid1 = new LispIpv4Address(IpAddress.valueOf("10.1.1.1"));
+ LispIpv4Address eid1 = new LispIpv4Address(IpAddress.valueOf(EID_IP_1));
LispEidRecord eidRecord1 = new LispEidRecord(cidr1, eid1);
- LispIpv4Address locator11 = new LispIpv4Address(IpAddress.valueOf("123.1.1.1"));
- LispIpv4Address locator12 = new LispIpv4Address(IpAddress.valueOf("123.1.1.2"));
- LispIpv4Address locator13 = new LispIpv4Address(IpAddress.valueOf("123.1.1.3"));
+ LispIpv4Address locator11 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_1_1));
+ LispIpv4Address locator12 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_1_2));
+ LispIpv4Address locator13 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_1_3));
- LispLocatorRecord locatorRecord11 = new DefaultLocatorRecordBuilder()
- .withLocatorAfi(locator11).build();
- LispLocatorRecord locatorRecord12 = new DefaultLocatorRecordBuilder()
- .withLocatorAfi(locator12).build();
- LispLocatorRecord locatorRecord13 = new DefaultLocatorRecordBuilder()
- .withLocatorAfi(locator13).build();
- List<LispLocatorRecord> locatorRecords1 =
+ LispLocator locatorRecord11 = new DefaultLocatorBuilder()
+ .withLocatorAfi(locator11).build();
+ LispLocator locatorRecord12 = new DefaultLocatorBuilder()
+ .withLocatorAfi(locator12).build();
+ LispLocator locatorRecord13 = new DefaultLocatorBuilder()
+ .withLocatorAfi(locator13).build();
+ List<LispLocator> locatorRecords1 =
ImmutableList.of(locatorRecord11, locatorRecord12, locatorRecord13);
byte cidr2 = (byte) 24;
- LispIpv4Address eid2 = new LispIpv4Address(IpAddress.valueOf("10.1.2.0"));
+ LispIpv4Address eid2 = new LispIpv4Address(IpAddress.valueOf(EID_IP_2));
LispEidRecord eidRecord2 = new LispEidRecord(cidr2, eid2);
- LispIpv4Address locator21 = new LispIpv4Address(IpAddress.valueOf("123.2.1.1"));
- LispIpv4Address locator22 = new LispIpv4Address(IpAddress.valueOf("123.2.1.2"));
+ LispIpv4Address locator21 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_2_1));
+ LispIpv4Address locator22 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_2_2));
- LispLocatorRecord locatorRecord21 = new DefaultLocatorRecordBuilder()
- .withLocatorAfi(locator21).build();
- LispLocatorRecord locatorRecord22 = new DefaultLocatorRecordBuilder()
- .withLocatorAfi(locator22).build();
+ LispLocator locatorRecord21 = new DefaultLocatorBuilder()
+ .withLocatorAfi(locator21).build();
+ LispLocator locatorRecord22 = new DefaultLocatorBuilder()
+ .withLocatorAfi(locator22).build();
- List<LispLocatorRecord> locatorRecords2 =
- ImmutableList.of(locatorRecord21, locatorRecord22);
+ List<LispLocator> locatorRecords2 =
+ ImmutableList.of(locatorRecord21, locatorRecord22);
byte cidr3 = (byte) 16;
- LispIpv4Address eid3 = new LispIpv4Address(IpAddress.valueOf("10.2.0.0"));
+ LispIpv4Address eid3 = new LispIpv4Address(IpAddress.valueOf(EID_IP_3));
LispEidRecord eidRecord3 = new LispEidRecord(cidr3, eid3);
- LispIpv4Address locator31 = new LispIpv4Address(IpAddress.valueOf("123.3.1.1"));
+ LispIpv4Address locator31 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_3_1));
- LispLocatorRecord locatorRecord31 = new DefaultLocatorRecordBuilder()
- .withLocatorAfi(locator31).build();
+ LispLocator locatorRecord31 = new DefaultLocatorBuilder()
+ .withLocatorAfi(locator31).build();
- List<LispLocatorRecord> locatorRecords3 = ImmutableList.of(locatorRecord31);
+ List<LispLocator> locatorRecords3 = ImmutableList.of(locatorRecord31);
MapRecordBuilder builder1 = new DefaultMapRecordBuilder();
builder1.withMaskLength(cidr1);
@@ -114,54 +134,54 @@
@Test
public void test32MaskRange() {
byte cidr32 = (byte) 32;
- LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf("10.1.1.1"));
+ LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf(EID_IP_1));
LispEidRecord record = new LispEidRecord(cidr32, eid);
LispMapRecord mapRecord = mapDb.getMapRecordByEidRecord(record, true);
assertThat("Failed to fetch the RLOCs with /32 EID record",
- mapRecord.getLocatorCount(), is(3));
+ mapRecord.getLocatorCount(), is(3));
}
@Test
public void test24MaskRange() {
byte cidr32 = (byte) 32;
- LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf("10.1.2.1"));
+ LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_2_32));
LispEidRecord record32 = new LispEidRecord(cidr32, eid);
LispMapRecord mapRecord32 = mapDb.getMapRecordByEidRecord(record32, true);
byte cidr24 = (byte) 24;
- LispIpv4Address eid24 = new LispIpv4Address(IpAddress.valueOf("10.1.2.0"));
+ LispIpv4Address eid24 = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_2_24));
LispEidRecord record24 = new LispEidRecord(cidr24, eid24);
LispMapRecord mapRecord24 = mapDb.getMapRecordByEidRecord(record24, true);
assertThat("Failed to fetch the RLOCs with /32 EID record",
- mapRecord32.getLocatorCount(), is(2));
+ mapRecord32.getLocatorCount(), is(2));
assertThat("Failed to fetch the RLOCs with /24 EID record",
- mapRecord24.getLocatorCount(), is(2));
+ mapRecord24.getLocatorCount(), is(2));
}
@Test
public void test16MaskRange() {
byte cidr32 = (byte) 32;
- LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf("10.2.1.1"));
+ LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_1_32));
LispEidRecord record32 = new LispEidRecord(cidr32, eid);
LispMapRecord mapRecord32 = mapDb.getMapRecordByEidRecord(record32, true);
byte cidr24 = (byte) 24;
- LispIpv4Address eid24 = new LispIpv4Address(IpAddress.valueOf("10.2.1.0"));
+ LispIpv4Address eid24 = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_1_24));
LispEidRecord record24 = new LispEidRecord(cidr24, eid24);
LispMapRecord mapRecord24 = mapDb.getMapRecordByEidRecord(record24, true);
byte cidr16 = (byte) 16;
- LispIpv4Address eid16 = new LispIpv4Address(IpAddress.valueOf("10.2.0.0"));
+ LispIpv4Address eid16 = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_1_16));
LispEidRecord record16 = new LispEidRecord(cidr16, eid16);
LispMapRecord mapRecord16 = mapDb.getMapRecordByEidRecord(record16, true);
assertThat("Failed to fetch the RLOCs with /32 EID record",
- mapRecord32.getLocatorCount(), is(1));
+ mapRecord32.getLocatorCount(), is(1));
assertThat("Failed to fetch the RLOCs with /24 EID record",
- mapRecord24.getLocatorCount(), is(1));
+ mapRecord24.getLocatorCount(), is(1));
assertThat("Failed to fetch the RLOCs with /16 EID record",
- mapRecord16.getLocatorCount(), is(1));
+ mapRecord16.getLocatorCount(), is(1));
}
}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispRecord.java
new file mode 100644
index 0000000..3126cc8
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispRecord.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2017-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 org.onosproject.lisp.msg.types.LispAfiAddress;
+
+/**
+ * Abstract LISP record class that provide default implementations.
+ */
+public abstract class AbstractLispRecord implements LispRecord {
+
+ protected final int recordTtl;
+ protected final byte maskLength;
+ protected final LispMapReplyAction action;
+ protected final boolean authoritative;
+ protected final short mapVersionNumber;
+ protected final LispAfiAddress eidPrefixAfi;
+
+ protected AbstractLispRecord(int recordTtl, byte maskLength,
+ LispMapReplyAction action, boolean authoritative,
+ short mapVersionNumber, LispAfiAddress eidPrefixAfi) {
+ this.recordTtl = recordTtl;
+ this.maskLength = maskLength;
+ this.action = action;
+ this.authoritative = authoritative;
+ this.mapVersionNumber = mapVersionNumber;
+ this.eidPrefixAfi = eidPrefixAfi;
+ }
+
+ @Override
+ public int getRecordTtl() {
+ return recordTtl;
+ }
+
+ @Override
+ public byte getMaskLength() {
+ return maskLength;
+ }
+
+ @Override
+ public LispMapReplyAction getAction() {
+ return action;
+ }
+
+ @Override
+ public boolean isAuthoritative() {
+ return authoritative;
+ }
+
+ @Override
+ public short getMapVersionNumber() {
+ return mapVersionNumber;
+ }
+
+ @Override
+ public LispAfiAddress getEidPrefixAfi() {
+ return eidPrefixAfi;
+ }
+
+ public static class AbstractRecordBuilder<T> implements RecordBuilder<T> {
+
+ protected int recordTtl;
+ protected byte maskLength;
+ protected LispMapReplyAction action;
+ protected boolean authoritative;
+ protected short mapVersionNumber;
+ protected LispAfiAddress eidPrefixAfi;
+
+ @Override
+ public T withRecordTtl(int recordTtl) {
+ this.recordTtl = recordTtl;
+ return (T) this;
+ }
+
+ @Override
+ public T withMaskLength(byte maskLength) {
+ this.maskLength = maskLength;
+ return (T) this;
+ }
+
+ @Override
+ public T withAction(LispMapReplyAction action) {
+ this.action = action;
+ return (T) this;
+ }
+
+ @Override
+ public T withIsAuthoritative(boolean authoritative) {
+ this.authoritative = authoritative;
+ return (T) this;
+ }
+
+ @Override
+ public T withMapVersionNumber(short mapVersionNumber) {
+ this.mapVersionNumber = mapVersionNumber;
+ return (T) this;
+ }
+
+ @Override
+ public T withEidPrefixAfi(LispAfiAddress prefix) {
+ this.eidPrefixAfi = prefix;
+ return (T) this;
+ }
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispGenericLocator.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispGenericLocator.java
new file mode 100644
index 0000000..2936b4b
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispGenericLocator.java
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2017-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 com.google.common.base.Objects;
+import io.netty.buffer.ByteBuf;
+import org.onlab.util.ByteOperator;
+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.LispAfiAddress;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * A default implementation class of LISP generic locator interface.
+ */
+public class DefaultLispGenericLocator implements LispGenericLocator {
+
+ protected final byte priority;
+ protected final byte weight;
+ protected final byte multicastPriority;
+ protected final byte multicastWeight;
+ protected final boolean localLocator;
+ protected final boolean rlocProbed;
+ protected final boolean routed;
+ protected final LispAfiAddress locatorAfi;
+
+ private static final int LOCAL_LOCATOR_SHIFT_BIT = 2;
+ private static final int PROBED_SHIFT_BIT = 1;
+
+ private static final int ENABLE_BIT = 1;
+ private static final int DISABLE_BIT = 0;
+
+ private static final int SKIP_UNUSED_FLAG_LENGTH = 1;
+ private static final int LOCAL_LOCATOR_INDEX = 2;
+ private static final int RLOC_PROBED_INDEX = 1;
+ private static final int ROUTED_INDEX = 0;
+
+ /**
+ * A private constructor that protects object instantiation from external.
+ *
+ * @param priority uni-cast priority
+ * @param weight uni-cast weight
+ * @param multicastPriority multi-cast priority
+ * @param multicastWeight multi-cast weight
+ * @param localLocator local locator flag
+ * @param rlocProbed RLOC probed flag
+ * @param routed routed flag
+ * @param locatorAfi locator AFI
+ */
+ protected DefaultLispGenericLocator(byte priority, byte weight,
+ byte multicastPriority,
+ byte multicastWeight,
+ boolean localLocator, boolean rlocProbed,
+ boolean routed, LispAfiAddress locatorAfi) {
+ this.priority = priority;
+ this.weight = weight;
+ this.multicastPriority = multicastPriority;
+ this.multicastWeight = multicastWeight;
+ this.localLocator = localLocator;
+ this.rlocProbed = rlocProbed;
+ this.routed = routed;
+ this.locatorAfi = locatorAfi;
+ }
+
+ @Override
+ public byte getPriority() {
+ return priority;
+ }
+
+ @Override
+ public byte getWeight() {
+ return weight;
+ }
+
+ @Override
+ public byte getMulticastPriority() {
+ return multicastPriority;
+ }
+
+ @Override
+ public byte getMulticastWeight() {
+ return multicastWeight;
+ }
+
+ @Override
+ public boolean isLocalLocator() {
+ return localLocator;
+ }
+
+ @Override
+ public boolean isRlocProbed() {
+ return rlocProbed;
+ }
+
+ @Override
+ public boolean isRouted() {
+ return routed;
+ }
+
+ @Override
+ public LispAfiAddress getLocatorAfi() {
+ return locatorAfi;
+ }
+
+ @Override
+ public void writeTo(ByteBuf byteBuf) throws LispWriterException {
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this)
+ .add("priority", priority)
+ .add("weight", weight)
+ .add("multi-cast priority", multicastPriority)
+ .add("multi-cast weight", multicastWeight)
+ .add("local locator", localLocator)
+ .add("RLOC probed", rlocProbed)
+ .add("routed", routed)
+ .add("locator AFI", locatorAfi).toString();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DefaultLispGenericLocator that = (DefaultLispGenericLocator) o;
+ return Objects.equal(priority, that.priority) &&
+ Objects.equal(weight, that.weight) &&
+ Objects.equal(multicastPriority, that.multicastPriority) &&
+ Objects.equal(multicastWeight, that.multicastWeight) &&
+ Objects.equal(localLocator, that.localLocator) &&
+ Objects.equal(rlocProbed, that.rlocProbed) &&
+ Objects.equal(routed, that.routed) &&
+ Objects.equal(locatorAfi, that.locatorAfi);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(priority, weight, multicastPriority,
+ multicastWeight, localLocator, rlocProbed, routed, locatorAfi);
+ }
+
+ public abstract static class AbstractGenericLocatorBuilder<T>
+ implements GenericLocatorBuilder<T> {
+ protected byte priority;
+ protected byte weight;
+ protected byte multicastPriority;
+ protected byte multicastWeight;
+ protected boolean localLocator;
+ protected boolean rlocProbed;
+ protected boolean routed;
+ protected LispAfiAddress locatorAfi;
+
+ @Override
+ public T withPriority(byte priority) {
+ this.priority = priority;
+ return (T) this;
+ }
+
+ @Override
+ public T withWeight(byte weight) {
+ this.weight = weight;
+ return (T) this;
+ }
+
+ @Override
+ public T withMulticastPriority(byte priority) {
+ this.multicastPriority = priority;
+ return (T) this;
+ }
+
+ @Override
+ public T withMulticastWeight(byte weight) {
+ this.multicastWeight = weight;
+ return (T) this;
+ }
+
+ @Override
+ public T withLocalLocator(boolean localLocator) {
+ this.localLocator = localLocator;
+ return (T) this;
+ }
+
+ @Override
+ public T withRlocProbed(boolean rlocProbed) {
+ this.rlocProbed = rlocProbed;
+ return (T) this;
+ }
+
+ @Override
+ public T withRouted(boolean routed) {
+ this.routed = routed;
+ return (T) this;
+ }
+
+ @Override
+ public T withLocatorAfi(LispAfiAddress locatorAfi) {
+ this.locatorAfi = locatorAfi;
+ return (T) this;
+ }
+ }
+
+ /**
+ * Deserializes LispGenericLocator message portion.
+ *
+ * @param byteBuf byte buffer
+ * @return LispGenericLocator
+ * @throws LispParseError LISP message parse error
+ * @throws LispReaderException LISP message reader exception
+ */
+ public static LispGenericLocator deserialize(ByteBuf byteBuf)
+ throws LispParseError,
+ LispReaderException {
+ // priority -> 8 bits
+ byte priority = (byte) byteBuf.readUnsignedByte();
+
+ // weight -> 8 bits
+ byte weight = (byte) byteBuf.readUnsignedByte();
+
+ // multi-cast priority -> 8 bits
+ byte multicastPriority = (byte) byteBuf.readUnsignedByte();
+
+ // multi-cast weight -> 8 bits
+ byte multicastWeight = (byte) byteBuf.readUnsignedByte();
+
+ // let's skip unused flags
+ byteBuf.skipBytes(SKIP_UNUSED_FLAG_LENGTH);
+
+ byte flags = byteBuf.readByte();
+
+ // local locator flag -> 1 bit
+ boolean localLocator = ByteOperator.getBit(flags, LOCAL_LOCATOR_INDEX);
+
+ // rloc probe flag -> 1 bit
+ boolean rlocProbed = ByteOperator.getBit(flags, RLOC_PROBED_INDEX);
+
+ // routed flag -> 1 bit
+ boolean routed = ByteOperator.getBit(flags, ROUTED_INDEX);
+
+ LispAfiAddress address = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
+
+ return new DefaultLispGenericLocator(priority, weight, multicastPriority,
+ multicastWeight, localLocator, rlocProbed, routed, address);
+ }
+
+ /**
+ * Serializes LispGenericLocator message portion.
+ *
+ * @param byteBuf byte buffer
+ * @param genericLocator generic locator
+ * @throws LispWriterException LISP message writer exception
+ */
+ public static void serialize(ByteBuf byteBuf, LispGenericLocator genericLocator)
+ throws LispWriterException {
+ // priority
+ byteBuf.writeByte(genericLocator.getPriority());
+
+ // weight
+ byteBuf.writeByte(genericLocator.getWeight());
+
+ // multicast priority
+ byteBuf.writeByte(genericLocator.getMulticastPriority());
+
+ // multicast weight
+ byteBuf.writeByte(genericLocator.getMulticastWeight());
+
+ // unused flags
+ byteBuf.writeByte((short) 0);
+
+ // localLocator flag
+ short localLocator = DISABLE_BIT;
+ if (genericLocator.isLocalLocator()) {
+ localLocator = (byte) (ENABLE_BIT << LOCAL_LOCATOR_SHIFT_BIT);
+ }
+
+ // rlocProbed flag
+ short probed = DISABLE_BIT;
+ if (genericLocator.isRlocProbed()) {
+ probed = (byte) (ENABLE_BIT << PROBED_SHIFT_BIT);
+ }
+
+ // routed flag
+ short routed = DISABLE_BIT;
+ if (genericLocator.isRouted()) {
+ routed = (byte) ENABLE_BIT;
+ }
+
+ byteBuf.writeByte((byte) (localLocator + probed + routed));
+
+ // EID prefix AFI with EID prefix
+ AfiAddressWriter afiAddressWriter = new AfiAddressWriter();
+ afiAddressWriter.writeTo(byteBuf, genericLocator.getLocatorAfi());
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java
index 13e36a0..1a29579 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java
@@ -40,7 +40,7 @@
implements LispInfoRequest {
private static final Logger log =
- LoggerFactory.getLogger(DefaultLispInfoRequest.class);
+ LoggerFactory.getLogger(DefaultLispInfoRequest.class);
static final InfoRequestWriter WRITER;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocator.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocator.java
new file mode 100644
index 0000000..abaefce
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocator.java
@@ -0,0 +1,110 @@
+/*
+ * 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.LispParseError;
+import org.onosproject.lisp.msg.exceptions.LispReaderException;
+import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.types.LispAfiAddress;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Default implementation of LispLocator.
+ */
+public final class DefaultLispLocator extends DefaultLispGenericLocator
+ implements LispLocator {
+
+ static final LocatorWriter WRITER;
+ static {
+ WRITER = new LocatorWriter();
+ }
+
+ /**
+ * A private constructor that protects object instantiation from external.
+ *
+ * @param priority uni-cast priority
+ * @param weight uni-cast weight
+ * @param multicastPriority multi-cast priority
+ * @param multicastWeight multi-cast weight
+ * @param localLocator local locator flag
+ * @param rlocProbed RLOC probed flag
+ * @param routed routed flag
+ * @param locatorAfi locator AFI
+ */
+ private DefaultLispLocator(byte priority, byte weight, byte multicastPriority,
+ byte multicastWeight, boolean localLocator,
+ boolean rlocProbed, boolean routed,
+ LispAfiAddress locatorAfi) {
+ super(priority, weight, multicastPriority, multicastWeight,
+ localLocator, rlocProbed, routed, locatorAfi);
+ }
+
+ @Override
+ public void writeTo(ByteBuf byteBuf) throws LispWriterException {
+ WRITER.writeTo(byteBuf, this);
+ }
+
+ public static final class DefaultLocatorBuilder
+ extends AbstractGenericLocatorBuilder<LocatorBuilder>
+ implements LocatorBuilder {
+
+ @Override
+ public LispLocator build() {
+
+ checkNotNull(locatorAfi, "Must specify a locator address");
+
+ return new DefaultLispLocator(priority, weight, multicastPriority,
+ multicastWeight, localLocator, rlocProbed, routed, locatorAfi);
+ }
+ }
+
+ /**
+ * A LISP message reader for Locator portion.
+ */
+ public static final class LocatorReader
+ implements LispMessageReader<LispLocator> {
+ @Override
+ public LispLocator readFrom(ByteBuf byteBuf) throws LispParseError,
+ LispReaderException {
+ LispGenericLocator gl = deserialize(byteBuf);
+
+ return new DefaultLocatorBuilder()
+ .withPriority(gl.getPriority())
+ .withWeight(gl.getWeight())
+ .withMulticastPriority(gl.getMulticastPriority())
+ .withMulticastWeight(gl.getMulticastWeight())
+ .withLocalLocator(gl.isLocalLocator())
+ .withRouted(gl.isRouted())
+ .withLocatorAfi(gl.getLocatorAfi()).build();
+ }
+ }
+
+ /**
+ * A LISP message writer for Locator portion.
+ */
+ public static final class LocatorWriter
+ implements LispMessageWriter<LispLocator> {
+
+ @Override
+ public void writeTo(ByteBuf byteBuf, LispLocator message)
+ throws LispWriterException {
+
+ serialize(byteBuf, message);
+ }
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecord.java
deleted file mode 100644
index e7e63fb..0000000
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecord.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * 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 com.google.common.base.Objects;
-import io.netty.buffer.ByteBuf;
-import org.onlab.util.ByteOperator;
-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.LispAfiAddress;
-import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressReader;
-import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Default implementation of LispLocatorRecord.
- */
-public final class DefaultLispLocatorRecord implements LispLocatorRecord {
-
- private final byte priority;
- private final byte weight;
- private final byte multicastPriority;
- private final byte multicastWeight;
- private final boolean localLocator;
- private final boolean rlocProbed;
- private final boolean routed;
- private final LispAfiAddress locatorAfi;
-
- static final LocatorRecordWriter WRITER;
- static {
- WRITER = new LocatorRecordWriter();
- }
-
- /**
- * A private constructor that protects object instantiation from external.
- *
- * @param priority uni-cast priority
- * @param weight uni-cast weight
- * @param multicastPriority multi-cast priority
- * @param multicastWeight multi-cast weight
- * @param localLocator local locator flag
- * @param rlocProbed RLOC probed flag
- * @param routed routed flag
- * @param locatorAfi locator AFI
- */
- private DefaultLispLocatorRecord(byte priority, byte weight, byte multicastPriority,
- byte multicastWeight, boolean localLocator, boolean rlocProbed,
- boolean routed, LispAfiAddress locatorAfi) {
- this.priority = priority;
- this.weight = weight;
- this.multicastPriority = multicastPriority;
- this.multicastWeight = multicastWeight;
- this.localLocator = localLocator;
- this.rlocProbed = rlocProbed;
- this.routed = routed;
- this.locatorAfi = locatorAfi;
- }
-
- @Override
- public byte getPriority() {
- return priority;
- }
-
- @Override
- public byte getWeight() {
- return weight;
- }
-
- @Override
- public byte getMulticastPriority() {
- return multicastPriority;
- }
-
- @Override
- public byte getMulticastWeight() {
- return multicastWeight;
- }
-
- @Override
- public boolean isLocalLocator() {
- return localLocator;
- }
-
- @Override
- public boolean isRlocProbed() {
- return rlocProbed;
- }
-
- @Override
- public boolean isRouted() {
- return routed;
- }
-
- @Override
- public LispAfiAddress getLocatorAfi() {
- return locatorAfi;
- }
-
- @Override
- public void writeTo(ByteBuf byteBuf) throws LispWriterException {
- WRITER.writeTo(byteBuf, this);
- }
-
- @Override
- public String toString() {
- return toStringHelper(this)
- .add("priority", priority)
- .add("weight", weight)
- .add("multi-cast priority", multicastPriority)
- .add("multi-cast weight", multicastWeight)
- .add("local locator", localLocator)
- .add("RLOC probed", rlocProbed)
- .add("routed", routed)
- .add("locator AFI", locatorAfi).toString();
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- DefaultLispLocatorRecord that = (DefaultLispLocatorRecord) o;
- return Objects.equal(priority, that.priority) &&
- Objects.equal(weight, that.weight) &&
- Objects.equal(multicastPriority, that.multicastPriority) &&
- Objects.equal(multicastWeight, that.multicastWeight) &&
- Objects.equal(localLocator, that.localLocator) &&
- Objects.equal(rlocProbed, that.rlocProbed) &&
- Objects.equal(routed, that.routed) &&
- Objects.equal(locatorAfi, that.locatorAfi);
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(priority, weight, multicastPriority,
- multicastWeight, localLocator, rlocProbed, routed, locatorAfi);
- }
-
- public static final class DefaultLocatorRecordBuilder implements LocatorRecordBuilder {
-
- private byte priority;
- private byte weight;
- private byte multicastPriority;
- private byte multicastWeight;
- private boolean localLocator;
- private boolean rlocProbed;
- private boolean routed;
- private LispAfiAddress locatorAfi;
-
- @Override
- public LocatorRecordBuilder withPriority(byte priority) {
- this.priority = priority;
- return this;
- }
-
- @Override
- public LocatorRecordBuilder withWeight(byte weight) {
- this.weight = weight;
- return this;
- }
-
- @Override
- public LocatorRecordBuilder withMulticastPriority(byte priority) {
- this.multicastPriority = priority;
- return this;
- }
-
- @Override
- public LocatorRecordBuilder withMulticastWeight(byte weight) {
- this.multicastWeight = weight;
- return this;
- }
-
- @Override
- public LocatorRecordBuilder withLocalLocator(boolean localLocator) {
- this.localLocator = localLocator;
- return this;
- }
-
- @Override
- public LocatorRecordBuilder withRlocProbed(boolean rlocProbed) {
- this.rlocProbed = rlocProbed;
- return this;
- }
-
- @Override
- public LocatorRecordBuilder withRouted(boolean routed) {
- this.routed = routed;
- return this;
- }
-
- @Override
- public LocatorRecordBuilder withLocatorAfi(LispAfiAddress locatorAfi) {
- this.locatorAfi = locatorAfi;
- return this;
- }
-
- @Override
- public LispLocatorRecord build() {
-
- checkNotNull(locatorAfi, "Must specify a locator address");
-
- return new DefaultLispLocatorRecord(priority, weight, multicastPriority,
- multicastWeight, localLocator, rlocProbed, routed, locatorAfi);
- }
- }
-
- /**
- * A LISP message reader for LocatorRecord portion.
- */
- public static final class LocatorRecordReader implements LispMessageReader<LispLocatorRecord> {
-
- private static final int SKIP_UNUSED_FLAG_LENGTH = 1;
- private static final int LOCAL_LOCATOR_INDEX = 2;
- private static final int RLOC_PROBED_INDEX = 1;
- private static final int ROUTED_INDEX = 0;
-
- @Override
- public LispLocatorRecord readFrom(ByteBuf byteBuf) throws LispParseError, LispReaderException {
-
- // priority -> 8 bits
- byte priority = (byte) byteBuf.readUnsignedByte();
-
- // weight -> 8 bits
- byte weight = (byte) byteBuf.readUnsignedByte();
-
- // multi-cast priority -> 8 bits
- byte multicastPriority = (byte) byteBuf.readUnsignedByte();
-
- // multi-cast weight -> 8 bits
- byte multicastWeight = (byte) byteBuf.readUnsignedByte();
-
- // let's skip unused flags
- byteBuf.skipBytes(SKIP_UNUSED_FLAG_LENGTH);
-
- byte flags = byteBuf.readByte();
-
- // local locator flag -> 1 bit
- boolean localLocator = ByteOperator.getBit(flags, LOCAL_LOCATOR_INDEX);
-
- // rloc probe flag -> 1 bit
- boolean rlocProbed = ByteOperator.getBit(flags, RLOC_PROBED_INDEX);
-
- // routed flag -> 1 bit
- boolean routed = ByteOperator.getBit(flags, ROUTED_INDEX);
-
- LispAfiAddress address = new AfiAddressReader().readFrom(byteBuf);
-
- return new DefaultLocatorRecordBuilder()
- .withPriority(priority)
- .withWeight(weight)
- .withMulticastPriority(multicastPriority)
- .withMulticastWeight(multicastWeight)
- .withLocalLocator(localLocator)
- .withRlocProbed(rlocProbed)
- .withRouted(routed)
- .withLocatorAfi(address)
- .build();
- }
- }
-
- /**
- * A LISP message writer for LocatorRecord portion.
- */
- public static final class LocatorRecordWriter implements LispMessageWriter<LispLocatorRecord> {
-
- private static final int LOCAL_LOCATOR_SHIFT_BIT = 2;
- private static final int PROBED_SHIFT_BIT = 1;
-
- private static final int ENABLE_BIT = 1;
- private static final int DISABLE_BIT = 0;
-
- @Override
- public void writeTo(ByteBuf byteBuf, LispLocatorRecord message) throws LispWriterException {
-
- // priority
- byteBuf.writeByte(message.getPriority());
-
- // weight
- byteBuf.writeByte(message.getWeight());
-
- // multicast priority
- byteBuf.writeByte(message.getMulticastPriority());
-
- // multicast weight
- byteBuf.writeByte(message.getMulticastWeight());
-
- // unused flags
- byteBuf.writeByte((short) 0);
-
- // localLocator flag
- short localLocator = DISABLE_BIT;
- if (message.isLocalLocator()) {
- localLocator = (byte) (ENABLE_BIT << LOCAL_LOCATOR_SHIFT_BIT);
- }
-
- // rlocProbed flag
- short probed = DISABLE_BIT;
- if (message.isRlocProbed()) {
- probed = (byte) (ENABLE_BIT << PROBED_SHIFT_BIT);
- }
-
- // routed flag
- short routed = DISABLE_BIT;
- if (message.isRouted()) {
- routed = (byte) ENABLE_BIT;
- }
-
- byteBuf.writeByte((byte) (localLocator + probed + routed));
-
- // EID prefix AFI with EID prefix
- AfiAddressWriter afiAddressWriter = new AfiAddressWriter();
- afiAddressWriter.writeTo(byteBuf, message.getLocatorAfi());
- }
- }
-}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
index ced7306..5d2257a 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
@@ -21,7 +21,8 @@
import io.netty.buffer.ByteBuf;
import org.onlab.util.ByteOperator;
import org.onosproject.lisp.msg.exceptions.LispParseError;
-import org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispLocator.LocatorReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispLocator.LocatorWriter;
import org.onosproject.lisp.msg.types.LispAfiAddress;
import org.onosproject.lisp.msg.exceptions.LispReaderException;
import org.onosproject.lisp.msg.exceptions.LispWriterException;
@@ -31,20 +32,14 @@
import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordWriter;
/**
* Default implementation of LispMapRecord.
*/
-public final class DefaultLispMapRecord implements LispMapRecord {
+public final class DefaultLispMapRecord extends AbstractLispRecord
+ implements LispMapRecord {
- private final int recordTtl;
- private final byte maskLength;
- private final LispMapReplyAction action;
- private final boolean authoritative;
- private final short mapVersionNumber;
- private final LispAfiAddress eidPrefixAfi;
- private final List<LispLocatorRecord> locatorRecords;
+ private final List<LispLocator> locators;
static final MapRecordWriter WRITER;
static {
@@ -60,58 +55,24 @@
* @param authoritative authoritative flag
* @param mapVersionNumber map version number
* @param eidPrefixAfi EID prefix AFI address
+ * @param locators a collection of locators
*/
private DefaultLispMapRecord(int recordTtl, byte maskLength,
LispMapReplyAction action, boolean authoritative,
short mapVersionNumber, LispAfiAddress eidPrefixAfi,
- List<LispLocatorRecord> locatorRecords) {
- this.recordTtl = recordTtl;
- this.maskLength = maskLength;
- this.action = action;
- this.authoritative = authoritative;
- this.mapVersionNumber = mapVersionNumber;
- this.eidPrefixAfi = eidPrefixAfi;
- this.locatorRecords = locatorRecords;
- }
-
- @Override
- public int getRecordTtl() {
- return recordTtl;
+ List<LispLocator> locators) {
+ super(recordTtl, maskLength, action, authoritative, mapVersionNumber, eidPrefixAfi);
+ this.locators = locators;
}
@Override
public int getLocatorCount() {
- return locatorRecords.size();
+ return locators.size();
}
@Override
- public byte getMaskLength() {
- return maskLength;
- }
-
- @Override
- public LispMapReplyAction getAction() {
- return action;
- }
-
- @Override
- public boolean isAuthoritative() {
- return authoritative;
- }
-
- @Override
- public short getMapVersionNumber() {
- return mapVersionNumber;
- }
-
- @Override
- public LispAfiAddress getEidPrefixAfi() {
- return eidPrefixAfi;
- }
-
- @Override
- public List<LispLocatorRecord> getLocators() {
- return ImmutableList.copyOf(locatorRecords);
+ public List<LispLocator> getLocators() {
+ return ImmutableList.copyOf(locators);
}
@Override
@@ -128,8 +89,8 @@
.add("authoritative", authoritative)
.add("mapVersionNumber", mapVersionNumber)
.add("EID prefix AFI address", eidPrefixAfi)
- .add("locator records", locatorRecords).toString();
-
+ .add("locators", locators)
+ .toString();
}
@Override
@@ -147,65 +108,25 @@
Objects.equal(authoritative, that.authoritative) &&
Objects.equal(mapVersionNumber, that.mapVersionNumber) &&
Objects.equal(eidPrefixAfi, that.eidPrefixAfi) &&
- Objects.equal(locatorRecords, that.locatorRecords);
+ Objects.equal(locators, that.locators);
}
@Override
public int hashCode() {
- return Objects.hashCode(recordTtl, maskLength, action,
- authoritative, mapVersionNumber, eidPrefixAfi, locatorRecords);
+ return Objects.hashCode(recordTtl, maskLength, action, authoritative,
+ mapVersionNumber, eidPrefixAfi, locators);
}
- public static final class DefaultMapRecordBuilder implements MapRecordBuilder {
+ public static final class DefaultMapRecordBuilder
+ extends AbstractRecordBuilder<MapRecordBuilder>
+ implements MapRecordBuilder {
- private int recordTtl;
- private byte maskLength;
- private LispMapReplyAction action;
- private boolean authoritative;
- private short mapVersionNumber;
- private LispAfiAddress eidPrefixAfi;
- private List<LispLocatorRecord> locatorRecords = Lists.newArrayList();
+ private List<LispLocator> locators = Lists.newArrayList();
@Override
- public MapRecordBuilder withRecordTtl(int recordTtl) {
- this.recordTtl = recordTtl;
- return this;
- }
-
- @Override
- public MapRecordBuilder withMaskLength(byte maskLength) {
- this.maskLength = maskLength;
- return this;
- }
-
- @Override
- public MapRecordBuilder withAction(LispMapReplyAction action) {
- this.action = action;
- return this;
- }
-
- @Override
- public MapRecordBuilder withAuthoritative(boolean authoritative) {
- this.authoritative = authoritative;
- return this;
- }
-
- @Override
- public MapRecordBuilder withMapVersionNumber(short mapVersionNumber) {
- this.mapVersionNumber = mapVersionNumber;
- return this;
- }
-
- @Override
- public MapRecordBuilder withEidPrefixAfi(LispAfiAddress prefix) {
- this.eidPrefixAfi = prefix;
- return this;
- }
-
- @Override
- public MapRecordBuilder withLocators(List<LispLocatorRecord> records) {
- if (records != null) {
- this.locatorRecords = ImmutableList.copyOf(records);
+ public MapRecordBuilder withLocators(List<LispLocator> locators) {
+ if (locators != null) {
+ this.locators = ImmutableList.copyOf(locators);
}
return this;
}
@@ -216,7 +137,7 @@
checkNotNull(eidPrefixAfi, "Must specify an EID prefix");
return new DefaultLispMapRecord(recordTtl, maskLength, action,
- authoritative, mapVersionNumber, eidPrefixAfi, locatorRecords);
+ authoritative, mapVersionNumber, eidPrefixAfi, locators);
}
}
@@ -231,7 +152,8 @@
private static final int REPLY_ACTION_SHIFT_BIT = 5;
@Override
- public LispMapRecord readFrom(ByteBuf byteBuf) throws LispParseError, LispReaderException {
+ public LispMapRecord readFrom(ByteBuf byteBuf) throws LispParseError,
+ LispReaderException {
// Record TTL -> 32 bits
int recordTtl = byteBuf.readInt();
@@ -252,7 +174,8 @@
}
// authoritative flag -> 1 bit
- boolean authoritative = ByteOperator.getBit((byte) (actionWithFlag >> AUTHORITATIVE_INDEX), 0);
+ boolean authoritative = ByteOperator.getBit((byte)
+ (actionWithFlag >> AUTHORITATIVE_INDEX), 0);
// let's skip the reserved field
byteBuf.skipBytes(RESERVED_SKIP_LENGTH);
@@ -260,18 +183,19 @@
// Map version number -> 12 bits, we treat Rsvd field is all zero
short mapVersionNumber = (short) byteBuf.readUnsignedShort();
- LispAfiAddress eidPrefixAfi = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
+ LispAfiAddress eidPrefixAfi =
+ new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
- List<LispLocatorRecord> locators = Lists.newArrayList();
+ List<LispLocator> locators = Lists.newArrayList();
for (int i = 0; i < locatorCount; i++) {
- locators.add(new LocatorRecordReader().readFrom(byteBuf));
+ locators.add(new LocatorReader().readFrom(byteBuf));
}
return new DefaultMapRecordBuilder()
.withRecordTtl(recordTtl)
.withMaskLength(maskLength)
.withAction(action)
- .withAuthoritative(authoritative)
+ .withIsAuthoritative(authoritative)
.withMapVersionNumber(mapVersionNumber)
.withLocators(locators)
.withEidPrefixAfi(eidPrefixAfi)
@@ -324,8 +248,8 @@
afiAddressWriter.writeTo(byteBuf, message.getEidPrefixAfi());
// serialize locator
- LocatorRecordWriter recordWriter = new LocatorRecordWriter();
- List<LispLocatorRecord> locators = message.getLocators();
+ LocatorWriter recordWriter = new LocatorWriter();
+ List<LispLocator> locators = message.getLocators();
for (int i = 0; i < locators.size(); i++) {
recordWriter.writeTo(byteBuf, locators.get(i));
}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReferral.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReferral.java
new file mode 100644
index 0000000..d796e1e
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReferral.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2017-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;
+
+/**
+ * Default LISP referral message class.
+ */
+public class DefaultLispMapReferral implements LispMapReferral {
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferral.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferral.java
new file mode 100644
index 0000000..6e1635ac
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferral.java
@@ -0,0 +1,111 @@
+/*
+ * 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.onlab.packet.DeserializationException;
+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.LispAfiAddress;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Default implementation of LispReferral.
+ */
+public final class DefaultLispReferral extends DefaultLispGenericLocator
+ implements LispReferral {
+
+ static final DefaultLispReferral.ReferralWriter WRITER;
+ static {
+ WRITER = new ReferralWriter();
+ }
+
+ /**
+ * A private constructor that protects object instantiation from external.
+ *
+ * @param priority uni-cast priority
+ * @param weight uni-cast weight
+ * @param multicastPriority multi-cast priority
+ * @param multicastWeight multi-cast weight
+ * @param localLocator local locator flag
+ * @param rlocProbed RLOC probed flag
+ * @param routed routed flag
+ * @param locatorAfi locator AFI
+ */
+ private DefaultLispReferral(byte priority, byte weight, byte multicastPriority,
+ byte multicastWeight, boolean localLocator,
+ boolean rlocProbed, boolean routed,
+ LispAfiAddress locatorAfi) {
+ super(priority, weight, multicastPriority, multicastWeight,
+ localLocator, rlocProbed, routed, locatorAfi);
+ }
+
+ @Override
+ public void writeTo(ByteBuf byteBuf) throws LispWriterException {
+ WRITER.writeTo(byteBuf, this);
+ }
+
+ public static final class DefaultReferralBuilder
+ extends AbstractGenericLocatorBuilder<ReferralBuilder>
+ implements ReferralBuilder {
+
+ @Override
+ public LispReferral build() {
+
+ checkNotNull(locatorAfi, "Must specify a locator address");
+
+ return new DefaultLispReferral(priority, weight, multicastPriority,
+ multicastWeight, localLocator, rlocProbed, routed, locatorAfi);
+ }
+ }
+
+ /**
+ * A LISP message reader for Referral portion.
+ */
+ public static final class ReferralReader implements LispMessageReader<LispReferral> {
+
+ @Override
+ public LispReferral readFrom(ByteBuf byteBuf) throws LispParseError,
+ LispReaderException,
+ DeserializationException {
+ LispGenericLocator gl = deserialize(byteBuf);
+
+ return new DefaultReferralBuilder()
+ .withPriority(gl.getPriority())
+ .withWeight(gl.getWeight())
+ .withMulticastPriority(gl.getMulticastPriority())
+ .withMulticastWeight(gl.getMulticastWeight())
+ .withLocalLocator(gl.isLocalLocator())
+ .withRouted(gl.isRouted())
+ .withLocatorAfi(gl.getLocatorAfi()).build();
+ }
+ }
+
+ /**
+ * A LISP message writer for Referral portion.
+ */
+ public static final class ReferralWriter implements LispMessageWriter<LispReferral> {
+
+ @Override
+ public void writeTo(ByteBuf byteBuf, LispReferral message)
+ throws LispWriterException {
+
+ serialize(byteBuf, message);
+ }
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferralRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferralRecord.java
new file mode 100644
index 0000000..976fdd7
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispReferralRecord.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright 2017-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 com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import io.netty.buffer.ByteBuf;
+import org.onlab.packet.DeserializationException;
+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.LispAfiAddress;
+
+import java.util.List;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Default LISP referral record class.
+ */
+public final class DefaultLispReferralRecord extends AbstractLispRecord
+ implements LispReferralRecord {
+
+ private final boolean incomplete;
+ private final List<LispReferral> referrals;
+ private final List<LispSignature> signatures;
+
+ static final ReferralRecordWriter WRITER;
+ static {
+ WRITER = new ReferralRecordWriter();
+ }
+
+ /**
+ * A private constructor that protects object instantiation from external.
+ *
+ * @param recordTtl record time-to-live value
+ * @param maskLength mask length
+ * @param action lisp map reply action
+ * @param authoritative authoritative flag
+ * @param mapVersionNumber map version number
+ * @param eidPrefixAfi EID prefix AFI address
+ * @param incomplete incomplete flag value
+ * @param referrals a collection referrals
+ * @param signatures a collection signatures
+ */
+ private DefaultLispReferralRecord(int recordTtl, byte maskLength,
+ LispMapReplyAction action, boolean authoritative,
+ short mapVersionNumber, LispAfiAddress eidPrefixAfi,
+ boolean incomplete, List<LispReferral> referrals,
+ List<LispSignature> signatures) {
+ super(recordTtl, maskLength, action, authoritative, mapVersionNumber, eidPrefixAfi);
+ this.incomplete = incomplete;
+ this.referrals = referrals;
+ this.signatures = signatures;
+ }
+
+ @Override
+ public int getReferralCount() {
+ return referrals.size();
+ }
+
+ @Override
+ public int getSignatureCount() {
+ return signatures.size();
+ }
+
+ @Override
+ public boolean isIncomplete() {
+ return incomplete;
+ }
+
+ @Override
+ public List<LispReferral> getReferrals() {
+ return ImmutableList.copyOf(referrals);
+ }
+
+ @Override
+ public List<LispSignature> getSignatures() {
+ return ImmutableList.copyOf(signatures);
+ }
+
+ @Override
+ public void writeTo(ByteBuf byteBuf) throws LispWriterException {
+ WRITER.writeTo(byteBuf, this);
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this)
+ .add("record TTL", recordTtl)
+ .add("maskLength", maskLength)
+ .add("action", action)
+ .add("authoritative", authoritative)
+ .add("mapVersionNumber", mapVersionNumber)
+ .add("EID prefix AFI address", eidPrefixAfi)
+ .add("incomplete", incomplete)
+ .add("referrals", referrals)
+ .add("signatures", signatures)
+ .toString();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DefaultLispReferralRecord that = (DefaultLispReferralRecord) o;
+ return Objects.equal(recordTtl, that.recordTtl) &&
+ Objects.equal(maskLength, that.maskLength) &&
+ Objects.equal(action, that.action) &&
+ Objects.equal(authoritative, that.authoritative) &&
+ Objects.equal(mapVersionNumber, that.mapVersionNumber) &&
+ Objects.equal(eidPrefixAfi, that.eidPrefixAfi) &&
+ Objects.equal(referrals, that.referrals) &&
+ Objects.equal(signatures, that.signatures);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(recordTtl, maskLength, action, authoritative,
+ mapVersionNumber, eidPrefixAfi, incomplete, referrals, signatures);
+ }
+
+ public static final class DefaultReferralRecordBuilder
+ extends AbstractRecordBuilder<ReferralRecordBuilder>
+ implements ReferralRecordBuilder {
+
+ private boolean incomplete;
+ private List<LispReferral> referrals = Lists.newArrayList();
+ private List<LispSignature> signatures = Lists.newArrayList();
+
+ @Override
+ public ReferralRecordBuilder withReferrals(List<LispReferral> referrals) {
+ if (referrals != null) {
+ this.referrals = ImmutableList.copyOf(referrals);
+ }
+ return this;
+ }
+
+ @Override
+ public ReferralRecordBuilder withSignatures(List<LispSignature> signatures) {
+ if (signatures != null) {
+ this.signatures = ImmutableList.copyOf(signatures);
+ }
+ return this;
+ }
+
+ @Override
+ public ReferralRecordBuilder withIsIncomplete(boolean incomplete) {
+ this.incomplete = incomplete;
+ return this;
+ }
+
+ @Override
+ public LispReferralRecord build() {
+
+ checkNotNull(eidPrefixAfi, "Must specify an EID prefix");
+
+ return new DefaultLispReferralRecord(recordTtl, maskLength, action,
+ authoritative, mapVersionNumber, eidPrefixAfi,
+ incomplete, referrals, signatures);
+ }
+ }
+
+ public static final class ReferralRecordReader
+ implements LispMessageReader<LispReferralRecord> {
+
+ @Override
+ public LispReferralRecord readFrom(ByteBuf byteBuf)
+ throws LispParseError, LispReaderException,
+ DeserializationException {
+ // TODO: need to implement serialization logic
+ return null;
+ }
+ }
+
+ /**
+ * A LISP message writer for ReferralRecord portion.
+ */
+ public static final class ReferralRecordWriter
+ implements LispMessageWriter<LispReferralRecord> {
+
+ @Override
+ public void writeTo(ByteBuf byteBuf, LispReferralRecord message)
+ throws LispWriterException {
+ // TODO: need to implement serialization logic
+ }
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispSignature.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispSignature.java
new file mode 100644
index 0000000..979e987
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispSignature.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2017-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;
+
+/**
+ * Default LISP signature class.
+ */
+public class DefaultLispSignature implements LispSignature {
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocatorRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispGenericLocator.java
similarity index 69%
rename from protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocatorRecord.java
rename to protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispGenericLocator.java
index a38527b..99ec7b9 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocatorRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispGenericLocator.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-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.
@@ -16,13 +16,13 @@
package org.onosproject.lisp.msg.protocols;
import io.netty.buffer.ByteBuf;
-import org.onosproject.lisp.msg.types.LispAfiAddress;
import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.types.LispAfiAddress;
/**
- * LISP locator record section which is part of LISP map record.
+ * A generic LISP locator used for both location and referral purposes.
*/
-public interface LispLocatorRecord {
+public interface LispGenericLocator {
/**
* Obtains priority value.
@@ -89,79 +89,74 @@
void writeTo(ByteBuf byteBuf) throws LispWriterException;
/**
- * A builder of LISP locator record.
+ * A builder of LISP generic locator.
+ *
+ * @param <T> sub-builder type
*/
- interface LocatorRecordBuilder {
+ interface GenericLocatorBuilder<T> {
/**
* Sets priority value.
*
* @param priority priority
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withPriority(byte priority);
+ T withPriority(byte priority);
/**
* Sets weight value.
*
* @param weight weight
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withWeight(byte weight);
+ T withWeight(byte weight);
/**
* Sets multi-cast priority value.
*
* @param priority priority
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withMulticastPriority(byte priority);
+ T withMulticastPriority(byte priority);
/**
* Sets multi-cast weight value.
*
* @param weight weight
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withMulticastWeight(byte weight);
+ T withMulticastWeight(byte weight);
/**
* Sets local locator flag.
*
* @param localLocator local locator flag
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withLocalLocator(boolean localLocator);
+ T withLocalLocator(boolean localLocator);
/**
* Sets RLOC probed flag.
*
* @param rlocProbed RLOC probed flag
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withRlocProbed(boolean rlocProbed);
+ T withRlocProbed(boolean rlocProbed);
/**
* Sets routed flag.
*
* @param routed routed flag
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withRouted(boolean routed);
+ T withRouted(boolean routed);
/**
* Sets locator AFI.
*
* @param locatorAfi locator AFI
- * @return LocatorRecordBuilder object
+ * @return parameterized object
*/
- LocatorRecordBuilder withLocatorAfi(LispAfiAddress locatorAfi);
-
- /**
- * Builds locator record.
- *
- * @return locator record instance
- */
- LispLocatorRecord build();
+ T withLocatorAfi(LispAfiAddress locatorAfi);
}
}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocator.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocator.java
new file mode 100644
index 0000000..0f198d2
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocator.java
@@ -0,0 +1,35 @@
+/*
+ * 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;
+
+/**
+ * LISP locator section which is part of LISP map record.
+ */
+public interface LispLocator extends LispGenericLocator {
+
+ /**
+ * A builder of LISP locator.
+ */
+ interface LocatorBuilder extends GenericLocatorBuilder<LocatorBuilder> {
+
+ /**
+ * Builds locator.
+ *
+ * @return locator instance
+ */
+ LispLocator build();
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRecord.java
index ae7cb59..bd0b948 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRecord.java
@@ -15,23 +15,12 @@
*/
package org.onosproject.lisp.msg.protocols;
-import io.netty.buffer.ByteBuf;
-import org.onosproject.lisp.msg.exceptions.LispWriterException;
-import org.onosproject.lisp.msg.types.LispAfiAddress;
-
import java.util.List;
/**
- * LISP record section which is part of LISP map register message.
+ * LISP map record section which is part of LISP map register message.
*/
-public interface LispMapRecord {
-
- /**
- * Obtains record TTL value.
- *
- * @return record TTL value
- */
- int getRecordTtl();
+public interface LispMapRecord extends LispRecord {
/**
* Obtains locator count value.
@@ -41,120 +30,29 @@
int getLocatorCount();
/**
- * Obtains address mask length.
+ * Obtains a collection of locators.
*
- * @return mask length
+ * @return a collection of locators
*/
- byte getMaskLength();
-
- /**
- * Obtains LispMapReplyAction enum code.
- *
- * @return LispMapReplyAction enum code
- */
- LispMapReplyAction getAction();
-
- /**
- * Obtains authoritative flag.
- *
- * @return authoritative flag
- */
- boolean isAuthoritative();
-
- /**
- * Obtains map version number.
- *
- * @return map version number
- */
- short getMapVersionNumber();
-
- /**
- * Obtains EID prefix.
- *
- * @return EID prefix
- */
- LispAfiAddress getEidPrefixAfi();
-
- /**
- * Obtains a collection of locator records.
- *
- * @return a collection of locator records
- */
- List<LispLocatorRecord> getLocators();
-
- /**
- * Writes LISP message object into communication channel.
- *
- * @param byteBuf byte buffer
- * @throws LispWriterException on error
- */
- void writeTo(ByteBuf byteBuf) throws LispWriterException;
+ List<LispLocator> getLocators();
/**
* A builder of LISP map record.
*/
- interface MapRecordBuilder {
+ interface MapRecordBuilder extends RecordBuilder<MapRecordBuilder> {
/**
- * Sets record TTL value.
+ * Sets a collection of locators.
*
- * @param recordTtl record TTL
+ * @param locators a collection of locators
* @return MapRecordBuilder object
*/
- MapRecordBuilder withRecordTtl(int recordTtl);
+ MapRecordBuilder withLocators(List<LispLocator> locators);
/**
- * Sets mask length.
+ * Builds LISP map record object.
*
- * @param maskLength mask length
- * @return MapRecordBuilder object
- */
- MapRecordBuilder withMaskLength(byte maskLength);
-
- /**
- * Sets LISP map reply action enum.
- *
- * @param action map reply action
- * @return MapRecordBuilder object
- */
- MapRecordBuilder withAction(LispMapReplyAction action);
-
- /**
- * Sets authoritative flag.
- *
- * @param authoritative authoritative flag
- * @return MapRecordBuilder object
- */
- MapRecordBuilder withAuthoritative(boolean authoritative);
-
- /**
- * Sets LISP map version number.
- *
- * @param mapVersionNumber map version number
- * @return MapRecordBuilder object
- */
- MapRecordBuilder withMapVersionNumber(short mapVersionNumber);
-
- /**
- * Sets EID prefix.
- *
- * @param prefix EID prefix
- * @return MapRecordBuilder object
- */
- MapRecordBuilder withEidPrefixAfi(LispAfiAddress prefix);
-
- /**
- * Sets a collection of locator records.
- *
- * @param records a collection of locator records
- * @return MapRecordBuilder object
- */
- MapRecordBuilder withLocators(List<LispLocatorRecord> records);
-
- /**
- * Builds map record.
- *
- * @return map record instance
+ * @return LISP map record object
*/
LispMapRecord build();
}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReferral.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReferral.java
new file mode 100644
index 0000000..e78cfc4
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReferral.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2017-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;
+
+/**
+ * LISP map referral message interface.
+ * <p>
+ * LISP map referral message format is defined in draft-ietf-lisp-ddt-09.
+ * https://tools.ietf.org/html/draft-ietf-lisp-ddt-09
+ *
+ * <pre>
+ * {@literal
+ * 0 1 2 3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Type=6 | Reserved | Record Count |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nonce . . . |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | . . . Nonce |
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | Record TTL |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * R | Referral Count| EID mask-len | ACT |A|I| Reserved |
+ * e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * c |SigCnt | Map Version Number | EID-AFI |
+ * o +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * r | EID-prefix ... |
+ * d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | /| Priority | Weight | M Priority | M Weight |
+ * | R +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | e | Unused Flags |L|p|R| Loc-AFI |
+ * | f +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | \| Locator ... |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | ~ Sig section ~
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * }</pre>
+ */
+public interface LispMapReferral {
+
+ // TODO: need to implement LispMapReferral
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java
new file mode 100644
index 0000000..e858b6e
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2017-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 org.onosproject.lisp.msg.types.LispAfiAddress;
+
+/**
+ * Generic LISP record interface.
+ */
+public interface LispRecord {
+
+ /**
+ * Obtains record TTL value.
+ *
+ * @return record TTL value
+ */
+ int getRecordTtl();
+
+ /**
+ * Obtains address mask length.
+ *
+ * @return mask length
+ */
+ byte getMaskLength();
+
+ /**
+ * Obtains LispMapReplyAction enum code.
+ *
+ * @return LispMapReplyAction enum code
+ */
+ LispMapReplyAction getAction();
+
+ /**
+ * Obtains authoritative flag.
+ *
+ * @return authoritative flag
+ */
+ boolean isAuthoritative();
+
+ /**
+ * Obtains map version number.
+ *
+ * @return map version number
+ */
+ short getMapVersionNumber();
+
+ /**
+ * Obtains EID prefix.
+ *
+ * @return EID prefix
+ */
+ LispAfiAddress getEidPrefixAfi();
+
+ /**
+ * Writes LISP message object into communication channel.
+ *
+ * @param byteBuf byte buffer
+ * @throws LispWriterException on error
+ */
+ void writeTo(ByteBuf byteBuf) throws LispWriterException;
+
+ /**
+ * A builder for LISP record.
+ *
+ * @param <T> sub-builder type
+ */
+ interface RecordBuilder<T> {
+
+ /**
+ * Sets record TTL value.
+ *
+ * @param recordTtl record TTL
+ * @return parameterized object
+ */
+ T withRecordTtl(int recordTtl);
+
+ /**
+ * Sets mask length.
+ *
+ * @param maskLength mask length
+ * @return parameterized object
+ */
+ T withMaskLength(byte maskLength);
+
+ /**
+ * Sets LISP map reply action enum.
+ *
+ * @param action map reply action
+ * @return parameterized object
+ */
+ T withAction(LispMapReplyAction action);
+
+ /**
+ * Sets authoritative flag.
+ *
+ * @param authoritative authoritative flag
+ * @return parameterized object
+ */
+ T withIsAuthoritative(boolean authoritative);
+
+ /**
+ * Sets LISP map version number.
+ *
+ * @param mapVersionNumber map version number
+ * @return parameterized object
+ */
+ T withMapVersionNumber(short mapVersionNumber);
+
+ /**
+ * Sets EID prefix.
+ *
+ * @param prefix EID prefix
+ * @return parameterized object
+ */
+ T withEidPrefixAfi(LispAfiAddress prefix);
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispReferral.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispReferral.java
new file mode 100644
index 0000000..4611654
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispReferral.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017-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;
+
+/**
+ * LISP referral section which is part of LISP referral record.
+ */
+public interface LispReferral extends LispGenericLocator {
+
+ /**
+ * A builder of LISP referral.
+ */
+ interface ReferralBuilder extends GenericLocatorBuilder<ReferralBuilder> {
+
+ /**
+ * Builds referral.
+ *
+ * @return referral instance
+ */
+ LispReferral build();
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispReferralRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispReferralRecord.java
new file mode 100644
index 0000000..60cb914
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispReferralRecord.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2017-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 java.util.List;
+
+/**
+ * LISP referral record section which is part of LISP map referral message.
+ */
+public interface LispReferralRecord extends LispRecord {
+
+ /**
+ * Obtains referral count value.
+ *
+ * @return referral count value
+ */
+ int getReferralCount();
+
+ /**
+ * Obtains signature count value.
+ *
+ * @return signature count value
+ */
+ int getSignatureCount();
+
+ /**
+ * Obtains incomplete flag.
+ *
+ * @return incomplete flag
+ */
+ boolean isIncomplete();
+
+ /**
+ * Obtains a collection of referrals.
+ *
+ * @return a collection of referrals
+ */
+ List<LispReferral> getReferrals();
+
+ /**
+ * Obtains a collection of signatures.
+ *
+ * @return a collection of signatures
+ */
+ List<LispSignature> getSignatures();
+
+ /**
+ * A builder of LISP referral record.
+ */
+ interface ReferralRecordBuilder extends RecordBuilder<ReferralRecordBuilder> {
+
+ /**
+ * Sets a collection of referrals.
+ *
+ * @param referrals a collection of referrals
+ * @return ReferralRecordBuilder object
+ */
+ ReferralRecordBuilder withReferrals(List<LispReferral> referrals);
+
+ /**
+ * Sets a collection of signatures.
+ *
+ * @param signatures a collection of signatures
+ * @return ReferralRecordBuilder object
+ */
+ ReferralRecordBuilder withSignatures(List<LispSignature> signatures);
+
+ /**
+ * Sets incomplete flag.
+ *
+ * @param incomplete incomplete flag
+ * @return ReferralRecordBuilder object
+ */
+ ReferralRecordBuilder withIsIncomplete(boolean incomplete);
+
+ /**
+ * Builds LISP referral record object.
+ *
+ * @return LISP referral record object
+ */
+ LispReferralRecord build();
+ }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispSignature.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispSignature.java
new file mode 100644
index 0000000..291d9d7
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispSignature.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017-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;
+
+/**
+ * LISP signature interface.
+ *
+ * <p>
+ * LISP signature format is defined in draft-ietf-lisp-ddt-09.
+ * https://tools.ietf.org/html/draft-ietf-lisp-ddt-09#page-14
+ *
+ * <pre>
+ * {@literal
+ * 0 1 2 3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * /| Original Record TTL |
+ * / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * / | Signature Expiration |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * s | Signature Inception |
+ * i +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * g | Key Tag | Sig Length |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * \ | Sig-Algorithm | Reserved | Reserved |
+ * \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * \ ~ Signature ~
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * }</pre>
+ */
+public interface LispSignature {
+
+ // TODO: need to implement LispSignature
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispType.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispType.java
index b039ac7..e18d709 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispType.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispType.java
@@ -35,6 +35,9 @@
/** LISP Map-Notify Message. */
LISP_MAP_NOTIFY(4),
+ /** LISP Map-Referral Message. */
+ LISP_MAP_REFERRAL(5),
+
/** LISP Info-Request or Info-Reply Message. */
LISP_INFO(7),
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControlTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControlTest.java
index 2a1b278..9d1448d 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControlTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispEncapsulatedControlTest.java
@@ -205,7 +205,7 @@
return builder1
.withRecordTtl(100)
- .withAuthoritative(true)
+ .withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecordTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorTest.java
similarity index 77%
rename from protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecordTest.java
rename to protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorTest.java
index 0410178..053b1e9 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecordTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorTest.java
@@ -24,30 +24,33 @@
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.protocols.DefaultLispLocatorRecord.DefaultLocatorRecordBuilder;
-import org.onosproject.lisp.msg.protocols.LispLocatorRecord.LocatorRecordBuilder;
-import org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordWriter;
-import org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispLocator.DefaultLocatorBuilder;
+import org.onosproject.lisp.msg.protocols.DefaultLispLocator.LocatorReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispLocator.LocatorWriter;
+import org.onosproject.lisp.msg.protocols.LispLocator.LocatorBuilder;
import org.onosproject.lisp.msg.types.LispIpv4Address;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
/**
- * Unit tests for DefaultLispLocatorRecord class.
+ * Unit tests for DefaultLispLocator class.
*/
-public final class DefaultLispLocatorRecordTest {
+public final class DefaultLispLocatorTest {
- private LispLocatorRecord record1;
- private LispLocatorRecord sameAsRecord1;
- private LispLocatorRecord record2;
+ private static final String IP_ADDRESS_1 = "192.168.1.1";
+ private static final String IP_ADDRESS_2 = "192.168.1.2";
+
+ private LispLocator record1;
+ private LispLocator sameAsRecord1;
+ private LispLocator record2;
@Before
public void setup() {
- LocatorRecordBuilder builder1 = new DefaultLocatorRecordBuilder();
+ LispLocator.LocatorBuilder builder1 = new DefaultLocatorBuilder();
- LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS_1));
record1 = builder1
.withPriority((byte) 0x01)
@@ -60,7 +63,7 @@
.withLocatorAfi(ipv4Locator1)
.build();
- LocatorRecordBuilder builder2 = new DefaultLocatorRecordBuilder();
+ LocatorBuilder builder2 = new DefaultLocatorBuilder();
sameAsRecord1 = builder2
.withPriority((byte) 0x01)
@@ -73,9 +76,9 @@
.withLocatorAfi(ipv4Locator1)
.build();
- LocatorRecordBuilder builder3 = new DefaultLocatorRecordBuilder();
+ LispLocator.LocatorBuilder builder3 = new DefaultLocatorBuilder();
- LispIpv4Address ipv4Locator2 = new LispIpv4Address(IpAddress.valueOf("192.168.1.2"));
+ LispIpv4Address ipv4Locator2 = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS_2));
record2 = builder3
.withPriority((byte) 0x02)
@@ -98,9 +101,9 @@
@Test
public void testConstruction() {
- DefaultLispLocatorRecord record = (DefaultLispLocatorRecord) record1;
+ DefaultLispLocator record = (DefaultLispLocator) record1;
- LispIpv4Address ipv4Locator = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Locator = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS_1));
assertThat(record.getPriority(), is((byte) 0x01));
assertThat(record.getWeight(), is((byte) 0x01));
@@ -116,11 +119,11 @@
public void testSerialization() throws LispReaderException, LispWriterException, LispParseError {
ByteBuf byteBuf = Unpooled.buffer();
- LocatorRecordWriter writer = new LocatorRecordWriter();
+ LocatorWriter writer = new LocatorWriter();
writer.writeTo(byteBuf, record1);
- LocatorRecordReader reader = new LocatorRecordReader();
- LispLocatorRecord deserialized = reader.readFrom(byteBuf);
+ LocatorReader reader = new LocatorReader();
+ LispLocator deserialized = reader.readFrom(byteBuf);
new EqualsTester()
.addEqualityGroup(record1, deserialized).testEquals();
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java
index 4b7fe12..620496d 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java
@@ -43,6 +43,8 @@
*/
public final class DefaultLispMapNotifyTest {
+ private static final String IP_ADDRESS = "192.168.1.1";
+
private LispMapNotify notify1;
private LispMapNotify sameAsNotify1;
private LispMapNotify notify2;
@@ -85,11 +87,11 @@
private LispMapRecord getMapRecord() {
MapRecordBuilder builder1 = new DefaultMapRecordBuilder();
- LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS));
return builder1
.withRecordTtl(100)
- .withAuthoritative(true)
+ .withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java
index 4c266e5..69bf495 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java
@@ -37,6 +37,9 @@
*/
public final class DefaultLispMapRecordTest {
+ private static final String IP_ADDRESS_1 = "192.168.1.1";
+ private static final String IP_ADDRESS_2 = "192.168.1.2";
+
private LispMapRecord record1;
private LispMapRecord sameAsRecord1;
private LispMapRecord record2;
@@ -46,11 +49,11 @@
MapRecordBuilder builder1 = new DefaultMapRecordBuilder();
- LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS_1));
record1 = builder1
.withRecordTtl(100)
- .withAuthoritative(true)
+ .withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
@@ -61,7 +64,7 @@
sameAsRecord1 = builder2
.withRecordTtl(100)
- .withAuthoritative(true)
+ .withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
@@ -70,11 +73,11 @@
MapRecordBuilder builder3 = new DefaultMapRecordBuilder();
- LispIpv4Address ipv4Locator2 = new LispIpv4Address(IpAddress.valueOf("192.168.1.2"));
+ LispIpv4Address ipv4Locator2 = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS_2));
record2 = builder3
.withRecordTtl(200)
- .withAuthoritative(false)
+ .withIsAuthoritative(false)
.withMapVersionNumber((short) 2)
.withMaskLength((byte) 0x02)
.withAction(LispMapReplyAction.Drop)
@@ -93,7 +96,7 @@
public void testConstruction() {
DefaultLispMapRecord record = (DefaultLispMapRecord) record1;
- LispIpv4Address ipv4Locator = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Locator = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS_1));
assertThat(record.getRecordTtl(), is(100));
assertThat(record.isAuthoritative(), is(true));
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java
index 4e9529d..80d7d25 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java
@@ -43,6 +43,8 @@
*/
public final class DefaultLispMapRegisterTest {
+ private static final String IP_ADDRESS = "192.168.1.1";
+
private LispMapRegister register1;
private LispMapRegister sameAsRegister1;
private LispMapRegister register2;
@@ -91,11 +93,11 @@
private LispMapRecord getMapRecord() {
MapRecordBuilder builder1 = new DefaultMapRecordBuilder();
- LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS));
return builder1
.withRecordTtl(100)
- .withAuthoritative(true)
+ .withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
index dea2492..1f80c97 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
@@ -43,6 +43,8 @@
*/
public final class DefaultLispMapReplyTest {
+ private static final String IP_ADDRESS = "192.168.1.1";
+
private LispMapReply reply1;
private LispMapReply sameAsReply1;
private LispMapReply reply2;
@@ -87,11 +89,11 @@
private LispMapRecord getMapRecord() {
MapRecordBuilder builder1 = new DefaultMapRecordBuilder();
- LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Locator1 = new LispIpv4Address(IpAddress.valueOf(IP_ADDRESS));
return builder1
.withRecordTtl(100)
- .withAuthoritative(true)
+ .withIsAuthoritative(true)
.withMapVersionNumber((short) 1)
.withMaskLength((byte) 0x01)
.withAction(LispMapReplyAction.NativelyForward)
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
index 1b88aa6..ee52c5b 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
@@ -42,6 +42,14 @@
*/
public final class DefaultLispMapRequestTest {
+ private static final String EID_IP_ADDRESS_1 = "192.168.1.1";
+ private static final String EID_IP_ADDRESS_2 = "192.168.1.1";
+
+ private static final String RLOC_IP_ADDRESS_1_1 = "10.1.1.1";
+ private static final String RLOC_IP_ADDRESS_1_2 = "10.1.1.2";
+ private static final String RLOC_IP_ADDRESS_2_1 = "20.1.1.1";
+ private static final String RLOC_IP_ADDRESS_2_2 = "20.1.1.2";
+
private LispMapRequest request1;
private LispMapRequest sameAsRequest1;
private LispMapRequest request2;
@@ -51,10 +59,10 @@
RequestBuilder builder1 = new DefaultRequestBuilder();
- LispIpv4Address ipv4Eid1 = new LispIpv4Address(IpAddress.valueOf("192.168.1.1"));
+ LispIpv4Address ipv4Eid1 = new LispIpv4Address(IpAddress.valueOf(EID_IP_ADDRESS_1));
- LispIpv4Address ipv4Rloc1 = new LispIpv4Address(IpAddress.valueOf("10.1.1.1"));
- LispIpv4Address ipv4Rloc2 = new LispIpv4Address(IpAddress.valueOf("10.1.1.2"));
+ LispIpv4Address ipv4Rloc1 = new LispIpv4Address(IpAddress.valueOf(RLOC_IP_ADDRESS_1_1));
+ LispIpv4Address ipv4Rloc2 = new LispIpv4Address(IpAddress.valueOf(RLOC_IP_ADDRESS_1_2));
List<LispAfiAddress> rlocs1 = ImmutableList.of(ipv4Rloc1, ipv4Rloc2);
List<LispEidRecord> records1 = ImmutableList.of(getEidRecord(), getEidRecord());
@@ -92,10 +100,10 @@
RequestBuilder builder3 = new DefaultRequestBuilder();
- LispIpv4Address ipv4Eid2 = new LispIpv4Address(IpAddress.valueOf("192.168.1.2"));
+ LispIpv4Address ipv4Eid2 = new LispIpv4Address(IpAddress.valueOf(EID_IP_ADDRESS_2));
- LispIpv4Address ipv4Rloc3 = new LispIpv4Address(IpAddress.valueOf("20.1.1.1"));
- LispIpv4Address ipv4Rloc4 = new LispIpv4Address(IpAddress.valueOf("20.1.1.2"));
+ LispIpv4Address ipv4Rloc3 = new LispIpv4Address(IpAddress.valueOf(RLOC_IP_ADDRESS_2_1));
+ LispIpv4Address ipv4Rloc4 = new LispIpv4Address(IpAddress.valueOf(RLOC_IP_ADDRESS_2_2));
List<LispAfiAddress> rlocs2 = ImmutableList.of(ipv4Rloc3, ipv4Rloc4);
@@ -114,7 +122,7 @@
}
private LispEidRecord getEidRecord() {
- LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf("20.1.1.1"));
+ LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf(RLOC_IP_ADDRESS_2_1));
return new LispEidRecord((byte) 24, eid);
}