Priyanka B
Committed by Priyankab-Huawei

[ONOS] Cherry picked from master 1.7

Change-Id: I74a0c1634f9c425af2bcb646edc3d9170b3c087c
Showing 73 changed files with 1948 additions and 84 deletions
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
22 <groupId>org.onosproject</groupId> 22 <groupId>org.onosproject</groupId>
23 <artifactId>onos-pce</artifactId> 23 <artifactId>onos-pce</artifactId>
24 <version>1.6.0-SNAPSHOT</version> 24 <version>1.6.0-SNAPSHOT</version>
25 + <relativePath>../pom.xml</relativePath>
25 </parent> 26 </parent>
26 <artifactId>onos-app-pce</artifactId> 27 <artifactId>onos-app-pce</artifactId>
27 <packaging>bundle</packaging> 28 <packaging>bundle</packaging>
......
...@@ -19,7 +19,6 @@ import static org.hamcrest.MatcherAssert.assertThat; ...@@ -19,7 +19,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
19 import static org.hamcrest.Matchers.is; 19 import static org.hamcrest.Matchers.is;
20 import static org.hamcrest.Matchers.notNullValue; 20 import static org.hamcrest.Matchers.notNullValue;
21 import static org.hamcrest.Matchers.nullValue; 21 import static org.hamcrest.Matchers.nullValue;
22 -
23 import static org.onosproject.net.Link.Type.DIRECT; 22 import static org.onosproject.net.Link.Type.DIRECT;
24 23
25 import java.util.Iterator; 24 import java.util.Iterator;
...@@ -29,7 +28,6 @@ import java.util.LinkedList; ...@@ -29,7 +28,6 @@ import java.util.LinkedList;
29 import org.junit.After; 28 import org.junit.After;
30 import org.junit.Before; 29 import org.junit.Before;
31 import org.junit.Test; 30 import org.junit.Test;
32 -
33 import org.onlab.packet.IpAddress; 31 import org.onlab.packet.IpAddress;
34 import org.onosproject.core.ApplicationId; 32 import org.onosproject.core.ApplicationId;
35 import org.onosproject.core.CoreService; 33 import org.onosproject.core.CoreService;
...@@ -165,6 +163,7 @@ public class BasicPceccHandlerTest { ...@@ -165,6 +163,7 @@ public class BasicPceccHandlerTest {
165 163
166 @After 164 @After
167 public void tearDown() throws Exception { 165 public void tearDown() throws Exception {
166 + PceManagerTest.flowsDownloaded = 0;
168 } 167 }
169 168
170 /** 169 /**
......
...@@ -158,6 +158,7 @@ public class PceccSrTeBeHandlerTest { ...@@ -158,6 +158,7 @@ public class PceccSrTeBeHandlerTest {
158 158
159 @After 159 @After
160 public void tearDown() throws Exception { 160 public void tearDown() throws Exception {
161 + PceManagerTest.flowsDownloaded = 0;
161 } 162 }
162 163
163 /** 164 /**
......

7.44 KB | W: | H:

23.3 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
23 <groupId>org.onosproject</groupId> 23 <groupId>org.onosproject</groupId>
24 <artifactId>onos-pce</artifactId> 24 <artifactId>onos-pce</artifactId>
25 <version>1.6.0-SNAPSHOT</version> 25 <version>1.6.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
26 </parent> 27 </parent>
27 28
28 <artifactId>onos-app-pceweb</artifactId> 29 <artifactId>onos-app-pceweb</artifactId>
...@@ -42,6 +43,11 @@ ...@@ -42,6 +43,11 @@
42 <artifactId>onos-cli</artifactId> 43 <artifactId>onos-cli</artifactId>
43 <version>${project.version}</version> 44 <version>${project.version}</version>
44 </dependency> 45 </dependency>
46 + <dependency>
47 + <groupId>org.onosproject</groupId>
48 + <artifactId>onos-app-pce</artifactId>
49 + <version>${project.version}</version>
50 + </dependency>
45 </dependencies> 51 </dependencies>
46 52
47 <properties> 53 <properties>
......
...@@ -63,7 +63,6 @@ public class PceWebTopovOverlay extends UiTopoOverlay { ...@@ -63,7 +63,6 @@ public class PceWebTopovOverlay extends UiTopoOverlay {
63 public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) { 63 public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
64 64
65 pp.title(MY_TITLE); 65 pp.title(MY_TITLE);
66 - log.info("Modify device details called.");
67 66
68 DeviceService deviceService = AbstractShellCommand.get(DeviceService.class); 67 DeviceService deviceService = AbstractShellCommand.get(DeviceService.class);
69 68
......
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
34 glyphId: 'topo', 34 glyphId: 'topo',
35 tooltip: 'PCE web Topo Overlay', 35 tooltip: 'PCE web Topo Overlay',
36 36
37 -
38 activate: function () { 37 activate: function () {
39 $log.debug("PCE web topology overlay ACTIVATED"); 38 $log.debug("PCE web topology overlay ACTIVATED");
40 }, 39 },
...@@ -112,11 +111,32 @@ ...@@ -112,11 +111,32 @@
112 }, 111 },
113 1: { 112 1: {
114 cb: function () { 113 cb: function () {
115 - pps.setMode("shortest"); 114 + pps.setMode();
115 + },
116 + tt: 'Setup path',
117 + gid: 'plus'
118 + },
119 + 2: {
120 + cb: function () {
121 + pps.updatePath(selection);
116 }, 122 },
117 - tt: 'Select constraints for LSP', 123 + tt: 'Update path',
118 gid: '*jp' 124 gid: '*jp'
119 }, 125 },
126 + 3: {
127 + cb: function () {
128 + pps.remPath(selection);
129 + },
130 + tt: 'Remove path',
131 + gid: 'minus'
132 + },
133 + 4: {
134 + cb: function () {
135 + pps.queryTunnelDisplay();
136 + },
137 + tt: 'Show Tunnels',
138 + gid: 'checkMark'
139 + },
120 0: { 140 0: {
121 cb: function () { 141 cb: function () {
122 pps.clear(); 142 pps.clear();
...@@ -126,7 +146,7 @@ ...@@ -126,7 +146,7 @@
126 }, 146 },
127 147
128 _keyOrder: [ 148 _keyOrder: [
129 - 'openBracket', 'closeBracket', '1', '0' 149 + 'openBracket', 'closeBracket', '1', '2', '3', '4', '0'
130 ] 150 ]
131 }, 151 },
132 hooks: { 152 hooks: {
...@@ -145,6 +165,9 @@ ...@@ -145,6 +165,9 @@
145 }, 165 },
146 single: function (data) { 166 single: function (data) {
147 selectionCallback(data); 167 selectionCallback(data);
168 + },
169 + multi: function (selectOrder) {
170 + selectionCallback(selectOrder);
148 } 171 }
149 } 172 }
150 }; 173 };
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
21 <groupId>org.onosproject</groupId> 21 <groupId>org.onosproject</groupId>
22 <artifactId>onos-apps</artifactId> 22 <artifactId>onos-apps</artifactId>
23 <version>1.6.0-SNAPSHOT</version> 23 <version>1.6.0-SNAPSHOT</version>
24 + <relativePath>../pom.xml</relativePath>
24 </parent> 25 </parent>
25 <modelVersion>4.0.0</modelVersion> 26 <modelVersion>4.0.0</modelVersion>
26 27
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
23 <groupId>org.onosproject</groupId> 23 <groupId>org.onosproject</groupId>
24 <artifactId>onos-bgp</artifactId> 24 <artifactId>onos-bgp</artifactId>
25 <version>1.6.0-SNAPSHOT</version> 25 <version>1.6.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
26 </parent> 27 </parent>
27 28
28 <artifactId>onos-bgp-api</artifactId> 29 <artifactId>onos-bgp-api</artifactId>
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
23 <groupId>org.onosproject</groupId> 23 <groupId>org.onosproject</groupId>
24 <artifactId>onos-bgp</artifactId> 24 <artifactId>onos-bgp</artifactId>
25 <version>1.6.0-SNAPSHOT</version> 25 <version>1.6.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
26 </parent> 27 </parent>
27 28
28 <artifactId>onos-bgpio</artifactId> 29 <artifactId>onos-bgpio</artifactId>
......
...@@ -241,12 +241,11 @@ public class BgpUpdateMsgVer4 implements BgpUpdateMsg { ...@@ -241,12 +241,11 @@ public class BgpUpdateMsgVer4 implements BgpUpdateMsg {
241 afi = mpUnReach.afi(); 241 afi = mpUnReach.afi();
242 safi = mpUnReach.safi(); 242 safi = mpUnReach.safi();
243 } 243 }
244 + }
244 245
245 - if ((afi == Constants.AFI_FLOWSPEC_VALUE) && ((safi == Constants.SAFI_FLOWSPEC_VALUE) 246 + if ((afi == Constants.AFI_FLOWSPEC_VALUE) || (afi == Constants.AFI_VALUE)) {
246 - || (safi == Constants.VPN_SAFI_FLOWSPEC_VALUE))) { 247 + //unfeasible route length
247 - //unfeasible route length 248 + cb.writeShort(0);
248 - cb.writeShort(0);
249 - }
250 } 249 }
251 250
252 } 251 }
......
...@@ -171,15 +171,17 @@ public class As4Path implements BgpValueType { ...@@ -171,15 +171,17 @@ public class As4Path implements BgpValueType {
171 if ((as4pathSet != null) && (as4pathSeq != null)) { 171 if ((as4pathSet != null) && (as4pathSeq != null)) {
172 int iAsLenIndex = cb.writerIndex(); 172 int iAsLenIndex = cb.writerIndex();
173 cb.writeByte(0); 173 cb.writeByte(0);
174 - cb.writeByte(AsPath.ASPATH_SEQ_TYPE); 174 + if (as4pathSeq.size() != 0) {
175 - cb.writeByte(as4pathSeq.size()); 175 + cb.writeByte(AsPath.ASPATH_SEQ_TYPE);
176 + cb.writeByte(as4pathSeq.size());
176 177
177 - for (int j = 0; j < as4pathSeq.size(); j++) { 178 + for (int j = 0; j < as4pathSeq.size(); j++) {
178 - cb.writeInt(as4pathSeq.get(j)); 179 + cb.writeInt(as4pathSeq.get(j));
179 - } 180 + }
180 181
181 - int asLen = cb.writerIndex() - iAsLenIndex; 182 + int asLen = cb.writerIndex() - iAsLenIndex;
182 - cb.setByte(iAsLenIndex, (byte) (asLen - 1)); 183 + cb.setByte(iAsLenIndex, (byte) (asLen - 1));
184 + }
183 } else { 185 } else {
184 cb.writeByte(0); 186 cb.writeByte(0);
185 } 187 }
......
...@@ -208,15 +208,16 @@ public class AsPath implements BgpValueType { ...@@ -208,15 +208,16 @@ public class AsPath implements BgpValueType {
208 if (isaspathSet()) { 208 if (isaspathSet()) {
209 int iAsLenIndex = cb.writerIndex(); 209 int iAsLenIndex = cb.writerIndex();
210 cb.writeByte(0); 210 cb.writeByte(0);
211 - cb.writeByte(ASPATH_SEQ_TYPE); 211 + if (aspathSeq.size() != 0) {
212 - cb.writeByte(aspathSeq.size()); 212 + cb.writeByte(ASPATH_SEQ_TYPE);
213 + cb.writeByte(aspathSeq.size());
213 214
214 - for (int j = 0; j < aspathSeq.size(); j++) { 215 + for (int j = 0; j < aspathSeq.size(); j++) {
215 - cb.writeShort(aspathSeq.get(j)); 216 + cb.writeShort(aspathSeq.get(j));
217 + }
218 + int asLen = cb.writerIndex() - iAsLenIndex;
219 + cb.setByte(iAsLenIndex, (byte) (asLen - 1));
216 } 220 }
217 -
218 - int asLen = cb.writerIndex() - iAsLenIndex;
219 - cb.setByte(iAsLenIndex, (byte) (asLen - 1));
220 } else { 221 } else {
221 cb.writeByte(0); 222 cb.writeByte(0);
222 } 223 }
......
...@@ -106,7 +106,7 @@ public class LinkStateAttributes implements BgpValueType { ...@@ -106,7 +106,7 @@ public class LinkStateAttributes implements BgpValueType {
106 * 106 *
107 * @param linkStateAttribList Linked list of Link, Node and Prefix TLVs 107 * @param linkStateAttribList Linked list of Link, Node and Prefix TLVs
108 */ 108 */
109 - LinkStateAttributes(List<BgpValueType> linkStateAttribList) { 109 + public LinkStateAttributes(List<BgpValueType> linkStateAttribList) {
110 this.linkStateAttribList = linkStateAttribList; 110 this.linkStateAttribList = linkStateAttribList;
111 this.isLinkStateAttribute = true; 111 this.isLinkStateAttribute = true;
112 } 112 }
......
...@@ -163,7 +163,6 @@ public class WideCommunityAttrHeader implements BgpValueType { ...@@ -163,7 +163,6 @@ public class WideCommunityAttrHeader implements BgpValueType {
163 c.writeShort(TYPE); 163 c.writeShort(TYPE);
164 c.writeByte(flag); 164 c.writeByte(flag);
165 c.writeByte(hopCount); 165 c.writeByte(hopCount);
166 - c.writeShort(length);
167 return c.writerIndex() - iLenStartIndex; 166 return c.writerIndex() - iLenStartIndex;
168 } 167 }
169 168
......
...@@ -97,8 +97,8 @@ public class WideCommunityIpV4Neighbour implements BgpValueType { ...@@ -97,8 +97,8 @@ public class WideCommunityIpV4Neighbour implements BgpValueType {
97 while (listIterator.hasNext()) { 97 while (listIterator.hasNext()) {
98 IpV4Neighbour speaker = listIterator.next(); 98 IpV4Neighbour speaker = listIterator.next();
99 if (speaker instanceof IpV4Neighbour) { 99 if (speaker instanceof IpV4Neighbour) {
100 - c.writeInt(Integer.valueOf(speaker.localSpeaker.toString())); 100 + c.writeBytes(speaker.localSpeaker().toOctets());
101 - c.writeInt(Integer.valueOf(speaker.remoteSpeaker.toString())); 101 + c.writeBytes(speaker.remoteSpeaker().toOctets());
102 } 102 }
103 } 103 }
104 104
......
...@@ -96,7 +96,7 @@ public final class BgpLinkAttrMaxLinkBandwidth implements BgpValueType { ...@@ -96,7 +96,7 @@ public final class BgpLinkAttrMaxLinkBandwidth implements BgpValueType {
96 * 96 *
97 * @return Maximum link bandwidth 97 * @return Maximum link bandwidth
98 */ 98 */
99 - float linkAttrMaxLinkBandwidth() { 99 + public float linkAttrMaxLinkBandwidth() {
100 return maxBandwidth; 100 return maxBandwidth;
101 } 101 }
102 102
......
...@@ -43,10 +43,10 @@ import java.util.Objects; ...@@ -43,10 +43,10 @@ import java.util.Objects;
43 public class WideCommunity implements BgpValueType { 43 public class WideCommunity implements BgpValueType {
44 44
45 private static final Logger log = LoggerFactory.getLogger(WideCommunity.class); 45 private static final Logger log = LoggerFactory.getLogger(WideCommunity.class);
46 - public static final byte TYPE = (byte) 254; /* TODO: IANA Assigned */ 46 + public static final byte TYPE = (byte) 129;
47 public static final short LENGTH = 4; 47 public static final short LENGTH = 4;
48 public static final byte TYPE_LENGTH_SIZE = 3; 48 public static final byte TYPE_LENGTH_SIZE = 3;
49 - public static final byte FLAGS = (byte) 0x40; 49 + public static final byte FLAGS = (byte) 0x90;
50 private WideCommunityAttrHeader wideCommunityHeader; 50 private WideCommunityAttrHeader wideCommunityHeader;
51 private int community; 51 private int community;
52 private int localAsn; 52 private int localAsn;
...@@ -238,6 +238,9 @@ public class WideCommunity implements BgpValueType { ...@@ -238,6 +238,9 @@ public class WideCommunity implements BgpValueType {
238 238
239 wideCommunityHeader.write(c); 239 wideCommunityHeader.write(c);
240 240
241 + int iComLengthIndex = c.writerIndex();
242 + c.writeShort(0);
243 +
241 c.writeInt(community); 244 c.writeInt(community);
242 c.writeInt(localAsn); 245 c.writeInt(localAsn);
243 c.writeInt(contextAsn); 246 c.writeInt(contextAsn);
...@@ -275,6 +278,9 @@ public class WideCommunity implements BgpValueType { ...@@ -275,6 +278,9 @@ public class WideCommunity implements BgpValueType {
275 c.setShort(iTargetLenIndex, (short) (length - 2)); 278 c.setShort(iTargetLenIndex, (short) (length - 2));
276 } 279 }
277 280
281 + length = c.writerIndex() - iComLengthIndex;
282 + c.setShort(iComLengthIndex, (short) (length - 2));
283 +
278 length = c.writerIndex() - iLengthIndex; 284 length = c.writerIndex() - iLengthIndex;
279 c.setShort(iLengthIndex, (short) (length - 2)); 285 c.setShort(iLengthIndex, (short) (length - 2));
280 286
......
...@@ -46,6 +46,11 @@ ...@@ -46,6 +46,11 @@
46 <groupId>org.osgi</groupId> 46 <groupId>org.osgi</groupId>
47 <artifactId>org.osgi.compendium</artifactId> 47 <artifactId>org.osgi.compendium</artifactId>
48 </dependency> 48 </dependency>
49 + <dependency>
50 + <groupId>io.netty</groupId>
51 + <artifactId>netty-common</artifactId>
52 + <version>4.0.36.Final</version>
53 + </dependency>
49 </dependencies> 54 </dependencies>
50 55
51 <build> 56 <build>
......
...@@ -205,7 +205,7 @@ public class BgpConfig implements BgpCfg { ...@@ -205,7 +205,7 @@ public class BgpConfig implements BgpCfg {
205 lspeer.setSelfInnitConnection(true); 205 lspeer.setSelfInnitConnection(true);
206 206
207 if (lspeer.connectPeer() == null) { 207 if (lspeer.connectPeer() == null) {
208 - connectPeer = new BgpConnectPeerImpl(bgpController, routerid, Controller.getBgpPortNum()); 208 + connectPeer = new BgpConnectPeerImpl(bgpController, routerid, Controller.BGP_PORT_NUM);
209 lspeer.setConnectPeer(connectPeer); 209 lspeer.setConnectPeer(connectPeer);
210 connectPeer.connectPeer(); 210 connectPeer.connectPeer();
211 } 211 }
......
...@@ -135,7 +135,7 @@ public class BgpLocalRibImpl implements BgpLocalRib { ...@@ -135,7 +135,7 @@ public class BgpLocalRibImpl implements BgpLocalRib {
135 BgpSelectionAlgo selectionAlgo = new BgpSelectionAlgo(); 135 BgpSelectionAlgo selectionAlgo = new BgpSelectionAlgo();
136 // Compare local RIB entry with the current attribute 136 // Compare local RIB entry with the current attribute
137 decisionResult = selectionAlgo.compare(nodeTree.get(nodeLsIdentifier), detailsLocRib); 137 decisionResult = selectionAlgo.compare(nodeTree.get(nodeLsIdentifier), detailsLocRib);
138 - if (decisionResult < 0) { 138 + if (decisionResult <= 0) {
139 for (BgpNodeListener l : bgpController.listener()) { 139 for (BgpNodeListener l : bgpController.listener()) {
140 l.addNode((BgpNodeLSNlriVer4) nlri, details); 140 l.addNode((BgpNodeLSNlriVer4) nlri, details);
141 } 141 }
...@@ -155,7 +155,7 @@ public class BgpLocalRibImpl implements BgpLocalRib { ...@@ -155,7 +155,7 @@ public class BgpLocalRibImpl implements BgpLocalRib {
155 BgpSelectionAlgo selectionAlgo = new BgpSelectionAlgo(); 155 BgpSelectionAlgo selectionAlgo = new BgpSelectionAlgo();
156 // Compare local RIB entry with the current attribute 156 // Compare local RIB entry with the current attribute
157 decisionResult = selectionAlgo.compare(linkTree.get(linkLsIdentifier), detailsLocRib); 157 decisionResult = selectionAlgo.compare(linkTree.get(linkLsIdentifier), detailsLocRib);
158 - if (decisionResult < 0) { 158 + if (decisionResult <= 0) {
159 linkTree.replace(linkLsIdentifier, detailsLocRib); 159 linkTree.replace(linkLsIdentifier, detailsLocRib);
160 for (BgpLinkListener l : bgpController.linkListener()) { 160 for (BgpLinkListener l : bgpController.linkListener()) {
161 l.addLink((BgpLinkLsNlriVer4) nlri, details); 161 l.addLink((BgpLinkLsNlriVer4) nlri, details);
...@@ -175,7 +175,7 @@ public class BgpLocalRibImpl implements BgpLocalRib { ...@@ -175,7 +175,7 @@ public class BgpLocalRibImpl implements BgpLocalRib {
175 BgpSelectionAlgo selectionAlgo = new BgpSelectionAlgo(); 175 BgpSelectionAlgo selectionAlgo = new BgpSelectionAlgo();
176 // Compare local RIB entry with the current attribute 176 // Compare local RIB entry with the current attribute
177 decisionResult = selectionAlgo.compare(prefixTree.get(prefixIdentifier), detailsLocRib); 177 decisionResult = selectionAlgo.compare(prefixTree.get(prefixIdentifier), detailsLocRib);
178 - if (decisionResult < 0) { 178 + if (decisionResult <= 0) {
179 prefixTree.replace(prefixIdentifier, detailsLocRib); 179 prefixTree.replace(prefixIdentifier, detailsLocRib);
180 log.debug("Local RIB update prefix: {}", detailsLocRib.toString()); 180 log.debug("Local RIB update prefix: {}", detailsLocRib.toString());
181 } 181 }
......
...@@ -159,15 +159,16 @@ public class BgpPeerImpl implements BgpPeer { ...@@ -159,15 +159,16 @@ public class BgpPeerImpl implements BgpPeer {
159 * Send flow specification update message to peer. 159 * Send flow specification update message to peer.
160 * 160 *
161 * @param operType operation type 161 * @param operType operation type
162 + * @param routeKey flow rule key
162 * @param flowSpec flow specification details 163 * @param flowSpec flow specification details
163 - * @param wideCommunity for route policy 164 + * @param wideCommunity for route policy
164 */ 165 */
165 public final void sendFlowSpecUpdateMessageToPeer(FlowSpecOperation operType, BgpFlowSpecRouteKey routeKey, 166 public final void sendFlowSpecUpdateMessageToPeer(FlowSpecOperation operType, BgpFlowSpecRouteKey routeKey,
166 BgpFlowSpecNlri flowSpec, WideCommunity wideCommunity) { 167 BgpFlowSpecNlri flowSpec, WideCommunity wideCommunity) {
167 168
168 List<BgpValueType> attributesList = new LinkedList<>(); 169 List<BgpValueType> attributesList = new LinkedList<>();
169 byte sessionType = sessionInfo.isIbgpSession() ? (byte) 0 : (byte) 1; 170 byte sessionType = sessionInfo.isIbgpSession() ? (byte) 0 : (byte) 1;
170 - byte sAfi = Constants.VPN_SAFI_FLOWSPEC_VALUE; 171 + byte sAfi = Constants.SAFI_FLOWSPEC_VALUE;
171 172
172 boolean isFsCapabilitySet = isCapabilitySupported(MultiProtocolExtnCapabilityTlv.TYPE, 173 boolean isFsCapabilitySet = isCapabilitySupported(MultiProtocolExtnCapabilityTlv.TYPE,
173 Constants.AFI_FLOWSPEC_VALUE, 174 Constants.AFI_FLOWSPEC_VALUE,
...@@ -190,10 +191,10 @@ public class BgpPeerImpl implements BgpPeer { ...@@ -190,10 +191,10 @@ public class BgpPeerImpl implements BgpPeer {
190 return; 191 return;
191 } 192 }
192 193
193 - if ((wideCommunity != null) && (isVpnRpdCapabilitySet)) { 194 + if (isVpnFsCapabilitySet) {
194 - sAfi = Constants.VPN_SAFI_FLOWSPEC_RDP_VALUE;
195 - } else if (isVpnFsCapabilitySet) {
196 sAfi = Constants.VPN_SAFI_FLOWSPEC_VALUE; 195 sAfi = Constants.VPN_SAFI_FLOWSPEC_VALUE;
196 + } else if (isVpnRpdCapabilitySet) {
197 + sAfi = Constants.VPN_SAFI_FLOWSPEC_RDP_VALUE;
197 } 198 }
198 attributesList.add(new Origin((byte) 0)); 199 attributesList.add(new Origin((byte) 0));
199 200
...@@ -222,7 +223,9 @@ public class BgpPeerImpl implements BgpPeer { ...@@ -222,7 +223,9 @@ public class BgpPeerImpl implements BgpPeer {
222 } 223 }
223 224
224 attributesList.add(new BgpExtendedCommunity(flowSpec.fsActionTlv())); 225 attributesList.add(new BgpExtendedCommunity(flowSpec.fsActionTlv()));
225 - attributesList.add(wideCommunity); 226 + if (wideCommunity != null) {
227 + attributesList.add(wideCommunity);
228 + }
226 229
227 if (operType == FlowSpecOperation.ADD) { 230 if (operType == FlowSpecOperation.ADD) {
228 attributesList.add(new MpReachNlri(flowSpec, Constants.AFI_FLOWSPEC_VALUE, sAfi)); 231 attributesList.add(new MpReachNlri(flowSpec, Constants.AFI_FLOWSPEC_VALUE, sAfi));
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 package org.onosproject.bgp.controller.impl; 16 package org.onosproject.bgp.controller.impl;
17 17
18 import static org.onlab.util.Tools.groupedThreads; 18 import static org.onlab.util.Tools.groupedThreads;
19 - 19 +import io.netty.util.internal.PlatformDependent;
20 import java.lang.management.ManagementFactory; 20 import java.lang.management.ManagementFactory;
21 import java.lang.management.RuntimeMXBean; 21 import java.lang.management.RuntimeMXBean;
22 import java.net.InetSocketAddress; 22 import java.net.InetSocketAddress;
...@@ -53,9 +53,11 @@ public class Controller { ...@@ -53,9 +53,11 @@ public class Controller {
53 public Channel serverChannel; 53 public Channel serverChannel;
54 54
55 // Configuration options 55 // Configuration options
56 - private static final short BGP_PORT_NUM = 179; 56 + protected static final short BGP_PORT_NUM = 179;
57 + private static final short BGP_PRIVILEGED_PORT = 1790; // server port used for non root users in linux
57 private static final short PORT_NUM_ZERO = 0; 58 private static final short PORT_NUM_ZERO = 0;
58 private static boolean isPortNumSet = false; 59 private static boolean isPortNumSet = false;
60 + private static short portNumber = BGP_PORT_NUM;
59 private final int workerThreads = 16; 61 private final int workerThreads = 16;
60 private final int peerWorkerThreads = 16; 62 private final int peerWorkerThreads = 16;
61 63
...@@ -219,6 +221,11 @@ public class Controller { ...@@ -219,6 +221,11 @@ public class Controller {
219 */ 221 */
220 public void start() { 222 public void start() {
221 log.info("Started"); 223 log.info("Started");
224 + if (!PlatformDependent.isWindows() && !PlatformDependent.isRoot()) {
225 + portNumber = BGP_PRIVILEGED_PORT;
226 + } else {
227 + portNumber = BGP_PORT_NUM;
228 + }
222 this.init(); 229 this.init();
223 this.run(); 230 this.run();
224 } 231 }
...@@ -242,7 +249,8 @@ public class Controller { ...@@ -242,7 +249,8 @@ public class Controller {
242 if (isPortNumSet) { 249 if (isPortNumSet) {
243 return PORT_NUM_ZERO; 250 return PORT_NUM_ZERO;
244 } 251 }
245 - return BGP_PORT_NUM; 252 +
253 + return portNumber;
246 } 254 }
247 255
248 /** 256 /**
......
1 COMPILE_DEPS = [ 1 COMPILE_DEPS = [
2 '//lib:CORE_DEPS', 2 '//lib:CORE_DEPS',
3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio', 3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
4 + '//apps/pcep-api:onos-apps-pcep-api',
5 + '//incubator/api:onos-incubator-api',
4 ] 6 ]
5 7
6 osgi_jar_with_tests ( 8 osgi_jar_with_tests (
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
23 <groupId>org.onosproject</groupId> 23 <groupId>org.onosproject</groupId>
24 <artifactId>onos-pcep-controller</artifactId> 24 <artifactId>onos-pcep-controller</artifactId>
25 <version>1.6.0-SNAPSHOT</version> 25 <version>1.6.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
26 </parent> 27 </parent>
27 28
28 <artifactId>onos-pcep-controller-api</artifactId> 29 <artifactId>onos-pcep-controller-api</artifactId>
...@@ -51,5 +52,9 @@ ...@@ -51,5 +52,9 @@
51 <groupId>org.onosproject</groupId> 52 <groupId>org.onosproject</groupId>
52 <artifactId>onlab-misc</artifactId> 53 <artifactId>onlab-misc</artifactId>
53 </dependency> 54 </dependency>
55 + <dependency>
56 + <groupId>org.onosproject</groupId>
57 + <artifactId>onos-incubator-api</artifactId>
58 + </dependency>
54 </dependencies> 59 </dependencies>
55 </project> 60 </project>
......
...@@ -26,6 +26,8 @@ public class ClientCapability { ...@@ -26,6 +26,8 @@ public class ClientCapability {
26 private boolean pceccCapability; 26 private boolean pceccCapability;
27 private boolean statefulPceCapability; 27 private boolean statefulPceCapability;
28 private boolean pcInstantiationCapability; 28 private boolean pcInstantiationCapability;
29 + private boolean labelStackCapability;
30 + private boolean srCapability;
29 31
30 /** 32 /**
31 * Creates new instance of client capability. 33 * Creates new instance of client capability.
...@@ -33,11 +35,34 @@ public class ClientCapability { ...@@ -33,11 +35,34 @@ public class ClientCapability {
33 * @param pceccCapability represents PCECC capability 35 * @param pceccCapability represents PCECC capability
34 * @param statefulPceCapability represents stateful PCE capability 36 * @param statefulPceCapability represents stateful PCE capability
35 * @param pcInstantiationCapability represents PC initiation capability 37 * @param pcInstantiationCapability represents PC initiation capability
38 + * @param labelStackCapability represents S bit is set in PCECC capability
39 + * @param srCapability represents SR capability
36 */ 40 */
37 - public ClientCapability(boolean pceccCapability, boolean statefulPceCapability, boolean pcInstantiationCapability) { 41 + public ClientCapability(boolean pceccCapability, boolean statefulPceCapability, boolean pcInstantiationCapability,
42 + boolean labelStackCapability, boolean srCapability) {
38 this.pceccCapability = pceccCapability; 43 this.pceccCapability = pceccCapability;
39 this.statefulPceCapability = statefulPceCapability; 44 this.statefulPceCapability = statefulPceCapability;
40 this.pcInstantiationCapability = pcInstantiationCapability; 45 this.pcInstantiationCapability = pcInstantiationCapability;
46 + this.labelStackCapability = labelStackCapability;
47 + this.srCapability = srCapability;
48 + }
49 +
50 + /**
51 + * Obtains label stack capability.
52 + *
53 + * @return true if client supports PCECC capability with S bit set otherwise false
54 + */
55 + public boolean labelStackCapability() {
56 + return labelStackCapability;
57 + }
58 +
59 + /**
60 + * Obtains segment routing capability.
61 + *
62 + * @return true if client supports SR capability otherwise false
63 + */
64 + public boolean srCapability() {
65 + return srCapability;
41 } 66 }
42 67
43 /** 68 /**
...@@ -69,7 +94,8 @@ public class ClientCapability { ...@@ -69,7 +94,8 @@ public class ClientCapability {
69 94
70 @Override 95 @Override
71 public int hashCode() { 96 public int hashCode() {
72 - return Objects.hash(pceccCapability, statefulPceCapability, pcInstantiationCapability); 97 + return Objects.hash(pceccCapability, statefulPceCapability, pcInstantiationCapability, labelStackCapability,
98 + srCapability);
73 } 99 }
74 100
75 @Override 101 @Override
...@@ -81,7 +107,9 @@ public class ClientCapability { ...@@ -81,7 +107,9 @@ public class ClientCapability {
81 ClientCapability other = (ClientCapability) obj; 107 ClientCapability other = (ClientCapability) obj;
82 return Objects.equals(pceccCapability, other.pceccCapability) 108 return Objects.equals(pceccCapability, other.pceccCapability)
83 && Objects.equals(statefulPceCapability, other.statefulPceCapability) 109 && Objects.equals(statefulPceCapability, other.statefulPceCapability)
84 - && Objects.equals(pcInstantiationCapability, other.pcInstantiationCapability); 110 + && Objects.equals(pcInstantiationCapability, other.pcInstantiationCapability)
111 + && Objects.equals(labelStackCapability, other.labelStackCapability)
112 + && Objects.equals(srCapability, other.srCapability);
85 } 113 }
86 return false; 114 return false;
87 } 115 }
...@@ -92,6 +120,8 @@ public class ClientCapability { ...@@ -92,6 +120,8 @@ public class ClientCapability {
92 .add("pceccCapability", pceccCapability) 120 .add("pceccCapability", pceccCapability)
93 .add("statefulPceCapability", statefulPceCapability) 121 .add("statefulPceCapability", statefulPceCapability)
94 .add("pcInstantiationCapability", pcInstantiationCapability) 122 .add("pcInstantiationCapability", pcInstantiationCapability)
123 + .add("labelStackCapability", labelStackCapability)
124 + .add("srCapability", srCapability)
95 .toString(); 125 .toString();
96 } 126 }
97 } 127 }
...\ No newline at end of file ...\ No newline at end of file
......
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 +import java.util.Objects;
19 +
20 +import com.google.common.base.MoreObjects;
21 +
22 +/**
23 + * Representation of LSP info, it will be unique for each LSP.
24 + */
25 +public class LspKey {
26 + private int plspId;
27 + private short localLspId;
28 +
29 + /**
30 + * Creates new instance of LspInfo.
31 + *
32 + * @param plspId LSP id assigned per tunnel per session
33 + * @param localLspId LSP id assigned per tunnel
34 + */
35 + public LspKey(int plspId, short localLspId) {
36 + this.plspId = plspId;
37 + this.localLspId = localLspId;
38 + }
39 +
40 + /**
41 + * Obtains PLSP id.
42 + *
43 + * @return LSP id assigned per tunnel per session
44 + */
45 + public int plspId() {
46 + return plspId;
47 + }
48 +
49 + /**
50 + * Obtains local LSP id.
51 + *
52 + * @return LSP id assigned per tunnel
53 + */
54 + public short localLspId() {
55 + return localLspId;
56 + }
57 +
58 + @Override
59 + public int hashCode() {
60 + return Objects.hash(plspId, localLspId);
61 + }
62 +
63 + @Override
64 + public boolean equals(Object obj) {
65 + if (this == obj) {
66 + return true;
67 + }
68 +
69 + if (obj instanceof LspKey) {
70 + LspKey other = (LspKey) obj;
71 + return Objects.equals(plspId, other.plspId)
72 + && Objects.equals(localLspId, other.localLspId);
73 + }
74 +
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return MoreObjects.toStringHelper(getClass())
81 + .add("plspId", plspId)
82 + .add("localLspId", localLspId)
83 + .toString();
84 + }
85 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -19,6 +19,7 @@ import java.util.List; ...@@ -19,6 +19,7 @@ import java.util.List;
19 19
20 import org.onosproject.pcepio.protocol.PcepFactory; 20 import org.onosproject.pcepio.protocol.PcepFactory;
21 import org.onosproject.pcepio.protocol.PcepMessage; 21 import org.onosproject.pcepio.protocol.PcepMessage;
22 +import org.onosproject.pcepio.protocol.PcepStateReport;
22 23
23 /** 24 /**
24 * Represents to provider facing side of a path computation client(pcc). 25 * Represents to provider facing side of a path computation client(pcc).
...@@ -135,4 +136,64 @@ public interface PcepClient { ...@@ -135,4 +136,64 @@ public interface PcepClient {
135 * @return capability supported by client 136 * @return capability supported by client
136 */ 137 */
137 ClientCapability capability(); 138 ClientCapability capability();
139 +
140 + /**
141 + * Adds PCEP device when session is successfully established.
142 + *
143 + * @param pc PCEP client details
144 + */
145 + void addNode(PcepClient pc);
146 +
147 + /**
148 + * Removes PCEP device when session is disconnected.
149 + *
150 + * @param pccId PCEP client ID
151 + */
152 + void deleteNode(PccId pccId);
153 +
154 + /**
155 + * Sets D flag for the given LSP and its LSP info.
156 + *
157 + * @param lspKey contains LSP info
158 + * @param dFlag delegation flag in LSP object
159 + */
160 + void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag);
161 +
162 + /**
163 + * Returns delegation flag for the given LSP info.
164 + *
165 + * @param lspKey contains LSP info
166 + * @return delegation flag
167 + */
168 + Boolean delegationInfo(LspKey lspKey);
169 +
170 + /**
171 + * Creates a temporary cache to hold report messages received during LSPDB sync.
172 + *
173 + * @param pccId PCC id which is the key to store report messages
174 + */
175 + void initializeSyncMsgList(PccId pccId);
176 +
177 + /**
178 + * Returns the list of report messages received during LSPDB sync.
179 + *
180 + * @param pccId PCC id which is the key for all the report messages
181 + * @return list of report messages received during LSPDB sync
182 + */
183 + List<PcepStateReport> getSyncMsgList(PccId pccId);
184 +
185 + /**
186 + * Removes the list of report messages received during LSPDB sync.
187 + *
188 + * @param pccId PCC id which is the key for all the report messages
189 + */
190 + void removeSyncMsgList(PccId pccId);
191 +
192 + /**
193 + * Adds report message received during LSPDB sync into temporary cache.
194 + *
195 + * @param pccId PCC id which is the key to store report messages
196 + * @param rptMsg the report message to be stored
197 + */
198 + void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg);
138 } 199 }
......
...@@ -57,7 +57,7 @@ public interface PcepClientController { ...@@ -57,7 +57,7 @@ public interface PcepClientController {
57 void removeListener(PcepClientListener listener); 57 void removeListener(PcepClientListener listener);
58 58
59 /** 59 /**
60 - * Register a listener for OF msg events. 60 + * Register a listener for PCEP msg events.
61 * 61 *
62 * @param listener the listener to notify 62 * @param listener the listener to notify
63 */ 63 */
...@@ -71,6 +71,34 @@ public interface PcepClientController { ...@@ -71,6 +71,34 @@ public interface PcepClientController {
71 void removeEventListener(PcepEventListener listener); 71 void removeEventListener(PcepEventListener listener);
72 72
73 /** 73 /**
74 + * Register a listener for PCEP msg events[carrying node descriptor details].
75 + *
76 + * @param listener the listener to notify
77 + */
78 + void addNodeListener(PcepNodeListener listener);
79 +
80 + /**
81 + * Unregister a listener.
82 + *
83 + * @param listener the listener to be unregistered
84 + */
85 + void removeNodeListener(PcepNodeListener listener);
86 +
87 + /**
88 + * Register a listener for packet events.
89 + *
90 + * @param listener the listener to notify
91 + */
92 + void addPacketListener(PcepPacketListener listener);
93 +
94 + /**
95 + * Unregister a packet listener.
96 + *
97 + * @param listener the listener to unregister
98 + */
99 + void removePacketListener(PcepPacketListener listener);
100 +
101 + /**
74 * Send a message to a particular pcc client. 102 * Send a message to a particular pcc client.
75 * 103 *
76 * @param pccId the id of the client to send message. 104 * @param pccId the id of the client to send message.
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
15 */ 15 */
16 package org.onosproject.pcep.controller; 16 package org.onosproject.pcep.controller;
17 17
18 +import org.onosproject.incubator.net.tunnel.Tunnel;
18 import org.onosproject.pcepio.protocol.PcepMessage; 19 import org.onosproject.pcepio.protocol.PcepMessage;
19 /** 20 /**
20 * Notifies providers about PCEP message events. 21 * Notifies providers about PCEP message events.
...@@ -28,4 +29,21 @@ public interface PcepEventListener { ...@@ -28,4 +29,21 @@ public interface PcepEventListener {
28 * @param msg the message 29 * @param msg the message
29 */ 30 */
30 void handleMessage(PccId pccId, PcepMessage msg); 31 void handleMessage(PccId pccId, PcepMessage msg);
32 +
33 + /**
34 + * Handles end of LSPDB sync actions.
35 + *
36 + * @param tunnel the tunnel on which action needs to be taken
37 + * @param endOfSyncAction the action that needs to be taken for the tunnel
38 + */
39 + void handleEndOfSyncAction(Tunnel tunnel, PcepLspSyncAction endOfSyncAction);
40 +
41 + /**
42 + * Handles sending PCEP message to client on end of LSPDB sync.
43 + *
44 + * @param pccId id of the pcc
45 + * @param msg the message to be sent
46 + * @param endOfSyncAction the action that needs to be taken in the message
47 + */
48 + void handleEndOfSyncAction(PccId pccId, PcepMessage msg, PcepLspSyncAction endOfSyncAction);
31 } 49 }
......
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 actions to be taken for LSPs on end of LSP-DB sync.
20 + */
21 +public enum PcepLspSyncAction {
22 +
23 + /**
24 + * Specifies that delete message for PCE intiiated tunnel should be sent.
25 + */
26 + SEND_DELETE(0),
27 +
28 + /**
29 + * Specifies that update message should be sent.
30 + */
31 + SEND_UPDATE(1),
32 +
33 + /**
34 + * Specifies that the tunnel should be removed from PCE.
35 + */
36 + REMOVE(2),
37 +
38 + /**
39 + * Specifies that the status of the tunnel should be set as unstable.
40 + */
41 + UNSTABLE(3);
42 +
43 + int value;
44 +
45 + /**
46 + * Assigns val with the value for actions to be taken for LSPs on end of LSP-DB sync.
47 + *
48 + * @param val sync status
49 + */
50 + PcepLspSyncAction(int val) {
51 + value = val;
52 + }
53 +}
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 + * Notifies providers about PCEP node events.
20 + */
21 +public interface PcepNodeListener {
22 +
23 + /**
24 + * Notifies that the node was added.
25 + *
26 + * @param pc PCEP client details
27 + */
28 + void addNode(PcepClient pc);
29 +
30 + /**
31 + * Notifies that the node was removed.
32 + *
33 + * @param pccId PCEP client ID
34 + */
35 + void deleteNode(PccId pccId);
36 +}
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 +public interface PcepPacketListener {
19 +
20 + void sendPacketIn(PccId pccId);
21 +
22 +}
...@@ -60,4 +60,25 @@ public interface PcepAgent { ...@@ -60,4 +60,25 @@ public interface PcepAgent {
60 */ 60 */
61 void processPcepMessage(PccId pccId, PcepMessage m); 61 void processPcepMessage(PccId pccId, PcepMessage m);
62 62
63 + /**
64 + * Adds PCEP device when session is successfully established.
65 + *
66 + * @param pc PCEP client details
67 + */
68 + void addNode(PcepClient pc);
69 +
70 + /**
71 + * Removes PCEP device when session is disconnected.
72 + *
73 + * @param pccId PCEP client ID
74 + */
75 + void deleteNode(PccId pccId);
76 +
77 + /**
78 + * Analyzes report messages received during LSP DB sync again tunnel store and takes necessary actions.
79 + *
80 + * @param pccId the id of pcc client
81 + * @return success or failure
82 + */
83 + boolean analyzeSyncMsgList(PccId pccId);
63 } 84 }
......
...@@ -2,6 +2,7 @@ COMPILE_DEPS = [ ...@@ -2,6 +2,7 @@ COMPILE_DEPS = [
2 '//lib:CORE_DEPS', 2 '//lib:CORE_DEPS',
3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio', 3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
4 '//protocols/pcep/api:onos-protocols-pcep-api', 4 '//protocols/pcep/api:onos-protocols-pcep-api',
5 + '//incubator/api:onos-incubator-api',
5 ] 6 ]
6 7
7 osgi_jar_with_tests ( 8 osgi_jar_with_tests (
......
...@@ -55,6 +55,7 @@ import org.onosproject.pcepio.protocol.PcepVersion; ...@@ -55,6 +55,7 @@ import org.onosproject.pcepio.protocol.PcepVersion;
55 import org.onosproject.pcepio.types.IPv4RouterIdOfLocalNodeSubTlv; 55 import org.onosproject.pcepio.types.IPv4RouterIdOfLocalNodeSubTlv;
56 import org.onosproject.pcepio.types.NodeAttributesTlv; 56 import org.onosproject.pcepio.types.NodeAttributesTlv;
57 import org.onosproject.pcepio.types.PceccCapabilityTlv; 57 import org.onosproject.pcepio.types.PceccCapabilityTlv;
58 +import org.onosproject.pcepio.types.SrPceCapabilityTlv;
58 import org.onosproject.pcepio.types.StatefulPceCapabilityTlv; 59 import org.onosproject.pcepio.types.StatefulPceCapabilityTlv;
59 import org.onosproject.pcepio.types.PcepErrorDetailInfo; 60 import org.onosproject.pcepio.types.PcepErrorDetailInfo;
60 import org.onosproject.pcepio.types.PcepValueType; 61 import org.onosproject.pcepio.types.PcepValueType;
...@@ -260,6 +261,8 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { ...@@ -260,6 +261,8 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler {
260 disconnectDuplicate(h); 261 disconnectDuplicate(h);
261 } else { 262 } else {
262 h.setState(ESTABLISHED); 263 h.setState(ESTABLISHED);
264 + //Session is established, add a PCEP device
265 + h.addNode();
263 } 266 }
264 } 267 }
265 } 268 }
...@@ -469,6 +472,20 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { ...@@ -469,6 +472,20 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler {
469 } 472 }
470 473
471 /** 474 /**
475 + * Adds PCEP device once session is established.
476 + */
477 + private void addNode() {
478 + pc.addNode(pc);
479 + }
480 +
481 + /**
482 + * Deletes PCEP device when session is disconnected.
483 + */
484 + private void deleteNode() {
485 + pc.deleteNode(pc.getPccId());
486 + }
487 +
488 + /**
472 * Return a string describing this client based on the already available 489 * Return a string describing this client based on the already available
473 * information (ip address and/or remote socket). 490 * information (ip address and/or remote socket).
474 * 491 *
...@@ -523,6 +540,8 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { ...@@ -523,6 +540,8 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler {
523 boolean pceccCapability = false; 540 boolean pceccCapability = false;
524 boolean statefulPceCapability = false; 541 boolean statefulPceCapability = false;
525 boolean pcInstantiationCapability = false; 542 boolean pcInstantiationCapability = false;
543 + boolean labelStackCapability = false;
544 + boolean srCapability = false;
526 545
527 ListIterator<PcepValueType> listIterator = tlvList.listIterator(); 546 ListIterator<PcepValueType> listIterator = tlvList.listIterator();
528 while (listIterator.hasNext()) { 547 while (listIterator.hasNext()) {
...@@ -531,6 +550,9 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { ...@@ -531,6 +550,9 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler {
531 switch (tlv.getType()) { 550 switch (tlv.getType()) {
532 case PceccCapabilityTlv.TYPE: 551 case PceccCapabilityTlv.TYPE:
533 pceccCapability = true; 552 pceccCapability = true;
553 + if (((PceccCapabilityTlv) tlv).sBit()) {
554 + labelStackCapability = true;
555 + }
534 break; 556 break;
535 case StatefulPceCapabilityTlv.TYPE: 557 case StatefulPceCapabilityTlv.TYPE:
536 statefulPceCapability = true; 558 statefulPceCapability = true;
...@@ -539,11 +561,15 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { ...@@ -539,11 +561,15 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler {
539 pcInstantiationCapability = true; 561 pcInstantiationCapability = true;
540 } 562 }
541 break; 563 break;
564 + case SrPceCapabilityTlv.TYPE:
565 + srCapability = true;
566 + break;
542 default: 567 default:
543 continue; 568 continue;
544 } 569 }
545 } 570 }
546 - this.capability = new ClientCapability(pceccCapability, statefulPceCapability, pcInstantiationCapability); 571 + this.capability = new ClientCapability(pceccCapability, statefulPceCapability, pcInstantiationCapability,
572 + labelStackCapability, srCapability);
547 } 573 }
548 574
549 /** 575 /**
...@@ -563,6 +589,8 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler { ...@@ -563,6 +589,8 @@ class PcepChannelHandler extends IdleStateAwareChannelHandler {
563 */ 589 */
564 private void sendErrMsgAndCloseChannel() { 590 private void sendErrMsgAndCloseChannel() {
565 // TODO send error message 591 // TODO send error message
592 + //Remove PCEP device from topology
593 + deleteNode();
566 channel.close(); 594 channel.close();
567 } 595 }
568 596
......
...@@ -19,13 +19,18 @@ package org.onosproject.pcep.controller.impl; ...@@ -19,13 +19,18 @@ package org.onosproject.pcep.controller.impl;
19 import java.net.InetSocketAddress; 19 import java.net.InetSocketAddress;
20 import java.net.SocketAddress; 20 import java.net.SocketAddress;
21 import java.util.Collections; 21 import java.util.Collections;
22 +import java.util.HashMap;
23 +import java.util.LinkedList;
22 import java.util.List; 24 import java.util.List;
25 +import java.util.Map;
23 import java.util.concurrent.RejectedExecutionException; 26 import java.util.concurrent.RejectedExecutionException;
24 27
25 import org.jboss.netty.channel.Channel; 28 import org.jboss.netty.channel.Channel;
26 import org.onlab.packet.IpAddress; 29 import org.onlab.packet.IpAddress;
27 import org.onosproject.pcep.controller.ClientCapability; 30 import org.onosproject.pcep.controller.ClientCapability;
31 +import org.onosproject.pcep.controller.LspKey;
28 import org.onosproject.pcep.controller.PccId; 32 import org.onosproject.pcep.controller.PccId;
33 +import org.onosproject.pcep.controller.PcepClient;
29 import org.onosproject.pcep.controller.PcepPacketStats; 34 import org.onosproject.pcep.controller.PcepPacketStats;
30 import org.onosproject.pcep.controller.PcepSyncStatus; 35 import org.onosproject.pcep.controller.PcepSyncStatus;
31 import org.onosproject.pcep.controller.driver.PcepAgent; 36 import org.onosproject.pcep.controller.driver.PcepAgent;
...@@ -33,6 +38,7 @@ import org.onosproject.pcep.controller.driver.PcepClientDriver; ...@@ -33,6 +38,7 @@ import org.onosproject.pcep.controller.driver.PcepClientDriver;
33 import org.onosproject.pcepio.protocol.PcepFactories; 38 import org.onosproject.pcepio.protocol.PcepFactories;
34 import org.onosproject.pcepio.protocol.PcepFactory; 39 import org.onosproject.pcepio.protocol.PcepFactory;
35 import org.onosproject.pcepio.protocol.PcepMessage; 40 import org.onosproject.pcepio.protocol.PcepMessage;
41 +import org.onosproject.pcepio.protocol.PcepStateReport;
36 import org.onosproject.pcepio.protocol.PcepVersion; 42 import org.onosproject.pcepio.protocol.PcepVersion;
37 import org.slf4j.Logger; 43 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory; 44 import org.slf4j.LoggerFactory;
...@@ -66,6 +72,8 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -66,6 +72,8 @@ public class PcepClientImpl implements PcepClientDriver {
66 private byte deadTime; 72 private byte deadTime;
67 private byte sessionId; 73 private byte sessionId;
68 private PcepPacketStatsImpl pktStats; 74 private PcepPacketStatsImpl pktStats;
75 + private Map<LspKey, Boolean> lspDelegationInfo;
76 + private Map<PccId, List<PcepStateReport>> sycRptCache = new HashMap<>();
69 77
70 @Override 78 @Override
71 public void init(PccId pccId, PcepVersion pcepVersion, PcepPacketStats pktStats) { 79 public void init(PccId pccId, PcepVersion pcepVersion, PcepPacketStats pktStats) {
...@@ -188,7 +196,14 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -188,7 +196,14 @@ public class PcepClientImpl implements PcepClientDriver {
188 196
189 @Override 197 @Override
190 public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) { 198 public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) {
199 +
200 + PcepSyncStatus syncOldStatus = labelDbSyncStatus();
191 this.labelDbSyncStatus = syncStatus; 201 this.labelDbSyncStatus = syncStatus;
202 +
203 + if ((syncOldStatus == PcepSyncStatus.IN_SYNC) && (syncStatus == PcepSyncStatus.SYNCED)) {
204 + // Perform end of LSP DB sync actions.
205 + this.agent.analyzeSyncMsgList(pccId);
206 + }
192 } 207 }
193 208
194 @Override 209 @Override
...@@ -203,6 +218,16 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -203,6 +218,16 @@ public class PcepClientImpl implements PcepClientDriver {
203 } 218 }
204 219
205 @Override 220 @Override
221 + public void addNode(PcepClient pc) {
222 + this.agent.addNode(pc);
223 + }
224 +
225 + @Override
226 + public void deleteNode(PccId pccId) {
227 + this.agent.deleteNode(pccId);
228 + }
229 +
230 + @Override
206 public final boolean connectClient() { 231 public final boolean connectClient() {
207 return this.agent.addConnectedClient(pccId, this); 232 return this.agent.addConnectedClient(pccId, this);
208 } 233 }
...@@ -230,6 +255,39 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -230,6 +255,39 @@ public class PcepClientImpl implements PcepClientDriver {
230 } 255 }
231 256
232 @Override 257 @Override
258 + public void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag) {
259 + lspDelegationInfo.put(lspKey, dFlag);
260 + }
261 +
262 + @Override
263 + public Boolean delegationInfo(LspKey lspKey) {
264 + return lspDelegationInfo.get(lspKey);
265 + }
266 +
267 + @Override
268 + public void initializeSyncMsgList(PccId pccId) {
269 + List<PcepStateReport> rptMsgList = new LinkedList<>();
270 + sycRptCache.put(pccId, rptMsgList);
271 + }
272 +
273 + @Override
274 + public List<PcepStateReport> getSyncMsgList(PccId pccId) {
275 + return sycRptCache.get(pccId);
276 + }
277 +
278 + @Override
279 + public void removeSyncMsgList(PccId pccId) {
280 + sycRptCache.remove(pccId);
281 + }
282 +
283 + @Override
284 + public void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg) {
285 + List<PcepStateReport> rptMsgList = sycRptCache.get(pccId);
286 + rptMsgList.add(rptMsg);
287 + sycRptCache.put(pccId, rptMsgList);
288 + }
289 +
290 + @Override
233 public boolean isOptical() { 291 public boolean isOptical() {
234 return false; 292 return false;
235 } 293 }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.provider.pcep.tunnel.impl; 16 +package org.onosproject.pcep.controller.impl;
17 17
18 import org.onosproject.incubator.net.tunnel.Tunnel.State; 18 import org.onosproject.incubator.net.tunnel.Tunnel.State;
19 19
...@@ -51,6 +51,7 @@ public enum PcepLspStatus { ...@@ -51,6 +51,7 @@ public enum PcepLspStatus {
51 * Returns the applicable PCEP LSP status corresponding to ONOS tunnel state. 51 * Returns the applicable PCEP LSP status corresponding to ONOS tunnel state.
52 * 52 *
53 * @param tunnelState ONOS tunnel state 53 * @param tunnelState ONOS tunnel state
54 + * @return LSP status as per protocol
54 */ 55 */
55 public static PcepLspStatus getLspStatusFromTunnelStatus(State tunnelState) { 56 public static PcepLspStatus getLspStatusFromTunnelStatus(State tunnelState) {
56 57
...@@ -76,6 +77,7 @@ public enum PcepLspStatus { ...@@ -76,6 +77,7 @@ public enum PcepLspStatus {
76 * Returns the applicable ONOS tunnel state corresponding to PCEP LSP status. 77 * Returns the applicable ONOS tunnel state corresponding to PCEP LSP status.
77 * 78 *
78 * @param lspState PCEP LSP status 79 * @param lspState PCEP LSP status
80 + * @return tunnel state
79 */ 81 */
80 public static State getTunnelStatusFromLspStatus(PcepLspStatus lspState) { 82 public static State getTunnelStatusFromLspStatus(PcepLspStatus lspState) {
81 83
......
...@@ -29,14 +29,14 @@ public interface PcepBandwidthObject { ...@@ -29,14 +29,14 @@ public interface PcepBandwidthObject {
29 * 29 *
30 * @return bandwidth value 30 * @return bandwidth value
31 */ 31 */
32 - int getBandwidth(); 32 + float getBandwidth();
33 33
34 /** 34 /**
35 * Sets bandwidth with specified value. 35 * Sets bandwidth with specified value.
36 * 36 *
37 * @param iBandwidth Bandwidth's value 37 * @param iBandwidth Bandwidth's value
38 */ 38 */
39 - void setBandwidth(int iBandwidth); 39 + void setBandwidth(float iBandwidth);
40 40
41 /** 41 /**
42 * Writes the BandwidthObject into channel buffer. 42 * Writes the BandwidthObject into channel buffer.
......
...@@ -51,6 +51,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject { ...@@ -51,6 +51,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject {
51 public static final byte BANDWIDTH_OBJ_TYPE = 1; 51 public static final byte BANDWIDTH_OBJ_TYPE = 1;
52 public static final byte BANDWIDTH_OBJ_CLASS = 5; 52 public static final byte BANDWIDTH_OBJ_CLASS = 5;
53 public static final byte BANDWIDTH_OBJECT_VERSION = 1; 53 public static final byte BANDWIDTH_OBJECT_VERSION = 1;
54 + public static final int NO_OF_BITS = 8;
54 public static final short BANDWIDTH_OBJ_MINIMUM_LENGTH = 8; 55 public static final short BANDWIDTH_OBJ_MINIMUM_LENGTH = 8;
55 56
56 static final PcepObjectHeader DEFAULT_BANDWIDTH_OBJECT_HEADER = new PcepObjectHeader(BANDWIDTH_OBJ_CLASS, 57 static final PcepObjectHeader DEFAULT_BANDWIDTH_OBJECT_HEADER = new PcepObjectHeader(BANDWIDTH_OBJ_CLASS,
...@@ -58,7 +59,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject { ...@@ -58,7 +59,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject {
58 BANDWIDTH_OBJ_MINIMUM_LENGTH); 59 BANDWIDTH_OBJ_MINIMUM_LENGTH);
59 60
60 private PcepObjectHeader bandwidthObjHeader; 61 private PcepObjectHeader bandwidthObjHeader;
61 - private int iBandwidth; 62 + private float iBandwidth;
62 63
63 /** 64 /**
64 * Constructor to bandwidth object header and bandwidth. 65 * Constructor to bandwidth object header and bandwidth.
...@@ -66,7 +67,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject { ...@@ -66,7 +67,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject {
66 * @param bandwidthObjHeader bandwidth object header 67 * @param bandwidthObjHeader bandwidth object header
67 * @param iBandwidth bandwidth value 68 * @param iBandwidth bandwidth value
68 */ 69 */
69 - public PcepBandwidthObjectVer1(PcepObjectHeader bandwidthObjHeader, int iBandwidth) { 70 + public PcepBandwidthObjectVer1(PcepObjectHeader bandwidthObjHeader, float iBandwidth) {
70 this.bandwidthObjHeader = bandwidthObjHeader; 71 this.bandwidthObjHeader = bandwidthObjHeader;
71 this.iBandwidth = iBandwidth; 72 this.iBandwidth = iBandwidth;
72 } 73 }
...@@ -76,7 +77,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject { ...@@ -76,7 +77,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject {
76 * 77 *
77 * @param iBandwidth bandwidth value 78 * @param iBandwidth bandwidth value
78 */ 79 */
79 - public PcepBandwidthObjectVer1(int iBandwidth) { 80 + public PcepBandwidthObjectVer1(float iBandwidth) {
80 this.bandwidthObjHeader = DEFAULT_BANDWIDTH_OBJECT_HEADER; 81 this.bandwidthObjHeader = DEFAULT_BANDWIDTH_OBJECT_HEADER;
81 this.iBandwidth = iBandwidth; 82 this.iBandwidth = iBandwidth;
82 } 83 }
...@@ -100,12 +101,12 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject { ...@@ -100,12 +101,12 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject {
100 } 101 }
101 102
102 @Override 103 @Override
103 - public int getBandwidth() { 104 + public float getBandwidth() {
104 return this.iBandwidth; 105 return this.iBandwidth;
105 } 106 }
106 107
107 @Override 108 @Override
108 - public void setBandwidth(int iBandwidth) { 109 + public void setBandwidth(float iBandwidth) {
109 this.iBandwidth = iBandwidth; 110 this.iBandwidth = iBandwidth;
110 } 111 }
111 112
...@@ -119,12 +120,25 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject { ...@@ -119,12 +120,25 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject {
119 public static PcepBandwidthObject read(ChannelBuffer cb) throws PcepParseException { 120 public static PcepBandwidthObject read(ChannelBuffer cb) throws PcepParseException {
120 121
121 PcepObjectHeader bandwidthObjHeader; 122 PcepObjectHeader bandwidthObjHeader;
122 - int iBandwidth; 123 + float bandwidth;
123 124
124 bandwidthObjHeader = PcepObjectHeader.read(cb); 125 bandwidthObjHeader = PcepObjectHeader.read(cb);
125 - iBandwidth = cb.readInt(); 126 + bandwidth = ieeeToFloatRead(cb.readInt()) * NO_OF_BITS;
126 127
127 - return new PcepBandwidthObjectVer1(bandwidthObjHeader, iBandwidth); 128 + return new PcepBandwidthObjectVer1(bandwidthObjHeader, bandwidth);
129 + }
130 +
131 + /**
132 + * Parse the IEEE floating point notation and returns it in normal float.
133 + *
134 + * @param iVal IEEE floating point number
135 + * @return normal float
136 + */
137 + public static float ieeeToFloatRead(int iVal) {
138 + iVal = (((iVal & 0xFF) << 24) | ((iVal & 0xFF00) << 8)
139 + | ((iVal & 0xFF0000) >> 8) | ((iVal >> 24) & 0xFF));
140 +
141 + return Float.intBitsToFloat(iVal);
128 } 142 }
129 143
130 @Override 144 @Override
...@@ -138,7 +152,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject { ...@@ -138,7 +152,7 @@ public class PcepBandwidthObjectVer1 implements PcepBandwidthObject {
138 throw new PcepParseException("Failed to write bandwidth object header. Index " + objLenIndex); 152 throw new PcepParseException("Failed to write bandwidth object header. Index " + objLenIndex);
139 } 153 }
140 154
141 - cb.writeInt(iBandwidth); 155 + cb.writeInt(Float.floatToIntBits(iBandwidth));
142 short hLength = (short) (cb.writerIndex() - objStartIndex); 156 short hLength = (short) (cb.writerIndex() - objStartIndex);
143 cb.setShort(objLenIndex, hLength); 157 cb.setShort(objLenIndex, hLength);
144 //will be helpful during print(). 158 //will be helpful during print().
......
...@@ -16,8 +16,10 @@ ...@@ -16,8 +16,10 @@
16 16
17 package org.onosproject.pcepio.protocol.ver1; 17 package org.onosproject.pcepio.protocol.ver1;
18 18
19 +import java.util.Iterator;
19 import java.util.LinkedList; 20 import java.util.LinkedList;
20 import java.util.ListIterator; 21 import java.util.ListIterator;
22 +import java.util.Objects;
21 23
22 import org.jboss.netty.buffer.ChannelBuffer; 24 import org.jboss.netty.buffer.ChannelBuffer;
23 import org.onosproject.pcepio.exceptions.PcepParseException; 25 import org.onosproject.pcepio.exceptions.PcepParseException;
...@@ -399,10 +401,47 @@ public class PcepEroObjectVer1 implements PcepEroObject { ...@@ -399,10 +401,47 @@ public class PcepEroObjectVer1 implements PcepEroObject {
399 } 401 }
400 402
401 @Override 403 @Override
404 + public int hashCode() {
405 + return Objects.hash(eroObjHeader, subObjectList);
406 + }
407 +
408 + @Override
402 public String toString() { 409 public String toString() {
403 return MoreObjects.toStringHelper(getClass()).omitNullValues() 410 return MoreObjects.toStringHelper(getClass()).omitNullValues()
404 .add("EroObjHeader", eroObjHeader) 411 .add("EroObjHeader", eroObjHeader)
405 .add("SubObjects", subObjectList) 412 .add("SubObjects", subObjectList)
406 .toString(); 413 .toString();
407 } 414 }
415 +
416 + @Override
417 + public boolean equals(Object obj) {
418 + if (this == obj) {
419 + return true;
420 + }
421 +
422 + if (obj instanceof PcepEroObjectVer1) {
423 + int countObjSubTlv = 0;
424 + int countOtherSubTlv = 0;
425 + boolean isCommonSubTlv = true;
426 + PcepEroObjectVer1 other = (PcepEroObjectVer1) obj;
427 + Iterator<PcepValueType> objListIterator = other.subObjectList.iterator();
428 + countOtherSubTlv = other.subObjectList.size();
429 + countObjSubTlv = subObjectList.size();
430 + if (countObjSubTlv != countOtherSubTlv) {
431 + return false;
432 + } else {
433 + while (objListIterator.hasNext() && isCommonSubTlv) {
434 + PcepValueType subTlv = objListIterator.next();
435 + if (subObjectList.contains(subTlv)) {
436 + isCommonSubTlv = Objects.equals(subObjectList.get(subObjectList.indexOf(subTlv)),
437 + other.subObjectList.get(other.subObjectList.indexOf(subTlv)));
438 + } else {
439 + isCommonSubTlv = false;
440 + }
441 + }
442 + return isCommonSubTlv && Objects.equals(eroObjHeader, other.eroObjHeader);
443 + }
444 + }
445 + return false;
446 + }
408 } 447 }
......
...@@ -57,6 +57,10 @@ public class PcepMetricObjectVer1 implements PcepMetricObject { ...@@ -57,6 +57,10 @@ public class PcepMetricObjectVer1 implements PcepMetricObject {
57 public static final int BFLAG_RESET = 0; 57 public static final int BFLAG_RESET = 0;
58 public static final byte CFLAG_CHECK = 0x02; 58 public static final byte CFLAG_CHECK = 0x02;
59 59
60 + public static final byte IGP_METRIC = 0x01;
61 + public static final byte TE_METRIC = 0x02;
62 + public static final byte HOP_COUNT_METRIC = 0x03;
63 +
60 static final PcepObjectHeader DEFAULT_METRIC_OBJECT_HEADER = new PcepObjectHeader(METRIC_OBJ_CLASS, 64 static final PcepObjectHeader DEFAULT_METRIC_OBJECT_HEADER = new PcepObjectHeader(METRIC_OBJ_CLASS,
61 METRIC_OBJ_TYPE, PcepObjectHeader.REQ_OBJ_OPTIONAL_PROCESS, PcepObjectHeader.RSP_OBJ_PROCESSED, 65 METRIC_OBJ_TYPE, PcepObjectHeader.REQ_OBJ_OPTIONAL_PROCESS, PcepObjectHeader.RSP_OBJ_PROCESSED,
62 METRIC_OBJ_MINIMUM_LENGTH); 66 METRIC_OBJ_MINIMUM_LENGTH);
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
16 16
17 package org.onosproject.pcepio.types; 17 package org.onosproject.pcepio.types;
18 18
19 +import java.util.Objects;
20 +
19 import org.jboss.netty.buffer.ChannelBuffer; 21 import org.jboss.netty.buffer.ChannelBuffer;
20 import org.slf4j.Logger; 22 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory; 23 import org.slf4j.LoggerFactory;
...@@ -212,6 +214,27 @@ public class PcepObjectHeader { ...@@ -212,6 +214,27 @@ public class PcepObjectHeader {
212 } 214 }
213 215
214 @Override 216 @Override
217 + public int hashCode() {
218 + return Objects.hash(objClass, objType, bPFlag, bIFlag, objLen);
219 + }
220 +
221 + @Override
222 + public boolean equals(Object obj) {
223 + if (this == obj) {
224 + return true;
225 + }
226 + if (obj instanceof PcepObjectHeader) {
227 + PcepObjectHeader other = (PcepObjectHeader) obj;
228 + return Objects.equals(objClass, other.objClass)
229 + && Objects.equals(objType, other.objType)
230 + && Objects.equals(bPFlag, other.bPFlag)
231 + && Objects.equals(bIFlag, other.bIFlag)
232 + && Objects.equals(objLen, other.objLen);
233 + }
234 + return false;
235 + }
236 +
237 + @Override
215 public String toString() { 238 public String toString() {
216 return MoreObjects.toStringHelper(getClass()) 239 return MoreObjects.toStringHelper(getClass())
217 .add("ObjectClass", objClass) 240 .add("ObjectClass", objClass)
......
...@@ -40,6 +40,11 @@ ...@@ -40,6 +40,11 @@
40 </dependency> 40 </dependency>
41 <dependency> 41 <dependency>
42 <groupId>org.onosproject</groupId> 42 <groupId>org.onosproject</groupId>
43 + <artifactId>onos-incubator-api</artifactId>
44 + <version>${project.version}</version>
45 + </dependency>
46 + <dependency>
47 + <groupId>org.onosproject</groupId>
43 <artifactId>onos-api</artifactId> 48 <artifactId>onos-api</artifactId>
44 <classifier>tests</classifier> 49 <classifier>tests</classifier>
45 <scope>test</scope> 50 <scope>test</scope>
......
...@@ -3,6 +3,7 @@ COMPILE_DEPS = [ ...@@ -3,6 +3,7 @@ COMPILE_DEPS = [
3 '//protocols/bgp/api:onos-protocols-bgp-api', 3 '//protocols/bgp/api:onos-protocols-bgp-api',
4 '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio', 4 '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
5 '//incubator/store:onos-incubator-store', 5 '//incubator/store:onos-incubator-store',
6 + '//incubator/api:onos-incubator-api',
6 ] 7 ]
7 8
8 TEST_DEPS = [ 9 TEST_DEPS = [
......
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 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
17 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
18 + <modelVersion>4.0.0</modelVersion>
19 + <parent>
20 + <groupId>org.onosproject</groupId>
21 + <artifactId>onos-pcep-providers</artifactId>
22 + <version>1.6.0-SNAPSHOT</version>
23 + </parent>
24 + <artifactId>onos-pcep-provider-packet</artifactId>
25 + <packaging>bundle</packaging>
26 + <description>PCEP packet provider</description>
27 + <dependencies>
28 + <dependency>
29 + <groupId>org.onosproject</groupId>
30 + <artifactId>onos-pcep-controller-api</artifactId>
31 + </dependency>
32 + </dependencies>
33 +</project>
1 +package org.onosproject.provider.pcep.packet.impl;
2 +
3 +import static org.slf4j.LoggerFactory.getLogger;
4 +
5 +import org.apache.felix.scr.annotations.Activate;
6 +import org.apache.felix.scr.annotations.Component;
7 +import org.apache.felix.scr.annotations.Deactivate;
8 +import org.apache.felix.scr.annotations.Reference;
9 +import org.apache.felix.scr.annotations.ReferenceCardinality;
10 +import org.apache.felix.scr.annotations.Service;
11 +import org.onlab.packet.Ethernet;
12 +import org.onlab.packet.IPv4;
13 +import org.onlab.packet.TCP;
14 +import org.onosproject.net.AnnotationKeys;
15 +import org.onosproject.net.ConnectPoint;
16 +import org.onosproject.net.Device;
17 +import org.onosproject.net.DeviceId;
18 +import org.onosproject.net.PortNumber;
19 +import org.onosproject.net.device.DeviceService;
20 +import org.onosproject.net.packet.DefaultInboundPacket;
21 +import org.onosproject.net.packet.DefaultPacketContext;
22 +import org.onosproject.net.packet.InboundPacket;
23 +import org.onosproject.net.packet.OutboundPacket;
24 +import org.onosproject.net.packet.PacketProvider;
25 +import org.onosproject.net.packet.PacketProviderRegistry;
26 +import org.onosproject.net.packet.PacketProviderService;
27 +import org.onosproject.net.provider.AbstractProvider;
28 +import org.onosproject.net.provider.ProviderId;
29 +import org.onosproject.pcep.controller.PccId;
30 +import org.onosproject.pcep.controller.PcepClientController;
31 +import org.onosproject.pcep.controller.PcepPacketListener;
32 +import org.slf4j.Logger;
33 +
34 +/**
35 + * Provider which uses an PCEP controller to process packets.
36 + */
37 +@Component(immediate = true)
38 +@Service
39 +public class PcepPacketProvider extends AbstractProvider implements PacketProvider {
40 +
41 + private static final Logger log = getLogger(PcepPacketProvider.class);
42 + static final String PROVIDER_ID = "org.onosproject.provider.packet.pcep";
43 +
44 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
45 + protected PacketProviderRegistry packetProviderRegistry;
46 +
47 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
48 + protected PcepClientController pcepClientController;
49 +
50 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
51 + protected DeviceService deviceService;
52 +
53 + PacketProviderService packetProviderService;
54 +
55 + private InnerPacketProvider listener = new InnerPacketProvider();
56 + public static final String LSRID = "lsrId";
57 + public static final int PCEP_PORT = 4189;
58 +
59 + /**
60 + * Creates a Packet provider.
61 + */
62 + public PcepPacketProvider() {
63 + super(new ProviderId("pcep", PROVIDER_ID));
64 + }
65 +
66 + @Activate
67 + public void activate() {
68 + packetProviderService = packetProviderRegistry.register(this);
69 + pcepClientController.addPacketListener(listener);
70 + log.info("Started");
71 + }
72 +
73 + @Deactivate
74 + public void deactivate() {
75 + packetProviderRegistry.unregister(this);
76 + pcepClientController.removePacketListener(listener);
77 + log.info("Stopped");
78 + }
79 +
80 + private class InnerPacketProvider implements PcepPacketListener {
81 + @Override
82 + public void sendPacketIn(PccId pccId) {
83 + TCP tcp = new TCP();
84 + // Set the well known PCEP port. To be used to decide to process/discard the packet while processing.
85 + tcp.setDestinationPort(PCEP_PORT);
86 +
87 + IPv4 ipv4 = new IPv4();
88 + ipv4.setProtocol(IPv4.PROTOCOL_TCP);
89 + ipv4.setPayload(tcp);
90 +
91 + Ethernet eth = new Ethernet();
92 + eth.setEtherType(Ethernet.TYPE_IPV4);
93 + eth.setPayload(ipv4);
94 +
95 + // Get lsrId of the PCEP client from the PCC ID. Session info is based on lsrID.
96 + String lsrId = String.valueOf(pccId.ipAddress());
97 + DeviceId pccDeviceId = null;
98 +
99 + // Find PCC deviceID from lsrId stored as annotations
100 + Iterable<Device> devices = deviceService.getAvailableDevices();
101 + for (Device dev : devices) {
102 + if ("L3".equals(dev.annotations().value(AnnotationKeys.TYPE))
103 + && lsrId.equals(dev.annotations().value(LSRID))) {
104 + pccDeviceId = dev.id();
105 + break;
106 + }
107 + }
108 +
109 + if (pccDeviceId == null) {
110 + return;
111 + }
112 +
113 + InboundPacket inPkt = new DefaultInboundPacket(new ConnectPoint(pccDeviceId,
114 + PortNumber.portNumber(PCEP_PORT)),
115 + eth, null);
116 +
117 + packetProviderService.processPacket(new PcepPacketContext(inPkt, null));
118 + }
119 + }
120 +
121 + // Minimal PacketContext to make core and applications happy.
122 + private final class PcepPacketContext extends DefaultPacketContext {
123 + private PcepPacketContext(InboundPacket inPkt, OutboundPacket outPkt) {
124 + super(System.currentTimeMillis(), inPkt, outPkt, false);
125 + }
126 +
127 + @Override
128 + public void send() {
129 + // We don't send anything out.
130 + return;
131 + }
132 + }
133 +
134 + @Override
135 + public void emit(OutboundPacket packet) {
136 + // Nothing to emit
137 + return;
138 +
139 + }
140 +}
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 +/**
17 + *Provider that uses PCEP controller as a means to send packets.
18 + */
19 +package org.onosproject.provider.pcep.packet.impl;
...\ No newline at end of file ...\ No newline at end of file
...@@ -27,5 +27,6 @@ ...@@ -27,5 +27,6 @@
27 <module>topology</module> 27 <module>topology</module>
28 <module>tunnel</module> 28 <module>tunnel</module>
29 <module>app</module> 29 <module>app</module>
30 + <module>packet</module>
30 </modules> 31 </modules>
31 </project> 32 </project>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -3,6 +3,9 @@ COMPILE_DEPS = [ ...@@ -3,6 +3,9 @@ COMPILE_DEPS = [
3 '//protocols/ovsdb/api:onos-protocols-ovsdb-api', 3 '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
4 '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc', 4 '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
5 '//apps/pcep-api:onos-apps-pcep-api', 5 '//apps/pcep-api:onos-apps-pcep-api',
6 + '//protocols/pcep/api:onos-protocols-pcep-api',
7 + '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
8 + '//core/api:onos-api-tests',
6 ] 9 ]
7 10
8 osgi_jar_with_tests ( 11 osgi_jar_with_tests (
......
...@@ -23,10 +23,20 @@ ...@@ -23,10 +23,20 @@
23 <artifactId>onos-pcep-provider-topology</artifactId> 23 <artifactId>onos-pcep-provider-topology</artifactId>
24 <packaging>bundle</packaging> 24 <packaging>bundle</packaging>
25 <description>PCEP topology provider</description> 25 <description>PCEP topology provider</description>
26 - <dependencies> 26 + <dependencies>
27 - <dependency> 27 + <dependency>
28 - <groupId>org.onosproject</groupId> 28 + <groupId>org.onosproject</groupId>
29 - <artifactId>onos-app-pcep-api</artifactId> 29 + <artifactId>onos-app-pcep-api</artifactId>
30 - </dependency> 30 + </dependency>
31 - </dependencies> 31 + <dependency>
32 + <groupId>org.onosproject</groupId>
33 + <artifactId>onos-pcep-controller-api</artifactId>
34 + </dependency>
35 + <dependency>
36 + <groupId>org.onosproject</groupId>
37 + <artifactId>onos-api</artifactId>
38 + <classifier>tests</classifier>
39 + <scope>test</scope>
40 + </dependency>
41 + </dependencies>
32 </project> 42 </project>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -62,6 +62,10 @@ import org.onosproject.pcep.api.PcepLinkListener; ...@@ -62,6 +62,10 @@ import org.onosproject.pcep.api.PcepLinkListener;
62 import org.onosproject.pcep.api.PcepOperator.OperationType; 62 import org.onosproject.pcep.api.PcepOperator.OperationType;
63 import org.onosproject.pcep.api.PcepSwitch; 63 import org.onosproject.pcep.api.PcepSwitch;
64 import org.onosproject.pcep.api.PcepSwitchListener; 64 import org.onosproject.pcep.api.PcepSwitchListener;
65 +import org.onosproject.pcep.controller.PccId;
66 +import org.onosproject.pcep.controller.PcepClient;
67 +import org.onosproject.pcep.controller.PcepClientController;
68 +import org.onosproject.pcep.controller.PcepNodeListener;
65 import org.slf4j.Logger; 69 import org.slf4j.Logger;
66 import org.slf4j.LoggerFactory; 70 import org.slf4j.LoggerFactory;
67 71
...@@ -115,18 +119,40 @@ public class PcepTopologyProvider extends AbstractProvider ...@@ -115,18 +119,40 @@ public class PcepTopologyProvider extends AbstractProvider
115 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 119 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
116 protected ClusterService clusterService; 120 protected ClusterService clusterService;
117 121
122 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
123 + protected PcepClientController pcepClientController;
124 +
118 private DeviceProviderService deviceProviderService; 125 private DeviceProviderService deviceProviderService;
119 private LinkProviderService linkProviderService; 126 private LinkProviderService linkProviderService;
120 127
121 private HashMap<Long, List<PortDescription>> portMap = new HashMap<>(); 128 private HashMap<Long, List<PortDescription>> portMap = new HashMap<>();
122 private InternalLinkProvider listener = new InternalLinkProvider(); 129 private InternalLinkProvider listener = new InternalLinkProvider();
123 130
131 + /*
132 + * For the client supporting SR capability.
133 + */
134 + public static final String SR_CAPABILITY = "srCapability";
135 +
136 + /*
137 + * For the client supporting PCECC capability.
138 + */
139 + public static final String PCECC_CAPABILITY = "pceccCapability";
140 +
141 + /*
142 + * For the client supporting label stack capability.
143 + */
144 + public static final String LABEL_STACK_CAPABILITY = "labelStackCapability";
145 +
146 + public static final String LSRID = "lsrId";
147 + private static final String UNKNOWN = "unknown";
148 +
124 @Activate 149 @Activate
125 public void activate() { 150 public void activate() {
126 linkProviderService = linkProviderRegistry.register(this); 151 linkProviderService = linkProviderRegistry.register(this);
127 deviceProviderService = deviceProviderRegistry.register(this); 152 deviceProviderService = deviceProviderRegistry.register(this);
128 controller.addListener(listener); 153 controller.addListener(listener);
129 controller.addLinkListener(listener); 154 controller.addLinkListener(listener);
155 + pcepClientController.addNodeListener(listener);
130 } 156 }
131 157
132 @Deactivate 158 @Deactivate
...@@ -135,6 +161,7 @@ public class PcepTopologyProvider extends AbstractProvider ...@@ -135,6 +161,7 @@ public class PcepTopologyProvider extends AbstractProvider
135 linkProviderService = null; 161 linkProviderService = null;
136 controller.removeListener(listener); 162 controller.removeListener(listener);
137 controller.removeLinkListener(listener); 163 controller.removeLinkListener(listener);
164 + pcepClientController.removeNodeListener(listener);
138 } 165 }
139 166
140 private List<PortDescription> buildPortDescriptions(PcepDpid dpid, 167 private List<PortDescription> buildPortDescriptions(PcepDpid dpid,
...@@ -225,7 +252,7 @@ public class PcepTopologyProvider extends AbstractProvider ...@@ -225,7 +252,7 @@ public class PcepTopologyProvider extends AbstractProvider
225 } 252 }
226 253
227 private class InternalLinkProvider 254 private class InternalLinkProvider
228 - implements PcepSwitchListener, PcepLinkListener { 255 + implements PcepSwitchListener, PcepLinkListener, PcepNodeListener {
229 256
230 @Override 257 @Override
231 public void switchAdded(PcepDpid dpid) { 258 public void switchAdded(PcepDpid dpid) {
...@@ -306,6 +333,51 @@ public class PcepTopologyProvider extends AbstractProvider ...@@ -306,6 +333,51 @@ public class PcepTopologyProvider extends AbstractProvider
306 } 333 }
307 } 334 }
308 335
336 + @Override
337 + public void addNode(PcepClient pc) {
338 + if (deviceProviderService == null) {
339 + return;
340 + }
341 +
342 + //Right now device URI for PCEP devices is their LSRID
343 + DeviceId deviceId = deviceId(uri(new PcepDpid(pc.getPccId().id().getIp4Address().toInt())));
344 + ChassisId cId = new ChassisId();
345 +
346 + Device.Type deviceType = Device.Type.ROUTER;
347 +
348 + DefaultAnnotations.Builder annotationBuilder = DefaultAnnotations.builder();
349 + //PCC capabilities (SR, PCECC and PCECC-SR)
350 + annotationBuilder.set(SR_CAPABILITY, String.valueOf(pc.capability().srCapability()));
351 + annotationBuilder.set(PCECC_CAPABILITY, String.valueOf(pc.capability().pceccCapability()));
352 + annotationBuilder.set(LABEL_STACK_CAPABILITY, String.valueOf(pc.capability().labelStackCapability()));
353 + //PccId is the lsrId contained in openMsg, if not present it will be the socket address
354 + annotationBuilder.set(LSRID, String.valueOf(pc.getPccId().id()));
355 +
356 + DeviceDescription description = new DefaultDeviceDescription(
357 + deviceId.uri(),
358 + deviceType,
359 + UNKNOWN,
360 + UNKNOWN,
361 + UNKNOWN,
362 + UNKNOWN,
363 + cId,
364 + annotationBuilder.build());
365 +
366 + deviceProviderService.deviceConnected(deviceId, description);
367 + }
368 +
369 + @Override
370 + public void deleteNode(PccId pccId) {
371 + if (deviceProviderService == null || deviceService == null) {
372 + return;
373 + }
374 + //TODO: In device manager, in deviceDisconnected() method, get the device but null check is not validated
375 + if (deviceService.getDevice(DeviceId.deviceId(uri(new PcepDpid(pccId.id()
376 + .getIp4Address().toInt())))) == null) {
377 + return;
378 + }
379 + deviceProviderService.deviceDisconnected(deviceId(uri(new PcepDpid(pccId.id().getIp4Address().toInt()))));
380 + }
309 } 381 }
310 382
311 @Override 383 @Override
......
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.provider.pcep.topology.impl;
17 +
18 +import static org.junit.Assert.assertNotNull;
19 +
20 +import java.util.HashMap;
21 +import java.util.List;
22 +import java.util.Map;
23 +import java.util.concurrent.RejectedExecutionException;
24 +
25 +import org.jboss.netty.channel.Channel;
26 +import org.onosproject.pcep.controller.ClientCapability;
27 +import org.onosproject.pcep.controller.PccId;
28 +import org.onosproject.pcep.controller.LspKey;
29 +import org.onosproject.pcep.controller.PcepClient;
30 +import org.onosproject.pcep.controller.PcepSyncStatus;
31 +import org.onosproject.pcepio.protocol.PcepFactories;
32 +import org.onosproject.pcepio.protocol.PcepFactory;
33 +import org.onosproject.pcepio.protocol.PcepMessage;
34 +import org.onosproject.pcepio.protocol.PcepStateReport;
35 +import org.onosproject.pcepio.protocol.PcepVersion;
36 +
37 +/**
38 + * Representation of PCEP client adapter.
39 + */
40 +public class PcepClientAdapter implements PcepClient {
41 +
42 + private Channel channel;
43 + protected String channelId;
44 +
45 + private boolean connected;
46 + private PccId pccId;
47 + private ClientCapability capability;
48 +
49 + private PcepVersion pcepVersion;
50 + private PcepSyncStatus lspDbSyncStatus;
51 + private PcepSyncStatus labelDbSyncStatus;
52 + private Map<LspKey, Boolean> lspDelegationInfo = new HashMap<>();
53 +
54 + /**
55 + * Initialize instance with specified parameters.
56 + *
57 + * @param pccId PCC id
58 + * @param pcepVersion PCEP message version
59 + */
60 + public void init(PccId pccId, PcepVersion pcepVersion) {
61 + this.pccId = pccId;
62 + this.pcepVersion = pcepVersion;
63 + }
64 +
65 + @Override
66 + public final void disconnectClient() {
67 + this.channel.close();
68 + }
69 +
70 + @Override
71 + public final void sendMessage(PcepMessage m) {
72 + }
73 +
74 + @Override
75 + public final void sendMessage(List<PcepMessage> msgs) {
76 + try {
77 + PcepMessage pcepMsg = msgs.get(0);
78 + assertNotNull("PCEP MSG should be created.", pcepMsg);
79 + } catch (RejectedExecutionException e) {
80 + throw e;
81 + }
82 + }
83 +
84 + @Override
85 + public final boolean isConnected() {
86 + return this.connected;
87 + }
88 +
89 + @Override
90 + public String channelId() {
91 + return channelId;
92 + }
93 +
94 + @Override
95 + public final PccId getPccId() {
96 + return this.pccId;
97 + };
98 +
99 + @Override
100 + public final String getStringId() {
101 + return this.pccId.toString();
102 + }
103 +
104 + @Override
105 + public final void handleMessage(PcepMessage m) {
106 + }
107 +
108 + @Override
109 + public boolean isOptical() {
110 + return false;
111 + }
112 +
113 + @Override
114 + public PcepFactory factory() {
115 + return PcepFactories.getFactory(pcepVersion);
116 + }
117 +
118 + @Override
119 + public void setLspDbSyncStatus(PcepSyncStatus syncStatus) {
120 + this.lspDbSyncStatus = syncStatus;
121 + }
122 +
123 + @Override
124 + public PcepSyncStatus lspDbSyncStatus() {
125 + return lspDbSyncStatus;
126 + }
127 +
128 + @Override
129 + public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) {
130 + this.labelDbSyncStatus = syncStatus;
131 + }
132 +
133 + @Override
134 + public PcepSyncStatus labelDbSyncStatus() {
135 + return labelDbSyncStatus;
136 + }
137 +
138 + @Override
139 + public void setCapability(ClientCapability capability) {
140 + this.capability = capability;
141 + }
142 +
143 + @Override
144 + public ClientCapability capability() {
145 + return capability;
146 + }
147 +
148 + @Override
149 + public void addNode(PcepClient pc) {
150 + }
151 +
152 + @Override
153 + public void deleteNode(PccId pccId) {
154 + }
155 +
156 + @Override
157 + public void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag) {
158 + lspDelegationInfo.put(lspKey, dFlag);
159 + }
160 +
161 + @Override
162 + public Boolean delegationInfo(LspKey lspKey) {
163 + return lspDelegationInfo.get(lspKey);
164 + }
165 +
166 + @Override
167 + public void initializeSyncMsgList(PccId pccId) {
168 + // TODO Auto-generated method stub
169 +
170 + }
171 +
172 + @Override
173 + public List<PcepStateReport> getSyncMsgList(PccId pccId) {
174 + // TODO Auto-generated method stub
175 + return null;
176 + }
177 +
178 + @Override
179 + public void removeSyncMsgList(PccId pccId) {
180 + // TODO Auto-generated method stub
181 +
182 + }
183 +
184 + @Override
185 + public void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg) {
186 + // TODO Auto-generated method stub
187 +
188 + }
189 +}
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.provider.pcep.topology.impl;
17 +
18 +import java.util.Collection;
19 +import java.util.Collections;
20 +import java.util.HashSet;
21 +import java.util.LinkedList;
22 +import java.util.Set;
23 +import java.util.concurrent.ConcurrentHashMap;
24 +
25 +import org.apache.felix.scr.annotations.Activate;
26 +import org.apache.felix.scr.annotations.Deactivate;
27 +import org.onlab.packet.IpAddress;
28 +import org.onosproject.pcep.controller.ClientCapability;
29 +import org.onosproject.pcep.controller.PccId;
30 +import org.onosproject.pcep.controller.PcepClient;
31 +import org.onosproject.pcep.controller.PcepClientController;
32 +import org.onosproject.pcep.controller.PcepClientListener;
33 +import org.onosproject.pcep.controller.PcepEventListener;
34 +import org.onosproject.pcep.controller.PcepNodeListener;
35 +import org.onosproject.pcep.controller.PcepPacketListener;
36 +import org.onosproject.pcep.controller.driver.PcepAgent;
37 +import org.onosproject.pcepio.protocol.PcepError;
38 +import org.onosproject.pcepio.protocol.PcepErrorInfo;
39 +import org.onosproject.pcepio.protocol.PcepErrorMsg;
40 +import org.onosproject.pcepio.protocol.PcepErrorObject;
41 +import org.onosproject.pcepio.protocol.PcepFactory;
42 +import org.onosproject.pcepio.protocol.PcepMessage;
43 +import org.onosproject.pcepio.protocol.PcepVersion;
44 +
45 +import com.google.common.collect.Sets;
46 +
47 +import static org.onosproject.pcepio.types.PcepErrorDetailInfo.ERROR_TYPE_19;
48 +import static org.onosproject.pcepio.types.PcepErrorDetailInfo.ERROR_VALUE_5;
49 +
50 +/**
51 + * Representation of PCEP client controller adapter.
52 + */
53 +public class PcepClientControllerAdapter implements PcepClientController {
54 +
55 + protected ConcurrentHashMap<PccId, PcepClient> connectedClients =
56 + new ConcurrentHashMap<PccId, PcepClient>();
57 +
58 + protected PcepClientAgent agent = new PcepClientAgent();
59 + protected Set<PcepClientListener> pcepClientListener = new HashSet<>();
60 +
61 + protected Set<PcepEventListener> pcepEventListener = Sets.newHashSet();
62 + public Set<PcepNodeListener> pcepNodeListener = Sets.newHashSet();
63 +
64 + @Activate
65 + public void activate() {
66 + }
67 +
68 + @Deactivate
69 + public void deactivate() {
70 + }
71 +
72 + @Override
73 + public Collection<PcepClient> getClients() {
74 + return connectedClients.values();
75 + }
76 +
77 + @Override
78 + public PcepClient getClient(PccId pccId) {
79 + if (null != connectedClients.get(pccId)) {
80 + return connectedClients.get(pccId);
81 + }
82 + PcepClientAdapter pc = new PcepClientAdapter();
83 + if (pccId.ipAddress().equals(IpAddress.valueOf(0xC010103))
84 + || pccId.ipAddress().equals(IpAddress.valueOf(0xB6024E22))) {
85 + pc.setCapability(new ClientCapability(true, false, false, false, false));
86 + } else {
87 + pc.setCapability(new ClientCapability(true, true, true, false, false));
88 + }
89 + pc.init(PccId.pccId(pccId.ipAddress()), PcepVersion.PCEP_1);
90 + connectedClients.put(pccId, pc);
91 + return pc;
92 + }
93 +
94 + @Override
95 + public void addListener(PcepClientListener listener) {
96 + if (!pcepClientListener.contains(listener)) {
97 + this.pcepClientListener.add(listener);
98 + }
99 + }
100 +
101 + @Override
102 + public void addNodeListener(PcepNodeListener listener) {
103 + pcepNodeListener.add(listener);
104 + }
105 +
106 + @Override
107 + public void removeNodeListener(PcepNodeListener listener) {
108 + pcepNodeListener.remove(listener);
109 + }
110 +
111 + @Override
112 + public void removeListener(PcepClientListener listener) {
113 + this.pcepClientListener.remove(listener);
114 + }
115 +
116 + @Override
117 + public void addEventListener(PcepEventListener listener) {
118 + pcepEventListener.add(listener);
119 + }
120 +
121 + @Override
122 + public void removeEventListener(PcepEventListener listener) {
123 + pcepEventListener.remove(listener);
124 + }
125 +
126 + @Override
127 + public void writeMessage(PccId pccId, PcepMessage msg) {
128 + this.getClient(pccId).sendMessage(msg);
129 + }
130 +
131 + @Override
132 + public void processClientMessage(PccId pccId, PcepMessage msg) {
133 +
134 + PcepClient pc = getClient(pccId);
135 +
136 + switch (msg.getType()) {
137 + case NONE:
138 + break;
139 + case OPEN:
140 + break;
141 + case KEEP_ALIVE:
142 + //log.debug("Sending Keep Alive Message to {" + pccIpAddress.toString() + "}");
143 + pc.sendMessage(Collections.singletonList(pc.factory().buildKeepaliveMsg().build()));
144 + break;
145 + case PATH_COMPUTATION_REQUEST:
146 + break;
147 + case PATH_COMPUTATION_REPLY:
148 + break;
149 + case NOTIFICATION:
150 + break;
151 + case ERROR:
152 + break;
153 + case CLOSE:
154 + //log.debug("Sending Close Message to { }", pccIpAddress.toString());
155 + pc.sendMessage(Collections.singletonList(pc.factory().buildCloseMsg().build()));
156 + break;
157 + case INITIATE:
158 + if (!pc.capability().pcInstantiationCapability()) {
159 + pc.sendMessage(Collections.singletonList(getErrMsg(pc.factory(),
160 + ERROR_TYPE_19, ERROR_VALUE_5)));
161 + }
162 + break;
163 + case REPORT:
164 + //Only update the listener if respective capability is supported else send PCEP-ERR msg
165 + if (pc.capability().statefulPceCapability()) {
166 + for (PcepEventListener l : pcepEventListener) {
167 + l.handleMessage(pccId, msg);
168 + }
169 + } else {
170 + // Send PCEP-ERROR message.
171 + pc.sendMessage(Collections.singletonList(getErrMsg(pc.factory(),
172 + ERROR_TYPE_19, ERROR_VALUE_5)));
173 + }
174 + break;
175 + case UPDATE:
176 + if (!pc.capability().statefulPceCapability()) {
177 + pc.sendMessage(Collections.singletonList(getErrMsg(pc.factory(),
178 + ERROR_TYPE_19, ERROR_VALUE_5)));
179 + }
180 + break;
181 + case LABEL_UPDATE:
182 + if (!pc.capability().pceccCapability()) {
183 + pc.sendMessage(Collections.singletonList(getErrMsg(pc.factory(),
184 + ERROR_TYPE_19, ERROR_VALUE_5)));
185 + }
186 + break;
187 + case MAX:
188 + break;
189 + case END:
190 + break;
191 + default:
192 + break;
193 + }
194 + }
195 +
196 + @Override
197 + public void closeConnectedClients() {
198 + PcepClient pc;
199 + for (PccId id : connectedClients.keySet()) {
200 + pc = getClient(id);
201 + pc.disconnectClient();
202 + }
203 + }
204 +
205 + private PcepErrorMsg getErrMsg(PcepFactory factory, byte errorType, byte errorValue) {
206 + LinkedList<PcepError> llPcepErr = new LinkedList<>();
207 +
208 + LinkedList<PcepErrorObject> llerrObj = new LinkedList<>();
209 + PcepErrorMsg errMsg;
210 +
211 + PcepErrorObject errObj = factory.buildPcepErrorObject().setErrorValue(errorValue).setErrorType(errorType)
212 + .build();
213 +
214 + llerrObj.add(errObj);
215 + PcepError pcepErr = factory.buildPcepError().setErrorObjList(llerrObj).build();
216 +
217 + llPcepErr.add(pcepErr);
218 +
219 + PcepErrorInfo errInfo = factory.buildPcepErrorInfo().setPcepErrorList(llPcepErr).build();
220 +
221 + errMsg = factory.buildPcepErrorMsg().setPcepErrorInfo(errInfo).build();
222 + return errMsg;
223 + }
224 +
225 + /**
226 + * Implementation of an Pcep Agent which is responsible for
227 + * keeping track of connected clients and the state in which
228 + * they are.
229 + */
230 + public class PcepClientAgent implements PcepAgent {
231 +
232 + @Override
233 + public boolean addConnectedClient(PccId pccId, PcepClient pc) {
234 +
235 + if (connectedClients.get(pccId) != null) {
236 + return false;
237 + } else {
238 + connectedClients.put(pccId, pc);
239 + for (PcepClientListener l : pcepClientListener) {
240 + l.clientConnected(pccId);
241 + }
242 + return true;
243 + }
244 + }
245 +
246 + @Override
247 + public boolean validActivation(PccId pccId) {
248 + if (connectedClients.get(pccId) == null) {
249 + //log.error("Trying to activate client but is not in "
250 + // + "connected switches: pccIp {}. Aborting ..", pccIpAddress.toString());
251 + return false;
252 + }
253 +
254 + return true;
255 + }
256 +
257 + @Override
258 + public void removeConnectedClient(PccId pccId) {
259 + connectedClients.remove(pccId);
260 + for (PcepClientListener l : pcepClientListener) {
261 + //log.warn("removal for {}", pccIpAddress.toString());
262 + l.clientDisconnected(pccId);
263 + }
264 + }
265 +
266 + @Override
267 + public void processPcepMessage(PccId pccId, PcepMessage m) {
268 + processClientMessage(pccId, m);
269 + }
270 +
271 + @Override
272 + public void addNode(PcepClient pc) {
273 + for (PcepNodeListener l : pcepNodeListener) {
274 + l.addNode(pc);
275 + }
276 + }
277 +
278 + @Override
279 + public void deleteNode(PccId pccId) {
280 + for (PcepNodeListener l : pcepNodeListener) {
281 + l.deleteNode(pccId);
282 + }
283 + }
284 +
285 + @Override
286 + public boolean analyzeSyncMsgList(PccId pccId) {
287 + // TODO Auto-generated method stub
288 + return false;
289 + }
290 + }
291 +
292 + @Override
293 + public void addPacketListener(PcepPacketListener listener) {
294 + // TODO Auto-generated method stub
295 +
296 + }
297 +
298 + @Override
299 + public void removePacketListener(PcepPacketListener listener) {
300 + // TODO Auto-generated method stub
301 +
302 + }
303 +}
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 +
17 +package org.onosproject.provider.pcep.topology.impl;
18 +
19 +import org.onosproject.net.DeviceId;
20 +import org.onosproject.pcep.api.PcepController;
21 +import org.onosproject.pcep.api.PcepDpid;
22 +import org.onosproject.pcep.api.PcepLinkListener;
23 +import org.onosproject.pcep.api.PcepSwitch;
24 +import org.onosproject.pcep.api.PcepSwitchListener;
25 +import org.onosproject.pcep.api.PcepTunnel;
26 +import org.onosproject.pcep.api.PcepTunnelListener;
27 +
28 +/**
29 + * Implementation of PCEP controller.
30 + */
31 +public class PcepControllerAdapter implements PcepController {
32 +
33 + @Override
34 + public Iterable<PcepSwitch> getSwitches() {
35 + return null;
36 + }
37 +
38 + @Override
39 + public PcepSwitch getSwitch(PcepDpid did) {
40 + return null;
41 + }
42 +
43 + @Override
44 + public void addListener(PcepSwitchListener listener) {
45 +
46 + }
47 +
48 + @Override
49 + public void removeListener(PcepSwitchListener listener) {
50 + }
51 +
52 + @Override
53 + public void addLinkListener(PcepLinkListener listener) {
54 + }
55 +
56 + @Override
57 + public void removeLinkListener(PcepLinkListener listener) {
58 + }
59 +
60 + @Override
61 + public void addTunnelListener(PcepTunnelListener listener) {
62 + }
63 +
64 + @Override
65 + public void removeTunnelListener(PcepTunnelListener listener) {
66 + }
67 +
68 + @Override
69 + public PcepTunnel applyTunnel(DeviceId srcDid, DeviceId dstDid, long srcPort, long dstPort, long bandwidth,
70 + String name) {
71 + return null;
72 + }
73 +
74 + @Override
75 + public Boolean deleteTunnel(String id) {
76 + return null;
77 + }
78 +
79 + @Override
80 + public Boolean updateTunnelBandwidth(String id, long bandwidth) {
81 + return null;
82 + }
83 +
84 + @Override
85 + public void getTunnelStatistics(String pcepTunnelId) {
86 +
87 + }
88 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 + * the License. You may obtain a copy of the License at
6 + *
7 + * http://www.apache.org/licenses/LICENSE-2.0
8 + *
9 + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 + * specific language governing permissions and limitations under the License.
12 + */
13 +package org.onosproject.provider.pcep.topology.impl;
14 +
15 +import static org.hamcrest.MatcherAssert.assertThat;
16 +import static org.hamcrest.core.Is.is;
17 +import static org.onosproject.net.Link.State.ACTIVE;
18 +import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LABEL_STACK_CAPABILITY;
19 +import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LSRID;
20 +import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.PCECC_CAPABILITY;
21 +import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.SR_CAPABILITY;
22 +
23 +import java.util.Collection;
24 +import java.util.HashMap;
25 +import java.util.HashSet;
26 +import java.util.List;
27 +import java.util.Map;
28 +import java.util.Set;
29 +
30 +import org.junit.After;
31 +import org.junit.Before;
32 +import org.junit.Test;
33 +import org.onlab.packet.ChassisId;
34 +import org.onlab.packet.IpAddress;
35 +import org.onosproject.net.ConnectPoint;
36 +import org.onosproject.net.DefaultDevice;
37 +import org.onosproject.net.DefaultLink;
38 +import org.onosproject.net.Device;
39 +import org.onosproject.net.DeviceId;
40 +import org.onosproject.net.Link;
41 +import org.onosproject.net.MastershipRole;
42 +import org.onosproject.net.device.DeviceDescription;
43 +import org.onosproject.net.device.DeviceProvider;
44 +import org.onosproject.net.device.DeviceProviderRegistry;
45 +import org.onosproject.net.device.DeviceProviderService;
46 +import org.onosproject.net.device.DeviceServiceAdapter;
47 +import org.onosproject.net.device.PortDescription;
48 +import org.onosproject.net.device.PortStatistics;
49 +import org.onosproject.net.link.LinkDescription;
50 +import org.onosproject.net.link.LinkProvider;
51 +import org.onosproject.net.link.LinkProviderRegistry;
52 +import org.onosproject.net.link.LinkProviderService;
53 +import org.onosproject.net.provider.ProviderId;
54 +import org.onosproject.pcep.controller.ClientCapability;
55 +import org.onosproject.pcep.controller.PccId;
56 +import org.onosproject.pcep.controller.PcepClient;
57 +import org.onosproject.pcep.controller.PcepNodeListener;
58 +
59 +/**
60 + * Test for PCEP topology provider.
61 + */
62 +public class PcepTopologyProviderTest {
63 + private static final String UNKNOWN = new String("unknown");
64 + public static ProviderId providerId = new ProviderId("l3", "foo");
65 + private final PcepClientControllerAdapter clientController = new PcepClientControllerAdapter();
66 + private final PcepTopologyProvider provider = new PcepTopologyProvider();
67 + private final MockDeviceRegistry nodeRegistry = new MockDeviceRegistry();
68 + private final PcepControllerAdapter controller = new PcepControllerAdapter();
69 + private final MockLinkRegistry linkRegistry = new MockLinkRegistry();
70 + private final MockDeviceService deviceService = new MockDeviceService();
71 + private Map<DeviceId, Device> deviceMap = new HashMap<>();
72 +
73 + @Before
74 + public void startUp() {
75 + provider.pcepClientController = clientController;
76 + provider.deviceProviderRegistry = nodeRegistry;
77 + provider.linkProviderRegistry = linkRegistry;
78 + provider.controller = controller;
79 + provider.deviceService = deviceService;
80 + provider.activate();
81 + }
82 +
83 + @After
84 + public void tearDown() {
85 + provider.deactivate();
86 + provider.deviceProviderRegistry = null;
87 + provider.pcepClientController = null;
88 + provider.linkProviderRegistry = null;
89 + provider.controller = null;
90 + provider.deviceService = null;
91 + }
92 +
93 + /* Class implement device test registry */
94 + private class MockLinkRegistry implements LinkProviderRegistry {
95 + LinkProvider linkProvider;
96 + Set<Link> links = new HashSet<>();
97 +
98 + @Override
99 + public LinkProviderService register(LinkProvider provider) {
100 + this.linkProvider = provider;
101 + return new MockProviderService();
102 + }
103 +
104 + @Override
105 + public void unregister(LinkProvider provider) {
106 + // TODO Auto-generated method stub
107 + }
108 +
109 + @Override
110 + public Set<ProviderId> getProviders() {
111 + return null;
112 + }
113 +
114 + private class MockProviderService implements LinkProviderService {
115 +
116 + @Override
117 + public void linkDetected(LinkDescription linkDescription) {
118 + links.add(DefaultLink.builder().src(linkDescription.src())
119 + .dst(linkDescription.dst()).state(ACTIVE).type(linkDescription.type())
120 + .providerId(ProviderId.NONE).build());
121 + }
122 +
123 + @Override
124 + public void linkVanished(LinkDescription linkDescription) {
125 + links.remove(DefaultLink.builder().src(linkDescription.src())
126 + .dst(linkDescription.dst()).state(ACTIVE).type(linkDescription.type())
127 + .providerId(ProviderId.NONE).build());
128 + }
129 +
130 + @Override
131 + public void linksVanished(ConnectPoint connectPoint) {
132 + // TODO Auto-generated method stub
133 + }
134 +
135 + @Override
136 + public void linksVanished(DeviceId deviceId) {
137 + // TODO Auto-generated method stub
138 + }
139 +
140 + @Override
141 + public LinkProvider provider() {
142 + // TODO Auto-generated method stub
143 + return null;
144 + }
145 + }
146 + }
147 +
148 + /* Class implement device test registry */
149 + private class MockDeviceRegistry implements DeviceProviderRegistry {
150 + DeviceProvider provider;
151 +
152 + Set<DeviceId> connected = new HashSet<>();
153 +
154 + @Override
155 + public DeviceProviderService register(DeviceProvider provider) {
156 + this.provider = provider;
157 + return new MockProviderService();
158 + }
159 +
160 + @Override
161 + public void unregister(DeviceProvider provider) {
162 + }
163 +
164 + @Override
165 + public Set<ProviderId> getProviders() {
166 + return null;
167 + }
168 +
169 + private class MockProviderService implements DeviceProviderService {
170 +
171 + @Override
172 + public DeviceProvider provider() {
173 + return null;
174 + }
175 +
176 + @Override
177 + public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
178 + connected.add(deviceId);
179 + Device device = new DefaultDevice(ProviderId.NONE, deviceId, Device.Type.ROUTER, UNKNOWN, UNKNOWN,
180 + UNKNOWN, UNKNOWN, new ChassisId(), deviceDescription.annotations());
181 + deviceMap.put(deviceId, device);
182 + }
183 +
184 + @Override
185 + public void deviceDisconnected(DeviceId deviceId) {
186 + connected.remove(deviceId);
187 + deviceMap.remove(deviceId);
188 + }
189 +
190 + @Override
191 + public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
192 + // TODO Auto-generated method stub
193 + }
194 +
195 + @Override
196 + public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
197 + // TODO Auto-generated method stub
198 + }
199 +
200 + @Override
201 + public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
202 + // TODO Auto-generated method stub
203 + }
204 +
205 + @Override
206 + public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
207 + // TODO Auto-generated method stub
208 + }
209 + }
210 + }
211 +
212 + /* Mock test for device service */
213 + private class MockDeviceService extends DeviceServiceAdapter {
214 + @Override
215 + public Device getDevice(DeviceId deviceId) {
216 + return deviceMap.get(deviceId);
217 + }
218 + }
219 +
220 + /**
221 + * Adds the PCEP device and removes it.
222 + */
223 + @Test
224 + public void testPcepTopologyProviderTestAddDevice1() {
225 + PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1")));
226 + for (PcepNodeListener l : clientController.pcepNodeListener) {
227 + pc.setCapability(new ClientCapability(true, true, false, true, true));
228 + l.addNode(pc);
229 + assertThat(nodeRegistry.connected.size(), is(1));
230 + assertThat(deviceMap.keySet().iterator().next(), is(DeviceId.deviceId("l3:1.1.1.1")));
231 + assertThat(deviceMap.values().iterator().next().annotations().value(LABEL_STACK_CAPABILITY), is("true"));
232 + assertThat(deviceMap.values().iterator().next().annotations().value(LSRID), is("1.1.1.1"));
233 + assertThat(deviceMap.values().iterator().next().annotations().value(PCECC_CAPABILITY), is("true"));
234 + assertThat(deviceMap.values().iterator().next().annotations().value(SR_CAPABILITY), is("true"));
235 +
236 + l.deleteNode(pc.getPccId());
237 + assertThat(nodeRegistry.connected.size(), is(0));
238 + }
239 + }
240 +}
...@@ -6,6 +6,7 @@ COMPILE_DEPS = [ ...@@ -6,6 +6,7 @@ COMPILE_DEPS = [
6 '//incubator/api:onos-incubator-api', 6 '//incubator/api:onos-incubator-api',
7 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio', 7 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
8 '//protocols/pcep/api:onos-protocols-pcep-api', 8 '//protocols/pcep/api:onos-protocols-pcep-api',
9 + '//protocols/pcep/ctl:onos-protocols-pcep-ctl',
9 ] 10 ]
10 11
11 TEST_DEPS = [ 12 TEST_DEPS = [
......
...@@ -49,5 +49,10 @@ ...@@ -49,5 +49,10 @@
49 <version>${project.version} </version> 49 <version>${project.version} </version>
50 <scope>test</scope> 50 <scope>test</scope>
51 </dependency> 51 </dependency>
52 + <dependency>
53 + <groupId>org.onosproject</groupId>
54 + <artifactId>onos-pcep-controller-impl</artifactId>
55 + <version>${project.version} </version>
56 + </dependency>
52 </dependencies> 57 </dependencies>
53 </project> 58 </project>
......
...@@ -17,17 +17,22 @@ package org.onosproject.provider.pcep.tunnel.impl; ...@@ -17,17 +17,22 @@ package org.onosproject.provider.pcep.tunnel.impl;
17 17
18 import static org.junit.Assert.assertNotNull; 18 import static org.junit.Assert.assertNotNull;
19 19
20 +import java.util.HashMap;
21 +import java.util.LinkedList;
20 import java.util.List; 22 import java.util.List;
23 +import java.util.Map;
21 import java.util.concurrent.RejectedExecutionException; 24 import java.util.concurrent.RejectedExecutionException;
22 25
23 import org.jboss.netty.channel.Channel; 26 import org.jboss.netty.channel.Channel;
24 import org.onosproject.pcep.controller.ClientCapability; 27 import org.onosproject.pcep.controller.ClientCapability;
28 +import org.onosproject.pcep.controller.LspKey;
25 import org.onosproject.pcep.controller.PccId; 29 import org.onosproject.pcep.controller.PccId;
26 import org.onosproject.pcep.controller.PcepClient; 30 import org.onosproject.pcep.controller.PcepClient;
27 import org.onosproject.pcep.controller.PcepSyncStatus; 31 import org.onosproject.pcep.controller.PcepSyncStatus;
28 import org.onosproject.pcepio.protocol.PcepFactories; 32 import org.onosproject.pcepio.protocol.PcepFactories;
29 import org.onosproject.pcepio.protocol.PcepFactory; 33 import org.onosproject.pcepio.protocol.PcepFactory;
30 import org.onosproject.pcepio.protocol.PcepMessage; 34 import org.onosproject.pcepio.protocol.PcepMessage;
35 +import org.onosproject.pcepio.protocol.PcepStateReport;
31 import org.onosproject.pcepio.protocol.PcepVersion; 36 import org.onosproject.pcepio.protocol.PcepVersion;
32 37
33 /** 38 /**
...@@ -45,6 +50,8 @@ public class PcepClientAdapter implements PcepClient { ...@@ -45,6 +50,8 @@ public class PcepClientAdapter implements PcepClient {
45 private PcepVersion pcepVersion; 50 private PcepVersion pcepVersion;
46 private PcepSyncStatus lspDbSyncStatus; 51 private PcepSyncStatus lspDbSyncStatus;
47 private PcepSyncStatus labelDbSyncStatus; 52 private PcepSyncStatus labelDbSyncStatus;
53 + private Map<LspKey, Boolean> lspDelegationInfo = new HashMap<>();
54 + private Map<PccId, List<PcepStateReport>> sycRptCache = new HashMap<>();
48 55
49 /** 56 /**
50 * Initialize instance with specified parameters. 57 * Initialize instance with specified parameters.
...@@ -139,4 +146,45 @@ public class PcepClientAdapter implements PcepClient { ...@@ -139,4 +146,45 @@ public class PcepClientAdapter implements PcepClient {
139 public ClientCapability capability() { 146 public ClientCapability capability() {
140 return capability; 147 return capability;
141 } 148 }
149 +
150 + @Override
151 + public void addNode(PcepClient pc) {
152 + }
153 +
154 + @Override
155 + public void deleteNode(PccId pccId) {
156 + }
157 +
158 + @Override
159 + public void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag) {
160 + lspDelegationInfo.put(lspKey, dFlag);
161 + }
162 +
163 + @Override
164 + public Boolean delegationInfo(LspKey lspKey) {
165 + return lspDelegationInfo.get(lspKey);
166 + }
167 +
168 + @Override
169 + public void initializeSyncMsgList(PccId pccId) {
170 + List<PcepStateReport> rptMsgList = new LinkedList<>();
171 + sycRptCache.put(pccId, rptMsgList);
172 + }
173 +
174 + @Override
175 + public List<PcepStateReport> getSyncMsgList(PccId pccId) {
176 + return sycRptCache.get(pccId);
177 + }
178 +
179 + @Override
180 + public void removeSyncMsgList(PccId pccId) {
181 + sycRptCache.remove(pccId);
182 + }
183 +
184 + @Override
185 + public void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg) {
186 + List<PcepStateReport> rptMsgList = sycRptCache.get(pccId);
187 + rptMsgList.add(rptMsg);
188 + sycRptCache.put(pccId, rptMsgList);
189 + }
142 } 190 }
......
...@@ -24,13 +24,13 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -24,13 +24,13 @@ import java.util.concurrent.ConcurrentHashMap;
24 24
25 import org.apache.felix.scr.annotations.Activate; 25 import org.apache.felix.scr.annotations.Activate;
26 import org.apache.felix.scr.annotations.Deactivate; 26 import org.apache.felix.scr.annotations.Deactivate;
27 -import org.onlab.packet.IpAddress;
28 -import org.onosproject.pcep.controller.ClientCapability;
29 import org.onosproject.pcep.controller.PccId; 27 import org.onosproject.pcep.controller.PccId;
30 import org.onosproject.pcep.controller.PcepClient; 28 import org.onosproject.pcep.controller.PcepClient;
31 import org.onosproject.pcep.controller.PcepClientController; 29 import org.onosproject.pcep.controller.PcepClientController;
32 import org.onosproject.pcep.controller.PcepClientListener; 30 import org.onosproject.pcep.controller.PcepClientListener;
33 import org.onosproject.pcep.controller.PcepEventListener; 31 import org.onosproject.pcep.controller.PcepEventListener;
32 +import org.onosproject.pcep.controller.PcepNodeListener;
33 +import org.onosproject.pcep.controller.PcepPacketListener;
34 import org.onosproject.pcep.controller.driver.PcepAgent; 34 import org.onosproject.pcep.controller.driver.PcepAgent;
35 import org.onosproject.pcepio.protocol.PcepError; 35 import org.onosproject.pcepio.protocol.PcepError;
36 import org.onosproject.pcepio.protocol.PcepErrorInfo; 36 import org.onosproject.pcepio.protocol.PcepErrorInfo;
...@@ -57,6 +57,8 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -57,6 +57,8 @@ public class PcepClientControllerAdapter implements PcepClientController {
57 protected Set<PcepClientListener> pcepClientListener = new HashSet<>(); 57 protected Set<PcepClientListener> pcepClientListener = new HashSet<>();
58 58
59 protected Set<PcepEventListener> pcepEventListener = Sets.newHashSet(); 59 protected Set<PcepEventListener> pcepEventListener = Sets.newHashSet();
60 + public Set<PcepNodeListener> pcepNodeListener = Sets.newHashSet();
61 + protected Set<PcepPacketListener> pcepPacketListener = Sets.newHashSet();
60 62
61 @Activate 63 @Activate
62 public void activate() { 64 public void activate() {
...@@ -73,16 +75,11 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -73,16 +75,11 @@ public class PcepClientControllerAdapter implements PcepClientController {
73 75
74 @Override 76 @Override
75 public PcepClient getClient(PccId pccId) { 77 public PcepClient getClient(PccId pccId) {
76 - if (null != connectedClients.get(pccId)) { 78 + if (connectedClients.get(pccId) != null) {
77 return connectedClients.get(pccId); 79 return connectedClients.get(pccId);
78 } 80 }
79 PcepClientAdapter pc = new PcepClientAdapter(); 81 PcepClientAdapter pc = new PcepClientAdapter();
80 - if (pccId.ipAddress().equals(IpAddress.valueOf(0xC010103)) 82 +
81 - || pccId.ipAddress().equals(IpAddress.valueOf(0xB6024E22))) {
82 - pc.setCapability(new ClientCapability(true, false, false));
83 - } else {
84 - pc.setCapability(new ClientCapability(true, true, true));
85 - }
86 pc.init(PccId.pccId(pccId.ipAddress()), PcepVersion.PCEP_1); 83 pc.init(PccId.pccId(pccId.ipAddress()), PcepVersion.PCEP_1);
87 connectedClients.put(pccId, pc); 84 connectedClients.put(pccId, pc);
88 return pc; 85 return pc;
...@@ -96,6 +93,16 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -96,6 +93,16 @@ public class PcepClientControllerAdapter implements PcepClientController {
96 } 93 }
97 94
98 @Override 95 @Override
96 + public void addNodeListener(PcepNodeListener listener) {
97 + pcepNodeListener.add(listener);
98 + }
99 +
100 + @Override
101 + public void removeNodeListener(PcepNodeListener listener) {
102 + pcepNodeListener.remove(listener);
103 + }
104 +
105 + @Override
99 public void removeListener(PcepClientListener listener) { 106 public void removeListener(PcepClientListener listener) {
100 this.pcepClientListener.remove(listener); 107 this.pcepClientListener.remove(listener);
101 } 108 }
...@@ -111,6 +118,16 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -111,6 +118,16 @@ public class PcepClientControllerAdapter implements PcepClientController {
111 } 118 }
112 119
113 @Override 120 @Override
121 + public void addPacketListener(PcepPacketListener listener) {
122 + pcepPacketListener.add(listener);
123 + }
124 +
125 + @Override
126 + public void removePacketListener(PcepPacketListener listener) {
127 + pcepPacketListener.remove(listener);
128 + }
129 +
130 + @Override
114 public void writeMessage(PccId pccId, PcepMessage msg) { 131 public void writeMessage(PccId pccId, PcepMessage msg) {
115 this.getClient(pccId).sendMessage(msg); 132 this.getClient(pccId).sendMessage(msg);
116 } 133 }
...@@ -254,5 +271,25 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -254,5 +271,25 @@ public class PcepClientControllerAdapter implements PcepClientController {
254 public void processPcepMessage(PccId pccId, PcepMessage m) { 271 public void processPcepMessage(PccId pccId, PcepMessage m) {
255 processClientMessage(pccId, m); 272 processClientMessage(pccId, m);
256 } 273 }
274 +
275 + @Override
276 + public void addNode(PcepClient pc) {
277 + for (PcepNodeListener l : pcepNodeListener) {
278 + l.addNode(pc);
279 + }
280 + }
281 +
282 + @Override
283 + public void deleteNode(PccId pccId) {
284 + for (PcepNodeListener l : pcepNodeListener) {
285 + l.deleteNode(pccId);
286 + }
287 + }
288 +
289 + @Override
290 + public boolean analyzeSyncMsgList(PccId pccId) {
291 + // TODO Auto-generated method stub
292 + return false;
293 + }
257 } 294 }
258 } 295 }
......
...@@ -40,6 +40,7 @@ import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; ...@@ -40,6 +40,7 @@ import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
40 import org.onosproject.incubator.net.tunnel.Tunnel; 40 import org.onosproject.incubator.net.tunnel.Tunnel;
41 import org.onosproject.incubator.net.tunnel.TunnelId; 41 import org.onosproject.incubator.net.tunnel.TunnelId;
42 import org.onosproject.incubator.net.tunnel.TunnelName; 42 import org.onosproject.incubator.net.tunnel.TunnelName;
43 +import org.onosproject.mastership.MastershipServiceAdapter;
43 import org.onosproject.net.Annotations; 44 import org.onosproject.net.Annotations;
44 import org.onosproject.net.ConnectPoint; 45 import org.onosproject.net.ConnectPoint;
45 import org.onosproject.net.DefaultAnnotations; 46 import org.onosproject.net.DefaultAnnotations;
...@@ -49,7 +50,10 @@ import org.onosproject.net.IpElementId; ...@@ -49,7 +50,10 @@ import org.onosproject.net.IpElementId;
49 import org.onosproject.net.Link; 50 import org.onosproject.net.Link;
50 import org.onosproject.net.Path; 51 import org.onosproject.net.Path;
51 import org.onosproject.net.PortNumber; 52 import org.onosproject.net.PortNumber;
53 +import org.onosproject.net.device.DeviceServiceAdapter;
52 import org.onosproject.net.provider.ProviderId; 54 import org.onosproject.net.provider.ProviderId;
55 +import org.onosproject.pcep.controller.ClientCapability;
56 +import org.onosproject.pcep.controller.PccId;
53 import org.onosproject.pcepio.types.StatefulIPv4LspIdentifiersTlv; 57 import org.onosproject.pcepio.types.StatefulIPv4LspIdentifiersTlv;
54 58
55 /** 59 /**
...@@ -64,12 +68,16 @@ public class PcepReleaseTunnelProviderTest { ...@@ -64,12 +68,16 @@ public class PcepReleaseTunnelProviderTest {
64 private final PcepControllerAdapter ctl = new PcepControllerAdapter(); 68 private final PcepControllerAdapter ctl = new PcepControllerAdapter();
65 private final PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper(); 69 private final PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper();
66 private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter(); 70 private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
71 + private final DeviceServiceAdapter deviceService = new DeviceServiceAdapter();
72 + private final MastershipServiceAdapter mastershipService = new MastershipServiceAdapter();
67 73
68 @Before 74 @Before
69 public void setUp() throws IOException { 75 public void setUp() throws IOException {
70 tunnelProvider.tunnelProviderRegistry = registry; 76 tunnelProvider.tunnelProviderRegistry = registry;
71 tunnelProvider.pcepClientController = controller; 77 tunnelProvider.pcepClientController = controller;
72 tunnelProvider.controller = ctl; 78 tunnelProvider.controller = ctl;
79 + tunnelProvider.deviceService = deviceService;
80 + tunnelProvider.mastershipService = mastershipService;
73 tunnelProvider.tunnelService = tunnelService; 81 tunnelProvider.tunnelService = tunnelService;
74 tunnelProvider.pcepTunnelApiMapper = pcepTunnelAPIMapper; 82 tunnelProvider.pcepTunnelApiMapper = pcepTunnelAPIMapper;
75 tunnelProvider.cfgService = new ComponentConfigAdapter(); 83 tunnelProvider.cfgService = new ComponentConfigAdapter();
...@@ -125,6 +133,8 @@ public class PcepReleaseTunnelProviderTest { ...@@ -125,6 +133,8 @@ public class PcepReleaseTunnelProviderTest {
125 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData); 133 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
126 134
127 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 135 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
136 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E20))).setCapability(
137 + new ClientCapability(true, true, true, true, true));
128 138
129 tunnelProvider.releaseTunnel(tunnel); 139 tunnelProvider.releaseTunnel(tunnel);
130 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 140 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
...@@ -179,6 +189,8 @@ public class PcepReleaseTunnelProviderTest { ...@@ -179,6 +189,8 @@ public class PcepReleaseTunnelProviderTest {
179 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData); 189 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
180 190
181 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 191 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
192 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E22))).setCapability(
193 + new ClientCapability(true, false, false, true, true));
182 194
183 tunnelProvider.releaseTunnel(tunnel); 195 tunnelProvider.releaseTunnel(tunnel);
184 assertThat(tunnelProvider.pcepTunnelApiMapper.checkFromTunnelRequestQueue(1), is(false)); 196 assertThat(tunnelProvider.pcepTunnelApiMapper.checkFromTunnelRequestQueue(1), is(false));
...@@ -233,6 +245,8 @@ public class PcepReleaseTunnelProviderTest { ...@@ -233,6 +245,8 @@ public class PcepReleaseTunnelProviderTest {
233 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData); 245 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
234 246
235 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 247 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
248 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E20))).setCapability(
249 + new ClientCapability(true, true, true, true, true));
236 250
237 tunnelProvider.releaseTunnel(tunnel); 251 tunnelProvider.releaseTunnel(tunnel);
238 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 252 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
...@@ -287,6 +301,8 @@ public class PcepReleaseTunnelProviderTest { ...@@ -287,6 +301,8 @@ public class PcepReleaseTunnelProviderTest {
287 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData); 301 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
288 302
289 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 303 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
304 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E20))).setCapability(
305 + new ClientCapability(true, true, true, true, true));
290 306
291 tunnelProvider.releaseTunnel(tunnel); 307 tunnelProvider.releaseTunnel(tunnel);
292 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 308 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
...@@ -298,5 +314,7 @@ public class PcepReleaseTunnelProviderTest { ...@@ -298,5 +314,7 @@ public class PcepReleaseTunnelProviderTest {
298 tunnelProvider.controller = null; 314 tunnelProvider.controller = null;
299 tunnelProvider.pcepClientController = null; 315 tunnelProvider.pcepClientController = null;
300 tunnelProvider.tunnelProviderRegistry = null; 316 tunnelProvider.tunnelProviderRegistry = null;
317 + tunnelProvider.deviceService = null;
318 + tunnelProvider.mastershipService = null;
301 } 319 }
302 } 320 }
......
...@@ -40,6 +40,7 @@ import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; ...@@ -40,6 +40,7 @@ import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
40 import org.onosproject.incubator.net.tunnel.Tunnel; 40 import org.onosproject.incubator.net.tunnel.Tunnel;
41 import org.onosproject.incubator.net.tunnel.TunnelId; 41 import org.onosproject.incubator.net.tunnel.TunnelId;
42 import org.onosproject.incubator.net.tunnel.TunnelName; 42 import org.onosproject.incubator.net.tunnel.TunnelName;
43 +import org.onosproject.mastership.MastershipServiceAdapter;
43 import org.onosproject.net.Annotations; 44 import org.onosproject.net.Annotations;
44 import org.onosproject.net.ConnectPoint; 45 import org.onosproject.net.ConnectPoint;
45 import org.onosproject.net.DefaultAnnotations; 46 import org.onosproject.net.DefaultAnnotations;
...@@ -49,7 +50,10 @@ import org.onosproject.net.IpElementId; ...@@ -49,7 +50,10 @@ import org.onosproject.net.IpElementId;
49 import org.onosproject.net.Link; 50 import org.onosproject.net.Link;
50 import org.onosproject.net.Path; 51 import org.onosproject.net.Path;
51 import org.onosproject.net.PortNumber; 52 import org.onosproject.net.PortNumber;
53 +import org.onosproject.net.device.DeviceServiceAdapter;
52 import org.onosproject.net.provider.ProviderId; 54 import org.onosproject.net.provider.ProviderId;
55 +import org.onosproject.pcep.controller.ClientCapability;
56 +import org.onosproject.pcep.controller.PccId;
53 57
54 /** 58 /**
55 * Test for PCEP setup tunnel. 59 * Test for PCEP setup tunnel.
...@@ -62,12 +66,16 @@ public class PcepSetupTunnelProviderTest { ...@@ -62,12 +66,16 @@ public class PcepSetupTunnelProviderTest {
62 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); 66 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
63 private final PcepControllerAdapter ctl = new PcepControllerAdapter(); 67 private final PcepControllerAdapter ctl = new PcepControllerAdapter();
64 private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter(); 68 private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
69 + private final DeviceServiceAdapter deviceService = new DeviceServiceAdapter();
70 + private final MastershipServiceAdapter mastershipService = new MastershipServiceAdapter();
65 71
66 @Before 72 @Before
67 public void setUp() throws IOException { 73 public void setUp() throws IOException {
68 tunnelProvider.tunnelProviderRegistry = registry; 74 tunnelProvider.tunnelProviderRegistry = registry;
69 tunnelProvider.pcepClientController = controller; 75 tunnelProvider.pcepClientController = controller;
70 tunnelProvider.controller = ctl; 76 tunnelProvider.controller = ctl;
77 + tunnelProvider.deviceService = deviceService;
78 + tunnelProvider.mastershipService = mastershipService;
71 tunnelProvider.cfgService = new ComponentConfigAdapter(); 79 tunnelProvider.cfgService = new ComponentConfigAdapter();
72 tunnelProvider.tunnelService = tunnelService; 80 tunnelProvider.tunnelService = tunnelService;
73 tunnelProvider.activate(); 81 tunnelProvider.activate();
...@@ -111,6 +119,8 @@ public class PcepSetupTunnelProviderTest { ...@@ -111,6 +119,8 @@ public class PcepSetupTunnelProviderTest {
111 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 119 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
112 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"), 120 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
113 path, annotations); 121 path, annotations);
122 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xC010101))).setCapability(
123 + new ClientCapability(true, true, true, true, true));
114 124
115 tunnelProvider.setupTunnel(tunnel, path); 125 tunnelProvider.setupTunnel(tunnel, path);
116 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 126 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
...@@ -154,6 +164,8 @@ public class PcepSetupTunnelProviderTest { ...@@ -154,6 +164,8 @@ public class PcepSetupTunnelProviderTest {
154 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 164 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
155 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"), 165 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
156 path, annotations); 166 path, annotations);
167 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xC010103))).setCapability(
168 + new ClientCapability(true, true, true, true, true));
157 169
158 tunnelProvider.setupTunnel(tunnel, path); 170 tunnelProvider.setupTunnel(tunnel, path);
159 assertThat(tunnelProvider.pcepTunnelApiMapper.checkFromTunnelRequestQueue(1), is(false)); 171 assertThat(tunnelProvider.pcepTunnelApiMapper.checkFromTunnelRequestQueue(1), is(false));
...@@ -197,6 +209,8 @@ public class PcepSetupTunnelProviderTest { ...@@ -197,6 +209,8 @@ public class PcepSetupTunnelProviderTest {
197 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 209 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
198 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"), 210 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
199 path, annotations); 211 path, annotations);
212 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xC010101))).setCapability(
213 + new ClientCapability(true, true, true, true, true));
200 214
201 tunnelProvider.setupTunnel(tunnel, path); 215 tunnelProvider.setupTunnel(tunnel, path);
202 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 216 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
...@@ -240,6 +254,8 @@ public class PcepSetupTunnelProviderTest { ...@@ -240,6 +254,8 @@ public class PcepSetupTunnelProviderTest {
240 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 254 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
241 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"), 255 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
242 path, annotations); 256 path, annotations);
257 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xC010101))).setCapability(
258 + new ClientCapability(true, true, true, true, true));
243 259
244 tunnelProvider.setupTunnel(tunnel, path); 260 tunnelProvider.setupTunnel(tunnel, path);
245 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 261 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
...@@ -251,5 +267,7 @@ public class PcepSetupTunnelProviderTest { ...@@ -251,5 +267,7 @@ public class PcepSetupTunnelProviderTest {
251 tunnelProvider.controller = null; 267 tunnelProvider.controller = null;
252 tunnelProvider.pcepClientController = null; 268 tunnelProvider.pcepClientController = null;
253 tunnelProvider.tunnelProviderRegistry = null; 269 tunnelProvider.tunnelProviderRegistry = null;
270 + tunnelProvider.deviceService = null;
271 + tunnelProvider.mastershipService = null;
254 } 272 }
255 } 273 }
......
...@@ -35,6 +35,7 @@ import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; ...@@ -35,6 +35,7 @@ import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
35 import org.onosproject.incubator.net.tunnel.Tunnel; 35 import org.onosproject.incubator.net.tunnel.Tunnel;
36 import org.onosproject.incubator.net.tunnel.TunnelId; 36 import org.onosproject.incubator.net.tunnel.TunnelId;
37 import org.onosproject.incubator.net.tunnel.TunnelName; 37 import org.onosproject.incubator.net.tunnel.TunnelName;
38 +import org.onosproject.mastership.MastershipServiceAdapter;
38 import org.onosproject.net.Annotations; 39 import org.onosproject.net.Annotations;
39 import org.onosproject.net.ConnectPoint; 40 import org.onosproject.net.ConnectPoint;
40 import org.onosproject.net.DefaultAnnotations; 41 import org.onosproject.net.DefaultAnnotations;
...@@ -44,7 +45,10 @@ import org.onosproject.net.IpElementId; ...@@ -44,7 +45,10 @@ import org.onosproject.net.IpElementId;
44 import org.onosproject.net.Link; 45 import org.onosproject.net.Link;
45 import org.onosproject.net.Path; 46 import org.onosproject.net.Path;
46 import org.onosproject.net.PortNumber; 47 import org.onosproject.net.PortNumber;
48 +import org.onosproject.net.device.DeviceServiceAdapter;
47 import org.onosproject.net.provider.ProviderId; 49 import org.onosproject.net.provider.ProviderId;
50 +import org.onosproject.pcep.controller.ClientCapability;
51 +import org.onosproject.pcep.controller.PccId;
48 import org.onosproject.cfg.ComponentConfigAdapter; 52 import org.onosproject.cfg.ComponentConfigAdapter;
49 53
50 public class PcepTunnelProviderTest { 54 public class PcepTunnelProviderTest {
...@@ -55,6 +59,8 @@ public class PcepTunnelProviderTest { ...@@ -55,6 +59,8 @@ public class PcepTunnelProviderTest {
55 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); 59 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
56 private final PcepControllerAdapter ctl = new PcepControllerAdapter(); 60 private final PcepControllerAdapter ctl = new PcepControllerAdapter();
57 private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter(); 61 private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
62 + private final DeviceServiceAdapter deviceService = new DeviceServiceAdapter();
63 + private final MastershipServiceAdapter mastershipService = new MastershipServiceAdapter();
58 64
59 @Test 65 @Test
60 public void testCasePcepSetupTunnel() { 66 public void testCasePcepSetupTunnel() {
...@@ -62,6 +68,8 @@ public class PcepTunnelProviderTest { ...@@ -62,6 +68,8 @@ public class PcepTunnelProviderTest {
62 tunnelProvider.tunnelProviderRegistry = registry; 68 tunnelProvider.tunnelProviderRegistry = registry;
63 tunnelProvider.pcepClientController = controller; 69 tunnelProvider.pcepClientController = controller;
64 tunnelProvider.controller = ctl; 70 tunnelProvider.controller = ctl;
71 + tunnelProvider.deviceService = deviceService;
72 + tunnelProvider.mastershipService = mastershipService;
65 tunnelProvider.cfgService = new ComponentConfigAdapter(); 73 tunnelProvider.cfgService = new ComponentConfigAdapter();
66 tunnelProvider.tunnelService = tunnelService; 74 tunnelProvider.tunnelService = tunnelService;
67 tunnelProvider.activate(); 75 tunnelProvider.activate();
...@@ -99,6 +107,8 @@ public class PcepTunnelProviderTest { ...@@ -99,6 +107,8 @@ public class PcepTunnelProviderTest {
99 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 107 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
100 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"), 108 new DefaultGroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
101 path, annotations); 109 path, annotations);
110 + controller.getClient(PccId.pccId(IpAddress.valueOf(0xC010101))).setCapability(
111 + new ClientCapability(true, true, true, true, true));
102 112
103 tunnelProvider.setupTunnel(tunnel, path); 113 tunnelProvider.setupTunnel(tunnel, path);
104 114
...@@ -109,6 +119,8 @@ public class PcepTunnelProviderTest { ...@@ -109,6 +119,8 @@ public class PcepTunnelProviderTest {
109 public void tearDown() throws IOException { 119 public void tearDown() throws IOException {
110 tunnelProvider.deactivate(); 120 tunnelProvider.deactivate();
111 tunnelProvider.controller = null; 121 tunnelProvider.controller = null;
122 + tunnelProvider.deviceService = null;
123 + tunnelProvider.mastershipService = null;
112 tunnelProvider.pcepClientController = null; 124 tunnelProvider.pcepClientController = null;
113 tunnelProvider.tunnelProviderRegistry = null; 125 tunnelProvider.tunnelProviderRegistry = null;
114 } 126 }
......
...@@ -47,6 +47,10 @@ import org.onosproject.net.Link; ...@@ -47,6 +47,10 @@ import org.onosproject.net.Link;
47 import org.onosproject.net.Path; 47 import org.onosproject.net.Path;
48 import org.onosproject.net.PortNumber; 48 import org.onosproject.net.PortNumber;
49 import org.onosproject.net.provider.ProviderId; 49 import org.onosproject.net.provider.ProviderId;
50 +import org.onosproject.pcep.controller.ClientCapability;
51 +import org.onosproject.pcep.controller.LspKey;
52 +import org.onosproject.pcep.controller.PccId;
53 +import org.onosproject.pcepio.protocol.PcepVersion;
50 import org.onosproject.pcepio.types.StatefulIPv4LspIdentifiersTlv; 54 import org.onosproject.pcepio.types.StatefulIPv4LspIdentifiersTlv;
51 55
52 import static org.onosproject.provider.pcep.tunnel.impl.LspType.WITH_SIGNALLING; 56 import static org.onosproject.provider.pcep.tunnel.impl.LspType.WITH_SIGNALLING;
...@@ -99,7 +103,7 @@ public class PcepUpdateTunnelProviderTest { ...@@ -99,7 +103,7 @@ public class PcepUpdateTunnelProviderTest {
99 103
100 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023)); 104 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
101 105
102 - ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023)); 106 + ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10024));
103 107
104 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst) 108 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
105 .type(Link.Type.DIRECT).build(); 109 .type(Link.Type.DIRECT).build();
...@@ -108,6 +112,8 @@ public class PcepUpdateTunnelProviderTest { ...@@ -108,6 +112,8 @@ public class PcepUpdateTunnelProviderTest {
108 path = new DefaultPath(pid, links, 20, EMPTY); 112 path = new DefaultPath(pid, links, 20, EMPTY);
109 113
110 Annotations annotations = DefaultAnnotations.builder() 114 Annotations annotations = DefaultAnnotations.builder()
115 + .set(PcepAnnotationKeys.PLSP_ID, "1")
116 + .set(PcepAnnotationKeys.LOCAL_LSP_ID, "1")
111 .set(LSP_SIG_TYPE, WITH_SIGNALLING.name()) 117 .set(LSP_SIG_TYPE, WITH_SIGNALLING.name())
112 .build(); 118 .build();
113 119
...@@ -124,6 +130,12 @@ public class PcepUpdateTunnelProviderTest { ...@@ -124,6 +130,12 @@ public class PcepUpdateTunnelProviderTest {
124 130
125 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 131 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
126 132
133 + PccId pccId = PccId.pccId(IpAddress.valueOf(0xD010101));
134 + PcepClientAdapter pc = new PcepClientAdapter();
135 + pc.init(pccId, PcepVersion.PCEP_1);
136 + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(1, (short) 1), true);
137 + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true));
138 +
127 tunnelProvider.updateTunnel(tunnel, path); 139 tunnelProvider.updateTunnel(tunnel, path);
128 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 140 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
129 } 141 }
...@@ -137,7 +149,7 @@ public class PcepUpdateTunnelProviderTest { ...@@ -137,7 +149,7 @@ public class PcepUpdateTunnelProviderTest {
137 Path path; 149 Path path;
138 ProviderId pid = new ProviderId("pcep", PROVIDER_ID); 150 ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
139 List<Link> links = new ArrayList<>(); 151 List<Link> links = new ArrayList<>();
140 - IpAddress srcIp = IpAddress.valueOf(0xC010103); 152 + IpAddress srcIp = IpAddress.valueOf(0xD010101);
141 IpElementId srcElementId = IpElementId.ipElement(srcIp); 153 IpElementId srcElementId = IpElementId.ipElement(srcIp);
142 154
143 IpAddress dstIp = IpAddress.valueOf(0xD010102); 155 IpAddress dstIp = IpAddress.valueOf(0xD010102);
...@@ -151,7 +163,7 @@ public class PcepUpdateTunnelProviderTest { ...@@ -151,7 +163,7 @@ public class PcepUpdateTunnelProviderTest {
151 163
152 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023)); 164 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
153 165
154 - ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023)); 166 + ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10024));
155 167
156 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst) 168 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
157 .type(Link.Type.DIRECT).build(); 169 .type(Link.Type.DIRECT).build();
...@@ -161,6 +173,8 @@ public class PcepUpdateTunnelProviderTest { ...@@ -161,6 +173,8 @@ public class PcepUpdateTunnelProviderTest {
161 173
162 Annotations annotations = DefaultAnnotations.builder() 174 Annotations annotations = DefaultAnnotations.builder()
163 .set(LSP_SIG_TYPE, WITH_SIGNALLING.name()) 175 .set(LSP_SIG_TYPE, WITH_SIGNALLING.name())
176 + .set(PcepAnnotationKeys.PLSP_ID, "1")
177 + .set(PcepAnnotationKeys.LOCAL_LSP_ID, "1")
164 .build(); 178 .build();
165 179
166 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 180 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
...@@ -176,6 +190,12 @@ public class PcepUpdateTunnelProviderTest { ...@@ -176,6 +190,12 @@ public class PcepUpdateTunnelProviderTest {
176 190
177 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 191 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
178 192
193 + PccId pccId = PccId.pccId(IpAddress.valueOf(0xD010101));
194 + PcepClientAdapter pc = new PcepClientAdapter();
195 + pc.init(pccId, PcepVersion.PCEP_1);
196 + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(1, (short) 1), true);
197 + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true));
198 +
179 tunnelProvider.updateTunnel(tunnel, path); 199 tunnelProvider.updateTunnel(tunnel, path);
180 assertThat(tunnelProvider.pcepTunnelApiMapper.checkFromTunnelRequestQueue(1), is(false)); 200 assertThat(tunnelProvider.pcepTunnelApiMapper.checkFromTunnelRequestQueue(1), is(false));
181 } 201 }
...@@ -203,7 +223,7 @@ public class PcepUpdateTunnelProviderTest { ...@@ -203,7 +223,7 @@ public class PcepUpdateTunnelProviderTest {
203 223
204 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023)); 224 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
205 225
206 - ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023)); 226 + ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10024));
207 227
208 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst) 228 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
209 .type(Link.Type.DIRECT).build(); 229 .type(Link.Type.DIRECT).build();
...@@ -213,6 +233,8 @@ public class PcepUpdateTunnelProviderTest { ...@@ -213,6 +233,8 @@ public class PcepUpdateTunnelProviderTest {
213 233
214 Annotations annotations = DefaultAnnotations.builder() 234 Annotations annotations = DefaultAnnotations.builder()
215 .set(LSP_SIG_TYPE, SR_WITHOUT_SIGNALLING.name()) 235 .set(LSP_SIG_TYPE, SR_WITHOUT_SIGNALLING.name())
236 + .set(PcepAnnotationKeys.PLSP_ID, "1")
237 + .set(PcepAnnotationKeys.LOCAL_LSP_ID, "1")
216 .build(); 238 .build();
217 239
218 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 240 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
...@@ -228,6 +250,12 @@ public class PcepUpdateTunnelProviderTest { ...@@ -228,6 +250,12 @@ public class PcepUpdateTunnelProviderTest {
228 250
229 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 251 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
230 252
253 + PccId pccId = PccId.pccId(IpAddress.valueOf(0xD010101));
254 + PcepClientAdapter pc = new PcepClientAdapter();
255 + pc.init(pccId, PcepVersion.PCEP_1);
256 + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(1, (short) 1), true);
257 + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true));
258 +
231 tunnelProvider.updateTunnel(tunnel, path); 259 tunnelProvider.updateTunnel(tunnel, path);
232 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 260 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
233 } 261 }
...@@ -255,7 +283,7 @@ public class PcepUpdateTunnelProviderTest { ...@@ -255,7 +283,7 @@ public class PcepUpdateTunnelProviderTest {
255 283
256 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023)); 284 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
257 285
258 - ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023)); 286 + ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10024));
259 287
260 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst) 288 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
261 .type(Link.Type.DIRECT).build(); 289 .type(Link.Type.DIRECT).build();
...@@ -265,6 +293,8 @@ public class PcepUpdateTunnelProviderTest { ...@@ -265,6 +293,8 @@ public class PcepUpdateTunnelProviderTest {
265 293
266 Annotations annotations = DefaultAnnotations.builder() 294 Annotations annotations = DefaultAnnotations.builder()
267 .set(LSP_SIG_TYPE, WITHOUT_SIGNALLING_AND_WITHOUT_SR.name()) 295 .set(LSP_SIG_TYPE, WITHOUT_SIGNALLING_AND_WITHOUT_SR.name())
296 + .set(PcepAnnotationKeys.PLSP_ID, "1")
297 + .set(PcepAnnotationKeys.LOCAL_LSP_ID, "1")
268 .build(); 298 .build();
269 299
270 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS, 300 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
...@@ -280,6 +310,12 @@ public class PcepUpdateTunnelProviderTest { ...@@ -280,6 +310,12 @@ public class PcepUpdateTunnelProviderTest {
280 310
281 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData); 311 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
282 312
313 + PccId pccId = PccId.pccId(IpAddress.valueOf(0xD010101));
314 + PcepClientAdapter pc = new PcepClientAdapter();
315 + pc.init(pccId, PcepVersion.PCEP_1);
316 + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(1, (short) 1), true);
317 + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true));
318 +
283 tunnelProvider.updateTunnel(tunnel, path); 319 tunnelProvider.updateTunnel(tunnel, path);
284 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue())); 320 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
285 } 321 }
......