[ONOS-4663] [ONOS-4664] ST defect fixes in session establishment/sync
Change-Id: I0bdb4ad08295fe30c488e9170923847112fab647
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java
index e8c52cc..6fe05e0 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java
@@ -177,18 +177,23 @@
* The socket IP is stored in channel.
*/
LinkedList<PcepValueType> optionalTlvs = pOpenmsg.getPcepOpenObject().getOptionalTlv();
- for (PcepValueType optionalTlv : optionalTlvs) {
- if (optionalTlv instanceof NodeAttributesTlv) {
- List<PcepValueType> subTlvs = ((NodeAttributesTlv) optionalTlv)
- .getllNodeAttributesSubTLVs();
- for (PcepValueType subTlv : subTlvs) {
- if (subTlv instanceof IPv4RouterIdOfLocalNodeSubTlv) {
- h.thispccId = PccId.pccId(IpAddress
- .valueOf(((IPv4RouterIdOfLocalNodeSubTlv) subTlv).getInt()));
+ if (optionalTlvs != null) {
+ for (PcepValueType optionalTlv : optionalTlvs) {
+ if (optionalTlv instanceof NodeAttributesTlv) {
+ List<PcepValueType> subTlvs = ((NodeAttributesTlv) optionalTlv)
+ .getllNodeAttributesSubTLVs();
+ if (subTlvs == null) {
break;
}
+ for (PcepValueType subTlv : subTlvs) {
+ if (subTlv instanceof IPv4RouterIdOfLocalNodeSubTlv) {
+ h.thispccId = PccId.pccId(IpAddress
+ .valueOf(((IPv4RouterIdOfLocalNodeSubTlv) subTlv).getInt()));
+ break;
+ }
+ }
+ break;
}
- break;
}
}
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
index b7dbfda..cb40ea0 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
@@ -236,8 +236,10 @@
ListIterator<PcepStateReport> listIterator = ((PcepReportMsg) msg).getStateReportList().listIterator();
while (listIterator.hasNext()) {
PcepStateReport stateRpt = listIterator.next();
- if (stateRpt.getLspObject().getSFlag()) {
+ PcepLspObject lspObj = stateRpt.getLspObject();
+ if (lspObj.getSFlag()) {
if (pc.lspDbSyncStatus() != PcepSyncStatus.IN_SYNC) {
+ log.debug("LSP DB sync started for PCC {}", pc.getPccId().id().toString());
// Initialize LSP DB sync and temporary cache.
pc.setLspDbSyncStatus(PcepSyncStatus.IN_SYNC);
pc.initializeSyncMsgList(pccId);
@@ -247,13 +249,16 @@
// Don't send to provider as of now.
continue;
- } else {
- if (pc.lspDbSyncStatus() == PcepSyncStatus.IN_SYNC) {
+ } else if (lspObj.getPlspId() == 0) {
+ if (pc.lspDbSyncStatus() == PcepSyncStatus.IN_SYNC
+ || pc.lspDbSyncStatus() == PcepSyncStatus.NOT_SYNCED) {
// Set end of LSPDB sync.
+ log.debug("LSP DB sync completed for PCC {}", pc.getPccId().id().toString());
pc.setLspDbSyncStatus(PcepSyncStatus.SYNCED);
// Call packet provider to initiate label DB sync (only if PCECC capable).
if (pc.capability().pceccCapability()) {
+ log.debug("Trigger label DB sync for PCC {}", pc.getPccId().id().toString());
pc.setLabelDbSyncStatus(IN_SYNC);
for (PcepPacketListener l : pcepPacketListener) {
l.sendPacketIn(pccId);