ONOS-6050 - [PCEP]LspIdentifiers TLV is not been encoded in PCUpd message for PCInit rsvp mode
Change-Id: Id0d19e9e60ebd079cadcffb3d16b0131cd18203b
diff --git a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
index caa317d..a6d2763 100644
--- a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
+++ b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
@@ -1196,28 +1196,27 @@
llOptionalTlv = new LinkedList<PcepValueType>();
- if (lspSigType != WITH_SIGNALLING) {
- String localLspIdString = tunnel.annotations().value(LOCAL_LSP_ID);
- String pccTunnelIdString = tunnel.annotations().value(PCC_TUNNEL_ID);
- short localLspId = 0;
- short pccTunnelId = 0;
+ // Lsp Identifier tlv is required for all modes of lsp
+ String localLspIdString = tunnel.annotations().value(LOCAL_LSP_ID);
+ String pccTunnelIdString = tunnel.annotations().value(PCC_TUNNEL_ID);
+ short localLspId = 0;
+ short pccTunnelId = 0;
- if (localLspIdString != null) {
- localLspId = Short.valueOf(localLspIdString);
- }
-
- if (pccTunnelIdString != null) {
- pccTunnelId = Short.valueOf(pccTunnelIdString);
- }
-
- tlv = new StatefulIPv4LspIdentifiersTlv((((IpTunnelEndPoint) tunnel.src())
- .ip().getIp4Address().toInt()),
- localLspId, pccTunnelId,
- ((IpTunnelEndPoint) tunnel.src()).ip().getIp4Address().toInt(),
- (((IpTunnelEndPoint) tunnel.dst()).ip().getIp4Address().toInt()));
- llOptionalTlv.add(tlv);
+ if (localLspIdString != null) {
+ localLspId = Short.valueOf(localLspIdString);
}
+ if (pccTunnelIdString != null) {
+ pccTunnelId = Short.valueOf(pccTunnelIdString);
+ }
+
+ tlv = new StatefulIPv4LspIdentifiersTlv((((IpTunnelEndPoint) tunnel.src())
+ .ip().getIp4Address().toInt()),
+ localLspId, pccTunnelId,
+ ((IpTunnelEndPoint) tunnel.src()).ip().getIp4Address().toInt(),
+ (((IpTunnelEndPoint) tunnel.dst()).ip().getIp4Address().toInt()));
+ llOptionalTlv.add(tlv);
+
if (tunnel.tunnelName().value() != null) {
tlv = new SymbolicPathNameTlv(tunnel.tunnelName().value().getBytes());
llOptionalTlv.add(tlv);
@@ -1419,8 +1418,15 @@
// SR-TE also needs PCUpd msg after receiving PCRpt with status GOING-UP even
// though there are no labels to download for SR-TE.
- if ((pcepLspStatus == PcepLspStatus.GOING_UP)
- && (LspType.valueOf(tunnel.annotations().value(LSP_SIG_TYPE)) == SR_WITHOUT_SIGNALLING)) {
+ if (((pcepLspStatus == PcepLspStatus.GOING_UP)
+ && (LspType.valueOf(tunnel.annotations().value(LSP_SIG_TYPE)) == SR_WITHOUT_SIGNALLING))
+ // For PCInit tunnel up, few PCC expects PCUpd message after PCInit message,
+ || ((tunnel.state() == State.INIT)
+ && (pcepLspStatus == PcepLspStatus.DOWN)
+ && (tunnel.annotations().value(PCE_INIT) != null
+ && tunnel.annotations().value(PCE_INIT).equals("true"))
+ && (LspType.valueOf(tunnel.annotations().value(LSP_SIG_TYPE)) == WITH_SIGNALLING))) {
+
// Query again to get latest tunnel updated with protocol values from PCRpt msg.
updateTunnel(service.tunnelQueryById(tunnel.tunnelId()), tunnel.path());
}