[ONOS-4170] PCEP provider changes for LSPDB sync
Change-Id: I9229fec9d97dd46343cc809e33c92b9722ab7ed3
diff --git a/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClient.java b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClient.java
index 5e3996a..afeeae8 100644
--- a/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClient.java
+++ b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClient.java
@@ -95,18 +95,32 @@
String channelId();
/**
- * To set the status of state synchronization.
+ * Sets the status of LSP state synchronization.
*
- * @param value to set the synchronization status
+ * @param syncStatus LSP synchronization status to be set
*/
- void setIsSyncComplete(boolean value);
+ void setLspDbSyncStatus(PcepSyncStatus syncStatus);
/**
- * Indicates the state synchronization status of this pcc.
+ * Indicates the LSP state synchronization status of this pcc.
*
- * @return true/false if the synchronization is completed/not completed
+ * @return LSP state synchronization status.
*/
- boolean isSyncComplete();
+ PcepSyncStatus lspDbSyncStatus();
+
+ /**
+ * Sets the status of label DB synchronization.
+ *
+ * @param syncStatus label DB synchronization status to be set
+ */
+ void setLabelDbSyncStatus(PcepSyncStatus syncStatus);
+
+ /**
+ * Indicates the label DB synchronization status of this pcc.
+ *
+ * @return label DB synchronization status.
+ */
+ PcepSyncStatus labelDbSyncStatus();
/**
* Sets capability negotiated during open message exchange.
diff --git a/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepSyncStatus.java b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepSyncStatus.java
new file mode 100644
index 0000000..3c8ace5
--- /dev/null
+++ b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepSyncStatus.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.pcep.controller;
+
+/**
+ * Representation of PCEP database sync status on session establishment.
+ */
+public enum PcepSyncStatus {
+
+ /**
+ * Specifies that the DB state is not synchronized.
+ */
+ NOT_SYNCED(0),
+
+ /**
+ * Specifies that the DB state is currently undergoing synchronization.
+ */
+ IN_SYNC(1),
+
+ /**
+ * Specifies that the DB state synchronization is completed.
+ */
+ SYNCED(2);
+
+ int value;
+
+ /**
+ * Assign val with the value as the sync status.
+ *
+ * @param val sync status
+ */
+ PcepSyncStatus(int val) {
+ value = val;
+ }
+}
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 9f61b2a..744731f 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
@@ -169,6 +169,12 @@
}
}
+ /*
+ * If MPLS LSR id and PCEP session socket IP addresses are not same,
+ * the MPLS LSR id will be encoded in separate TLV.
+ * We always maintain session information based on LSR ids.
+ * The socket IP is stored in channel.
+ */
LinkedList<PcepValueType> optionalTlvs = pOpenmsg.getPcepOpenObject().getOptionalTlv();
for (PcepValueType optionalTlv : optionalTlvs) {
if (optionalTlv instanceof NodeAttributesTlv) {
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientImpl.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientImpl.java
index 23b6ba6..8328f2b 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientImpl.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientImpl.java
@@ -27,6 +27,7 @@
import org.onosproject.pcep.controller.ClientCapability;
import org.onosproject.pcep.controller.PccId;
import org.onosproject.pcep.controller.PcepPacketStats;
+import org.onosproject.pcep.controller.PcepSyncStatus;
import org.onosproject.pcep.controller.driver.PcepAgent;
import org.onosproject.pcep.controller.driver.PcepClientDriver;
import org.onosproject.pcepio.protocol.PcepFactories;
@@ -52,9 +53,10 @@
protected String channelId;
private boolean connected;
- protected boolean startDriverHandshakeCalled = false;
- protected boolean isHandShakeComplete = false;
- protected boolean isSyncComplete = false;
+ protected boolean startDriverHandshakeCalled;
+ protected boolean isHandShakeComplete;
+ private PcepSyncStatus lspDbSyncStatus;
+ private PcepSyncStatus labelDbSyncStatus;
private PccId pccId;
private PcepAgent agent;
@@ -175,13 +177,23 @@
}
@Override
- public void setIsSyncComplete(boolean value) {
- this.isSyncComplete = value;
+ public void setLspDbSyncStatus(PcepSyncStatus syncStatus) {
+ this.lspDbSyncStatus = syncStatus;
}
@Override
- public boolean isSyncComplete() {
- return isSyncComplete;
+ public PcepSyncStatus lspDbSyncStatus() {
+ return lspDbSyncStatus;
+ }
+
+ @Override
+ public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) {
+ this.labelDbSyncStatus = syncStatus;
+ }
+
+ @Override
+ public PcepSyncStatus labelDbSyncStatus() {
+ return labelDbSyncStatus;
}
@Override
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
index b7d9666..13469e9 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
@@ -48,7 +48,7 @@
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Object-Class | OT |Res|P|I| Object Length (bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | PLSP-ID | Flag C| O|A|R|S|D|
+ | PLSP-ID | Flag |C| O|A|R|S|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// TLVs //
| |
@@ -116,6 +116,7 @@
* @param bRFlag R flag
* @param bSFlag S flag
* @param bDFlag D flag
+ * @param bCFlag C flag
* @param llOptionalTlv list of optional tlv
*/
public PcepLspObjectVer1(PcepObjectHeader lspObjHeader, int iPlspId, byte yOFlag, boolean bAFlag, boolean bRFlag,
@@ -294,6 +295,9 @@
}
int iTemp = iPlspId << PLSPID_SHIFT_VALUE;
+
+ iTemp = iTemp | (((bCFlag) ? BIT_SET : BIT_RESET) << CFLAG_SHIFT_VALUE);
+
iTemp = iTemp | (yOFlag << OFLAG_SHIFT_VALUE);
byte bFlag;
iTemp = bAFlag ? (iTemp | AFLAG_TEMP_SHIFT_VALUE) : iTemp;