blob: 13469e91d6631ecc6bcab2f54a6f086f91fa0fe9 [file] [log] [blame]
bharat saraswalf7364db2015-08-11 13:39:31 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
bharat saraswalf7364db2015-08-11 13:39:31 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.pcepio.protocol.ver1;
18
19import java.util.LinkedList;
20import java.util.ListIterator;
21
22import org.jboss.netty.buffer.ChannelBuffer;
23import org.onosproject.pcepio.exceptions.PcepParseException;
24import org.onosproject.pcepio.protocol.PcepLspObject;
25import org.onosproject.pcepio.types.PcepErrorDetailInfo;
26import org.onosproject.pcepio.types.PcepObjectHeader;
27import org.onosproject.pcepio.types.PcepValueType;
Avantika-Huawei56c11842016-04-28 00:56:56 +053028import org.onosproject.pcepio.types.StatefulIPv4LspIdentifiersTlv;
Mahesh Poojary S5eab8572015-09-01 17:45:48 +053029import org.onosproject.pcepio.types.StatefulLspDbVerTlv;
bharat saraswalf7364db2015-08-11 13:39:31 +053030import org.onosproject.pcepio.types.StatefulLspErrorCodeTlv;
31import org.onosproject.pcepio.types.StatefulRsvpErrorSpecTlv;
32import org.onosproject.pcepio.types.SymbolicPathNameTlv;
33import org.slf4j.Logger;
34import org.slf4j.LoggerFactory;
35
36import com.google.common.base.MoreObjects;
37
Phanendra Manda51fb9c22015-09-01 16:17:41 +053038/**
39 * Provides PCEP lsp object.
40 */
41public class PcepLspObjectVer1 implements PcepLspObject {
42
43 /*
bharat saraswalf7364db2015-08-11 13:39:31 +053044 message format.
45 Reference : draft-ietf-pce-stateful-pce-11, section 7.3.
46 0 1 2 3
47 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
48 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49 | Object-Class | OT |Res|P|I| Object Length (bytes) |
50 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Avantika-Huawei7f7376a2016-05-11 17:07:50 +053051 | PLSP-ID | Flag |C| O|A|R|S|D|
bharat saraswalf7364db2015-08-11 13:39:31 +053052 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53 // TLVs //
54 | |
55 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56
57 The LSP Object format
Phanendra Manda51fb9c22015-09-01 16:17:41 +053058 */
bharat saraswalf7364db2015-08-11 13:39:31 +053059 protected static final Logger log = LoggerFactory.getLogger(PcepLspObjectVer1.class);
60
61 public static final byte LSP_OBJ_TYPE = 1;
62 public static final byte LSP_OBJ_CLASS = 32;
63 public static final byte LSP_OBJECT_VERSION = 1;
64
65 // LSP_OBJ_MINIMUM_LENGTH = CommonHeaderLen(4)+ LspObjectHeaderLen(4)+TlvAssumedMinLength(8)
66 public static final short LSP_OBJ_MINIMUM_LENGTH = 16;
67
68 public static final int DEFAULT_PLSPID = 0;
69 public static final byte DEFAULT_OFLAG = 1;
70 public static final boolean DEFAULT_AFLAG = false;
71 public static final boolean DEFAULT_RFLAG = false;
72 public static final boolean DEFAULT_SFLAG = false;
73 public static final boolean DEFAULT_DFLAG = false;
Avantika-Huaweid925da82016-05-10 12:47:28 +053074 public static final boolean DEFAULT_CFLAG = false;
bharat saraswalf7364db2015-08-11 13:39:31 +053075 public static final int OBJECT_HEADER_LENGTH = 4;
76 public static final int PLSPID_SHIFT_VALUE = 12;
Avantika-Huaweid925da82016-05-10 12:47:28 +053077 public static final int CFLAG_SHIFT_VALUE = 7;
bharat saraswalf7364db2015-08-11 13:39:31 +053078 public static final int OFLAG_SHIFT_VALUE = 4;
79 public static final int AFLAG_SHIFT_VALUE = 3;
80 public static final int RFLAG_SHIFT_VALUE = 2;
81 public static final int SFLAG_SHIFT_VALUE = 1;
82 public static final int PLSPID_TEMP_SHIFT_VALUE = 0xFFFFF000;
Avantika-Huaweid925da82016-05-10 12:47:28 +053083 public static final int CFLAG_TEMP_SHIFT_VALUE = 0x80;
bharat saraswalf7364db2015-08-11 13:39:31 +053084 public static final int OFLAG_TEMP_SHIFT_VALUE = 0x70;
85 public static final int AFLAG_TEMP_SHIFT_VALUE = 0x08;
86 public static final int RFLAG_TEMP_SHIFT_VALUE = 0x04;
87 public static final int SFLAG_TEMP_SHIFT_VALUE = 0x02;
88 public static final int DFLAG_TEMP_SHIFT_VALUE = 0x01;
89 public static final int BIT_SET = 1;
90 public static final int BIT_RESET = 0;
91 public static final int MINIMUM_COMMON_HEADER_LENGTH = 4;
92
93 static final PcepObjectHeader DEFAULT_LSP_OBJECT_HEADER = new PcepObjectHeader(LSP_OBJ_CLASS, LSP_OBJ_TYPE,
94 PcepObjectHeader.REQ_OBJ_OPTIONAL_PROCESS, PcepObjectHeader.RSP_OBJ_PROCESSED, LSP_OBJ_MINIMUM_LENGTH);
95
96 private PcepObjectHeader lspObjHeader;
97 private int iPlspId;
98 // 3-bits
99 private byte yOFlag;
100 private boolean bAFlag;
101 private boolean bRFlag;
102 private boolean bSFlag;
103 private boolean bDFlag;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530104 private boolean bCFlag;
bharat saraswalf7364db2015-08-11 13:39:31 +0530105
106 // Optional TLV
107 private LinkedList<PcepValueType> llOptionalTlv;
108
109 /**
110 * Constructor to initialize all the member variables.
111 *
112 * @param lspObjHeader lsp object header
113 * @param iPlspId plsp id
114 * @param yOFlag O flag
115 * @param bAFlag A flag
116 * @param bRFlag R flag
117 * @param bSFlag S flag
118 * @param bDFlag D flag
Avantika-Huawei7f7376a2016-05-11 17:07:50 +0530119 * @param bCFlag C flag
bharat saraswalf7364db2015-08-11 13:39:31 +0530120 * @param llOptionalTlv list of optional tlv
121 */
122 public PcepLspObjectVer1(PcepObjectHeader lspObjHeader, int iPlspId, byte yOFlag, boolean bAFlag, boolean bRFlag,
Avantika-Huaweid925da82016-05-10 12:47:28 +0530123 boolean bSFlag, boolean bDFlag, boolean bCFlag, LinkedList<PcepValueType> llOptionalTlv) {
bharat saraswalf7364db2015-08-11 13:39:31 +0530124
125 this.lspObjHeader = lspObjHeader;
126 this.iPlspId = iPlspId;
127 this.yOFlag = yOFlag;
128 this.bAFlag = bAFlag;
129 this.bRFlag = bRFlag;
130 this.bSFlag = bSFlag;
131 this.bDFlag = bDFlag;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530132 this.bCFlag = bCFlag;
bharat saraswalf7364db2015-08-11 13:39:31 +0530133 this.llOptionalTlv = llOptionalTlv;
134 }
135
136 /**
137 * Sets lsp Object Header.
138 *
139 * @param obj lsp object header
140 */
141 public void setLspObjHeader(PcepObjectHeader obj) {
142 this.lspObjHeader = obj;
143 }
144
145 @Override
146 public void setPlspId(int iPlspId) {
147 this.iPlspId = iPlspId;
148 }
149
150 @Override
Avantika-Huaweid925da82016-05-10 12:47:28 +0530151 public void setCFlag(boolean bCFlag) {
152 this.bCFlag = bCFlag;
153 }
154
155 @Override
bharat saraswalf7364db2015-08-11 13:39:31 +0530156 public void setOFlag(byte yOFlag) {
157 this.yOFlag = yOFlag;
158 }
159
160 @Override
161 public void setAFlag(boolean bAFlag) {
162 this.bAFlag = bAFlag;
163 }
164
165 @Override
166 public void setRFlag(boolean bRFlag) {
167 this.bRFlag = bRFlag;
168 }
169
170 @Override
171 public void setSFlag(boolean bSFlag) {
172 this.bSFlag = bSFlag;
173 }
174
175 @Override
176 public void setDFlag(boolean bDFlag) {
177 this.bDFlag = bDFlag;
178 }
179
180 /**
181 * Returns lsp object header.
182 *
183 * @return lspObjHeader
184 */
185 public PcepObjectHeader getLspObjHeader() {
186 return this.lspObjHeader;
187 }
188
189 @Override
190 public int getPlspId() {
191 return this.iPlspId;
192 }
193
194 @Override
Avantika-Huaweid925da82016-05-10 12:47:28 +0530195 public boolean getCFlag() {
196 return this.bCFlag;
197 }
198
199 @Override
bharat saraswalf7364db2015-08-11 13:39:31 +0530200 public byte getOFlag() {
201 return this.yOFlag;
202 }
203
204 @Override
205 public boolean getAFlag() {
206 return this.bAFlag;
207 }
208
209 @Override
210 public boolean getRFlag() {
211 return this.bRFlag;
212 }
213
214 @Override
215 public boolean getSFlag() {
216 return this.bSFlag;
217 }
218
219 @Override
220 public boolean getDFlag() {
221 return this.bDFlag;
222 }
223
224 @Override
225 public LinkedList<PcepValueType> getOptionalTlv() {
226 return this.llOptionalTlv;
227 }
228
229 @Override
230 public void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv) {
231 this.llOptionalTlv = llOptionalTlv;
232 }
233
234 /**
235 * Parse channel buffer and returns object of PcepLspObject.
236 *
237 * @param cb of type channel buffer
238 * @return object of PcepLspObject
239 * @throws PcepParseException when lsp object is not present in channel buffer
240 */
241 public static PcepLspObject read(ChannelBuffer cb) throws PcepParseException {
242
243 PcepObjectHeader lspObjHeader;
244 int iPlspId;
245 // 3-bits
246 byte yOFlag;
247 boolean bAFlag;
248 boolean bRFlag;
249 boolean bSFlag;
250 boolean bDFlag;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530251 boolean bCFlag;
bharat saraswalf7364db2015-08-11 13:39:31 +0530252
253 // Optional TLV
Sho SHIMIZU9b8274c2015-09-04 15:54:24 -0700254 LinkedList<PcepValueType> llOptionalTlv = new LinkedList<>();
bharat saraswalf7364db2015-08-11 13:39:31 +0530255
256 lspObjHeader = PcepObjectHeader.read(cb);
257
258 if (lspObjHeader.getObjClass() != PcepLspObjectVer1.LSP_OBJ_CLASS) {
259 throw new PcepParseException(PcepErrorDetailInfo.ERROR_TYPE_6, PcepErrorDetailInfo.ERROR_VALUE_8);
260 }
261 //take only LspObject buffer.
262 ChannelBuffer tempCb = cb.readBytes(lspObjHeader.getObjLen() - OBJECT_HEADER_LENGTH);
263
264 Integer iTemp = tempCb.readInt();
265 iPlspId = (iTemp & PLSPID_TEMP_SHIFT_VALUE) >> PLSPID_SHIFT_VALUE;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530266 bCFlag = ((iTemp & CFLAG_TEMP_SHIFT_VALUE) >> CFLAG_SHIFT_VALUE) > 0;
bharat saraswalf7364db2015-08-11 13:39:31 +0530267 Integer iX = (iTemp & OFLAG_TEMP_SHIFT_VALUE) >> OFLAG_SHIFT_VALUE;
268 yOFlag = iX.byteValue();
269 iX = (iTemp & AFLAG_TEMP_SHIFT_VALUE) >> AFLAG_SHIFT_VALUE;
Phanendra Mandaf346ea82015-09-04 15:21:39 -0700270 bAFlag = iX > 0;
bharat saraswalf7364db2015-08-11 13:39:31 +0530271 iX = (iTemp & RFLAG_TEMP_SHIFT_VALUE) >> RFLAG_SHIFT_VALUE;
Phanendra Mandaf346ea82015-09-04 15:21:39 -0700272 bRFlag = iX > 0;
bharat saraswalf7364db2015-08-11 13:39:31 +0530273 iX = (iTemp & SFLAG_TEMP_SHIFT_VALUE) >> SFLAG_SHIFT_VALUE;
Phanendra Mandaf346ea82015-09-04 15:21:39 -0700274 bSFlag = iX > 0;
bharat saraswalf7364db2015-08-11 13:39:31 +0530275 iX = iTemp & DFLAG_TEMP_SHIFT_VALUE;
Phanendra Mandaf346ea82015-09-04 15:21:39 -0700276 bDFlag = iX > 0;
bharat saraswalf7364db2015-08-11 13:39:31 +0530277
278 // parse optional TLV
279 llOptionalTlv = parseOptionalTlv(tempCb);
280
Avantika-Huaweid925da82016-05-10 12:47:28 +0530281 return new PcepLspObjectVer1(lspObjHeader, iPlspId, yOFlag, bAFlag, bRFlag, bSFlag, bDFlag, bCFlag,
282 llOptionalTlv);
bharat saraswalf7364db2015-08-11 13:39:31 +0530283 }
284
285 @Override
286 public int write(ChannelBuffer cb) throws PcepParseException {
287
288 //write Object header
289 int objStartIndex = cb.writerIndex();
290
291 int objLenIndex = lspObjHeader.write(cb);
292
293 if (objLenIndex <= 0) {
294 throw new PcepParseException("Failed to write lsp object header. Index " + objLenIndex);
295 }
296
297 int iTemp = iPlspId << PLSPID_SHIFT_VALUE;
Avantika-Huawei7f7376a2016-05-11 17:07:50 +0530298
299 iTemp = iTemp | (((bCFlag) ? BIT_SET : BIT_RESET) << CFLAG_SHIFT_VALUE);
300
bharat saraswalf7364db2015-08-11 13:39:31 +0530301 iTemp = iTemp | (yOFlag << OFLAG_SHIFT_VALUE);
302 byte bFlag;
303 iTemp = bAFlag ? (iTemp | AFLAG_TEMP_SHIFT_VALUE) : iTemp;
304
305 bFlag = (bRFlag) ? (byte) BIT_SET : BIT_RESET;
306 iTemp = iTemp | (bFlag << RFLAG_SHIFT_VALUE);
307 bFlag = (bSFlag) ? (byte) BIT_SET : BIT_RESET;
308 iTemp = iTemp | (bFlag << SFLAG_SHIFT_VALUE);
309 bFlag = (bDFlag) ? (byte) BIT_SET : BIT_RESET;
310 iTemp = iTemp | bFlag;
311 cb.writeInt(iTemp);
312
313 // Add optional TLV
314 packOptionalTlv(cb);
315
316 //Update object length now
317 int length = cb.writerIndex() - objStartIndex;
318 //will be helpful during print().
319 lspObjHeader.setObjLen((short) length);
320 // As per RFC the length of object should be
321 // multiples of 4
322
323 cb.setShort(objLenIndex, (short) length);
324
325 return length;
326 }
327
328 /**
329 * Returns Linked list of optional tlvs.
330 *
331 * @param cb of channel buffer.
332 * @return list of optional tlvs
333 * @throws PcepParseException when unsupported tlv is received
334 */
335 protected static LinkedList<PcepValueType> parseOptionalTlv(ChannelBuffer cb) throws PcepParseException {
336
337 LinkedList<PcepValueType> llOutOptionalTlv;
338
Sho SHIMIZU9b8274c2015-09-04 15:54:24 -0700339 llOutOptionalTlv = new LinkedList<>();
bharat saraswalf7364db2015-08-11 13:39:31 +0530340
341 while (MINIMUM_COMMON_HEADER_LENGTH <= cb.readableBytes()) {
342
343 PcepValueType tlv;
344 short hType = cb.readShort();
345 short hLength = cb.readShort();
346 int iValue = 0;
347
348 switch (hType) {
349
Avantika-Huawei56c11842016-04-28 00:56:56 +0530350 case StatefulIPv4LspIdentifiersTlv.TYPE:
351 tlv = StatefulIPv4LspIdentifiersTlv.read(cb);
bharat saraswalf7364db2015-08-11 13:39:31 +0530352 break;
353 case StatefulLspErrorCodeTlv.TYPE:
354 iValue = cb.readInt();
355 tlv = new StatefulLspErrorCodeTlv(iValue);
356 break;
357 case StatefulRsvpErrorSpecTlv.TYPE:
358 tlv = StatefulRsvpErrorSpecTlv.read(cb);
359 break;
360 case SymbolicPathNameTlv.TYPE:
361 tlv = SymbolicPathNameTlv.read(cb, hLength);
362 break;
Mahesh Poojary S5eab8572015-09-01 17:45:48 +0530363 case StatefulLspDbVerTlv.TYPE:
364 tlv = StatefulLspDbVerTlv.read(cb);
365 break;
bharat saraswalf7364db2015-08-11 13:39:31 +0530366 default:
367 throw new PcepParseException("Received unsupported TLV type :" + hType);
368 }
369 // Check for the padding
370 int pad = hLength % 4;
371 if (0 < pad) {
372 pad = 4 - pad;
373 if (pad <= cb.readableBytes()) {
374 cb.skipBytes(pad);
375 }
376 }
377
378 llOutOptionalTlv.add(tlv);
379 }
380
381 if (0 < cb.readableBytes()) {
382
383 throw new PcepParseException("Optional Tlv parsing error. Extra bytes received.");
384 }
385 return llOutOptionalTlv;
386 }
387
388 /**
389 * returns writer index.
390 *
391 * @param cb of type channel buffer
392 * @return length of bytes written to channel buffer
393 */
394 protected int packOptionalTlv(ChannelBuffer cb) {
395
396 ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
397 int startIndex = cb.writerIndex();
398
399 while (listIterator.hasNext()) {
400 PcepValueType tlv = listIterator.next();
401
Sho SHIMIZUde09fa02015-09-03 09:39:52 -0700402 if (tlv == null) {
bharat saraswalf7364db2015-08-11 13:39:31 +0530403 log.debug("tlv is null from OptionalTlv list");
404 continue;
405 }
406
407 tlv.write(cb);
408
409 // need to take care of padding
410 int pad = tlv.getLength() % 4;
411
412 if (0 != pad) {
413 pad = 4 - pad;
414 for (int i = 0; i < pad; ++i) {
415 cb.writeByte((byte) 0);
416 }
417 }
418 }
419
420 return cb.writerIndex() - startIndex;
421 }
422
423 /**
424 * Builder class for PCEP lsp Object.
425 */
426 public static class Builder implements PcepLspObject.Builder {
427
428 private boolean bIsHeaderSet = false;
429 private boolean bIsPlspIdSet = false;
430 private boolean bIsOFlagSet = false;
431 private boolean bIsRFlagSet = false;
432 private boolean bIsAFlagSet = false;
433 private boolean bIsDFlagSet = false;
434 private boolean bIsSFlagSet = false;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530435 private boolean bIsCFlagSet = false;
bharat saraswalf7364db2015-08-11 13:39:31 +0530436
437 private PcepObjectHeader lspObjHeader;
438 private byte yOFlag;
439 private boolean bAFlag;
440 private boolean bDFlag;
441 private boolean bSFlag;
442 private boolean bRFlag;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530443 private boolean bCFlag;
bharat saraswalf7364db2015-08-11 13:39:31 +0530444 LinkedList<PcepValueType> llOptionalTlv = null;
445
446 private int plspId;
447
448 private boolean bIsPFlagSet = false;
449 private boolean bPFlag;
450
451 private boolean bIsIFlagSet = false;
452 private boolean bIFlag;
453
454 @Override
455 public PcepLspObject build() {
456 PcepObjectHeader lspObjHeader = this.bIsHeaderSet ? this.lspObjHeader : DEFAULT_LSP_OBJECT_HEADER;
457
458 int plspId = this.bIsPlspIdSet ? this.plspId : DEFAULT_PLSPID;
459 byte yOFlag = this.bIsOFlagSet ? this.yOFlag : DEFAULT_OFLAG;
460 boolean bAFlag = this.bIsAFlagSet ? this.bAFlag : DEFAULT_AFLAG;
461 boolean bRFlag = this.bIsRFlagSet ? this.bRFlag : DEFAULT_RFLAG;
462 boolean bSFlag = this.bIsSFlagSet ? this.bSFlag : DEFAULT_SFLAG;
463 boolean bDFlag = this.bIsDFlagSet ? this.bDFlag : DEFAULT_DFLAG;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530464 boolean bCFlag = this.bIsCFlagSet ? this.bCFlag : DEFAULT_CFLAG;
bharat saraswalf7364db2015-08-11 13:39:31 +0530465
466 if (bIsPFlagSet) {
467 lspObjHeader.setPFlag(bPFlag);
468 }
469
470 if (bIsIFlagSet) {
471 lspObjHeader.setIFlag(bIFlag);
472 }
473
Avantika-Huaweid925da82016-05-10 12:47:28 +0530474 return new PcepLspObjectVer1(lspObjHeader, plspId, yOFlag, bAFlag, bRFlag, bSFlag, bDFlag, bCFlag,
475 llOptionalTlv);
bharat saraswalf7364db2015-08-11 13:39:31 +0530476 }
477
478 @Override
479 public PcepObjectHeader getLspObjHeader() {
480 return this.lspObjHeader;
481 }
482
483 @Override
484 public Builder setLspObjHeader(PcepObjectHeader obj) {
485 this.lspObjHeader = obj;
486 this.bIsHeaderSet = true;
487 return this;
488 }
489
490 @Override
491 public int getPlspId() {
492 return this.plspId;
493 }
494
495 @Override
496 public Builder setPlspId(int value) {
497 this.plspId = value;
498 this.bIsPlspIdSet = true;
499 return this;
500 }
501
502 @Override
Avantika-Huaweid925da82016-05-10 12:47:28 +0530503 public boolean getCFlag() {
504 return this.bCFlag;
505 }
506
507 @Override
508 public Builder setCFlag(boolean value) {
509 this.bCFlag = value;
510 this.bIsCFlagSet = true;
511 return this;
512 }
513
514 @Override
bharat saraswalf7364db2015-08-11 13:39:31 +0530515 public byte getOFlag() {
516 return this.yOFlag;
517 }
518
519 @Override
520 public Builder setOFlag(byte value) {
521 this.yOFlag = value;
522 this.bIsOFlagSet = true;
523 return this;
524 }
525
526 @Override
527 public boolean getAFlag() {
528 return this.bAFlag;
529 }
530
531 @Override
532 public Builder setAFlag(boolean value) {
533 this.bAFlag = value;
534 this.bIsAFlagSet = true;
535 return this;
536 }
537
538 @Override
539 public boolean getRFlag() {
540 return this.bRFlag;
541 }
542
543 @Override
544 public Builder setRFlag(boolean value) {
545 this.bRFlag = value;
546 this.bIsRFlagSet = true;
547 return this;
548 }
549
550 @Override
551 public boolean getSFlag() {
552 return this.bSFlag;
553 }
554
555 @Override
556 public Builder setSFlag(boolean value) {
557 this.bSFlag = value;
558 this.bIsSFlagSet = true;
559 return this;
560 }
561
562 @Override
563 public boolean getDFlag() {
564 return this.bDFlag;
565 }
566
567 @Override
568 public Builder setDFlag(boolean value) {
569 this.bDFlag = value;
570 this.bIsDFlagSet = true;
571 return this;
572 }
573
574 @Override
575 public Builder setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv) {
576 this.llOptionalTlv = llOptionalTlv;
577 return this;
578 }
579
580 @Override
581 public LinkedList<PcepValueType> getOptionalTlv() {
582 return this.llOptionalTlv;
583 }
584
585 @Override
586 public Builder setPFlag(boolean value) {
587 this.bPFlag = value;
588 this.bIsPFlagSet = true;
589 return this;
590 }
591
592 @Override
593 public Builder setIFlag(boolean value) {
594 this.bIFlag = value;
595 this.bIsIFlagSet = true;
596 return this;
597 }
598
599 }
600
601 @Override
bharat saraswalf7364db2015-08-11 13:39:31 +0530602 public String toString() {
Sho SHIMIZU7cdbcf72015-09-03 14:43:05 -0700603 return MoreObjects.toStringHelper(getClass())
604 .add("PlspIDValue", iPlspId)
Avantika-Huaweid925da82016-05-10 12:47:28 +0530605 .add("CFlag", bCFlag)
Sho SHIMIZU7cdbcf72015-09-03 14:43:05 -0700606 .add("OFlag", yOFlag)
607 .add("AFlag", bAFlag)
608 .add("RFlag", bRFlag)
609 .add("SFlag", bSFlag)
610 .add("DFlag", bDFlag)
611 .add("OptionalTlvList", llOptionalTlv)
612 .toString();
bharat saraswalf7364db2015-08-11 13:39:31 +0530613 }
614}