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