Jian Li
Committed by Gerrit Code Review

Add NotNull and Argument check during object build for LISP object

Also correct IP enumeration type into IP4.

Change-Id: Id970ee608c885826cfd2de7b5448b2bc451e079f
...@@ -24,6 +24,7 @@ import org.onosproject.lisp.msg.exceptions.LispWriterException; ...@@ -24,6 +24,7 @@ import org.onosproject.lisp.msg.exceptions.LispWriterException;
24 import org.onosproject.lisp.msg.types.LispAfiAddress; 24 import org.onosproject.lisp.msg.types.LispAfiAddress;
25 25
26 import static com.google.common.base.MoreObjects.toStringHelper; 26 import static com.google.common.base.MoreObjects.toStringHelper;
27 +import static com.google.common.base.Preconditions.checkNotNull;
27 import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter; 28 import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
28 29
29 /** 30 /**
...@@ -209,6 +210,9 @@ public final class DefaultLispLocatorRecord implements LispLocatorRecord { ...@@ -209,6 +210,9 @@ public final class DefaultLispLocatorRecord implements LispLocatorRecord {
209 210
210 @Override 211 @Override
211 public LispLocatorRecord build() { 212 public LispLocatorRecord build() {
213 +
214 + checkNotNull(locatorAfi, "Must specify a locator address");
215 +
212 return new DefaultLispLocatorRecord(priority, weight, multicastPriority, 216 return new DefaultLispLocatorRecord(priority, weight, multicastPriority,
213 multicastWeight, localLocator, rlocProbed, routed, locatorAfi); 217 multicastWeight, localLocator, rlocProbed, routed, locatorAfi);
214 } 218 }
......
...@@ -152,7 +152,7 @@ public final class DefaultLispMapNotify implements LispMapNotify { ...@@ -152,7 +152,7 @@ public final class DefaultLispMapNotify implements LispMapNotify {
152 private short authDataLength; 152 private short authDataLength;
153 private byte[] authenticationData; 153 private byte[] authenticationData;
154 private byte recordCount; 154 private byte recordCount;
155 - private List<LispMapRecord> mapRecords; 155 + private List<LispMapRecord> mapRecords = Lists.newArrayList();
156 156
157 @Override 157 @Override
158 public LispType getType() { 158 public LispType getType() {
...@@ -197,8 +197,6 @@ public final class DefaultLispMapNotify implements LispMapNotify { ...@@ -197,8 +197,6 @@ public final class DefaultLispMapNotify implements LispMapNotify {
197 public NotifyBuilder withMapRecords(List<LispMapRecord> mapRecords) { 197 public NotifyBuilder withMapRecords(List<LispMapRecord> mapRecords) {
198 if (mapRecords != null) { 198 if (mapRecords != null) {
199 this.mapRecords = ImmutableList.copyOf(mapRecords); 199 this.mapRecords = ImmutableList.copyOf(mapRecords);
200 - } else {
201 - this.mapRecords = Lists.newArrayList();
202 } 200 }
203 return this; 201 return this;
204 } 202 }
...@@ -210,10 +208,6 @@ public final class DefaultLispMapNotify implements LispMapNotify { ...@@ -210,10 +208,6 @@ public final class DefaultLispMapNotify implements LispMapNotify {
210 authenticationData = new byte[0]; 208 authenticationData = new byte[0];
211 } 209 }
212 210
213 - if (mapRecords == null) {
214 - mapRecords = Lists.newArrayList();
215 - }
216 -
217 return new DefaultLispMapNotify(nonce, keyId, authDataLength, 211 return new DefaultLispMapNotify(nonce, keyId, authDataLength,
218 authenticationData, recordCount, mapRecords); 212 authenticationData, recordCount, mapRecords);
219 } 213 }
......
...@@ -28,6 +28,7 @@ import org.onosproject.lisp.msg.types.LispAfiAddress; ...@@ -28,6 +28,7 @@ import org.onosproject.lisp.msg.types.LispAfiAddress;
28 import java.util.List; 28 import java.util.List;
29 29
30 import static com.google.common.base.MoreObjects.toStringHelper; 30 import static com.google.common.base.MoreObjects.toStringHelper;
31 +import static com.google.common.base.Preconditions.checkNotNull;
31 import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter; 32 import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
32 import static org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordWriter; 33 import static org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordWriter;
33 34
...@@ -163,7 +164,7 @@ public final class DefaultLispMapRecord implements LispMapRecord { ...@@ -163,7 +164,7 @@ public final class DefaultLispMapRecord implements LispMapRecord {
163 private boolean authoritative; 164 private boolean authoritative;
164 private short mapVersionNumber; 165 private short mapVersionNumber;
165 private LispAfiAddress eidPrefixAfi; 166 private LispAfiAddress eidPrefixAfi;
166 - private List<LispLocatorRecord> locatorRecords; 167 + private List<LispLocatorRecord> locatorRecords = Lists.newArrayList();
167 168
168 @Override 169 @Override
169 public MapRecordBuilder withRecordTtl(int recordTtl) { 170 public MapRecordBuilder withRecordTtl(int recordTtl) {
...@@ -211,8 +212,6 @@ public final class DefaultLispMapRecord implements LispMapRecord { ...@@ -211,8 +212,6 @@ public final class DefaultLispMapRecord implements LispMapRecord {
211 public MapRecordBuilder withLocators(List<LispLocatorRecord> records) { 212 public MapRecordBuilder withLocators(List<LispLocatorRecord> records) {
212 if (records != null) { 213 if (records != null) {
213 this.locatorRecords = ImmutableList.copyOf(records); 214 this.locatorRecords = ImmutableList.copyOf(records);
214 - } else {
215 - this.locatorRecords = Lists.newArrayList();
216 } 215 }
217 return this; 216 return this;
218 } 217 }
...@@ -220,9 +219,7 @@ public final class DefaultLispMapRecord implements LispMapRecord { ...@@ -220,9 +219,7 @@ public final class DefaultLispMapRecord implements LispMapRecord {
220 @Override 219 @Override
221 public LispMapRecord build() { 220 public LispMapRecord build() {
222 221
223 - if (locatorRecords == null) { 222 + checkNotNull(eidPrefixAfi, "Must specify an EID prefix");
224 - locatorRecords = Lists.newArrayList();
225 - }
226 223
227 return new DefaultLispMapRecord(recordTtl, locatorCount, maskLength, 224 return new DefaultLispMapRecord(recordTtl, locatorCount, maskLength,
228 action, authoritative, mapVersionNumber, eidPrefixAfi, locatorRecords); 225 action, authoritative, mapVersionNumber, eidPrefixAfi, locatorRecords);
......
...@@ -175,9 +175,9 @@ public final class DefaultLispMapRegister implements LispMapRegister { ...@@ -175,9 +175,9 @@ public final class DefaultLispMapRegister implements LispMapRegister {
175 private long nonce; 175 private long nonce;
176 private short keyId; 176 private short keyId;
177 private short authDataLength; 177 private short authDataLength;
178 - private byte[] authenticationData; 178 + private byte[] authenticationData = new byte[0];
179 private byte recordCount; 179 private byte recordCount;
180 - private List<LispMapRecord> mapRecords; 180 + private List<LispMapRecord> mapRecords = Lists.newArrayList();
181 private boolean proxyMapReply; 181 private boolean proxyMapReply;
182 private boolean wantMapNotify; 182 private boolean wantMapNotify;
183 183
...@@ -226,8 +226,6 @@ public final class DefaultLispMapRegister implements LispMapRegister { ...@@ -226,8 +226,6 @@ public final class DefaultLispMapRegister implements LispMapRegister {
226 public RegisterBuilder withAuthenticationData(byte[] authenticationData) { 226 public RegisterBuilder withAuthenticationData(byte[] authenticationData) {
227 if (authenticationData != null) { 227 if (authenticationData != null) {
228 this.authenticationData = authenticationData; 228 this.authenticationData = authenticationData;
229 - } else {
230 - this.authenticationData = new byte[0];
231 } 229 }
232 return this; 230 return this;
233 } 231 }
...@@ -236,22 +234,12 @@ public final class DefaultLispMapRegister implements LispMapRegister { ...@@ -236,22 +234,12 @@ public final class DefaultLispMapRegister implements LispMapRegister {
236 public RegisterBuilder withMapRecords(List<LispMapRecord> mapRecords) { 234 public RegisterBuilder withMapRecords(List<LispMapRecord> mapRecords) {
237 if (mapRecords != null) { 235 if (mapRecords != null) {
238 this.mapRecords = ImmutableList.copyOf(mapRecords); 236 this.mapRecords = ImmutableList.copyOf(mapRecords);
239 - } else {
240 - this.mapRecords = Lists.newArrayList();
241 } 237 }
242 return this; 238 return this;
243 } 239 }
244 240
245 @Override 241 @Override
246 public LispMapRegister build() { 242 public LispMapRegister build() {
247 - if (authenticationData == null) {
248 - authenticationData = new byte[0];
249 - }
250 -
251 - if (mapRecords == null) {
252 - mapRecords = Lists.newArrayList();
253 - }
254 -
255 return new DefaultLispMapRegister(nonce, keyId, authDataLength, 243 return new DefaultLispMapRegister(nonce, keyId, authDataLength,
256 authenticationData, recordCount, mapRecords, proxyMapReply, wantMapNotify); 244 authenticationData, recordCount, mapRecords, proxyMapReply, wantMapNotify);
257 } 245 }
......
...@@ -146,7 +146,7 @@ public final class DefaultLispMapReply implements LispMapReply { ...@@ -146,7 +146,7 @@ public final class DefaultLispMapReply implements LispMapReply {
146 private boolean probe; 146 private boolean probe;
147 private boolean etr; 147 private boolean etr;
148 private boolean security; 148 private boolean security;
149 - private List<LispMapRecord> mapRecords; 149 + private List<LispMapRecord> mapRecords = Lists.newArrayList();
150 150
151 @Override 151 @Override
152 public LispType getType() { 152 public LispType getType() {
...@@ -185,22 +185,14 @@ public final class DefaultLispMapReply implements LispMapReply { ...@@ -185,22 +185,14 @@ public final class DefaultLispMapReply implements LispMapReply {
185 185
186 @Override 186 @Override
187 public ReplyBuilder withMapRecords(List<LispMapRecord> mapRecords) { 187 public ReplyBuilder withMapRecords(List<LispMapRecord> mapRecords) {
188 -
189 if (this.mapRecords != null) { 188 if (this.mapRecords != null) {
190 this.mapRecords = ImmutableList.copyOf(mapRecords); 189 this.mapRecords = ImmutableList.copyOf(mapRecords);
191 - } else {
192 - this.mapRecords = Lists.newArrayList();
193 } 190 }
194 return this; 191 return this;
195 } 192 }
196 193
197 @Override 194 @Override
198 public LispMapReply build() { 195 public LispMapReply build() {
199 -
200 - if (mapRecords == null) {
201 - mapRecords = Lists.newArrayList();
202 - }
203 -
204 return new DefaultLispMapReply(nonce, recordCount, probe, etr, security, mapRecords); 196 return new DefaultLispMapReply(nonce, recordCount, probe, etr, security, mapRecords);
205 } 197 }
206 } 198 }
......
...@@ -270,23 +270,16 @@ public final class DefaultLispMapRequest implements LispMapRequest { ...@@ -270,23 +270,16 @@ public final class DefaultLispMapRequest implements LispMapRequest {
270 270
271 @Override 271 @Override
272 public RequestBuilder withItrRlocs(List<LispAfiAddress> itrRlocs) { 272 public RequestBuilder withItrRlocs(List<LispAfiAddress> itrRlocs) {
273 -
274 if (itrRlocs != null) { 273 if (itrRlocs != null) {
275 this.itrRlocs = ImmutableList.copyOf(itrRlocs); 274 this.itrRlocs = ImmutableList.copyOf(itrRlocs);
276 - } else {
277 - this.itrRlocs = Lists.newArrayList();
278 } 275 }
279 -
280 return this; 276 return this;
281 } 277 }
282 278
283 @Override 279 @Override
284 public RequestBuilder withEidRecords(List<LispEidRecord> records) { 280 public RequestBuilder withEidRecords(List<LispEidRecord> records) {
285 -
286 if (records != null) { 281 if (records != null) {
287 this.eidRecords = ImmutableList.copyOf(records); 282 this.eidRecords = ImmutableList.copyOf(records);
288 - } else {
289 - this.eidRecords = Lists.newArrayList();
290 } 283 }
291 return this; 284 return this;
292 } 285 }
......
...@@ -21,6 +21,7 @@ import org.onosproject.lisp.msg.exceptions.LispReaderException; ...@@ -21,6 +21,7 @@ import org.onosproject.lisp.msg.exceptions.LispReaderException;
21 import org.onosproject.lisp.msg.exceptions.LispWriterException; 21 import org.onosproject.lisp.msg.exceptions.LispWriterException;
22 import org.onosproject.lisp.msg.types.LispAfiAddress; 22 import org.onosproject.lisp.msg.types.LispAfiAddress;
23 23
24 +import static com.google.common.base.Preconditions.checkNotNull;
24 import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter; 25 import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
25 26
26 /** 27 /**
...@@ -39,6 +40,9 @@ public final class LispEidRecord { ...@@ -39,6 +40,9 @@ public final class LispEidRecord {
39 */ 40 */
40 public LispEidRecord(byte maskLength, LispAfiAddress prefix) { 41 public LispEidRecord(byte maskLength, LispAfiAddress prefix) {
41 this.maskLength = maskLength; 42 this.maskLength = maskLength;
43 +
44 + checkNotNull(prefix, "Must specify an address prefix");
45 +
42 this.prefix = prefix; 46 this.prefix = prefix;
43 } 47 }
44 48
......
...@@ -26,7 +26,7 @@ package org.onosproject.lisp.msg.types; ...@@ -26,7 +26,7 @@ package org.onosproject.lisp.msg.types;
26 public enum AddressFamilyIdentifierEnum { 26 public enum AddressFamilyIdentifierEnum {
27 27
28 NO_ADDRESS(0), // Reserved 28 NO_ADDRESS(0), // Reserved
29 - IP(1), // IP (IP version 4) 29 + IP4(1), // IP4 (IP version 4)
30 IP6(2), // IP6 (IP version 6) 30 IP6(2), // IP6 (IP version 6)
31 DNS(16), // Domain Name System 31 DNS(16), // Domain Name System
32 DISTINGUISHED_NAME(17), // Distinguished Name 32 DISTINGUISHED_NAME(17), // Distinguished Name
......
...@@ -90,7 +90,7 @@ public abstract class LispAfiAddress { ...@@ -90,7 +90,7 @@ public abstract class LispAfiAddress {
90 short afiCode = (short) byteBuf.getUnsignedShort(index); 90 short afiCode = (short) byteBuf.getUnsignedShort(index);
91 91
92 // handle IPv4 and IPv6 address 92 // handle IPv4 and IPv6 address
93 - if (afiCode == IP.getIanaCode() || 93 + if (afiCode == IP4.getIanaCode() ||
94 afiCode == IP6.getIanaCode()) { 94 afiCode == IP6.getIanaCode()) {
95 return new LispIpAddress.IpAddressReader().readFrom(byteBuf); 95 return new LispIpAddress.IpAddressReader().readFrom(byteBuf);
96 } 96 }
...@@ -131,7 +131,7 @@ public abstract class LispAfiAddress { ...@@ -131,7 +131,7 @@ public abstract class LispAfiAddress {
131 byteBuf.writeShort(address.getAfi().getIanaCode()); 131 byteBuf.writeShort(address.getAfi().getIanaCode());
132 132
133 switch (address.getAfi()) { 133 switch (address.getAfi()) {
134 - case IP: 134 + case IP4:
135 new LispIpAddress.IpAddressWriter().writeTo(byteBuf, (LispIpv4Address) address); 135 new LispIpAddress.IpAddressWriter().writeTo(byteBuf, (LispIpv4Address) address);
136 break; 136 break;
137 case IP6: 137 case IP6:
......
...@@ -25,6 +25,7 @@ import java.util.Arrays; ...@@ -25,6 +25,7 @@ import java.util.Arrays;
25 import java.util.Objects; 25 import java.util.Objects;
26 26
27 import static com.google.common.base.MoreObjects.toStringHelper; 27 import static com.google.common.base.MoreObjects.toStringHelper;
28 +import static com.google.common.base.Preconditions.checkNotNull;
28 29
29 /** 30 /**
30 * Application data type LCAF address class. 31 * Application data type LCAF address class.
...@@ -308,6 +309,9 @@ public final class LispAppDataLcafAddress extends LispLcafAddress { ...@@ -308,6 +309,9 @@ public final class LispAppDataLcafAddress extends LispLcafAddress {
308 * @return LispAddDataLcafAddress instance 309 * @return LispAddDataLcafAddress instance
309 */ 310 */
310 public LispAppDataLcafAddress build() { 311 public LispAppDataLcafAddress build() {
312 +
313 + checkNotNull(address, "Must specify an address");
314 +
311 return new LispAppDataLcafAddress(reserved1, reserved2, flag, length, 315 return new LispAppDataLcafAddress(reserved1, reserved2, flag, length,
312 protocol, ipTos, localPortLow, localPortHigh, remotePortLow, 316 protocol, ipTos, localPortLow, localPortHigh, remotePortLow,
313 remotePortHigh, address); 317 remotePortHigh, address);
......
...@@ -35,7 +35,7 @@ public class LispIpv4Address extends LispIpAddress { ...@@ -35,7 +35,7 @@ public class LispIpv4Address extends LispIpAddress {
35 * @param address IP address 35 * @param address IP address
36 */ 36 */
37 public LispIpv4Address(IpAddress address) { 37 public LispIpv4Address(IpAddress address) {
38 - super(address, AddressFamilyIdentifierEnum.IP); 38 + super(address, AddressFamilyIdentifierEnum.IP4);
39 checkArgument(address.isIp4()); 39 checkArgument(address.isIp4());
40 } 40 }
41 41
......
...@@ -19,6 +19,8 @@ import io.netty.buffer.ByteBuf; ...@@ -19,6 +19,8 @@ import io.netty.buffer.ByteBuf;
19 import org.onosproject.lisp.msg.exceptions.LispParseError; 19 import org.onosproject.lisp.msg.exceptions.LispParseError;
20 import org.onosproject.lisp.msg.exceptions.LispReaderException; 20 import org.onosproject.lisp.msg.exceptions.LispReaderException;
21 import org.onosproject.lisp.msg.exceptions.LispWriterException; 21 import org.onosproject.lisp.msg.exceptions.LispWriterException;
22 +import org.slf4j.Logger;
23 +import org.slf4j.LoggerFactory;
22 24
23 import java.util.Objects; 25 import java.util.Objects;
24 26
...@@ -41,6 +43,8 @@ import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.*; ...@@ -41,6 +43,8 @@ import static org.onosproject.lisp.msg.types.LispCanonicalAddressFormatEnum.*;
41 */ 43 */
42 public class LispLcafAddress extends LispAfiAddress { 44 public class LispLcafAddress extends LispAfiAddress {
43 45
46 + private static final Logger log = LoggerFactory.getLogger(LispLcafAddress.class);
47 +
44 private final LispCanonicalAddressFormatEnum lcafType; 48 private final LispCanonicalAddressFormatEnum lcafType;
45 private final byte reserved1; 49 private final byte reserved1;
46 private final byte reserved2; 50 private final byte reserved2;
...@@ -369,6 +373,8 @@ public class LispLcafAddress extends LispAfiAddress { ...@@ -369,6 +373,8 @@ public class LispLcafAddress extends LispAfiAddress {
369 return new LispSourceDestLcafAddress.SourceDestLcafAddressReader().readFrom(byteBuf); 373 return new LispSourceDestLcafAddress.SourceDestLcafAddressReader().readFrom(byteBuf);
370 } 374 }
371 375
376 + log.warn("Unsupported LCAF type, please specify a correct LCAF type");
377 +
372 return null; 378 return null;
373 } 379 }
374 } 380 }
...@@ -397,7 +403,9 @@ public class LispLcafAddress extends LispAfiAddress { ...@@ -397,7 +403,9 @@ public class LispLcafAddress extends LispAfiAddress {
397 new LispSourceDestLcafAddress.SourceDestLcafAddressWriter().writeTo(byteBuf, 403 new LispSourceDestLcafAddress.SourceDestLcafAddressWriter().writeTo(byteBuf,
398 (LispSourceDestLcafAddress) address); 404 (LispSourceDestLcafAddress) address);
399 break; 405 break;
400 - default: break; // TODO: need to log warning message 406 + default:
407 + log.warn("Unsupported LCAF type, please specify a correct LCAF type");
408 + break;
401 } 409 }
402 } 410 }
403 } 411 }
......
...@@ -25,6 +25,7 @@ import java.util.List; ...@@ -25,6 +25,7 @@ import java.util.List;
25 import java.util.Objects; 25 import java.util.Objects;
26 26
27 import static com.google.common.base.MoreObjects.toStringHelper; 27 import static com.google.common.base.MoreObjects.toStringHelper;
28 +import static com.google.common.base.Preconditions.checkArgument;
28 29
29 /** 30 /**
30 * List type LCAF address class. 31 * List type LCAF address class.
...@@ -67,6 +68,10 @@ public final class LispListLcafAddress extends LispLcafAddress { ...@@ -67,6 +68,10 @@ public final class LispListLcafAddress extends LispLcafAddress {
67 */ 68 */
68 public LispListLcafAddress(List<LispAfiAddress> addresses) { 69 public LispListLcafAddress(List<LispAfiAddress> addresses) {
69 super(LispCanonicalAddressFormatEnum.LIST, LENGTH); 70 super(LispCanonicalAddressFormatEnum.LIST, LENGTH);
71 +
72 + checkArgument(checkAddressValidity(addresses), "Malformed addresses, please " +
73 + "specify IPv4 address first, and then specify IPv6 address");
74 +
70 this.addresses = addresses; 75 this.addresses = addresses;
71 } 76 }
72 77
...@@ -81,10 +86,42 @@ public final class LispListLcafAddress extends LispLcafAddress { ...@@ -81,10 +86,42 @@ public final class LispListLcafAddress extends LispLcafAddress {
81 public LispListLcafAddress(byte reserved1, byte reserved2, byte flag, 86 public LispListLcafAddress(byte reserved1, byte reserved2, byte flag,
82 List<LispAfiAddress> addresses) { 87 List<LispAfiAddress> addresses) {
83 super(LispCanonicalAddressFormatEnum.LIST, reserved1, flag, reserved2, LENGTH); 88 super(LispCanonicalAddressFormatEnum.LIST, reserved1, flag, reserved2, LENGTH);
89 +
90 + checkArgument(checkAddressValidity(addresses), "Malformed addresses, please " +
91 + "specify IPv4 address first, and then specify IPv6 address");
92 +
84 this.addresses = addresses; 93 this.addresses = addresses;
85 } 94 }
86 95
87 /** 96 /**
97 + * Checks the validity of a collection of input addresses.
98 + *
99 + * @param addresses a collection of addresses
100 + * @return validity result
101 + */
102 + private boolean checkAddressValidity(List<LispAfiAddress> addresses) {
103 + // we need to make sure that the address collection is comprised of
104 + // one IPv4 address and one IPv6 address
105 +
106 + if (addresses == null || addresses.size() != 2) {
107 + return false;
108 + }
109 +
110 + LispAfiAddress ipv4 = addresses.get(0);
111 + LispAfiAddress ipv6 = addresses.get(1);
112 +
113 + if (ipv4.getAfi() != AddressFamilyIdentifierEnum.IP4) {
114 + return false;
115 + }
116 +
117 + if (ipv6.getAfi() != AddressFamilyIdentifierEnum.IP6) {
118 + return false;
119 + }
120 +
121 + return true;
122 + }
123 +
124 + /**
88 * Obtains a set of AFI addresses including IPv4 and IPv6. 125 * Obtains a set of AFI addresses including IPv4 and IPv6.
89 * 126 *
90 * @return a set of AFI addresses 127 * @return a set of AFI addresses
......
...@@ -23,6 +23,7 @@ import org.onosproject.lisp.msg.exceptions.LispWriterException; ...@@ -23,6 +23,7 @@ import org.onosproject.lisp.msg.exceptions.LispWriterException;
23 import java.util.Objects; 23 import java.util.Objects;
24 24
25 import static com.google.common.base.MoreObjects.toStringHelper; 25 import static com.google.common.base.MoreObjects.toStringHelper;
26 +import static com.google.common.base.Preconditions.checkNotNull;
26 27
27 /** 28 /**
28 * Instance ID type LCAF address class. 29 * Instance ID type LCAF address class.
...@@ -181,6 +182,9 @@ public final class LispSegmentLcafAddress extends LispLcafAddress { ...@@ -181,6 +182,9 @@ public final class LispSegmentLcafAddress extends LispLcafAddress {
181 * @return LispSegmentLcafAddress instance 182 * @return LispSegmentLcafAddress instance
182 */ 183 */
183 public LispSegmentLcafAddress build() { 184 public LispSegmentLcafAddress build() {
185 +
186 + checkNotNull(address, "Must specify an address");
187 +
184 return new LispSegmentLcafAddress(reserved1, idMaskLength, flag, 188 return new LispSegmentLcafAddress(reserved1, idMaskLength, flag,
185 length, instanceId, address); 189 length, instanceId, address);
186 } 190 }
......
...@@ -23,6 +23,7 @@ import org.onosproject.lisp.msg.exceptions.LispWriterException; ...@@ -23,6 +23,7 @@ import org.onosproject.lisp.msg.exceptions.LispWriterException;
23 import java.util.Objects; 23 import java.util.Objects;
24 24
25 import static com.google.common.base.MoreObjects.toStringHelper; 25 import static com.google.common.base.MoreObjects.toStringHelper;
26 +import static com.google.common.base.Preconditions.checkNotNull;
26 27
27 /** 28 /**
28 * Source/Dest key type LCAF address class. 29 * Source/Dest key type LCAF address class.
...@@ -248,6 +249,10 @@ public final class LispSourceDestLcafAddress extends LispLcafAddress { ...@@ -248,6 +249,10 @@ public final class LispSourceDestLcafAddress extends LispLcafAddress {
248 * @return LispSourceDestLcafAddress instance 249 * @return LispSourceDestLcafAddress instance
249 */ 250 */
250 public LispSourceDestLcafAddress build() { 251 public LispSourceDestLcafAddress build() {
252 +
253 + checkNotNull(srcPrefix, "Must specify a source address prefix");
254 + checkNotNull(dstPrefix, "Must specify a destination address prefix");
255 +
251 return new LispSourceDestLcafAddress(reserved1, reserved2, flag, length, 256 return new LispSourceDestLcafAddress(reserved1, reserved2, flag, length,
252 reserved, srcMaskLength, dstMaskLength, srcPrefix, dstPrefix); 257 reserved, srcMaskLength, dstMaskLength, srcPrefix, dstPrefix);
253 } 258 }
......