blob: 2cf184d393cbae288f14010278b0d6359a78aa23 [file] [log] [blame]
bharat saraswalf7364db2015-08-11 13:39:31 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
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 */
Ray Milkey9c9cde42018-01-12 14:22:06 -080059 private static final Logger log = LoggerFactory.getLogger(PcepLspObjectVer1.class);
bharat saraswalf7364db2015-08-11 13:39:31 +053060
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
Avantika-Huaweifb630482016-08-09 11:42:11 +0530343 PcepValueType tlv = null;
bharat saraswalf7364db2015-08-11 13:39:31 +0530344 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:
Avantika-Huaweifb630482016-08-09 11:42:11 +0530367 // Skip the unknown TLV.
368 cb.skipBytes(hLength);
Avantika-Huaweifb630482016-08-09 11:42:11 +0530369 log.info("Received unsupported TLV type :" + hType + " in LSP object.");
bharat saraswalf7364db2015-08-11 13:39:31 +0530370 }
371 // Check for the padding
372 int pad = hLength % 4;
373 if (0 < pad) {
374 pad = 4 - pad;
375 if (pad <= cb.readableBytes()) {
376 cb.skipBytes(pad);
377 }
378 }
379
Avantika-Huaweifb630482016-08-09 11:42:11 +0530380 if (tlv != null) {
381 llOutOptionalTlv.add(tlv);
382 }
bharat saraswalf7364db2015-08-11 13:39:31 +0530383 }
384
385 if (0 < cb.readableBytes()) {
386
387 throw new PcepParseException("Optional Tlv parsing error. Extra bytes received.");
388 }
389 return llOutOptionalTlv;
390 }
391
392 /**
393 * returns writer index.
394 *
395 * @param cb of type channel buffer
396 * @return length of bytes written to channel buffer
397 */
398 protected int packOptionalTlv(ChannelBuffer cb) {
399
400 ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
401 int startIndex = cb.writerIndex();
402
403 while (listIterator.hasNext()) {
404 PcepValueType tlv = listIterator.next();
405
Sho SHIMIZUde09fa02015-09-03 09:39:52 -0700406 if (tlv == null) {
bharat saraswalf7364db2015-08-11 13:39:31 +0530407 log.debug("tlv is null from OptionalTlv list");
408 continue;
409 }
410
411 tlv.write(cb);
412
413 // need to take care of padding
414 int pad = tlv.getLength() % 4;
415
416 if (0 != pad) {
417 pad = 4 - pad;
418 for (int i = 0; i < pad; ++i) {
419 cb.writeByte((byte) 0);
420 }
421 }
422 }
423
424 return cb.writerIndex() - startIndex;
425 }
426
427 /**
428 * Builder class for PCEP lsp Object.
429 */
430 public static class Builder implements PcepLspObject.Builder {
431
432 private boolean bIsHeaderSet = false;
433 private boolean bIsPlspIdSet = false;
434 private boolean bIsOFlagSet = false;
435 private boolean bIsRFlagSet = false;
436 private boolean bIsAFlagSet = false;
437 private boolean bIsDFlagSet = false;
438 private boolean bIsSFlagSet = false;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530439 private boolean bIsCFlagSet = false;
bharat saraswalf7364db2015-08-11 13:39:31 +0530440
441 private PcepObjectHeader lspObjHeader;
442 private byte yOFlag;
443 private boolean bAFlag;
444 private boolean bDFlag;
445 private boolean bSFlag;
446 private boolean bRFlag;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530447 private boolean bCFlag;
bharat saraswalf7364db2015-08-11 13:39:31 +0530448 LinkedList<PcepValueType> llOptionalTlv = null;
449
450 private int plspId;
451
452 private boolean bIsPFlagSet = false;
453 private boolean bPFlag;
454
455 private boolean bIsIFlagSet = false;
456 private boolean bIFlag;
457
458 @Override
459 public PcepLspObject build() {
460 PcepObjectHeader lspObjHeader = this.bIsHeaderSet ? this.lspObjHeader : DEFAULT_LSP_OBJECT_HEADER;
461
462 int plspId = this.bIsPlspIdSet ? this.plspId : DEFAULT_PLSPID;
463 byte yOFlag = this.bIsOFlagSet ? this.yOFlag : DEFAULT_OFLAG;
464 boolean bAFlag = this.bIsAFlagSet ? this.bAFlag : DEFAULT_AFLAG;
465 boolean bRFlag = this.bIsRFlagSet ? this.bRFlag : DEFAULT_RFLAG;
466 boolean bSFlag = this.bIsSFlagSet ? this.bSFlag : DEFAULT_SFLAG;
467 boolean bDFlag = this.bIsDFlagSet ? this.bDFlag : DEFAULT_DFLAG;
Avantika-Huaweid925da82016-05-10 12:47:28 +0530468 boolean bCFlag = this.bIsCFlagSet ? this.bCFlag : DEFAULT_CFLAG;
bharat saraswalf7364db2015-08-11 13:39:31 +0530469
470 if (bIsPFlagSet) {
471 lspObjHeader.setPFlag(bPFlag);
472 }
473
474 if (bIsIFlagSet) {
475 lspObjHeader.setIFlag(bIFlag);
476 }
477
Avantika-Huaweid925da82016-05-10 12:47:28 +0530478 return new PcepLspObjectVer1(lspObjHeader, plspId, yOFlag, bAFlag, bRFlag, bSFlag, bDFlag, bCFlag,
479 llOptionalTlv);
bharat saraswalf7364db2015-08-11 13:39:31 +0530480 }
481
482 @Override
483 public PcepObjectHeader getLspObjHeader() {
484 return this.lspObjHeader;
485 }
486
487 @Override
488 public Builder setLspObjHeader(PcepObjectHeader obj) {
489 this.lspObjHeader = obj;
490 this.bIsHeaderSet = true;
491 return this;
492 }
493
494 @Override
495 public int getPlspId() {
496 return this.plspId;
497 }
498
499 @Override
500 public Builder setPlspId(int value) {
501 this.plspId = value;
502 this.bIsPlspIdSet = true;
503 return this;
504 }
505
506 @Override
Avantika-Huaweid925da82016-05-10 12:47:28 +0530507 public boolean getCFlag() {
508 return this.bCFlag;
509 }
510
511 @Override
512 public Builder setCFlag(boolean value) {
513 this.bCFlag = value;
514 this.bIsCFlagSet = true;
515 return this;
516 }
517
518 @Override
bharat saraswalf7364db2015-08-11 13:39:31 +0530519 public byte getOFlag() {
520 return this.yOFlag;
521 }
522
523 @Override
524 public Builder setOFlag(byte value) {
525 this.yOFlag = value;
526 this.bIsOFlagSet = true;
527 return this;
528 }
529
530 @Override
531 public boolean getAFlag() {
532 return this.bAFlag;
533 }
534
535 @Override
536 public Builder setAFlag(boolean value) {
537 this.bAFlag = value;
538 this.bIsAFlagSet = true;
539 return this;
540 }
541
542 @Override
543 public boolean getRFlag() {
544 return this.bRFlag;
545 }
546
547 @Override
548 public Builder setRFlag(boolean value) {
549 this.bRFlag = value;
550 this.bIsRFlagSet = true;
551 return this;
552 }
553
554 @Override
555 public boolean getSFlag() {
556 return this.bSFlag;
557 }
558
559 @Override
560 public Builder setSFlag(boolean value) {
561 this.bSFlag = value;
562 this.bIsSFlagSet = true;
563 return this;
564 }
565
566 @Override
567 public boolean getDFlag() {
568 return this.bDFlag;
569 }
570
571 @Override
572 public Builder setDFlag(boolean value) {
573 this.bDFlag = value;
574 this.bIsDFlagSet = true;
575 return this;
576 }
577
578 @Override
579 public Builder setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv) {
580 this.llOptionalTlv = llOptionalTlv;
581 return this;
582 }
583
584 @Override
585 public LinkedList<PcepValueType> getOptionalTlv() {
586 return this.llOptionalTlv;
587 }
588
589 @Override
590 public Builder setPFlag(boolean value) {
591 this.bPFlag = value;
592 this.bIsPFlagSet = true;
593 return this;
594 }
595
596 @Override
597 public Builder setIFlag(boolean value) {
598 this.bIFlag = value;
599 this.bIsIFlagSet = true;
600 return this;
601 }
602
603 }
604
605 @Override
bharat saraswalf7364db2015-08-11 13:39:31 +0530606 public String toString() {
Sho SHIMIZU7cdbcf72015-09-03 14:43:05 -0700607 return MoreObjects.toStringHelper(getClass())
608 .add("PlspIDValue", iPlspId)
Avantika-Huaweid925da82016-05-10 12:47:28 +0530609 .add("CFlag", bCFlag)
Sho SHIMIZU7cdbcf72015-09-03 14:43:05 -0700610 .add("OFlag", yOFlag)
611 .add("AFlag", bAFlag)
612 .add("RFlag", bRFlag)
613 .add("SFlag", bSFlag)
614 .add("DFlag", bDFlag)
615 .add("OptionalTlvList", llOptionalTlv)
616 .toString();
bharat saraswalf7364db2015-08-11 13:39:31 +0530617 }
618}