Committed by
Gerrit Code Review
[ONOS-4167] Identify the impacted tunnels based on network events, notify to PCE…
… app and trigger MBB flow. Change-Id: I1766f4afbc0ee2f4c05c75cf788c91f9df8aaa9a
Showing
19 changed files
with
877 additions
and
90 deletions
... | @@ -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 | /** | ... | ... |
... | @@ -129,7 +129,7 @@ public class PceManagerTest { | ... | @@ -129,7 +129,7 @@ public class PceManagerTest { |
129 | private Device deviceD1, deviceD2, deviceD3, deviceD4; | 129 | private Device deviceD1, deviceD2, deviceD3, deviceD4; |
130 | private Device pcepDeviceD1, pcepDeviceD2, pcepDeviceD3, pcepDeviceD4; | 130 | private Device pcepDeviceD1, pcepDeviceD2, pcepDeviceD3, pcepDeviceD4; |
131 | private Link link1, link2, link3, link4; | 131 | private Link link1, link2, link3, link4; |
132 | - private static int flowsDownloaded; | 132 | + protected static int flowsDownloaded; |
133 | private TunnelListener tunnelListener; | 133 | private TunnelListener tunnelListener; |
134 | 134 | ||
135 | @Before | 135 | @Before | ... | ... |
... | @@ -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 | /** | ... | ... |
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 |
... | @@ -149,4 +149,20 @@ public interface PcepClient { | ... | @@ -149,4 +149,20 @@ public interface PcepClient { |
149 | * @param pccId PCEP client ID | 149 | * @param pccId PCEP client ID |
150 | */ | 150 | */ |
151 | void deleteNode(PccId pccId); | 151 | void deleteNode(PccId pccId); |
152 | + | ||
153 | + /** | ||
154 | + * Sets D flag for the given LSP and its LSP info. | ||
155 | + * | ||
156 | + * @param lspKey contains LSP info | ||
157 | + * @param dFlag delegation flag in LSP object | ||
158 | + */ | ||
159 | + void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag); | ||
160 | + | ||
161 | + /** | ||
162 | + * Returns delegation flag for the given LSP info. | ||
163 | + * | ||
164 | + * @param lspKey contains LSP info | ||
165 | + * @return delegation flag | ||
166 | + */ | ||
167 | + Boolean delegationInfo(LspKey lspKey); | ||
152 | } | 168 | } | ... | ... |
... | @@ -20,11 +20,13 @@ import java.net.InetSocketAddress; | ... | @@ -20,11 +20,13 @@ 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.List; | 22 | import java.util.List; |
23 | +import java.util.Map; | ||
23 | import java.util.concurrent.RejectedExecutionException; | 24 | import java.util.concurrent.RejectedExecutionException; |
24 | 25 | ||
25 | import org.jboss.netty.channel.Channel; | 26 | import org.jboss.netty.channel.Channel; |
26 | import org.onlab.packet.IpAddress; | 27 | import org.onlab.packet.IpAddress; |
27 | import org.onosproject.pcep.controller.ClientCapability; | 28 | import org.onosproject.pcep.controller.ClientCapability; |
29 | +import org.onosproject.pcep.controller.LspKey; | ||
28 | import org.onosproject.pcep.controller.PccId; | 30 | import org.onosproject.pcep.controller.PccId; |
29 | import org.onosproject.pcep.controller.PcepClient; | 31 | import org.onosproject.pcep.controller.PcepClient; |
30 | import org.onosproject.pcep.controller.PcepPacketStats; | 32 | import org.onosproject.pcep.controller.PcepPacketStats; |
... | @@ -67,6 +69,7 @@ public class PcepClientImpl implements PcepClientDriver { | ... | @@ -67,6 +69,7 @@ public class PcepClientImpl implements PcepClientDriver { |
67 | private byte deadTime; | 69 | private byte deadTime; |
68 | private byte sessionId; | 70 | private byte sessionId; |
69 | private PcepPacketStatsImpl pktStats; | 71 | private PcepPacketStatsImpl pktStats; |
72 | + private Map<LspKey, Boolean> lspDelegationInfo; | ||
70 | 73 | ||
71 | @Override | 74 | @Override |
72 | public void init(PccId pccId, PcepVersion pcepVersion, PcepPacketStats pktStats) { | 75 | public void init(PccId pccId, PcepVersion pcepVersion, PcepPacketStats pktStats) { |
... | @@ -241,6 +244,16 @@ public class PcepClientImpl implements PcepClientDriver { | ... | @@ -241,6 +244,16 @@ public class PcepClientImpl implements PcepClientDriver { |
241 | } | 244 | } |
242 | 245 | ||
243 | @Override | 246 | @Override |
247 | + public void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag) { | ||
248 | + lspDelegationInfo.put(lspKey, dFlag); | ||
249 | + } | ||
250 | + | ||
251 | + @Override | ||
252 | + public Boolean delegationInfo(LspKey lspKey) { | ||
253 | + return lspDelegationInfo.get(lspKey); | ||
254 | + } | ||
255 | + | ||
256 | + @Override | ||
244 | public boolean isOptical() { | 257 | public boolean isOptical() { |
245 | return false; | 258 | return false; |
246 | } | 259 | } | ... | ... |
protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepBandwidthObject.java
100755 → 100644
... | @@ -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 | } | ... | ... |
... | @@ -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) | ... | ... |
... | @@ -17,12 +17,15 @@ package org.onosproject.provider.pcep.topology.impl; | ... | @@ -17,12 +17,15 @@ package org.onosproject.provider.pcep.topology.impl; |
17 | 17 | ||
18 | import static org.junit.Assert.assertNotNull; | 18 | import static org.junit.Assert.assertNotNull; |
19 | 19 | ||
20 | +import java.util.HashMap; | ||
20 | import java.util.List; | 21 | import java.util.List; |
22 | +import java.util.Map; | ||
21 | import java.util.concurrent.RejectedExecutionException; | 23 | import java.util.concurrent.RejectedExecutionException; |
22 | 24 | ||
23 | import org.jboss.netty.channel.Channel; | 25 | import org.jboss.netty.channel.Channel; |
24 | import org.onosproject.pcep.controller.ClientCapability; | 26 | import org.onosproject.pcep.controller.ClientCapability; |
25 | import org.onosproject.pcep.controller.PccId; | 27 | import org.onosproject.pcep.controller.PccId; |
28 | +import org.onosproject.pcep.controller.LspKey; | ||
26 | import org.onosproject.pcep.controller.PcepClient; | 29 | import org.onosproject.pcep.controller.PcepClient; |
27 | import org.onosproject.pcep.controller.PcepSyncStatus; | 30 | import org.onosproject.pcep.controller.PcepSyncStatus; |
28 | import org.onosproject.pcepio.protocol.PcepFactories; | 31 | import org.onosproject.pcepio.protocol.PcepFactories; |
... | @@ -45,6 +48,7 @@ public class PcepClientAdapter implements PcepClient { | ... | @@ -45,6 +48,7 @@ public class PcepClientAdapter implements PcepClient { |
45 | private PcepVersion pcepVersion; | 48 | private PcepVersion pcepVersion; |
46 | private PcepSyncStatus lspDbSyncStatus; | 49 | private PcepSyncStatus lspDbSyncStatus; |
47 | private PcepSyncStatus labelDbSyncStatus; | 50 | private PcepSyncStatus labelDbSyncStatus; |
51 | + private Map<LspKey, Boolean> lspDelegationInfo = new HashMap<>(); | ||
48 | 52 | ||
49 | /** | 53 | /** |
50 | * Initialize instance with specified parameters. | 54 | * Initialize instance with specified parameters. |
... | @@ -147,4 +151,14 @@ public class PcepClientAdapter implements PcepClient { | ... | @@ -147,4 +151,14 @@ public class PcepClientAdapter implements PcepClient { |
147 | @Override | 151 | @Override |
148 | public void deleteNode(PccId pccId) { | 152 | public void deleteNode(PccId pccId) { |
149 | } | 153 | } |
154 | + | ||
155 | + @Override | ||
156 | + public void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag) { | ||
157 | + lspDelegationInfo.put(lspKey, dFlag); | ||
158 | + } | ||
159 | + | ||
160 | + @Override | ||
161 | + public Boolean delegationInfo(LspKey lspKey) { | ||
162 | + return lspDelegationInfo.get(lspKey); | ||
163 | + } | ||
150 | } | 164 | } | ... | ... |
... | @@ -36,6 +36,7 @@ import org.onosproject.incubator.net.tunnel.OpticalLogicId; | ... | @@ -36,6 +36,7 @@ import org.onosproject.incubator.net.tunnel.OpticalLogicId; |
36 | import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint; | 36 | import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint; |
37 | import org.onosproject.incubator.net.tunnel.Tunnel; | 37 | import org.onosproject.incubator.net.tunnel.Tunnel; |
38 | import org.onosproject.incubator.net.tunnel.Tunnel.State; | 38 | import org.onosproject.incubator.net.tunnel.Tunnel.State; |
39 | +import org.onosproject.incubator.net.tunnel.TunnelAdminService; | ||
39 | import org.onosproject.incubator.net.tunnel.TunnelDescription; | 40 | import org.onosproject.incubator.net.tunnel.TunnelDescription; |
40 | import org.onosproject.incubator.net.tunnel.TunnelEndPoint; | 41 | import org.onosproject.incubator.net.tunnel.TunnelEndPoint; |
41 | import org.onosproject.incubator.net.tunnel.TunnelId; | 42 | import org.onosproject.incubator.net.tunnel.TunnelId; |
... | @@ -45,11 +46,14 @@ import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry; | ... | @@ -45,11 +46,14 @@ import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry; |
45 | import org.onosproject.incubator.net.tunnel.TunnelProviderService; | 46 | import org.onosproject.incubator.net.tunnel.TunnelProviderService; |
46 | import org.onosproject.incubator.net.tunnel.TunnelService; | 47 | import org.onosproject.incubator.net.tunnel.TunnelService; |
47 | import org.onosproject.incubator.net.tunnel.TunnelStatistics; | 48 | import org.onosproject.incubator.net.tunnel.TunnelStatistics; |
49 | +import org.onosproject.mastership.MastershipService; | ||
50 | +import org.onosproject.net.AnnotationKeys; | ||
48 | import org.onosproject.net.ConnectPoint; | 51 | import org.onosproject.net.ConnectPoint; |
49 | import org.onosproject.net.DefaultAnnotations; | 52 | import org.onosproject.net.DefaultAnnotations; |
50 | import org.onosproject.net.DefaultAnnotations.Builder; | 53 | import org.onosproject.net.DefaultAnnotations.Builder; |
51 | import org.onosproject.net.DefaultLink; | 54 | import org.onosproject.net.DefaultLink; |
52 | import org.onosproject.net.DefaultPath; | 55 | import org.onosproject.net.DefaultPath; |
56 | +import org.onosproject.net.Device; | ||
53 | import org.onosproject.net.DeviceId; | 57 | import org.onosproject.net.DeviceId; |
54 | import org.onosproject.net.ElementId; | 58 | import org.onosproject.net.ElementId; |
55 | import org.onosproject.net.IpElementId; | 59 | import org.onosproject.net.IpElementId; |
... | @@ -57,6 +61,7 @@ import org.onosproject.net.Link; | ... | @@ -57,6 +61,7 @@ import org.onosproject.net.Link; |
57 | import org.onosproject.net.Path; | 61 | import org.onosproject.net.Path; |
58 | import org.onosproject.net.PortNumber; | 62 | import org.onosproject.net.PortNumber; |
59 | import org.onosproject.net.SparseAnnotations; | 63 | import org.onosproject.net.SparseAnnotations; |
64 | +import org.onosproject.net.device.DeviceService; | ||
60 | import org.onosproject.net.provider.AbstractProvider; | 65 | import org.onosproject.net.provider.AbstractProvider; |
61 | import org.onosproject.net.provider.ProviderId; | 66 | import org.onosproject.net.provider.ProviderId; |
62 | import org.onosproject.pcep.api.PcepController; | 67 | import org.onosproject.pcep.api.PcepController; |
... | @@ -68,6 +73,7 @@ import org.onosproject.pcep.api.PcepTunnel.PathState; | ... | @@ -68,6 +73,7 @@ import org.onosproject.pcep.api.PcepTunnel.PathState; |
68 | import org.onosproject.pcep.api.PcepTunnel.PathType; | 73 | import org.onosproject.pcep.api.PcepTunnel.PathType; |
69 | import org.onosproject.pcep.api.PcepTunnelListener; | 74 | import org.onosproject.pcep.api.PcepTunnelListener; |
70 | import org.onosproject.pcep.api.PcepTunnelStatistics; | 75 | import org.onosproject.pcep.api.PcepTunnelStatistics; |
76 | +import org.onosproject.pcep.controller.LspKey; | ||
71 | import org.onosproject.pcep.controller.PccId; | 77 | import org.onosproject.pcep.controller.PccId; |
72 | import org.onosproject.pcep.controller.PcepClient; | 78 | import org.onosproject.pcep.controller.PcepClient; |
73 | import org.onosproject.pcep.controller.PcepClientController; | 79 | import org.onosproject.pcep.controller.PcepClientController; |
... | @@ -109,6 +115,9 @@ import java.util.List; | ... | @@ -109,6 +115,9 @@ import java.util.List; |
109 | import java.util.ListIterator; | 115 | import java.util.ListIterator; |
110 | import java.util.Map; | 116 | import java.util.Map; |
111 | import java.util.Optional; | 117 | import java.util.Optional; |
118 | +import java.util.concurrent.Executors; | ||
119 | +import java.util.concurrent.ScheduledExecutorService; | ||
120 | +import java.util.concurrent.TimeUnit; | ||
112 | 121 | ||
113 | import static com.google.common.base.Preconditions.checkNotNull; | 122 | import static com.google.common.base.Preconditions.checkNotNull; |
114 | import static com.google.common.base.Strings.isNullOrEmpty; | 123 | import static com.google.common.base.Strings.isNullOrEmpty; |
... | @@ -126,6 +135,7 @@ import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.LSP_S | ... | @@ -126,6 +135,7 @@ import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.LSP_S |
126 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PCC_TUNNEL_ID; | 135 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PCC_TUNNEL_ID; |
127 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PLSP_ID; | 136 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PLSP_ID; |
128 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PCE_INIT; | 137 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PCE_INIT; |
138 | +import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.DELEGATE; | ||
129 | import static org.onosproject.provider.pcep.tunnel.impl.RequestType.CREATE; | 139 | import static org.onosproject.provider.pcep.tunnel.impl.RequestType.CREATE; |
130 | import static org.onosproject.provider.pcep.tunnel.impl.RequestType.DELETE; | 140 | import static org.onosproject.provider.pcep.tunnel.impl.RequestType.DELETE; |
131 | import static org.onosproject.provider.pcep.tunnel.impl.RequestType.LSP_STATE_RPT; | 141 | import static org.onosproject.provider.pcep.tunnel.impl.RequestType.LSP_STATE_RPT; |
... | @@ -148,6 +158,11 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -148,6 +158,11 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
148 | private static final long MIN_BANDWIDTH = 64; | 158 | private static final long MIN_BANDWIDTH = 64; |
149 | private static final String BANDWIDTH_UINT = "kbps"; | 159 | private static final String BANDWIDTH_UINT = "kbps"; |
150 | static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; | 160 | static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; |
161 | + public static final long IDENTIFIER_SET = 0x100000000L; | ||
162 | + public static final long SET = 0xFFFFFFFFL; | ||
163 | + private static final int DELAY = 2; | ||
164 | + private static final int WAIT_TIME = 5; | ||
165 | + public static final String LSRID = "lsrId"; | ||
151 | 166 | ||
152 | static final int POLL_INTERVAL = 10; | 167 | static final int POLL_INTERVAL = 10; |
153 | @Property(name = "tunnelStatsPollFrequency", intValue = POLL_INTERVAL, | 168 | @Property(name = "tunnelStatsPollFrequency", intValue = POLL_INTERVAL, |
... | @@ -171,6 +186,15 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -171,6 +186,15 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
171 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 186 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
172 | protected ComponentConfigService cfgService; | 187 | protected ComponentConfigService cfgService; |
173 | 188 | ||
189 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
190 | + protected TunnelAdminService tunnelAdminService; | ||
191 | + | ||
192 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
193 | + protected MastershipService mastershipService; | ||
194 | + | ||
195 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
196 | + protected DeviceService deviceService; | ||
197 | + | ||
174 | TunnelProviderService service; | 198 | TunnelProviderService service; |
175 | 199 | ||
176 | HashMap<String, TunnelId> tunnelMap = new HashMap<String, TunnelId>(); | 200 | HashMap<String, TunnelId> tunnelMap = new HashMap<String, TunnelId>(); |
... | @@ -263,7 +287,8 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -263,7 +287,8 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
263 | } | 287 | } |
264 | 288 | ||
265 | //If stateful and PC Initiation capability is not supported by client not sending Initiate msg | 289 | //If stateful and PC Initiation capability is not supported by client not sending Initiate msg |
266 | - if (pc.capability().pcInstantiationCapability()) { | 290 | + //Only master will initiate setup tunnel |
291 | + if (pc.capability().pcInstantiationCapability() && mastershipService.isLocalMaster(getDevice(pc.getPccId()))) { | ||
267 | pcepSetupTunnel(tunnel, path, pc); | 292 | pcepSetupTunnel(tunnel, path, pc); |
268 | } | 293 | } |
269 | } | 294 | } |
... | @@ -300,7 +325,10 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -300,7 +325,10 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
300 | return; | 325 | return; |
301 | } | 326 | } |
302 | 327 | ||
303 | - if (pc.capability().pcInstantiationCapability()) { | 328 | + //If stateful and PC Initiation capability is not supported by client not sending Initiate msg |
329 | + //Only master will initiate setup tunnel | ||
330 | + if (pc.capability().pcInstantiationCapability() | ||
331 | + && mastershipService.isLocalMaster(getDevice(pc.getPccId()))) { | ||
304 | pcepSetupTunnel(tunnel, path, pc); | 332 | pcepSetupTunnel(tunnel, path, pc); |
305 | } | 333 | } |
306 | } | 334 | } |
... | @@ -327,7 +355,9 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -327,7 +355,9 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
327 | return; | 355 | return; |
328 | } | 356 | } |
329 | 357 | ||
330 | - if (pc.capability().pcInstantiationCapability()) { | 358 | + //Only master will release tunnel |
359 | + if (pc.capability().pcInstantiationCapability() | ||
360 | + && mastershipService.isLocalMaster(getDevice(pc.getPccId()))) { | ||
331 | pcepReleaseTunnel(tunnel, pc); | 361 | pcepReleaseTunnel(tunnel, pc); |
332 | } | 362 | } |
333 | } | 363 | } |
... | @@ -358,7 +388,9 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -358,7 +388,9 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
358 | return; | 388 | return; |
359 | } | 389 | } |
360 | 390 | ||
361 | - if (pc.capability().pcInstantiationCapability()) { | 391 | + //Only master will release tunnel |
392 | + if (pc.capability().pcInstantiationCapability() | ||
393 | + && mastershipService.isLocalMaster(getDevice(pc.getPccId()))) { | ||
362 | pcepReleaseTunnel(tunnel, pc); | 394 | pcepReleaseTunnel(tunnel, pc); |
363 | } | 395 | } |
364 | } | 396 | } |
... | @@ -384,7 +416,12 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -384,7 +416,12 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
384 | return; | 416 | return; |
385 | } | 417 | } |
386 | 418 | ||
387 | - if (pc.capability().statefulPceCapability()) { | 419 | + // If delegation flag is set then only send update message[means delegated PCE can send update msg for that |
420 | + // LSP].If annotation is null D flag is not set else it is set. | ||
421 | + if (pc.capability().statefulPceCapability() | ||
422 | + && pc.delegationInfo( | ||
423 | + new LspKey(Integer.valueOf(tunnel.annotations().value(PLSP_ID)), Short.valueOf(tunnel | ||
424 | + .annotations().value(LOCAL_LSP_ID)))) != null) { | ||
388 | pcepUpdateTunnel(tunnel, path, pc); | 425 | pcepUpdateTunnel(tunnel, path, pc); |
389 | } | 426 | } |
390 | } | 427 | } |
... | @@ -416,7 +453,12 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -416,7 +453,12 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
416 | return; | 453 | return; |
417 | } | 454 | } |
418 | 455 | ||
419 | - if (pc.capability().statefulPceCapability()) { | 456 | + // If delegation flag is set then only send update message[means delegated PCE can send update msg for that |
457 | + // LSP].If annotation is null D flag is not set else it is set. | ||
458 | + if (pc.capability().statefulPceCapability() | ||
459 | + && pc.delegationInfo( | ||
460 | + new LspKey(Integer.valueOf(tunnel.annotations().value(PLSP_ID)), Short.valueOf(tunnel | ||
461 | + .annotations().value(LOCAL_LSP_ID)))) != null) { | ||
420 | pcepUpdateTunnel(tunnel, path, pc); | 462 | pcepUpdateTunnel(tunnel, path, pc); |
421 | } | 463 | } |
422 | } | 464 | } |
... | @@ -480,6 +522,43 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -480,6 +522,43 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
480 | return tunnelId; | 522 | return tunnelId; |
481 | } | 523 | } |
482 | 524 | ||
525 | + private void tunnelUpdated(Tunnel tunnel, Path path) { | ||
526 | + handleTunnelUpdate(tunnel, path); | ||
527 | + } | ||
528 | + | ||
529 | + //Handles tunnel updated using tunnel admin service[specially to update annotations]. | ||
530 | + private void handleTunnelUpdate(Tunnel tunnel, Path path) { | ||
531 | + | ||
532 | + if (tunnel.type() == MPLS) { | ||
533 | + pcepTunnelApiMapper.removeFromCoreTunnelRequestQueue(tunnel.tunnelId()); | ||
534 | + | ||
535 | + tunnelAdminService.updateTunnel(tunnel, path); | ||
536 | + | ||
537 | + return; | ||
538 | + } | ||
539 | + | ||
540 | + Tunnel tunnelOld = tunnelQueryById(tunnel.tunnelId()); | ||
541 | + if (tunnelOld.type() != Tunnel.Type.VLAN) { | ||
542 | + error("Illegal tunnel type. Only support VLAN tunnel update."); | ||
543 | + return; | ||
544 | + } | ||
545 | + | ||
546 | + long bandwidth = Long | ||
547 | + .parseLong(tunnel.annotations().value("bandwidth")); | ||
548 | + if (bandwidth < MIN_BANDWIDTH || bandwidth > MAX_BANDWIDTH) { | ||
549 | + error("Update failed, invalid bandwidth."); | ||
550 | + return; | ||
551 | + } | ||
552 | + String pcepTunnelId = getPcepTunnelKey(tunnel.tunnelId()); | ||
553 | + | ||
554 | + checkNotNull(pcepTunnelId, "Invalid tunnel id"); | ||
555 | + if (!controller.updateTunnelBandwidth(pcepTunnelId, bandwidth)) { | ||
556 | + error("Update failed,maybe invalid bandwidth."); | ||
557 | + return; | ||
558 | + } | ||
559 | + tunnelAdminService.updateTunnel(tunnel, path); | ||
560 | + } | ||
561 | + | ||
483 | @Override | 562 | @Override |
484 | public void tunnelRemoved(TunnelDescription tunnel) { | 563 | public void tunnelRemoved(TunnelDescription tunnel) { |
485 | if (tunnel.type() == MPLS) { | 564 | if (tunnel.type() == MPLS) { |
... | @@ -1226,27 +1305,19 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1226,27 +1305,19 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1226 | } | 1305 | } |
1227 | } | 1306 | } |
1228 | 1307 | ||
1229 | - private void handleRptWithoutSrpId(PcepStateReport stateRpt, PccId pccId, PcepSyncStatus syncStatus) { | 1308 | + private SparseAnnotations getAnnotations(PcepLspObject lspObj, StatefulIPv4LspIdentifiersTlv ipv4LspIdenTlv, |
1230 | - ProviderId providerId = new ProviderId("pcep", PROVIDER_ID); | 1309 | + float bandwidth, LspType lspType) { |
1231 | - PcepStateReport.PcepMsgPath msgPath = stateRpt.getMsgPath(); | 1310 | + SparseAnnotations annotations = DefaultAnnotations.builder() |
1232 | - checkNotNull(msgPath); | 1311 | + .set(BANDWIDTH, (new Float(bandwidth)).toString()).set(LSP_SIG_TYPE, lspType.name()) |
1233 | - PcepEroObject eroObj = msgPath.getEroObject(); | 1312 | + .set(PCC_TUNNEL_ID, String.valueOf(ipv4LspIdenTlv.getTunnelId())) |
1234 | - if (eroObj == null) { | 1313 | + .set(PLSP_ID, String.valueOf(lspObj.getPlspId())) |
1235 | - log.error("ERO object is null in report message."); | 1314 | + .set(LOCAL_LSP_ID, String.valueOf(ipv4LspIdenTlv.getLspId())) |
1236 | - return; | 1315 | + .set(DELEGATE, String.valueOf(lspObj.getDFlag())) |
1237 | - } | 1316 | + .build(); |
1238 | - Path path = buildPathFromEroObj(eroObj, providerId); | 1317 | + return annotations; |
1239 | - | ||
1240 | - int bandwidth = 0; | ||
1241 | - if (msgPath.getBandwidthObject() != null) { | ||
1242 | - bandwidth = msgPath.getBandwidthObject().getBandwidth(); | ||
1243 | } | 1318 | } |
1244 | 1319 | ||
1245 | - /* | 1320 | + private LspType getLspType(PcepSrpObject srpObj) { |
1246 | - * To carry PST TLV, SRP object can be present with value 0 even when PCRpt is not in response to any action | ||
1247 | - * from PCE. | ||
1248 | - */ | ||
1249 | - PcepSrpObject srpObj = stateRpt.getSrpObject(); | ||
1250 | LspType lspType = WITH_SIGNALLING; | 1321 | LspType lspType = WITH_SIGNALLING; |
1251 | 1322 | ||
1252 | if (null != srpObj) { | 1323 | if (null != srpObj) { |
... | @@ -1266,6 +1337,31 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1266,6 +1337,31 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1266 | } | 1337 | } |
1267 | } | 1338 | } |
1268 | } | 1339 | } |
1340 | + return lspType; | ||
1341 | + } | ||
1342 | + | ||
1343 | + private void handleRptWithoutSrpId(PcepStateReport stateRpt, PccId pccId, PcepSyncStatus syncStatus) { | ||
1344 | + ProviderId providerId = new ProviderId("pcep", PROVIDER_ID); | ||
1345 | + PcepStateReport.PcepMsgPath msgPath = stateRpt.getMsgPath(); | ||
1346 | + checkNotNull(msgPath); | ||
1347 | + PcepEroObject eroObj = msgPath.getEroObject(); | ||
1348 | + if (eroObj == null) { | ||
1349 | + log.error("ERO object is null in report message."); | ||
1350 | + return; | ||
1351 | + } | ||
1352 | + Path path = buildPathFromEroObj(eroObj, providerId); | ||
1353 | + | ||
1354 | + float bandwidth = 0; | ||
1355 | + if (msgPath.getBandwidthObject() != null) { | ||
1356 | + bandwidth = msgPath.getBandwidthObject().getBandwidth(); | ||
1357 | + } | ||
1358 | + | ||
1359 | + /* | ||
1360 | + * To carry PST TLV, SRP object can be present with value 0 even when PCRpt is not in response to any action | ||
1361 | + * from PCE. | ||
1362 | + */ | ||
1363 | + PcepSrpObject srpObj = stateRpt.getSrpObject(); | ||
1364 | + LspType lspType = getLspType(srpObj); | ||
1269 | 1365 | ||
1270 | PcepLspObject lspObj = stateRpt.getLspObject(); | 1366 | PcepLspObject lspObj = stateRpt.getLspObject(); |
1271 | ListIterator<PcepValueType> listTlvIterator = lspObj.getOptionalTlv().listIterator(); | 1367 | ListIterator<PcepValueType> listTlvIterator = lspObj.getOptionalTlv().listIterator(); |
... | @@ -1287,7 +1383,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1287,7 +1383,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1287 | break; | 1383 | break; |
1288 | } | 1384 | } |
1289 | } | 1385 | } |
1290 | - | ||
1291 | /* | 1386 | /* |
1292 | * Draft says: The LSP-IDENTIFIERS TLV MUST be included in the LSP object in PCRpt messages for | 1387 | * Draft says: The LSP-IDENTIFIERS TLV MUST be included in the LSP object in PCRpt messages for |
1293 | * RSVP-signaled LSPs. For ONOS PCECC implementation, it is mandatory. | 1388 | * RSVP-signaled LSPs. For ONOS PCECC implementation, it is mandatory. |
... | @@ -1303,6 +1398,14 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1303,6 +1398,14 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1303 | .ipTunnelPoint(IpAddress.valueOf(ipv4LspIdenTlv.getIpv4EgressAddress())); | 1398 | .ipTunnelPoint(IpAddress.valueOf(ipv4LspIdenTlv.getIpv4EgressAddress())); |
1304 | Collection<Tunnel> tunnelQueryResult = tunnelService.queryTunnel(tunnelEndPointSrc, tunnelEndPointDst); | 1399 | Collection<Tunnel> tunnelQueryResult = tunnelService.queryTunnel(tunnelEndPointSrc, tunnelEndPointDst); |
1305 | 1400 | ||
1401 | + // Store delegation flag info and that LSP info because only delegated PCE sends update message | ||
1402 | + // Storing if D flag is set, if not dont store. while checking whether delegation if annotation for D flag | ||
1403 | + // not present then non-delegated , if present it is delegated. | ||
1404 | + if (lspObj.getDFlag()) { | ||
1405 | + pcepClientController.getClient(pccId).setLspAndDelegationInfo( | ||
1406 | + new LspKey(lspObj.getPlspId(), ipv4LspIdenTlv.getLspId()), lspObj.getDFlag()); | ||
1407 | + } | ||
1408 | + | ||
1306 | Tunnel tunnel = null; | 1409 | Tunnel tunnel = null; |
1307 | // Asynchronous status change message from PCC for LSP reported earlier. | 1410 | // Asynchronous status change message from PCC for LSP reported earlier. |
1308 | for (Tunnel tunnelObj : tunnelQueryResult) { | 1411 | for (Tunnel tunnelObj : tunnelQueryResult) { |
... | @@ -1321,7 +1424,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1321,7 +1424,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1321 | } | 1424 | } |
1322 | continue; | 1425 | continue; |
1323 | } | 1426 | } |
1324 | - | ||
1325 | if ((Integer.valueOf(tunnelObj.annotations().value(PLSP_ID)) == lspObj.getPlspId()) && (Integer | 1427 | if ((Integer.valueOf(tunnelObj.annotations().value(PLSP_ID)) == lspObj.getPlspId()) && (Integer |
1326 | .valueOf(tunnelObj.annotations().value(LOCAL_LSP_ID)) == ipv4LspIdenTlv.getLspId())) { | 1428 | .valueOf(tunnelObj.annotations().value(LOCAL_LSP_ID)) == ipv4LspIdenTlv.getLspId())) { |
1327 | tunnel = tunnelObj; | 1429 | tunnel = tunnelObj; |
... | @@ -1330,6 +1432,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1330,6 +1432,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1330 | } | 1432 | } |
1331 | 1433 | ||
1332 | DefaultTunnelDescription td; | 1434 | DefaultTunnelDescription td; |
1435 | + SparseAnnotations annotations = null; | ||
1333 | State tunnelState = PcepLspStatus.getTunnelStatusFromLspStatus(PcepLspStatus.values()[lspObj.getOFlag()]); | 1436 | State tunnelState = PcepLspStatus.getTunnelStatusFromLspStatus(PcepLspStatus.values()[lspObj.getOFlag()]); |
1334 | if (tunnel == null) { | 1437 | if (tunnel == null) { |
1335 | if (lspObj.getRFlag()) { | 1438 | if (lspObj.getRFlag()) { |
... | @@ -1345,21 +1448,15 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1345,21 +1448,15 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1345 | * While in sync, if PCRpt is received for PCE init LSP and PCE doesn't have entry, mark to send | 1448 | * While in sync, if PCRpt is received for PCE init LSP and PCE doesn't have entry, mark to send |
1346 | * delete message on end of sync. | 1449 | * delete message on end of sync. |
1347 | */ | 1450 | */ |
1348 | - SparseAnnotations annotations = DefaultAnnotations.builder() | 1451 | + annotations = getAnnotations(lspObj, ipv4LspIdenTlv, bandwidth, lspType); |
1349 | - .set(BANDWIDTH, (new Integer(bandwidth)).toString()) | ||
1350 | - .set(LSP_SIG_TYPE, lspType.name()) | ||
1351 | - .set(PCC_TUNNEL_ID, String.valueOf(ipv4LspIdenTlv.getTunnelId())) | ||
1352 | - .set(PLSP_ID, String.valueOf(lspObj.getPlspId())) | ||
1353 | - .set(LOCAL_LSP_ID, String.valueOf(ipv4LspIdenTlv.getLspId())).build(); | ||
1354 | 1452 | ||
1355 | - // Gnenerate tunnel id for the temporary tunnel. | 1453 | + // Generate tunnel id for the temporary tunnel. |
1356 | String onosTunnelId = "PCC" + String.valueOf(ipv4LspIdenTlv.getTunnelId()); | 1454 | String onosTunnelId = "PCC" + String.valueOf(ipv4LspIdenTlv.getTunnelId()); |
1357 | Tunnel tunnelToBeDeleted = new DefaultTunnel(providerId, tunnelEndPointSrc, tunnelEndPointDst, MPLS, | 1455 | Tunnel tunnelToBeDeleted = new DefaultTunnel(providerId, tunnelEndPointSrc, tunnelEndPointDst, MPLS, |
1358 | new DefaultGroupId(0), TunnelId.valueOf(onosTunnelId), | 1456 | new DefaultGroupId(0), TunnelId.valueOf(onosTunnelId), |
1359 | TunnelName.tunnelName(String | 1457 | TunnelName.tunnelName(String |
1360 | .valueOf(pathNameTlv.getValue())), | 1458 | .valueOf(pathNameTlv.getValue())), |
1361 | path, annotations); | 1459 | path, annotations); |
1362 | - | ||
1363 | /* | 1460 | /* |
1364 | * Need to send PCInitiate delete msg for a tunnel which does not exist at PCE. For that some dummy | 1461 | * Need to send PCInitiate delete msg for a tunnel which does not exist at PCE. For that some dummy |
1365 | * data-structures need to be populated. | 1462 | * data-structures need to be populated. |
... | @@ -1378,31 +1475,61 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1378,31 +1475,61 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1378 | syncCompleteDeleteList.put(pccId.ipAddress(), tunnelToBeDeletedList); | 1475 | syncCompleteDeleteList.put(pccId.ipAddress(), tunnelToBeDeletedList); |
1379 | return; | 1476 | return; |
1380 | } | 1477 | } |
1478 | + DeviceId deviceId = getDevice(pccId); | ||
1479 | + if (deviceId == null) { | ||
1480 | + log.error("Ingress deviceId not found"); | ||
1481 | + return; | ||
1482 | + } | ||
1483 | + annotations = getAnnotations(lspObj, ipv4LspIdenTlv, bandwidth, lspType); | ||
1381 | 1484 | ||
1382 | - SparseAnnotations annotations = DefaultAnnotations.builder() | 1485 | + td = new DefaultTunnelDescription(null, tunnelEndPointSrc, tunnelEndPointDst, MPLS, new DefaultGroupId( |
1383 | - .set(BANDWIDTH, (new Integer(bandwidth)).toString()) | 1486 | + 0), providerId, TunnelName.tunnelName(new String(pathNameTlv.getValue())), path, |
1384 | - .set(LSP_SIG_TYPE, lspType.name()) | ||
1385 | - .set(PCC_TUNNEL_ID, String.valueOf(ipv4LspIdenTlv.getTunnelId())) | ||
1386 | - .set(PLSP_ID, String.valueOf(lspObj.getPlspId())) | ||
1387 | - .set(LOCAL_LSP_ID, String.valueOf(ipv4LspIdenTlv.getLspId())).build(); | ||
1388 | - | ||
1389 | - td = new DefaultTunnelDescription(null, tunnelEndPointSrc, tunnelEndPointDst, MPLS, | ||
1390 | - new DefaultGroupId(0), providerId, | ||
1391 | - TunnelName.tunnelName(String.valueOf(pathNameTlv.getValue())), path, | ||
1392 | annotations); | 1487 | annotations); |
1393 | - | 1488 | + /* |
1489 | + * If ONOS instance is master for PCC then set delegated flag as annotation and add the tunnel to store. | ||
1490 | + * Because all LSPs need not be delegated, hence mastership for the PCC is confirmed whereas not the | ||
1491 | + * delegation set to all LSPs.If ONOS is not the master for that PCC then check if D flag is set, if yes | ||
1492 | + * wait for 2 seconds [while master has added the tunnel to the store] then update the tunnel. Tunnel is | ||
1493 | + * updated because in case of resilency only delegated LSPs are recomputed and only delegated PCE can | ||
1494 | + * send update message to that client. | ||
1495 | + * | ||
1496 | + * 1)Master can 1st get the Rpt message | ||
1497 | + * a)Master adds the tunnel into core. | ||
1498 | + * b)If a non-master for ingress gets Rpt message with D flag set[as delegation owner] | ||
1499 | + * after master, then runs timer then update the tunnel with D flag set. | ||
1500 | + * 2)Non-Master can 1st get the Rpt message | ||
1501 | + * a)Non-Master runs the timer check for the tunnel then updates the tunnel with D flag set | ||
1502 | + * b)Master would have got the message while the non-master running timer, hence master adds | ||
1503 | + * tunnel to core | ||
1504 | + * | ||
1505 | + * In general always master adds the tunnel to the core | ||
1506 | + * while delegated owner [master or non-master with D flag set] always updates the tunnel running timer | ||
1507 | + */ | ||
1508 | + if (mastershipService.isLocalMaster(deviceId)) { | ||
1394 | TunnelId tId = tunnelAdded(td, tunnelState); | 1509 | TunnelId tId = tunnelAdded(td, tunnelState); |
1395 | Tunnel tunnelInserted = new DefaultTunnel(providerId, tunnelEndPointSrc, tunnelEndPointDst, MPLS, | 1510 | Tunnel tunnelInserted = new DefaultTunnel(providerId, tunnelEndPointSrc, tunnelEndPointDst, MPLS, |
1396 | - tunnelState, new DefaultGroupId(0), tId, | 1511 | + tunnelState, new DefaultGroupId(0), tId, TunnelName.tunnelName(String.valueOf(pathNameTlv |
1397 | - TunnelName.tunnelName(String.valueOf(pathNameTlv.getValue())), | 1512 | + .getValue())), path, annotations); |
1398 | - path, annotations); | ||
1399 | 1513 | ||
1400 | PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnelInserted, path, LSP_STATE_RPT); | 1514 | PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnelInserted, path, LSP_STATE_RPT); |
1401 | pcepTunnelData.setStatefulIpv4IndentifierTlv(ipv4LspIdenTlv); | 1515 | pcepTunnelData.setStatefulIpv4IndentifierTlv(ipv4LspIdenTlv); |
1402 | pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData); | 1516 | pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData); |
1517 | + } else if (!mastershipService.isLocalMaster(deviceId) && lspObj.getDFlag()) { | ||
1518 | + //Start timer then update the tunnel with D flag | ||
1519 | + tunnelUpdateInDelegatedCase(pccId, annotations, td, providerId); | ||
1520 | + } | ||
1403 | return; | 1521 | return; |
1404 | } | 1522 | } |
1405 | 1523 | ||
1524 | + //delegated owner will update can be a master or non-master | ||
1525 | + if (lspObj.getDFlag()) { | ||
1526 | + annotations = getAnnotations(lspObj, ipv4LspIdenTlv, bandwidth, lspType); | ||
1527 | + td = new DefaultTunnelDescription(null, tunnelEndPointSrc, tunnelEndPointDst, MPLS, new DefaultGroupId( | ||
1528 | + 0), providerId, TunnelName.tunnelName(new String(pathNameTlv.getValue())), path, | ||
1529 | + annotations); | ||
1530 | + tunnelUpdateInDelegatedCase(pccId, annotations, td, providerId); | ||
1531 | + } | ||
1532 | + | ||
1406 | if ((syncStatus == IN_SYNC) && (lspObj.getCFlag()) && (tunnelState != tunnel.state())) { | 1533 | if ((syncStatus == IN_SYNC) && (lspObj.getCFlag()) && (tunnelState != tunnel.state())) { |
1407 | // Mark to send PCUpd msg with state known at PCE. | 1534 | // Mark to send PCUpd msg with state known at PCE. |
1408 | List<Tunnel> tunnelToBeUpdateList = syncCompleteUpdateList.get(pccId.ipAddress()); | 1535 | List<Tunnel> tunnelToBeUpdateList = syncCompleteUpdateList.get(pccId.ipAddress()); |
... | @@ -1410,12 +1537,15 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1410,12 +1537,15 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1410 | syncCompleteUpdateList.put(pccId.ipAddress(), tunnelToBeUpdateList); | 1537 | syncCompleteUpdateList.put(pccId.ipAddress(), tunnelToBeUpdateList); |
1411 | return; | 1538 | return; |
1412 | } | 1539 | } |
1540 | + removeOrUpdatetunnel(tunnel, pccId, lspObj, providerId, syncStatus, tunnelState); | ||
1541 | + return; | ||
1542 | + } | ||
1413 | 1543 | ||
1414 | - td = new DefaultTunnelDescription(tunnel.tunnelId(), tunnel.src(), tunnel.dst(), | 1544 | + private void removeOrUpdatetunnel(Tunnel tunnel, PccId pccId, PcepLspObject lspObj, ProviderId providerId, |
1415 | - tunnel.type(), tunnel.groupId(), providerId, | 1545 | + PcepSyncStatus syncStatus, State tunnelState) { |
1416 | - tunnel.tunnelName(), tunnel.path(), | 1546 | + DefaultTunnelDescription td = new DefaultTunnelDescription(tunnel.tunnelId(), tunnel.src(), tunnel.dst(), |
1547 | + tunnel.type(), tunnel.groupId(), providerId, tunnel.tunnelName(), tunnel.path(), | ||
1417 | (SparseAnnotations) tunnel.annotations()); | 1548 | (SparseAnnotations) tunnel.annotations()); |
1418 | - | ||
1419 | if (lspObj.getRFlag()) { | 1549 | if (lspObj.getRFlag()) { |
1420 | tunnelRemoved(td); | 1550 | tunnelRemoved(td); |
1421 | } else { | 1551 | } else { |
... | @@ -1424,7 +1554,21 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1424,7 +1554,21 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1424 | } | 1554 | } |
1425 | tunnelUpdated(td, tunnelState); | 1555 | tunnelUpdated(td, tunnelState); |
1426 | } | 1556 | } |
1427 | - return; | 1557 | + } |
1558 | + | ||
1559 | + private void tunnelUpdateInDelegatedCase(PccId pccId, SparseAnnotations annotations, | ||
1560 | + DefaultTunnelDescription td, ProviderId providerId) { | ||
1561 | + //Wait for 2sec then query tunnel based on ingress PLSP-ID and local LSP-ID | ||
1562 | + | ||
1563 | + /* | ||
1564 | + * If ONOS is not the master for that PCC then check if D flag is set, if yes wait [while | ||
1565 | + * master has added the tunnel to the store] then update the tunnel. | ||
1566 | + */ | ||
1567 | + ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); | ||
1568 | + | ||
1569 | + // Thread is started after 2 seconds first time later periodically after 2 seconds to update the tunnel | ||
1570 | + executor.scheduleAtFixedRate(new UpdateDelegation(td, providerId, annotations, pccId, | ||
1571 | + executor), DELAY, DELAY, TimeUnit.SECONDS); | ||
1428 | } | 1572 | } |
1429 | 1573 | ||
1430 | /** | 1574 | /** |
... | @@ -1578,4 +1722,83 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1578,4 +1722,83 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
1578 | pcepClientController.getClient(pccId).setLabelDbSyncStatus(IN_SYNC); | 1722 | pcepClientController.getClient(pccId).setLabelDbSyncStatus(IN_SYNC); |
1579 | } | 1723 | } |
1580 | } | 1724 | } |
1725 | + | ||
1726 | + private DeviceId getDevice(PccId pccId) { | ||
1727 | + // Get lsrId of the PCEP client from the PCC ID. Session info is based on lsrID. | ||
1728 | + IpAddress lsrId = pccId.ipAddress(); | ||
1729 | + String lsrIdentifier = String.valueOf(lsrId); | ||
1730 | + | ||
1731 | + // Find PCC deviceID from lsrId stored as annotations | ||
1732 | + Iterable<Device> devices = deviceService.getAvailableDevices(); | ||
1733 | + for (Device dev : devices) { | ||
1734 | + if (dev.annotations().value(AnnotationKeys.TYPE).equals("L3") | ||
1735 | + && dev.annotations().value(LSRID).equals(lsrIdentifier)) { | ||
1736 | + return dev.id(); | ||
1737 | + } | ||
1738 | + } | ||
1739 | + return null; | ||
1740 | + } | ||
1741 | + | ||
1742 | + /** | ||
1743 | + * Updates the tunnel with updated tunnel annotation after a delay of two seconds and checks it till | ||
1744 | + * tunnel is found. | ||
1745 | + */ | ||
1746 | + private class UpdateDelegation implements Runnable { | ||
1747 | + DefaultTunnelDescription td; | ||
1748 | + ProviderId providerId; | ||
1749 | + SparseAnnotations annotations; | ||
1750 | + PccId pccId; | ||
1751 | + ScheduledExecutorService executor; | ||
1752 | + | ||
1753 | + /** | ||
1754 | + * Creates an instance of UpdateDelegation. | ||
1755 | + * | ||
1756 | + * @param td tunnel description | ||
1757 | + * @param providerId provider id | ||
1758 | + * @param annotations tunnel annotations | ||
1759 | + * @param pccId PCEP client id | ||
1760 | + * @param executor service of delegated owner | ||
1761 | + */ | ||
1762 | + public UpdateDelegation(DefaultTunnelDescription td, ProviderId providerId, SparseAnnotations annotations, | ||
1763 | + PccId pccId, ScheduledExecutorService executor) { | ||
1764 | + this.td = td; | ||
1765 | + this.providerId = providerId; | ||
1766 | + this.annotations = annotations; | ||
1767 | + this.pccId = pccId; | ||
1768 | + this.executor = executor; | ||
1769 | + } | ||
1770 | + | ||
1771 | + //Temporary using annotations later will use projection/network config service | ||
1772 | + @Override | ||
1773 | + public void run() { | ||
1774 | + Collection<Tunnel> tunnelQueryResult = tunnelService.queryTunnel(td.src(), td.dst()); | ||
1775 | + TunnelId tempTunnelId = null; | ||
1776 | + for (Tunnel t : tunnelQueryResult) { | ||
1777 | + if (t.annotations().value(LOCAL_LSP_ID) == null || t.annotations().value(PLSP_ID) == null) { | ||
1778 | + continue; | ||
1779 | + } | ||
1780 | + | ||
1781 | + if (t.annotations().value(LOCAL_LSP_ID).equals(td.annotations().value(LOCAL_LSP_ID)) | ||
1782 | + && t.annotations().value(PLSP_ID).equals(td.annotations().value(PLSP_ID)) | ||
1783 | + && ((IpTunnelEndPoint) t.src()).ip().equals(pccId.id())) { | ||
1784 | + tempTunnelId = t.tunnelId(); | ||
1785 | + break; | ||
1786 | + } | ||
1787 | + } | ||
1788 | + | ||
1789 | + //If tunnel is found update the tunnel and shutdown the thread otherwise thread will be executing | ||
1790 | + //periodically | ||
1791 | + if (tempTunnelId != null) { | ||
1792 | + Tunnel tunnel = new DefaultTunnel(providerId, td.src(), td.dst(), MPLS, new DefaultGroupId(0), | ||
1793 | + tempTunnelId, td.tunnelName(), td.path(), annotations); | ||
1794 | + tunnelUpdated(tunnel, td.path()); | ||
1795 | + executor.shutdown(); | ||
1796 | + try { | ||
1797 | + executor.awaitTermination(WAIT_TIME, TimeUnit.SECONDS); | ||
1798 | + } catch (InterruptedException e) { | ||
1799 | + log.error("updating delegation failed"); | ||
1800 | + } | ||
1801 | + } | ||
1802 | + } | ||
1803 | + } | ||
1581 | } | 1804 | } | ... | ... |
providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java
... | @@ -17,11 +17,14 @@ package org.onosproject.provider.pcep.tunnel.impl; | ... | @@ -17,11 +17,14 @@ 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; | ||
20 | import java.util.List; | 21 | import java.util.List; |
22 | +import java.util.Map; | ||
21 | import java.util.concurrent.RejectedExecutionException; | 23 | import java.util.concurrent.RejectedExecutionException; |
22 | 24 | ||
23 | import org.jboss.netty.channel.Channel; | 25 | import org.jboss.netty.channel.Channel; |
24 | import org.onosproject.pcep.controller.ClientCapability; | 26 | import org.onosproject.pcep.controller.ClientCapability; |
27 | +import org.onosproject.pcep.controller.LspKey; | ||
25 | import org.onosproject.pcep.controller.PccId; | 28 | import org.onosproject.pcep.controller.PccId; |
26 | import org.onosproject.pcep.controller.PcepClient; | 29 | import org.onosproject.pcep.controller.PcepClient; |
27 | import org.onosproject.pcep.controller.PcepSyncStatus; | 30 | import org.onosproject.pcep.controller.PcepSyncStatus; |
... | @@ -45,6 +48,7 @@ public class PcepClientAdapter implements PcepClient { | ... | @@ -45,6 +48,7 @@ public class PcepClientAdapter implements PcepClient { |
45 | private PcepVersion pcepVersion; | 48 | private PcepVersion pcepVersion; |
46 | private PcepSyncStatus lspDbSyncStatus; | 49 | private PcepSyncStatus lspDbSyncStatus; |
47 | private PcepSyncStatus labelDbSyncStatus; | 50 | private PcepSyncStatus labelDbSyncStatus; |
51 | + private Map<LspKey, Boolean> lspDelegationInfo = new HashMap<>(); | ||
48 | 52 | ||
49 | /** | 53 | /** |
50 | * Initialize instance with specified parameters. | 54 | * Initialize instance with specified parameters. |
... | @@ -147,4 +151,14 @@ public class PcepClientAdapter implements PcepClient { | ... | @@ -147,4 +151,14 @@ public class PcepClientAdapter implements PcepClient { |
147 | @Override | 151 | @Override |
148 | public void deleteNode(PccId pccId) { | 152 | public void deleteNode(PccId pccId) { |
149 | } | 153 | } |
154 | + | ||
155 | + @Override | ||
156 | + public void setLspAndDelegationInfo(LspKey lspKey, boolean dFlag) { | ||
157 | + lspDelegationInfo.put(lspKey, dFlag); | ||
158 | + } | ||
159 | + | ||
160 | + @Override | ||
161 | + public Boolean delegationInfo(LspKey lspKey) { | ||
162 | + return lspDelegationInfo.get(lspKey); | ||
163 | + } | ||
150 | } | 164 | } | ... | ... |
... | @@ -24,8 +24,6 @@ import java.util.concurrent.ConcurrentHashMap; | ... | @@ -24,8 +24,6 @@ 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; |
... | @@ -75,16 +73,11 @@ public class PcepClientControllerAdapter implements PcepClientController { | ... | @@ -75,16 +73,11 @@ public class PcepClientControllerAdapter implements PcepClientController { |
75 | 73 | ||
76 | @Override | 74 | @Override |
77 | public PcepClient getClient(PccId pccId) { | 75 | public PcepClient getClient(PccId pccId) { |
78 | - if (null != connectedClients.get(pccId)) { | 76 | + if (connectedClients.get(pccId) != null) { |
79 | return connectedClients.get(pccId); | 77 | return connectedClients.get(pccId); |
80 | } | 78 | } |
81 | PcepClientAdapter pc = new PcepClientAdapter(); | 79 | PcepClientAdapter pc = new PcepClientAdapter(); |
82 | - if (pccId.ipAddress().equals(IpAddress.valueOf(0xC010103)) | 80 | + |
83 | - || pccId.ipAddress().equals(IpAddress.valueOf(0xB6024E22))) { | ||
84 | - pc.setCapability(new ClientCapability(true, false, false, false, false)); | ||
85 | - } else { | ||
86 | - pc.setCapability(new ClientCapability(true, true, true, false, false)); | ||
87 | - } | ||
88 | pc.init(PccId.pccId(pccId.ipAddress()), PcepVersion.PCEP_1); | 81 | pc.init(PccId.pccId(pccId.ipAddress()), PcepVersion.PCEP_1); |
89 | connectedClients.put(pccId, pc); | 82 | connectedClients.put(pccId, pc); |
90 | return pc; | 83 | return pc; | ... | ... |
... | @@ -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 | } | ... | ... |
... | @@ -24,27 +24,36 @@ import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.LOCAL | ... | @@ -24,27 +24,36 @@ import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.LOCAL |
24 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.LSP_SIG_TYPE; | 24 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.LSP_SIG_TYPE; |
25 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PCC_TUNNEL_ID; | 25 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PCC_TUNNEL_ID; |
26 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PLSP_ID; | 26 | import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.PLSP_ID; |
27 | +import static org.onosproject.provider.pcep.tunnel.impl.PcepAnnotationKeys.DELEGATE; | ||
27 | import static org.onosproject.provider.pcep.tunnel.impl.LspType.WITHOUT_SIGNALLING_AND_WITHOUT_SR; | 28 | import static org.onosproject.provider.pcep.tunnel.impl.LspType.WITHOUT_SIGNALLING_AND_WITHOUT_SR; |
28 | import static org.onosproject.pcep.controller.PcepSyncStatus.SYNCED; | 29 | import static org.onosproject.pcep.controller.PcepSyncStatus.SYNCED; |
29 | import static org.onosproject.pcep.controller.PcepSyncStatus.IN_SYNC; | 30 | import static org.onosproject.pcep.controller.PcepSyncStatus.IN_SYNC; |
31 | +import static org.onosproject.net.Device.Type.ROUTER; | ||
32 | +import static org.onosproject.net.MastershipRole.MASTER; | ||
30 | 33 | ||
31 | import java.io.IOException; | 34 | import java.io.IOException; |
32 | import java.util.Collection; | 35 | import java.util.Collection; |
33 | import java.util.Collections; | 36 | import java.util.Collections; |
34 | import java.util.HashMap; | 37 | import java.util.HashMap; |
35 | import java.util.HashSet; | 38 | import java.util.HashSet; |
39 | +import java.util.LinkedList; | ||
40 | +import java.util.List; | ||
41 | +import java.util.concurrent.TimeUnit; | ||
36 | 42 | ||
37 | import org.jboss.netty.buffer.ChannelBuffer; | 43 | import org.jboss.netty.buffer.ChannelBuffer; |
38 | import org.jboss.netty.buffer.ChannelBuffers; | 44 | import org.jboss.netty.buffer.ChannelBuffers; |
39 | import org.junit.After; | 45 | import org.junit.After; |
40 | import org.junit.Before; | 46 | import org.junit.Before; |
41 | import org.junit.Test; | 47 | import org.junit.Test; |
48 | +import org.onlab.packet.ChassisId; | ||
42 | import org.onlab.packet.IpAddress; | 49 | import org.onlab.packet.IpAddress; |
43 | import org.onosproject.cfg.ComponentConfigAdapter; | 50 | import org.onosproject.cfg.ComponentConfigAdapter; |
44 | import org.onosproject.core.ApplicationId; | 51 | import org.onosproject.core.ApplicationId; |
45 | import org.onosproject.incubator.net.tunnel.DefaultTunnel; | 52 | import org.onosproject.incubator.net.tunnel.DefaultTunnel; |
46 | import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; | 53 | import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; |
47 | import org.onosproject.incubator.net.tunnel.Tunnel; | 54 | import org.onosproject.incubator.net.tunnel.Tunnel; |
55 | +import org.onosproject.incubator.net.tunnel.Tunnel.Type; | ||
56 | +import org.onosproject.incubator.net.tunnel.TunnelAdminService; | ||
48 | import org.onosproject.incubator.net.tunnel.TunnelDescription; | 57 | import org.onosproject.incubator.net.tunnel.TunnelDescription; |
49 | import org.onosproject.incubator.net.tunnel.TunnelEndPoint; | 58 | import org.onosproject.incubator.net.tunnel.TunnelEndPoint; |
50 | import org.onosproject.incubator.net.tunnel.TunnelId; | 59 | import org.onosproject.incubator.net.tunnel.TunnelId; |
... | @@ -52,16 +61,26 @@ import org.onosproject.incubator.net.tunnel.TunnelName; | ... | @@ -52,16 +61,26 @@ import org.onosproject.incubator.net.tunnel.TunnelName; |
52 | import org.onosproject.incubator.net.tunnel.TunnelProvider; | 61 | import org.onosproject.incubator.net.tunnel.TunnelProvider; |
53 | import org.onosproject.incubator.net.tunnel.TunnelProviderService; | 62 | import org.onosproject.incubator.net.tunnel.TunnelProviderService; |
54 | import org.onosproject.incubator.net.tunnel.Tunnel.State; | 63 | import org.onosproject.incubator.net.tunnel.Tunnel.State; |
64 | +import org.onosproject.mastership.MastershipServiceAdapter; | ||
65 | +import org.onosproject.net.AnnotationKeys; | ||
55 | import org.onosproject.net.DefaultAnnotations; | 66 | import org.onosproject.net.DefaultAnnotations; |
67 | +import org.onosproject.net.DefaultDevice; | ||
68 | +import org.onosproject.net.Device; | ||
69 | +import org.onosproject.net.DeviceId; | ||
56 | import org.onosproject.net.ElementId; | 70 | import org.onosproject.net.ElementId; |
71 | +import org.onosproject.net.MastershipRole; | ||
57 | import org.onosproject.net.Path; | 72 | import org.onosproject.net.Path; |
58 | import org.onosproject.net.SparseAnnotations; | 73 | import org.onosproject.net.SparseAnnotations; |
74 | +import org.onosproject.net.device.DeviceServiceAdapter; | ||
75 | +import org.onosproject.net.provider.ProviderId; | ||
59 | import org.onosproject.pcepio.exceptions.PcepOutOfBoundMessageException; | 76 | import org.onosproject.pcepio.exceptions.PcepOutOfBoundMessageException; |
60 | import org.onosproject.pcepio.exceptions.PcepParseException; | 77 | import org.onosproject.pcepio.exceptions.PcepParseException; |
61 | import org.onosproject.pcepio.protocol.PcepFactories; | 78 | import org.onosproject.pcepio.protocol.PcepFactories; |
62 | import org.onosproject.pcepio.protocol.PcepMessage; | 79 | import org.onosproject.pcepio.protocol.PcepMessage; |
63 | import org.onosproject.pcepio.protocol.PcepMessageReader; | 80 | import org.onosproject.pcepio.protocol.PcepMessageReader; |
81 | +import org.onosproject.pcepio.protocol.PcepVersion; | ||
64 | import org.onosproject.pcep.controller.ClientCapability; | 82 | import org.onosproject.pcep.controller.ClientCapability; |
83 | +import org.onosproject.pcep.controller.LspKey; | ||
65 | import org.onosproject.pcep.controller.PccId; | 84 | import org.onosproject.pcep.controller.PccId; |
66 | 85 | ||
67 | import com.google.common.collect.ImmutableSet; | 86 | import com.google.common.collect.ImmutableSet; |
... | @@ -71,13 +90,73 @@ import com.google.common.collect.ImmutableSet; | ... | @@ -71,13 +90,73 @@ import com.google.common.collect.ImmutableSet; |
71 | */ | 90 | */ |
72 | public class PcepTunnelAddedTest { | 91 | public class PcepTunnelAddedTest { |
73 | 92 | ||
74 | - static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; | 93 | + public static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep"; |
94 | + public static final String UNKOWN = "UNKOWN"; | ||
75 | PcepTunnelProvider tunnelProvider = new PcepTunnelProvider(); | 95 | PcepTunnelProvider tunnelProvider = new PcepTunnelProvider(); |
76 | private final MockTunnelProviderRegistryAdapter registry = new MockTunnelProviderRegistryAdapter(); | 96 | private final MockTunnelProviderRegistryAdapter registry = new MockTunnelProviderRegistryAdapter(); |
77 | private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); | 97 | private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter(); |
78 | private final PcepControllerAdapter ctl = new PcepControllerAdapter(); | 98 | private final PcepControllerAdapter ctl = new PcepControllerAdapter(); |
79 | private final PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper(); | 99 | private final PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper(); |
80 | private final MockTunnelServiceAdapter tunnelService = new MockTunnelServiceAdapter(); | 100 | private final MockTunnelServiceAdapter tunnelService = new MockTunnelServiceAdapter(); |
101 | + public final MockDeviceService deviceService = new MockDeviceService(); | ||
102 | + private final MockMasterShipService masterShipService = new MockMasterShipService(); | ||
103 | + private final MockTunnelAdminService tunnelAdminService = new MockTunnelAdminService(); | ||
104 | + | ||
105 | + private class MockTunnelAdminService implements TunnelAdminService { | ||
106 | + | ||
107 | + @Override | ||
108 | + public void removeTunnel(TunnelId tunnelId) { | ||
109 | + // TODO Auto-generated method stub | ||
110 | + } | ||
111 | + | ||
112 | + @Override | ||
113 | + public void removeTunnels(TunnelEndPoint src, TunnelEndPoint dst, ProviderId producerName) { | ||
114 | + // TODO Auto-generated method stub | ||
115 | + } | ||
116 | + | ||
117 | + @Override | ||
118 | + public void removeTunnels(TunnelEndPoint src, TunnelEndPoint dst, Type type, ProviderId producerName) { | ||
119 | + // TODO Auto-generated method stub | ||
120 | + } | ||
121 | + | ||
122 | + @Override | ||
123 | + public void updateTunnel(Tunnel tunnel, Path path) { | ||
124 | + if (tunnelService.tunnelIdAsKeyStore.containsKey(tunnel.tunnelId())) { | ||
125 | + tunnelService.tunnelIdAsKeyStore.replace(tunnel.tunnelId(), tunnel); | ||
126 | + } | ||
127 | + } | ||
128 | + } | ||
129 | + | ||
130 | + private class MockMasterShipService extends MastershipServiceAdapter { | ||
131 | + boolean set; | ||
132 | + | ||
133 | + private void setMaster(boolean isMaster) { | ||
134 | + this.set = isMaster; | ||
135 | + } | ||
136 | + | ||
137 | + @Override | ||
138 | + public MastershipRole getLocalRole(DeviceId deviceId) { | ||
139 | + return set ? MastershipRole.MASTER : MastershipRole.STANDBY; | ||
140 | + } | ||
141 | + | ||
142 | + @Override | ||
143 | + public boolean isLocalMaster(DeviceId deviceId) { | ||
144 | + return getLocalRole(deviceId) == MASTER; | ||
145 | + } | ||
146 | + } | ||
147 | + | ||
148 | + private class MockDeviceService extends DeviceServiceAdapter { | ||
149 | + List<Device> devices = new LinkedList<>(); | ||
150 | + | ||
151 | + private void addDevice(Device dev) { | ||
152 | + devices.add(dev); | ||
153 | + } | ||
154 | + | ||
155 | + @Override | ||
156 | + public Iterable<Device> getAvailableDevices() { | ||
157 | + return devices; | ||
158 | + } | ||
159 | + } | ||
81 | 160 | ||
82 | private class MockTunnelProviderRegistryAdapter extends TunnelProviderRegistryAdapter { | 161 | private class MockTunnelProviderRegistryAdapter extends TunnelProviderRegistryAdapter { |
83 | public long tunnelIdCounter; | 162 | public long tunnelIdCounter; |
... | @@ -97,12 +176,34 @@ public class PcepTunnelAddedTest { | ... | @@ -97,12 +176,34 @@ public class PcepTunnelAddedTest { |
97 | 176 | ||
98 | @Override | 177 | @Override |
99 | public TunnelId tunnelAdded(TunnelDescription tunnel) { | 178 | public TunnelId tunnelAdded(TunnelDescription tunnel) { |
100 | - return TunnelId.valueOf(String.valueOf(++tunnelIdCounter)); | 179 | + TunnelId id = TunnelId.valueOf(String.valueOf(++tunnelIdCounter)); |
180 | + Tunnel storedTunnel = new DefaultTunnel(ProviderId.NONE, | ||
181 | + tunnel.src(), tunnel.dst(), | ||
182 | + tunnel.type(), | ||
183 | + tunnel.groupId(), | ||
184 | + id, | ||
185 | + tunnel.tunnelName(), | ||
186 | + tunnel.path(), | ||
187 | + tunnel.resource(), | ||
188 | + tunnel.annotations()); | ||
189 | + tunnelService.tunnelIdAsKeyStore.put(id, storedTunnel); | ||
190 | + return id; | ||
101 | } | 191 | } |
102 | 192 | ||
103 | @Override | 193 | @Override |
104 | public TunnelId tunnelAdded(TunnelDescription tunnel, State state) { | 194 | public TunnelId tunnelAdded(TunnelDescription tunnel, State state) { |
105 | - return TunnelId.valueOf(String.valueOf(++tunnelIdCounter)); | 195 | + TunnelId id = TunnelId.valueOf(String.valueOf(++tunnelIdCounter)); |
196 | + Tunnel storedTunnel = new DefaultTunnel(ProviderId.NONE, | ||
197 | + tunnel.src(), tunnel.dst(), | ||
198 | + tunnel.type(), | ||
199 | + tunnel.groupId(), | ||
200 | + id, | ||
201 | + tunnel.tunnelName(), | ||
202 | + tunnel.path(), | ||
203 | + tunnel.resource(), | ||
204 | + tunnel.annotations()); | ||
205 | + tunnelService.tunnelIdAsKeyStore.put(id, storedTunnel); | ||
206 | + return id; | ||
106 | } | 207 | } |
107 | 208 | ||
108 | @Override | 209 | @Override |
... | @@ -168,9 +269,12 @@ public class PcepTunnelAddedTest { | ... | @@ -168,9 +269,12 @@ public class PcepTunnelAddedTest { |
168 | tunnelProvider.tunnelProviderRegistry = registry; | 269 | tunnelProvider.tunnelProviderRegistry = registry; |
169 | tunnelProvider.pcepClientController = controller; | 270 | tunnelProvider.pcepClientController = controller; |
170 | tunnelProvider.controller = ctl; | 271 | tunnelProvider.controller = ctl; |
272 | + tunnelProvider.deviceService = deviceService; | ||
273 | + tunnelProvider.mastershipService = masterShipService; | ||
171 | tunnelProvider.pcepTunnelApiMapper = pcepTunnelAPIMapper; | 274 | tunnelProvider.pcepTunnelApiMapper = pcepTunnelAPIMapper; |
172 | tunnelProvider.cfgService = new ComponentConfigAdapter(); | 275 | tunnelProvider.cfgService = new ComponentConfigAdapter(); |
173 | tunnelProvider.tunnelService = tunnelService; | 276 | tunnelProvider.tunnelService = tunnelService; |
277 | + tunnelProvider.tunnelAdminService = tunnelAdminService; | ||
174 | tunnelProvider.service = registry.register(tunnelProvider); | 278 | tunnelProvider.service = registry.register(tunnelProvider); |
175 | tunnelProvider.activate(); | 279 | tunnelProvider.activate(); |
176 | } | 280 | } |
... | @@ -210,6 +314,19 @@ public class PcepTunnelAddedTest { | ... | @@ -210,6 +314,19 @@ public class PcepTunnelAddedTest { |
210 | 314 | ||
211 | PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader(); | 315 | PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader(); |
212 | PcepMessage message = reader.readFrom(buffer); | 316 | PcepMessage message = reader.readFrom(buffer); |
317 | + | ||
318 | + DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder(); | ||
319 | + newBuilder.set(PcepTunnelProvider.LSRID, "1.1.1.1"); | ||
320 | + newBuilder.set(AnnotationKeys.TYPE, "L3"); | ||
321 | + Device device = new DefaultDevice(ProviderId.NONE, DeviceId.deviceId("1.1.1.1"), ROUTER, | ||
322 | + UNKOWN, UNKOWN, UNKOWN, | ||
323 | + UNKOWN, new ChassisId(), | ||
324 | + newBuilder.build()); | ||
325 | + | ||
326 | + deviceService.addDevice(device); | ||
327 | + controller.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1"))).setCapability( | ||
328 | + new ClientCapability(true, true, true, true, true)); | ||
329 | + masterShipService.setMaster(true); | ||
213 | controller.processClientMessage(PccId.pccId(IpAddress.valueOf("1.1.1.1")), message); | 330 | controller.processClientMessage(PccId.pccId(IpAddress.valueOf("1.1.1.1")), message); |
214 | 331 | ||
215 | assertThat(registry.tunnelIdCounter, is((long) 1)); | 332 | assertThat(registry.tunnelIdCounter, is((long) 1)); |
... | @@ -254,14 +371,20 @@ public class PcepTunnelAddedTest { | ... | @@ -254,14 +371,20 @@ public class PcepTunnelAddedTest { |
254 | .set(LSP_SIG_TYPE, WITHOUT_SIGNALLING_AND_WITHOUT_SR.name()) | 371 | .set(LSP_SIG_TYPE, WITHOUT_SIGNALLING_AND_WITHOUT_SR.name()) |
255 | .set(PCC_TUNNEL_ID, String.valueOf(1)) | 372 | .set(PCC_TUNNEL_ID, String.valueOf(1)) |
256 | .set(PLSP_ID, String.valueOf(1)) | 373 | .set(PLSP_ID, String.valueOf(1)) |
257 | - .set(LOCAL_LSP_ID, String.valueOf(1)).build(); | 374 | + .set(LOCAL_LSP_ID, String.valueOf(1)) |
375 | + .set(DELEGATE, String.valueOf("true")) | ||
376 | + .build(); | ||
258 | 377 | ||
259 | Tunnel tunnel = new DefaultTunnel(null, tunnelEndPointSrc, tunnelEndPointDst, MPLS, INIT, null, null, | 378 | Tunnel tunnel = new DefaultTunnel(null, tunnelEndPointSrc, tunnelEndPointDst, MPLS, INIT, null, null, |
260 | TunnelName.tunnelName("T123"), null, annotations); | 379 | TunnelName.tunnelName("T123"), null, annotations); |
261 | tunnelService.setupTunnel(null, null, tunnel, null); | 380 | tunnelService.setupTunnel(null, null, tunnel, null); |
262 | 381 | ||
263 | PccId pccId = PccId.pccId(IpAddress.valueOf(0x4e1f0400)); | 382 | PccId pccId = PccId.pccId(IpAddress.valueOf(0x4e1f0400)); |
264 | - controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, false, false)); | 383 | + PcepClientAdapter pc = new PcepClientAdapter(); |
384 | + pc.init(pccId, PcepVersion.PCEP_1); | ||
385 | + masterShipService.setMaster(true); | ||
386 | + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(1, (short) 1), true); | ||
387 | + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true)); | ||
265 | controller.getClient(pccId).setLspDbSyncStatus(SYNCED); | 388 | controller.getClient(pccId).setLspDbSyncStatus(SYNCED); |
266 | 389 | ||
267 | // Process update message. | 390 | // Process update message. |
... | @@ -308,15 +431,127 @@ public class PcepTunnelAddedTest { | ... | @@ -308,15 +431,127 @@ public class PcepTunnelAddedTest { |
308 | PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader(); | 431 | PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader(); |
309 | PcepMessage message = reader.readFrom(buffer); | 432 | PcepMessage message = reader.readFrom(buffer); |
310 | 433 | ||
434 | + DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder(); | ||
435 | + newBuilder.set(PcepTunnelProvider.LSRID, "1.1.1.1"); | ||
436 | + newBuilder.set(AnnotationKeys.TYPE, "L3"); | ||
437 | + Device device = new DefaultDevice(ProviderId.NONE, DeviceId.deviceId("1.1.1.1"), ROUTER, | ||
438 | + UNKOWN, UNKOWN, UNKOWN, | ||
439 | + UNKOWN, new ChassisId(), | ||
440 | + newBuilder.build()); | ||
441 | + | ||
442 | + deviceService.addDevice(device); | ||
443 | + | ||
311 | PccId pccId = PccId.pccId(IpAddress.valueOf("1.1.1.1")); | 444 | PccId pccId = PccId.pccId(IpAddress.valueOf("1.1.1.1")); |
312 | controller.getClient(pccId).setLspDbSyncStatus(SYNCED); | 445 | controller.getClient(pccId).setLspDbSyncStatus(SYNCED); |
313 | - controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, false, false)); | 446 | + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true)); |
447 | + | ||
448 | + PcepClientAdapter pc = new PcepClientAdapter(); | ||
449 | + pc.init(pccId, PcepVersion.PCEP_1); | ||
450 | + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(1, (short) 1), true); | ||
451 | + masterShipService.setMaster(true); | ||
314 | controller.processClientMessage(pccId, message); | 452 | controller.processClientMessage(pccId, message); |
315 | 453 | ||
316 | assertThat(registry.tunnelIdCounter, is((long) 1)); | 454 | assertThat(registry.tunnelIdCounter, is((long) 1)); |
317 | } | 455 | } |
318 | 456 | ||
319 | /** | 457 | /** |
458 | + * Tests PCRpt msg with D flag set and delegated to non-master. | ||
459 | + * | ||
460 | + * @throws InterruptedException while waiting for delay | ||
461 | + */ | ||
462 | + @Test | ||
463 | + public void tunnelProviderAddedTest4() throws PcepParseException, PcepOutOfBoundMessageException, | ||
464 | + InterruptedException { | ||
465 | + byte[] reportMsg = new byte[] {0x20, 0x0a, 0x00, (byte) 0x84, | ||
466 | + 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //SRP object | ||
467 | + 0x00, 0x1c, 0x00, 0x04, // PATH-SETUP-TYPE TLV | ||
468 | + 0x00, 0x00, 0x00, 0x02, | ||
469 | + 0x20, 0x10, 0x00, 0x24, 0x00, 0x00, 0x10, 0x02, //LSP object | ||
470 | + 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv | ||
471 | + 0x00, 0x12, 0x00, 0x10, // IPv4-LSP-IDENTIFIER-TLV | ||
472 | + 0x01, 0x01, 0x01, 0x01, | ||
473 | + 0x00, 0x01, 0x00, 0x01, | ||
474 | + 0x01, 0x01, 0x01, 0x01, | ||
475 | + 0x05, 0x05, 0x05, 0x05, | ||
476 | + | ||
477 | + 0x07, 0x10, 0x00, 0x14, //ERO object | ||
478 | + 0x01, 0x08, (byte) 0x01, 0x01, 0x01, 0x01, 0x04, 0x00, // ERO IPv4 sub objects | ||
479 | + 0x01, 0x08, (byte) 0x05, 0x05, 0x05, 0x05, 0x04, 0x00, | ||
480 | + | ||
481 | + 0x08, 0x10, 0x00, 0x34, //RRO object | ||
482 | + 0x01, 0x08, 0x11, 0x01, 0x01, 0x01, 0x04, 0x00, // RRO IPv4 sub objects | ||
483 | + 0x01, 0x08, 0x11, 0x01, 0x01, 0x02, 0x04, 0x00, | ||
484 | + 0x01, 0x08, 0x06, 0x06, 0x06, 0x06, 0x04, 0x00, | ||
485 | + 0x01, 0x08, 0x12, 0x01, 0x01, 0x02, 0x04, 0x00, | ||
486 | + 0x01, 0x08, 0x12, 0x01, 0x01, 0x01, 0x04, 0x00, | ||
487 | + 0x01, 0x08, 0x05, 0x05, 0x05, 0x05, 0x04, 0x00 | ||
488 | + }; | ||
489 | + | ||
490 | + ChannelBuffer buffer = ChannelBuffers.dynamicBuffer(); | ||
491 | + buffer.writeBytes(reportMsg); | ||
492 | + | ||
493 | + PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader(); | ||
494 | + PcepMessage message = reader.readFrom(buffer); | ||
495 | + | ||
496 | + //PCC 1.1.1.1, D=0, ONOS as master | ||
497 | + masterShipService.setMaster(true); | ||
498 | + DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder(); | ||
499 | + newBuilder.set(PcepTunnelProvider.LSRID, "1.1.1.1"); | ||
500 | + newBuilder.set(AnnotationKeys.TYPE, "L3"); | ||
501 | + Device device = new DefaultDevice(ProviderId.NONE, DeviceId.deviceId("1.1.1.1"), ROUTER, | ||
502 | + UNKOWN, UNKOWN, UNKOWN, | ||
503 | + UNKOWN, new ChassisId(), | ||
504 | + newBuilder.build()); | ||
505 | + | ||
506 | + deviceService.addDevice(device); | ||
507 | + controller.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1"))).setCapability( | ||
508 | + new ClientCapability(true, true, true, true, true)); | ||
509 | + controller.processClientMessage(PccId.pccId(IpAddress.valueOf("1.1.1.1")), message); | ||
510 | + assertThat(tunnelService.tunnelIdAsKeyStore.values().iterator().next().annotations().value(DELEGATE), | ||
511 | + is("false")); | ||
512 | + | ||
513 | + //PCC 1.1.1.1, D=1, non-master | ||
514 | + masterShipService.setMaster(false); | ||
515 | + | ||
516 | + reportMsg = new byte[] {0x20, 0x0a, 0x00, (byte) 0x84, | ||
517 | + 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //SRP object | ||
518 | + 0x00, 0x1c, 0x00, 0x04, // PATH-SETUP-TYPE TLV | ||
519 | + 0x00, 0x00, 0x00, 0x02, | ||
520 | + 0x20, 0x10, 0x00, 0x24, 0x00, 0x00, 0x10, 0x03, //LSP object | ||
521 | + 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv | ||
522 | + 0x00, 0x12, 0x00, 0x10, // IPv4-LSP-IDENTIFIER-TLV | ||
523 | + 0x01, 0x01, 0x01, 0x01, | ||
524 | + 0x00, 0x01, 0x00, 0x01, | ||
525 | + 0x01, 0x01, 0x01, 0x01, | ||
526 | + 0x05, 0x05, 0x05, 0x05, | ||
527 | + | ||
528 | + 0x07, 0x10, 0x00, 0x14, //ERO object | ||
529 | + 0x01, 0x08, (byte) 0x01, 0x01, 0x01, 0x01, 0x04, 0x00, // ERO IPv4 sub objects | ||
530 | + 0x01, 0x08, (byte) 0x05, 0x05, 0x05, 0x05, 0x04, 0x00, | ||
531 | + | ||
532 | + 0x08, 0x10, 0x00, 0x34, //RRO object | ||
533 | + 0x01, 0x08, 0x11, 0x01, 0x01, 0x01, 0x04, 0x00, // RRO IPv4 sub objects | ||
534 | + 0x01, 0x08, 0x11, 0x01, 0x01, 0x02, 0x04, 0x00, | ||
535 | + 0x01, 0x08, 0x06, 0x06, 0x06, 0x06, 0x04, 0x00, | ||
536 | + 0x01, 0x08, 0x12, 0x01, 0x01, 0x02, 0x04, 0x00, | ||
537 | + 0x01, 0x08, 0x12, 0x01, 0x01, 0x01, 0x04, 0x00, | ||
538 | + 0x01, 0x08, 0x05, 0x05, 0x05, 0x05, 0x04, 0x00 | ||
539 | + }; | ||
540 | + | ||
541 | + buffer = ChannelBuffers.dynamicBuffer(); | ||
542 | + buffer.writeBytes(reportMsg); | ||
543 | + | ||
544 | + reader = PcepFactories.getGenericReader(); | ||
545 | + message = reader.readFrom(buffer); | ||
546 | + | ||
547 | + controller.processClientMessage(PccId.pccId(IpAddress.valueOf("1.1.1.1")), message); | ||
548 | + TimeUnit.MILLISECONDS.sleep(4000); | ||
549 | + assertThat(registry.tunnelIdCounter, is((long) 1)); | ||
550 | + assertThat(tunnelService.tunnelIdAsKeyStore.values().iterator().next().annotations().value(DELEGATE), | ||
551 | + is("true")); | ||
552 | + } | ||
553 | + | ||
554 | + /** | ||
320 | * Tests LSPDB sync where PCC reports less LSPs than known by PCE and PCE deletes at the end of DB sync. | 555 | * Tests LSPDB sync where PCC reports less LSPs than known by PCE and PCE deletes at the end of DB sync. |
321 | */ | 556 | */ |
322 | @Test | 557 | @Test |
... | @@ -355,8 +590,23 @@ public class PcepTunnelAddedTest { | ... | @@ -355,8 +590,23 @@ public class PcepTunnelAddedTest { |
355 | PcepMessageReader<PcepMessage> reader1 = PcepFactories.getGenericReader(); | 590 | PcepMessageReader<PcepMessage> reader1 = PcepFactories.getGenericReader(); |
356 | PcepMessage message1 = reader1.readFrom(buffer1); | 591 | PcepMessage message1 = reader1.readFrom(buffer1); |
357 | 592 | ||
593 | + DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder(); | ||
594 | + newBuilder.set(PcepTunnelProvider.LSRID, "1.1.1.1"); | ||
595 | + newBuilder.set(AnnotationKeys.TYPE, "L3"); | ||
596 | + Device device = new DefaultDevice(ProviderId.NONE, DeviceId.deviceId("1.1.1.1"), ROUTER, | ||
597 | + UNKOWN, UNKOWN, UNKOWN, | ||
598 | + UNKOWN, new ChassisId(), | ||
599 | + newBuilder.build()); | ||
600 | + | ||
601 | + deviceService.addDevice(device); | ||
602 | + | ||
358 | PccId pccId = PccId.pccId(IpAddress.valueOf("1.1.1.1")); | 603 | PccId pccId = PccId.pccId(IpAddress.valueOf("1.1.1.1")); |
359 | - controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, false, false)); | 604 | + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true)); |
605 | + | ||
606 | + PcepClientAdapter pc = new PcepClientAdapter(); | ||
607 | + pc.init(pccId, PcepVersion.PCEP_1); | ||
608 | + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(2, (short) 2), true); | ||
609 | + masterShipService.setMaster(true); | ||
360 | controller.processClientMessage(pccId, message1); | 610 | controller.processClientMessage(pccId, message1); |
361 | 611 | ||
362 | /* create 2nd LSP */ | 612 | /* create 2nd LSP */ |
... | @@ -494,8 +744,24 @@ public class PcepTunnelAddedTest { | ... | @@ -494,8 +744,24 @@ public class PcepTunnelAddedTest { |
494 | PcepMessageReader<PcepMessage> reader1 = PcepFactories.getGenericReader(); | 744 | PcepMessageReader<PcepMessage> reader1 = PcepFactories.getGenericReader(); |
495 | PcepMessage message1 = reader1.readFrom(buffer1); | 745 | PcepMessage message1 = reader1.readFrom(buffer1); |
496 | 746 | ||
747 | + DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder(); | ||
748 | + newBuilder.set(PcepTunnelProvider.LSRID, "1.1.1.1"); | ||
749 | + newBuilder.set(AnnotationKeys.TYPE, "L3"); | ||
750 | + Device device = new DefaultDevice(ProviderId.NONE, DeviceId.deviceId("1.1.1.1"), ROUTER, | ||
751 | + UNKOWN, UNKOWN, UNKOWN, | ||
752 | + UNKOWN, new ChassisId(), | ||
753 | + newBuilder.build()); | ||
754 | + | ||
755 | + deviceService.addDevice(device); | ||
756 | + | ||
497 | PccId pccId = PccId.pccId(IpAddress.valueOf("1.1.1.1")); | 757 | PccId pccId = PccId.pccId(IpAddress.valueOf("1.1.1.1")); |
498 | - controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, false, false)); | 758 | + controller.getClient(pccId).setCapability(new ClientCapability(true, true, true, true, true)); |
759 | + | ||
760 | + PcepClientAdapter pc = new PcepClientAdapter(); | ||
761 | + pc.init(pccId, PcepVersion.PCEP_1); | ||
762 | + masterShipService.setMaster(true); | ||
763 | + controller.getClient(pccId).setLspAndDelegationInfo(new LspKey(2, (short) 2), true); | ||
764 | + | ||
499 | controller.processClientMessage(pccId, message1); | 765 | controller.processClientMessage(pccId, message1); |
500 | 766 | ||
501 | /* create 2nd LSP */ | 767 | /* create 2nd LSP */ |
... | @@ -604,6 +870,9 @@ public class PcepTunnelAddedTest { | ... | @@ -604,6 +870,9 @@ public class PcepTunnelAddedTest { |
604 | tunnelProvider.pcepTunnelApiMapper = null; | 870 | tunnelProvider.pcepTunnelApiMapper = null; |
605 | tunnelProvider.cfgService = null; | 871 | tunnelProvider.cfgService = null; |
606 | tunnelProvider.tunnelService = null; | 872 | tunnelProvider.tunnelService = null; |
873 | + tunnelProvider.tunnelAdminService = null; | ||
874 | + tunnelProvider.deviceService = null; | ||
875 | + tunnelProvider.mastershipService = null; | ||
607 | tunnelProvider.service = null; | 876 | tunnelProvider.service = null; |
608 | } | 877 | } |
609 | } | 878 | } | ... | ... |
... | @@ -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 | } | ... | ... |
-
Please register or login to post a comment