Add NotNull and Argument check during object build for LISP object
Also correct IP enumeration type into IP4.
Change-Id: Id970ee608c885826cfd2de7b5448b2bc451e079f
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
index 68834db..c51a8aa 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
@@ -25,6 +25,7 @@
import java.util.Objects;
import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkArgument;
/**
* List type LCAF address class.
@@ -67,6 +68,10 @@
*/
public LispListLcafAddress(List<LispAfiAddress> addresses) {
super(LispCanonicalAddressFormatEnum.LIST, LENGTH);
+
+ checkArgument(checkAddressValidity(addresses), "Malformed addresses, please " +
+ "specify IPv4 address first, and then specify IPv6 address");
+
this.addresses = addresses;
}
@@ -81,10 +86,42 @@
public LispListLcafAddress(byte reserved1, byte reserved2, byte flag,
List<LispAfiAddress> addresses) {
super(LispCanonicalAddressFormatEnum.LIST, reserved1, flag, reserved2, LENGTH);
+
+ checkArgument(checkAddressValidity(addresses), "Malformed addresses, please " +
+ "specify IPv4 address first, and then specify IPv6 address");
+
this.addresses = addresses;
}
/**
+ * Checks the validity of a collection of input addresses.
+ *
+ * @param addresses a collection of addresses
+ * @return validity result
+ */
+ private boolean checkAddressValidity(List<LispAfiAddress> addresses) {
+ // we need to make sure that the address collection is comprised of
+ // one IPv4 address and one IPv6 address
+
+ if (addresses == null || addresses.size() != 2) {
+ return false;
+ }
+
+ LispAfiAddress ipv4 = addresses.get(0);
+ LispAfiAddress ipv6 = addresses.get(1);
+
+ if (ipv4.getAfi() != AddressFamilyIdentifierEnum.IP4) {
+ return false;
+ }
+
+ if (ipv6.getAfi() != AddressFamilyIdentifierEnum.IP6) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
* Obtains a set of AFI addresses including IPv4 and IPv6.
*
* @return a set of AFI addresses