Avantika-Huawei
Committed by Gerrit Code Review

[ONOS-4170] PCEP provider changes for LSPDB sync

Change-Id: I9229fec9d97dd46343cc809e33c92b9722ab7ed3
...@@ -95,18 +95,32 @@ public interface PcepClient { ...@@ -95,18 +95,32 @@ public interface PcepClient {
95 String channelId(); 95 String channelId();
96 96
97 /** 97 /**
98 - * To set the status of state synchronization. 98 + * Sets the status of LSP state synchronization.
99 * 99 *
100 - * @param value to set the synchronization status 100 + * @param syncStatus LSP synchronization status to be set
101 */ 101 */
102 - void setIsSyncComplete(boolean value); 102 + void setLspDbSyncStatus(PcepSyncStatus syncStatus);
103 103
104 /** 104 /**
105 - * Indicates the state synchronization status of this pcc. 105 + * Indicates the LSP state synchronization status of this pcc.
106 * 106 *
107 - * @return true/false if the synchronization is completed/not completed 107 + * @return LSP state synchronization status.
108 */ 108 */
109 - boolean isSyncComplete(); 109 + PcepSyncStatus lspDbSyncStatus();
110 +
111 + /**
112 + * Sets the status of label DB synchronization.
113 + *
114 + * @param syncStatus label DB synchronization status to be set
115 + */
116 + void setLabelDbSyncStatus(PcepSyncStatus syncStatus);
117 +
118 + /**
119 + * Indicates the label DB synchronization status of this pcc.
120 + *
121 + * @return label DB synchronization status.
122 + */
123 + PcepSyncStatus labelDbSyncStatus();
110 124
111 /** 125 /**
112 * Sets capability negotiated during open message exchange. 126 * Sets capability negotiated during open message exchange.
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.pcep.controller;
17 +
18 +/**
19 + * Representation of PCEP database sync status on session establishment.
20 + */
21 +public enum PcepSyncStatus {
22 +
23 + /**
24 + * Specifies that the DB state is not synchronized.
25 + */
26 + NOT_SYNCED(0),
27 +
28 + /**
29 + * Specifies that the DB state is currently undergoing synchronization.
30 + */
31 + IN_SYNC(1),
32 +
33 + /**
34 + * Specifies that the DB state synchronization is completed.
35 + */
36 + SYNCED(2);
37 +
38 + int value;
39 +
40 + /**
41 + * Assign val with the value as the sync status.
42 + *
43 + * @param val sync status
44 + */
45 + PcepSyncStatus(int val) {
46 + value = val;
47 + }
48 +}
...@@ -169,6 +169,12 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { ...@@ -169,6 +169,12 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler {
169 } 169 }
170 } 170 }
171 171
172 + /*
173 + * If MPLS LSR id and PCEP session socket IP addresses are not same,
174 + * the MPLS LSR id will be encoded in separate TLV.
175 + * We always maintain session information based on LSR ids.
176 + * The socket IP is stored in channel.
177 + */
172 LinkedList<PcepValueType> optionalTlvs = pOpenmsg.getPcepOpenObject().getOptionalTlv(); 178 LinkedList<PcepValueType> optionalTlvs = pOpenmsg.getPcepOpenObject().getOptionalTlv();
173 for (PcepValueType optionalTlv : optionalTlvs) { 179 for (PcepValueType optionalTlv : optionalTlvs) {
174 if (optionalTlv instanceof NodeAttributesTlv) { 180 if (optionalTlv instanceof NodeAttributesTlv) {
......
...@@ -27,6 +27,7 @@ import org.onlab.packet.IpAddress; ...@@ -27,6 +27,7 @@ import org.onlab.packet.IpAddress;
27 import org.onosproject.pcep.controller.ClientCapability; 27 import org.onosproject.pcep.controller.ClientCapability;
28 import org.onosproject.pcep.controller.PccId; 28 import org.onosproject.pcep.controller.PccId;
29 import org.onosproject.pcep.controller.PcepPacketStats; 29 import org.onosproject.pcep.controller.PcepPacketStats;
30 +import org.onosproject.pcep.controller.PcepSyncStatus;
30 import org.onosproject.pcep.controller.driver.PcepAgent; 31 import org.onosproject.pcep.controller.driver.PcepAgent;
31 import org.onosproject.pcep.controller.driver.PcepClientDriver; 32 import org.onosproject.pcep.controller.driver.PcepClientDriver;
32 import org.onosproject.pcepio.protocol.PcepFactories; 33 import org.onosproject.pcepio.protocol.PcepFactories;
...@@ -52,9 +53,10 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -52,9 +53,10 @@ public class PcepClientImpl implements PcepClientDriver {
52 protected String channelId; 53 protected String channelId;
53 54
54 private boolean connected; 55 private boolean connected;
55 - protected boolean startDriverHandshakeCalled = false; 56 + protected boolean startDriverHandshakeCalled;
56 - protected boolean isHandShakeComplete = false; 57 + protected boolean isHandShakeComplete;
57 - protected boolean isSyncComplete = false; 58 + private PcepSyncStatus lspDbSyncStatus;
59 + private PcepSyncStatus labelDbSyncStatus;
58 private PccId pccId; 60 private PccId pccId;
59 private PcepAgent agent; 61 private PcepAgent agent;
60 62
...@@ -175,13 +177,23 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -175,13 +177,23 @@ public class PcepClientImpl implements PcepClientDriver {
175 } 177 }
176 178
177 @Override 179 @Override
178 - public void setIsSyncComplete(boolean value) { 180 + public void setLspDbSyncStatus(PcepSyncStatus syncStatus) {
179 - this.isSyncComplete = value; 181 + this.lspDbSyncStatus = syncStatus;
180 } 182 }
181 183
182 @Override 184 @Override
183 - public boolean isSyncComplete() { 185 + public PcepSyncStatus lspDbSyncStatus() {
184 - return isSyncComplete; 186 + return lspDbSyncStatus;
187 + }
188 +
189 + @Override
190 + public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) {
191 + this.labelDbSyncStatus = syncStatus;
192 + }
193 +
194 + @Override
195 + public PcepSyncStatus labelDbSyncStatus() {
196 + return labelDbSyncStatus;
185 } 197 }
186 198
187 @Override 199 @Override
......
...@@ -48,7 +48,7 @@ public class PcepLspObjectVer1 implements PcepLspObject { ...@@ -48,7 +48,7 @@ public class PcepLspObjectVer1 implements PcepLspObject {
48 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 48 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49 | Object-Class | OT |Res|P|I| Object Length (bytes) | 49 | Object-Class | OT |Res|P|I| Object Length (bytes) |
50 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 50 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51 - | PLSP-ID | Flag C| O|A|R|S|D| 51 + | PLSP-ID | Flag |C| O|A|R|S|D|
52 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 52 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53 // TLVs // 53 // TLVs //
54 | | 54 | |
...@@ -116,6 +116,7 @@ public class PcepLspObjectVer1 implements PcepLspObject { ...@@ -116,6 +116,7 @@ public class PcepLspObjectVer1 implements PcepLspObject {
116 * @param bRFlag R flag 116 * @param bRFlag R flag
117 * @param bSFlag S flag 117 * @param bSFlag S flag
118 * @param bDFlag D flag 118 * @param bDFlag D flag
119 + * @param bCFlag C flag
119 * @param llOptionalTlv list of optional tlv 120 * @param llOptionalTlv list of optional tlv
120 */ 121 */
121 public PcepLspObjectVer1(PcepObjectHeader lspObjHeader, int iPlspId, byte yOFlag, boolean bAFlag, boolean bRFlag, 122 public PcepLspObjectVer1(PcepObjectHeader lspObjHeader, int iPlspId, byte yOFlag, boolean bAFlag, boolean bRFlag,
...@@ -294,6 +295,9 @@ public class PcepLspObjectVer1 implements PcepLspObject { ...@@ -294,6 +295,9 @@ public class PcepLspObjectVer1 implements PcepLspObject {
294 } 295 }
295 296
296 int iTemp = iPlspId << PLSPID_SHIFT_VALUE; 297 int iTemp = iPlspId << PLSPID_SHIFT_VALUE;
298 +
299 + iTemp = iTemp | (((bCFlag) ? BIT_SET : BIT_RESET) << CFLAG_SHIFT_VALUE);
300 +
297 iTemp = iTemp | (yOFlag << OFLAG_SHIFT_VALUE); 301 iTemp = iTemp | (yOFlag << OFLAG_SHIFT_VALUE);
298 byte bFlag; 302 byte bFlag;
299 iTemp = bAFlag ? (iTemp | AFLAG_TEMP_SHIFT_VALUE) : iTemp; 303 iTemp = bAFlag ? (iTemp | AFLAG_TEMP_SHIFT_VALUE) : iTemp;
......
...@@ -51,4 +51,9 @@ public final class PcepAnnotationKeys { ...@@ -51,4 +51,9 @@ public final class PcepAnnotationKeys {
51 * Annotation key for the LSP id assigned per tunnel. 51 * Annotation key for the LSP id assigned per tunnel.
52 */ 52 */
53 public static final String LOCAL_LSP_ID = "localLspId"; 53 public static final String LOCAL_LSP_ID = "localLspId";
54 +
55 + /**
56 + * Annotation key for the identification of initiated LSP.
57 + */
58 + public static final String PCE_INIT = "pceInit";
54 } 59 }
......
...@@ -18,7 +18,6 @@ package org.onosproject.provider.pcep.tunnel.impl; ...@@ -18,7 +18,6 @@ package org.onosproject.provider.pcep.tunnel.impl;
18 import java.util.HashMap; 18 import java.util.HashMap;
19 import java.util.Map; 19 import java.util.Map;
20 20
21 -import org.apache.commons.collections.map.MultiKeyMap;
22 import org.onosproject.incubator.net.tunnel.TunnelId; 21 import org.onosproject.incubator.net.tunnel.TunnelId;
23 import org.onosproject.incubator.net.tunnel.TunnelProviderService; 22 import org.onosproject.incubator.net.tunnel.TunnelProviderService;
24 import org.slf4j.Logger; 23 import org.slf4j.Logger;
...@@ -40,8 +39,6 @@ public class PcepTunnelApiMapper { ...@@ -40,8 +39,6 @@ public class PcepTunnelApiMapper {
40 private Map<Integer, PcepTunnelData> tunnelDB; 39 private Map<Integer, PcepTunnelData> tunnelDB;
41 // Map to store the tunnel ids, given by core and given by pcc. 40 // Map to store the tunnel ids, given by core and given by pcc.
42 private Map<TunnelId, Integer> tunnelIdMap; 41 private Map<TunnelId, Integer> tunnelIdMap;
43 - //Map to store all the learnt tunnels.
44 - private MultiKeyMap pccTunnelDB = new MultiKeyMap();
45 42
46 TunnelProviderService tunnelApiMapperservice; 43 TunnelProviderService tunnelApiMapperservice;
47 44
...@@ -193,14 +190,4 @@ public class PcepTunnelApiMapper { ...@@ -193,14 +190,4 @@ public class PcepTunnelApiMapper {
193 boolean retValue = tunnelDB.containsKey((new Integer(value))); 190 boolean retValue = tunnelDB.containsKey((new Integer(value)));
194 return retValue; 191 return retValue;
195 } 192 }
196 -
197 - /**
198 - * Add Learnt tunnels to pcc tunnel DB.
199 - *
200 - * @param pcepTunnelData pcep tunnel data
201 - */
202 - public void addPccTunnelDB(PcepTunnelData pcepTunnelData) {
203 - pccTunnelDB.put(pcepTunnelData.statefulIpv4IndentifierTlv().getTunnelId() & 0xFFFFL,
204 - pcepTunnelData.statefulIpv4IndentifierTlv().getIpv4IngressAddress(), pcepTunnelData);
205 - }
206 } 193 }
......
...@@ -24,6 +24,7 @@ import org.jboss.netty.channel.Channel; ...@@ -24,6 +24,7 @@ import org.jboss.netty.channel.Channel;
24 import org.onosproject.pcep.controller.ClientCapability; 24 import org.onosproject.pcep.controller.ClientCapability;
25 import org.onosproject.pcep.controller.PccId; 25 import org.onosproject.pcep.controller.PccId;
26 import org.onosproject.pcep.controller.PcepClient; 26 import org.onosproject.pcep.controller.PcepClient;
27 +import org.onosproject.pcep.controller.PcepSyncStatus;
27 import org.onosproject.pcepio.protocol.PcepFactories; 28 import org.onosproject.pcepio.protocol.PcepFactories;
28 import org.onosproject.pcepio.protocol.PcepFactory; 29 import org.onosproject.pcepio.protocol.PcepFactory;
29 import org.onosproject.pcepio.protocol.PcepMessage; 30 import org.onosproject.pcepio.protocol.PcepMessage;
...@@ -42,7 +43,8 @@ public class PcepClientAdapter implements PcepClient { ...@@ -42,7 +43,8 @@ public class PcepClientAdapter implements PcepClient {
42 private ClientCapability capability; 43 private ClientCapability capability;
43 44
44 private PcepVersion pcepVersion; 45 private PcepVersion pcepVersion;
45 - private boolean syncCompleted; 46 + private PcepSyncStatus lspDbSyncStatus;
47 + private PcepSyncStatus labelDbSyncStatus;
46 48
47 /** 49 /**
48 * Initialize instance with specified parameters. 50 * Initialize instance with specified parameters.
...@@ -109,13 +111,23 @@ public class PcepClientAdapter implements PcepClient { ...@@ -109,13 +111,23 @@ public class PcepClientAdapter implements PcepClient {
109 } 111 }
110 112
111 @Override 113 @Override
112 - public final boolean isSyncComplete() { 114 + public void setLspDbSyncStatus(PcepSyncStatus syncStatus) {
113 - return syncCompleted; 115 + this.lspDbSyncStatus = syncStatus;
114 } 116 }
115 117
116 @Override 118 @Override
117 - public final void setIsSyncComplete(boolean value) { 119 + public PcepSyncStatus lspDbSyncStatus() {
118 - syncCompleted = value; 120 + return lspDbSyncStatus;
121 + }
122 +
123 + @Override
124 + public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) {
125 + this.labelDbSyncStatus = syncStatus;
126 + }
127 +
128 + @Override
129 + public PcepSyncStatus labelDbSyncStatus() {
130 + return labelDbSyncStatus;
119 } 131 }
120 132
121 @Override 133 @Override
......