Committed by
Gerrit Code Review
Making ERO non-mandatory (for end of LSP DB sync msg from cisco)
Change-Id: I28e35520b5bd5737117d8c2b84f9effa3c46bfaf
Showing
4 changed files
with
45 additions
and
7 deletions
... | @@ -340,7 +340,7 @@ public class PcepLspObjectVer1 implements PcepLspObject { | ... | @@ -340,7 +340,7 @@ public class PcepLspObjectVer1 implements PcepLspObject { |
340 | 340 | ||
341 | while (MINIMUM_COMMON_HEADER_LENGTH <= cb.readableBytes()) { | 341 | while (MINIMUM_COMMON_HEADER_LENGTH <= cb.readableBytes()) { |
342 | 342 | ||
343 | - PcepValueType tlv; | 343 | + PcepValueType tlv = null; |
344 | short hType = cb.readShort(); | 344 | short hType = cb.readShort(); |
345 | short hLength = cb.readShort(); | 345 | short hLength = cb.readShort(); |
346 | int iValue = 0; | 346 | int iValue = 0; |
... | @@ -364,7 +364,10 @@ public class PcepLspObjectVer1 implements PcepLspObject { | ... | @@ -364,7 +364,10 @@ public class PcepLspObjectVer1 implements PcepLspObject { |
364 | tlv = StatefulLspDbVerTlv.read(cb); | 364 | tlv = StatefulLspDbVerTlv.read(cb); |
365 | break; | 365 | break; |
366 | default: | 366 | default: |
367 | - throw new PcepParseException("Received unsupported TLV type :" + hType); | 367 | + // Skip the unknown TLV. |
368 | + cb.skipBytes(hLength); | ||
369 | + tlv = null; | ||
370 | + log.info("Received unsupported TLV type :" + hType + " in LSP object."); | ||
368 | } | 371 | } |
369 | // Check for the padding | 372 | // Check for the padding |
370 | int pad = hLength % 4; | 373 | int pad = hLength % 4; |
... | @@ -375,8 +378,10 @@ public class PcepLspObjectVer1 implements PcepLspObject { | ... | @@ -375,8 +378,10 @@ public class PcepLspObjectVer1 implements PcepLspObject { |
375 | } | 378 | } |
376 | } | 379 | } |
377 | 380 | ||
381 | + if (tlv != null) { | ||
378 | llOutOptionalTlv.add(tlv); | 382 | llOutOptionalTlv.add(tlv); |
379 | } | 383 | } |
384 | + } | ||
380 | 385 | ||
381 | if (0 < cb.readableBytes()) { | 386 | if (0 < cb.readableBytes()) { |
382 | 387 | ... | ... |
... | @@ -287,11 +287,22 @@ public class PcepOpenObjectVer1 implements PcepOpenObject { | ... | @@ -287,11 +287,22 @@ public class PcepOpenObjectVer1 implements PcepOpenObject { |
287 | default: | 287 | default: |
288 | log.debug("Unsupported TLV: " + hType); | 288 | log.debug("Unsupported TLV: " + hType); |
289 | cb.skipBytes(hLength); | 289 | cb.skipBytes(hLength); |
290 | - continue; | 290 | + tlv = null; |
291 | + } | ||
292 | + | ||
293 | + // Check for the padding | ||
294 | + int pad = hLength % 4; | ||
295 | + if (0 < pad) { | ||
296 | + pad = 4 - pad; | ||
297 | + if (pad <= cb.readableBytes()) { | ||
298 | + cb.skipBytes(pad); | ||
299 | + } | ||
291 | } | 300 | } |
292 | 301 | ||
302 | + if (tlv != null) { | ||
293 | llOptionalTlv.add(tlv); | 303 | llOptionalTlv.add(tlv); |
294 | } | 304 | } |
305 | + } | ||
295 | 306 | ||
296 | if (0 < cb.readableBytes()) { | 307 | if (0 < cb.readableBytes()) { |
297 | throw new PcepParseException("Optional Tlv parsing error. Extra bytes received."); | 308 | throw new PcepParseException("Optional Tlv parsing error. Extra bytes received."); | ... | ... |
... | @@ -65,8 +65,8 @@ class PcepReportMsgVer1 implements PcepReportMsg { | ... | @@ -65,8 +65,8 @@ class PcepReportMsgVer1 implements PcepReportMsg { |
65 | protected static final Logger log = LoggerFactory.getLogger(PcepReportMsgVer1.class); | 65 | protected static final Logger log = LoggerFactory.getLogger(PcepReportMsgVer1.class); |
66 | 66 | ||
67 | public static final byte PACKET_VERSION = 1; | 67 | public static final byte PACKET_VERSION = 1; |
68 | - //PACKET_MINIMUM_LENGTH = CommonHeaderLen(4)+LspObjMinLen(8)+EroObjMinLen(4) | 68 | + //PACKET_MINIMUM_LENGTH = CommonHeaderLen(4)+LspObjMinLen(8) |
69 | - public static final int PACKET_MINIMUM_LENGTH = 16; | 69 | + public static final int PACKET_MINIMUM_LENGTH = 12; |
70 | public static final PcepType MSG_TYPE = PcepType.REPORT; | 70 | public static final PcepType MSG_TYPE = PcepType.REPORT; |
71 | public static final byte REPORT_OBJ_TYPE = 1; | 71 | public static final byte REPORT_OBJ_TYPE = 1; |
72 | //Optional TLV | 72 | //Optional TLV |
... | @@ -164,9 +164,25 @@ class PcepReportMsgVer1 implements PcepReportMsg { | ... | @@ -164,9 +164,25 @@ class PcepReportMsgVer1 implements PcepReportMsg { |
164 | lspObj = PcepLspObjectVer1.read(cb); | 164 | lspObj = PcepLspObjectVer1.read(cb); |
165 | pcestateReq.setLspObject(lspObj); | 165 | pcestateReq.setLspObject(lspObj); |
166 | 166 | ||
167 | - //store path | 167 | + if (cb.readableBytes() > 0) { |
168 | + | ||
169 | + //mark the reader index to reset | ||
170 | + cb.markReaderIndex(); | ||
171 | + tempObjHeader = PcepObjectHeader.read(cb); | ||
172 | + | ||
173 | + yObjectClass = tempObjHeader.getObjClass(); | ||
174 | + yObjectType = tempObjHeader.getObjType(); | ||
175 | + | ||
176 | + //reset reader index | ||
177 | + cb.resetReaderIndex(); | ||
178 | + | ||
179 | + if ((PcepEroObjectVer1.ERO_OBJ_CLASS == yObjectClass) | ||
180 | + && (PcepEroObjectVer1.ERO_OBJ_TYPE == yObjectType)) { | ||
181 | + // store path | ||
168 | PcepStateReport.PcepMsgPath msgPath = new PcepStateReportVer1().new PcepMsgPath().read(cb); | 182 | PcepStateReport.PcepMsgPath msgPath = new PcepStateReportVer1().new PcepMsgPath().read(cb); |
169 | pcestateReq.setMsgPath(msgPath); | 183 | pcestateReq.setMsgPath(msgPath); |
184 | + } | ||
185 | + } | ||
170 | 186 | ||
171 | llStateReportList.add(pcestateReq); | 187 | llStateReportList.add(pcestateReq); |
172 | } | 188 | } | ... | ... |
... | @@ -251,7 +251,10 @@ public class PcepSrpObjectVer1 implements PcepSrpObject { | ... | @@ -251,7 +251,10 @@ public class PcepSrpObjectVer1 implements PcepSrpObject { |
251 | tlv = PathSetupTypeTlv.of(cb.readInt()); | 251 | tlv = PathSetupTypeTlv.of(cb.readInt()); |
252 | break; | 252 | break; |
253 | default: | 253 | default: |
254 | - throw new PcepParseException("Unsupported TLV received in SRP Object."); | 254 | + // Skip the unknown TLV. |
255 | + cb.skipBytes(hLength); | ||
256 | + tlv = null; | ||
257 | + log.info("Received unsupported TLV type :" + hType + " in SRP object."); | ||
255 | } | 258 | } |
256 | 259 | ||
257 | // Check for the padding | 260 | // Check for the padding |
... | @@ -262,8 +265,11 @@ public class PcepSrpObjectVer1 implements PcepSrpObject { | ... | @@ -262,8 +265,11 @@ public class PcepSrpObjectVer1 implements PcepSrpObject { |
262 | cb.skipBytes(pad); | 265 | cb.skipBytes(pad); |
263 | } | 266 | } |
264 | } | 267 | } |
268 | + | ||
269 | + if (tlv != null) { | ||
265 | llOutOptionalTlv.add(tlv); | 270 | llOutOptionalTlv.add(tlv); |
266 | } | 271 | } |
272 | + } | ||
267 | 273 | ||
268 | return llOutOptionalTlv; | 274 | return llOutOptionalTlv; |
269 | } | 275 | } | ... | ... |
-
Please register or login to post a comment