Toggle navigation
Toggle navigation
This project
Loading...
Sign in
홍길동
/
onos
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Avantika-Huawei
2016-06-21 22:29:15 +0530
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
f849aaba05d10f6564aa08a63ec637425c01f7ac
f849aaba
1 parent
5e5d4df9
Cherry picks from 1.6 branch
Change-Id: I596247425802fc759463bcf77ea3c885f3161581
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
170 additions
and
78 deletions
apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceccSrTeBeHandler.java
apps/pce/app/src/test/java/org/onosproject/pce/pceservice/PceccSrTeBeHandlerTest.java
protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientImpl.java
protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4Adjacency.java
protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SrEroSubObject.java
providers/pcep/packet/src/main/java/org/onosproject/provider/pcep/packet/impl/PcepPacketProvider.java
providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
View file @
f849aab
...
...
@@ -254,6 +254,7 @@ public class PceManager implements PceService {
tunnelConsumerIdGen
=
coreService
.
getIdGenerator
(
TUNNEL_CONSUMER_ID_GEN_TOPIC
);
localLspIdIdGen
=
coreService
.
getIdGenerator
(
LOCAL_LSP_ID_GEN_TOPIC
);
localLspIdIdGen
.
getNewId
();
// To prevent 0, the 1st value generated from being used in protocol.
localLspIdFreeList
=
storageService
.<
Short
>
setBuilder
()
.
withName
(
"pcepLocalLspIdDeletedList"
)
.
withSerializer
(
Serializer
.
using
(
KryoNamespaces
.
API
))
...
...
apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceccSrTeBeHandler.java
View file @
f849aab
...
...
@@ -406,15 +406,6 @@ public final class PceccSrTeBeHandler {
DeviceId
deviceId
=
null
;
for
(
Iterator
<
Link
>
iterator
=
linkList
.
iterator
();
iterator
.
hasNext
();)
{
link
=
iterator
.
next
();
// Add source device label now
deviceId
=
link
.
src
().
deviceId
();
nodeLabelId
=
pceStore
.
getGlobalNodeLabel
(
deviceId
);
if
(
nodeLabelId
==
null
)
{
log
.
error
(
"Unable to find node label for a device id {} in store."
,
deviceId
.
toString
());
return
null
;
}
labelStack
.
add
(
nodeLabelId
);
// Add adjacency label for this link
adjLabelId
=
pceStore
.
getAdjLabel
(
link
);
if
(
adjLabelId
==
null
)
{
...
...
@@ -422,11 +413,7 @@ public final class PceccSrTeBeHandler {
return
null
;
}
labelStack
.
add
(
adjLabelId
);
}
// This is the last link in path
// Add destination device label now.
if
(
link
!=
null
)
{
deviceId
=
link
.
dst
().
deviceId
();
nodeLabelId
=
pceStore
.
getGlobalNodeLabel
(
deviceId
);
if
(
nodeLabelId
==
null
)
{
...
...
apps/pce/app/src/test/java/org/onosproject/pce/pceservice/PceccSrTeBeHandlerTest.java
View file @
f849aab
...
...
@@ -417,11 +417,8 @@ public class PceccSrTeBeHandlerTest {
// Compute label stack
LabelStack
labelStack
=
srTeHandler
.
computeLabelStack
(
path1
);
// check node-label of D1.deviceId()
List
<
LabelResourceId
>
labelList
=
labelStack
.
labelResources
();
Iterator
<
LabelResourceId
>
iterator
=
labelList
.
iterator
();
labelId
=
iterator
.
next
();
assertThat
(
labelId
,
is
(
LabelResourceId
.
labelResourceId
(
4097
)));
// check adjacency label of D1.deviceId()
labelId
=
iterator
.
next
();
...
...
protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
View file @
f849aab
...
...
@@ -438,6 +438,7 @@ public class PcepClientControllerImpl implements PcepClientController {
// When there are no LSPs to sync, directly end-of-sync PCRpt will come and the
// list will be null.
syncStateRptList
=
Collections
.
EMPTY_LIST
;
log
.
debug
(
"No LSPs reported from PCC during sync."
);
}
Iterator
<
PcepStateReport
>
stateRptListIterator
=
syncStateRptList
.
iterator
();
...
...
@@ -502,8 +503,8 @@ public class PcepClientControllerImpl implements PcepClientController {
}
catch
(
PcepParseException
e
)
{
log
.
error
(
"Exception occured while sending initiate delete message {}"
,
e
.
getMessage
());
}
continue
;
}
continue
;
}
if
(!
lspObj
.
getCFlag
())
{
...
...
protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientImpl.java
View file @
f849aab
...
...
@@ -186,6 +186,7 @@ public class PcepClientImpl implements PcepClientDriver {
@Override
public
void
setLspDbSyncStatus
(
PcepSyncStatus
syncStatus
)
{
log
.
debug
(
"LSP DB sync status set from {} to {}"
,
this
.
lspDbSyncStatus
,
syncStatus
);
this
.
lspDbSyncStatus
=
syncStatus
;
}
...
...
@@ -199,7 +200,7 @@ public class PcepClientImpl implements PcepClientDriver {
PcepSyncStatus
syncOldStatus
=
labelDbSyncStatus
();
this
.
labelDbSyncStatus
=
syncStatus
;
log
.
debug
(
"Label DB sync status set from {} to {}"
,
syncOldStatus
,
syncStatus
);
if
((
syncOldStatus
==
PcepSyncStatus
.
IN_SYNC
)
&&
(
syncStatus
==
PcepSyncStatus
.
SYNCED
))
{
// Perform end of LSP DB sync actions.
this
.
agent
.
analyzeSyncMsgList
(
pccId
);
...
...
protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4Adjacency.java
View file @
f849aab
...
...
@@ -59,6 +59,14 @@ public class PcepNaiIpv4Adjacency implements PcepNai {
return
ST_TYPE
;
}
public
int
getLocalIpv4Addr
()
{
return
localIpv4Addr
;
}
public
int
getRemoteIpv4Addr
()
{
return
remoteIpv4Addr
;
}
@Override
public
int
write
(
ChannelBuffer
bb
)
{
int
iLenStartIndex
=
bb
.
writerIndex
();
...
...
protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SrEroSubObject.java
View file @
f849aab
...
...
@@ -84,7 +84,7 @@ public class SrEroSubObject implements PcepValueType {
*/
protected
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
SrEroSubObject
.
class
);
public
static
final
short
TYPE
=
0x
60
;
//TODO : type to be defined
public
static
final
short
TYPE
=
0x
24
;
//TODO : type to be defined
public
static
final
short
LENGTH
=
12
;
public
static
final
short
VALUE_LENGTH
=
10
;
public
static
final
int
SET
=
1
;
...
...
@@ -243,9 +243,10 @@ public class SrEroSubObject implements PcepValueType {
@Override
public
int
write
(
ChannelBuffer
c
)
{
int
iLenStartIndex
=
c
.
writerIndex
();
c
.
writeShort
(
TYPE
);
c
.
writeShort
(
LENGTH
);
c
.
writeByte
(
TYPE
);
// Store the position of object length
int
objectLenIndex
=
c
.
writerIndex
();
c
.
writeByte
(
0
);
short
temp
=
0
;
if
(
bMFlag
)
{
...
...
@@ -264,13 +265,14 @@ public class SrEroSubObject implements PcepValueType {
temp
=
(
short
)
(
temp
|
tempST
);
c
.
writeShort
(
temp
);
if
(
bMFlag
)
{
int
tempSid
=
(
int
)
sid
<<
12
;
int
tempSid
=
sid
<<
12
;
c
.
writeInt
(
tempSid
);
}
else
{
c
.
writeInt
(
sid
);
}
nai
.
write
(
c
);
c
.
setByte
(
objectLenIndex
,
(
c
.
writerIndex
()
-
iLenStartIndex
));
return
c
.
writerIndex
()
-
iLenStartIndex
;
}
...
...
providers/pcep/packet/src/main/java/org/onosproject/provider/pcep/packet/impl/PcepPacketProvider.java
View file @
f849aab
...
...
@@ -10,6 +10,7 @@ import org.apache.felix.scr.annotations.ReferenceCardinality;
import
org.apache.felix.scr.annotations.Service
;
import
org.onlab.packet.Ethernet
;
import
org.onlab.packet.IPv4
;
import
org.onlab.packet.MacAddress
;
import
org.onlab.packet.TCP
;
import
org.onosproject.net.AnnotationKeys
;
import
org.onosproject.net.ConnectPoint
;
...
...
@@ -90,6 +91,7 @@ public class PcepPacketProvider extends AbstractProvider implements PacketProvid
Ethernet
eth
=
new
Ethernet
();
eth
.
setEtherType
(
Ethernet
.
TYPE_IPV4
);
eth
.
setDestinationMACAddress
(
MacAddress
.
NONE
);
eth
.
setPayload
(
ipv4
);
// Get lsrId of the PCEP client from the PCC ID. Session info is based on lsrID.
...
...
providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
View file @
f849aab
...
...
@@ -28,6 +28,8 @@ import org.onlab.packet.Ip4Address;
import
org.onlab.packet.IpAddress
;
import
org.onosproject.cfg.ComponentConfigService
;
import
org.onosproject.core.DefaultGroupId
;
import
org.onosproject.incubator.net.resource.label.LabelResourceId
;
import
org.onosproject.incubator.net.tunnel.DefaultLabelStack
;
import
org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint
;
import
org.onosproject.incubator.net.tunnel.DefaultTunnel
;
import
org.onosproject.incubator.net.tunnel.DefaultTunnelDescription
;
...
...
@@ -59,6 +61,7 @@ import org.onosproject.net.DeviceId;
import
org.onosproject.net.ElementId
;
import
org.onosproject.net.IpElementId
;
import
org.onosproject.net.Link
;
import
org.onosproject.net.NetworkResource
;
import
org.onosproject.net.Path
;
import
org.onosproject.net.PortNumber
;
import
org.onosproject.net.SparseAnnotations
;
...
...
@@ -95,6 +98,7 @@ import org.onosproject.pcepio.protocol.PcepLspObject;
import
org.onosproject.pcepio.protocol.PcepMessage
;
import
org.onosproject.pcepio.protocol.PcepMetricObject
;
import
org.onosproject.pcepio.protocol.PcepMsgPath
;
import
org.onosproject.pcepio.protocol.PcepNai
;
import
org.onosproject.pcepio.protocol.PcepReportMsg
;
import
org.onosproject.pcepio.protocol.PcepSrpObject
;
import
org.onosproject.pcepio.protocol.PcepStateReport
;
...
...
@@ -102,7 +106,10 @@ import org.onosproject.pcepio.protocol.PcepUpdateMsg;
import
org.onosproject.pcepio.protocol.PcepUpdateRequest
;
import
org.onosproject.pcepio.types.IPv4SubObject
;
import
org.onosproject.pcepio.types.PathSetupTypeTlv
;
import
org.onosproject.pcepio.types.PcepNaiIpv4Adjacency
;
import
org.onosproject.pcepio.types.PcepNaiIpv4NodeId
;
import
org.onosproject.pcepio.types.PcepValueType
;
import
org.onosproject.pcepio.types.SrEroSubObject
;
import
org.onosproject.pcepio.types.StatefulIPv4LspIdentifiersTlv
;
import
org.onosproject.pcepio.types.SymbolicPathNameTlv
;
import
org.osgi.service.component.ComponentContext
;
...
...
@@ -115,6 +122,7 @@ import java.util.Collection;
import
java.util.Collections
;
import
java.util.Dictionary
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.ListIterator
;
...
...
@@ -845,7 +853,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
* Creates list of hops for ERO object from Path.
*
* @param path network path
* @return list of
ipv4
subobjects
* @return list of
ERO
subobjects
*/
private
LinkedList
<
PcepValueType
>
createPcepPath
(
Path
path
)
{
LinkedList
<
PcepValueType
>
llSubObjects
=
new
LinkedList
<
PcepValueType
>();
...
...
@@ -880,6 +888,55 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
}
/**
* Creates label stack for ERO object from network resource.
*
* @param labelStack
* @param path (hop list)
* @return list of ERO subobjects
*/
private
LinkedList
<
PcepValueType
>
createPcepLabelStack
(
DefaultLabelStack
labelStack
,
Path
path
)
{
checkNotNull
(
labelStack
);
LinkedList
<
PcepValueType
>
llSubObjects
=
new
LinkedList
<
PcepValueType
>();
Iterator
<
Link
>
links
=
path
.
links
().
iterator
();
LabelResourceId
label
=
null
;
Link
link
=
null
;
PcepValueType
subObj
=
null
;
PcepNai
nai
=
null
;
Device
dstNode
=
null
;
long
srcPortNo
,
dstPortNo
;
ListIterator
<
LabelResourceId
>
labelListIterator
=
labelStack
.
labelResources
().
listIterator
();
while
(
labelListIterator
.
hasNext
())
{
label
=
labelListIterator
.
next
();
link
=
links
.
next
();
srcPortNo
=
link
.
src
().
port
().
toLong
();
srcPortNo
=
((
srcPortNo
&
IDENTIFIER_SET
)
==
IDENTIFIER_SET
)
?
srcPortNo
&
SET
:
srcPortNo
;
dstPortNo
=
link
.
dst
().
port
().
toLong
();
dstPortNo
=
((
dstPortNo
&
IDENTIFIER_SET
)
==
IDENTIFIER_SET
)
?
dstPortNo
&
SET
:
dstPortNo
;
nai
=
new
PcepNaiIpv4Adjacency
((
int
)
srcPortNo
,
(
int
)
dstPortNo
);
subObj
=
new
SrEroSubObject
(
PcepNaiIpv4Adjacency
.
ST_TYPE
,
false
,
false
,
false
,
true
,
(
int
)
label
.
labelId
(),
nai
);
llSubObjects
.
add
(
subObj
);
dstNode
=
deviceService
.
getDevice
(
link
.
dst
().
deviceId
());
nai
=
new
PcepNaiIpv4NodeId
(
Ip4Address
.
valueOf
(
dstNode
.
annotations
().
value
(
LSRID
)).
toInt
());
if
(!
labelListIterator
.
hasNext
())
{
log
.
error
(
"Malformed label stack."
);
}
label
=
labelListIterator
.
next
();
subObj
=
new
SrEroSubObject
(
PcepNaiIpv4NodeId
.
ST_TYPE
,
false
,
false
,
false
,
true
,
(
int
)
label
.
labelId
(),
nai
);
llSubObjects
.
add
(
subObj
);
}
return
llSubObjects
;
}
/**
* Creates PcInitiated lsp request list for setup tunnel.
*
* @param tunnel mpls tunnel
...
...
@@ -893,7 +950,14 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
PcepClient
pc
,
int
srpId
)
throws
PcepParseException
{
PcepValueType
tlv
;
LinkedList
<
PcepValueType
>
llSubObjects
=
createPcepPath
(
path
);
LinkedList
<
PcepValueType
>
llSubObjects
=
null
;
NetworkResource
labelStack
=
tunnel
.
resource
();
if
(
labelStack
!=
null
&&
labelStack
instanceof
DefaultLabelStack
)
{
llSubObjects
=
createPcepLabelStack
((
DefaultLabelStack
)
labelStack
,
path
);
}
else
{
llSubObjects
=
createPcepPath
(
path
);
}
if
(
llSubObjects
==
null
||
llSubObjects
.
size
()
==
0
)
{
log
.
error
(
"There is no link information to create tunnel"
);
...
...
@@ -932,8 +996,8 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
llOptionalTlv
.
add
(
tlv
);
//build LSP object
PcepLspObject
lspobj
=
pc
.
factory
().
buildLspObject
().
setAFlag
(
true
).
set
OFlag
((
byte
)
0
).
setPlspId
(
0
)
.
setOptionalTlv
(
llOptionalTlv
).
build
();
PcepLspObject
lspobj
=
pc
.
factory
().
buildLspObject
().
setAFlag
(
true
).
set
DFlag
(
true
).
setOFlag
((
byte
)
0
)
.
set
PlspId
(
0
).
set
OptionalTlv
(
llOptionalTlv
).
build
();
//build ENDPOINTS object
PcepEndPointsObject
endpointsobj
=
pc
.
factory
().
buildEndPointsObject
()
...
...
@@ -1036,15 +1100,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
pcepTunnelApiMapper
.
addToCoreTunnelRequestQueue
(
pcepTunnelData
);
int
srpId
=
SrpIdGenerators
.
create
();
TunnelId
tunnelId
=
tunnel
.
tunnelId
();
int
plspId
=
0
;
if
(!(
pcepTunnelApiMapper
.
checkFromTunnelDBQueue
(
tunnelId
)))
{
log
.
error
(
"Tunnel doesnot exists. Tunnel id {}"
+
tunnelId
.
toString
());
return
;
}
else
{
PcepTunnelData
pcepTunnelDbData
=
pcepTunnelApiMapper
.
getDataFromTunnelDBQueue
(
tunnelId
);
plspId
=
pcepTunnelDbData
.
plspId
();
}
PcepValueType
tlv
;
LinkedList
<
PcepValueType
>
llOptionalTlv
=
new
LinkedList
<
PcepValueType
>();
...
...
@@ -1066,8 +1121,11 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
String
localLspIdString
=
tunnel
.
annotations
().
value
(
LOCAL_LSP_ID
);
String
pccTunnelIdString
=
tunnel
.
annotations
().
value
(
PCC_TUNNEL_ID
);
String
pLspIdString
=
tunnel
.
annotations
().
value
(
PLSP_ID
);
short
localLspId
=
0
;
short
pccTunnelId
=
0
;
int
plspId
=
0
;
if
(
localLspIdString
!=
null
)
{
localLspId
=
Short
.
valueOf
(
localLspIdString
);
...
...
@@ -1077,6 +1135,10 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
pccTunnelId
=
Short
.
valueOf
(
pccTunnelIdString
);
}
if
(
pLspIdString
!=
null
)
{
plspId
=
Integer
.
valueOf
(
pLspIdString
);
}
tlv
=
new
StatefulIPv4LspIdentifiersTlv
((((
IpTunnelEndPoint
)
tunnel
.
src
())
.
ip
().
getIp4Address
().
toInt
()),
localLspId
,
pccTunnelId
,
0
,
(((
IpTunnelEndPoint
)
tunnel
.
dst
()).
ip
()
...
...
@@ -1119,7 +1181,14 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
PcepValueType
tlv
;
int
plspId
=
0
;
LinkedList
<
PcepValueType
>
llSubObjects
=
createPcepPath
(
path
);
LinkedList
<
PcepValueType
>
llSubObjects
=
null
;
NetworkResource
labelStack
=
tunnel
.
resource
();
if
(
labelStack
!=
null
&&
labelStack
instanceof
DefaultLabelStack
)
{
llSubObjects
=
createPcepLabelStack
((
DefaultLabelStack
)
labelStack
,
path
);
}
else
{
llSubObjects
=
createPcepPath
(
path
);
}
LinkedList
<
PcepValueType
>
llOptionalTlv
=
new
LinkedList
<
PcepValueType
>();
LinkedList
<
PcepUpdateRequest
>
llUpdateRequestList
=
new
LinkedList
<
PcepUpdateRequest
>();
...
...
@@ -1329,7 +1398,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
DefaultTunnelDescription
td
=
new
DefaultTunnelDescription
(
tunnel
.
tunnelId
(),
tunnel
.
src
(),
tunnel
.
dst
(),
tunnel
.
type
(),
tunnel
.
groupId
(),
providerId
,
tunnel
.
tunnelName
(),
path
,
annotations
);
tunnel
.
resource
(),
annotations
);
if
(
CREATE
==
pcepTunnelData
.
requestType
())
{
pcepTunnelApiMapper
.
addToTunnelIdMap
(
pcepTunnelData
);
...
...
@@ -1355,7 +1424,8 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
// though there are no labels to download for SR-TE.
if
((
pcepLspStatus
==
PcepLspStatus
.
GOING_UP
)
&&
(
LspType
.
valueOf
(
tunnel
.
annotations
().
value
(
LSP_SIG_TYPE
))
==
SR_WITHOUT_SIGNALLING
))
{
updateTunnel
(
tunnel
,
tunnel
.
path
());
// Query again to get latest tunnel updated with protocol values from PCRpt msg.
updateTunnel
(
service
.
tunnelQueryById
(
tunnel
.
tunnelId
()),
tunnel
.
path
());
}
}
...
...
@@ -1391,12 +1461,10 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
while
(
listIterator
.
hasNext
())
{
PcepValueType
tlv
=
listIterator
.
next
();
switch
(
tlv
.
getType
())
{
case
PathSetupTypeTlv
.
TYPE
:
lspType
=
LspType
.
values
()[
Integer
.
valueOf
(((
PathSetupTypeTlv
)
tlv
).
getPst
())];
break
;
default
:
break
;
}
...
...
@@ -1417,38 +1485,48 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
}
PcepAttribute
attributes
=
msgPath
.
getPcepAttribute
();
float
bandwidth
=
0
;
int
cost
=
0
;
if
(
attributes
!=
null
&&
attributes
.
getMetricObjectList
()
!=
null
)
{
ListIterator
<
PcepMetricObject
>
iterator
=
attributes
.
getMetricObjectList
().
listIterator
();
PcepMetricObject
metricObj
=
iterator
.
next
();
while
(
metricObj
!=
null
)
{
if
(
metricObj
.
getBType
()
==
IGP_METRIC
)
{
costType
=
"COST"
;
}
else
if
(
metricObj
.
getBType
()
==
TE_METRIC
)
{
costType
=
"TE_COST"
;
}
if
(
costType
!=
null
)
{
cost
=
metricObj
.
getMetricVal
();
log
.
debug
(
"Path cost {}"
,
cost
);
break
;
if
(
attributes
!=
null
)
{
if
(
attributes
.
getMetricObjectList
()
!=
null
)
{
ListIterator
<
PcepMetricObject
>
iterator
=
attributes
.
getMetricObjectList
().
listIterator
();
PcepMetricObject
metricObj
=
iterator
.
next
();
while
(
metricObj
!=
null
)
{
if
(
metricObj
.
getBType
()
==
IGP_METRIC
)
{
costType
=
"COST"
;
}
else
if
(
metricObj
.
getBType
()
==
TE_METRIC
)
{
costType
=
"TE_COST"
;
}
if
(
costType
!=
null
)
{
cost
=
metricObj
.
getMetricVal
();
log
.
debug
(
"Path cost {}"
,
cost
);
break
;
}
metricObj
=
iterator
.
next
();
}
metricObj
=
iterator
.
next
();
}
if
(
attributes
.
getBandwidthObject
()
!=
null
)
{
bandwidth
=
attributes
.
getBandwidthObject
().
getBandwidth
();
}
}
Path
path
=
buildPathFromEroObj
(
eroObj
,
providerId
,
cost
);
float
bandwidth
=
0
;
if
(
msgPath
.
getBandwidthObject
()
!=
null
)
{
bandwidth
=
msgPath
.
getBandwidthObject
().
getBandwidth
();
List
<
Object
>
eroSubObjList
=
buildPathFromEroObj
(
eroObj
,
providerId
);
List
<
Link
>
links
=
new
ArrayList
<>();
List
<
LabelResourceId
>
labels
=
new
ArrayList
<>();
for
(
Object
linkOrLabel
:
eroSubObjList
)
{
if
(
linkOrLabel
instanceof
Link
)
{
links
.
add
((
Link
)
linkOrLabel
);
}
else
if
(
linkOrLabel
instanceof
Integer
)
{
labels
.
add
(
LabelResourceId
.
labelResourceId
(((
Integer
)
linkOrLabel
).
longValue
()));
}
}
/*
* To carry PST TLV, SRP object can be present with value 0 even when PCRpt is not in response to any action
* from PCE.
*/
Path
path
=
new
DefaultPath
(
providerId
,
links
,
cost
,
EMPTY
);
NetworkResource
labelStack
=
new
DefaultLabelStack
(
labels
);
// To carry PST TLV, SRP object can be present with value 0 even when PCRpt is not in response to any action
// from PCE.
PcepSrpObject
srpObj
=
stateRpt
.
getSrpObject
();
LspType
lspType
=
getLspType
(
srpObj
);
...
...
@@ -1463,11 +1541,9 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
case
StatefulIPv4LspIdentifiersTlv
.
TYPE
:
ipv4LspIdenTlv
=
(
StatefulIPv4LspIdentifiersTlv
)
tlv
;
break
;
case
SymbolicPathNameTlv
.
TYPE
:
pathNameTlv
=
(
SymbolicPathNameTlv
)
tlv
;
break
;
default
:
break
;
}
...
...
@@ -1540,7 +1616,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
annotations
=
getAnnotations
(
lspObj
,
ipv4LspIdenTlv
,
bandwidth
,
lspType
,
costType
);
td
=
new
DefaultTunnelDescription
(
null
,
tunnelEndPointSrc
,
tunnelEndPointDst
,
MPLS
,
new
DefaultGroupId
(
0
),
providerId
,
TunnelName
.
tunnelName
(
new
String
(
pathNameTlv
.
getValue
())),
path
,
0
),
providerId
,
TunnelName
.
tunnelName
(
new
String
(
pathNameTlv
.
getValue
())),
path
,
labelStack
,
annotations
);
// Do not support PCC initiated LSP after LSP DB sync is completed.
...
...
@@ -1573,7 +1649,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
TunnelId
tId
=
tunnelAdded
(
td
,
tunnelState
);
Tunnel
tunnelInserted
=
new
DefaultTunnel
(
providerId
,
tunnelEndPointSrc
,
tunnelEndPointDst
,
MPLS
,
tunnelState
,
new
DefaultGroupId
(
0
),
tId
,
TunnelName
.
tunnelName
(
String
.
valueOf
(
pathNameTlv
.
getValue
())),
path
,
annotations
);
.
getValue
())),
path
,
labelStack
,
annotations
);
PcepTunnelData
pcepTunnelData
=
new
PcepTunnelData
(
tunnelInserted
,
path
,
LSP_STATE_RPT
);
pcepTunnelData
.
setStatefulIpv4IndentifierTlv
(
ipv4LspIdenTlv
);
...
...
@@ -1589,7 +1665,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
if
(
lspObj
.
getDFlag
())
{
annotations
=
getAnnotations
(
lspObj
,
ipv4LspIdenTlv
,
bandwidth
,
lspType
,
costType
);
td
=
new
DefaultTunnelDescription
(
null
,
tunnelEndPointSrc
,
tunnelEndPointDst
,
MPLS
,
new
DefaultGroupId
(
0
),
providerId
,
TunnelName
.
tunnelName
(
new
String
(
pathNameTlv
.
getValue
())),
path
,
0
),
providerId
,
TunnelName
.
tunnelName
(
new
String
(
pathNameTlv
.
getValue
())),
path
,
labelStack
,
annotations
);
tunnelUpdateInDelegatedCase
(
pccId
,
annotations
,
td
,
providerId
);
}
...
...
@@ -1629,15 +1705,14 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
*
* @param eroObj ERO object
* @param providerId provider id
* @param cost cost of path
* @return path object
* @return list of links and labels
*/
private
Path
buildPathFromEroObj
(
PcepEroObject
eroObj
,
ProviderId
providerId
,
int
cost
)
{
private
List
<
Object
>
buildPathFromEroObj
(
PcepEroObject
eroObj
,
ProviderId
providerId
)
{
checkNotNull
(
eroObj
);
List
<
Link
>
links
=
new
ArrayList
<
Link
>();
List
<
Object
>
subObjList
=
new
ArrayList
<
>();
LinkedList
<
PcepValueType
>
llSubObj
=
eroObj
.
getSubObjects
();
if
(
0
==
llSubObj
.
size
())
{
log
.
debug
(
"ERO in report message does not have hop information"
);
log
.
error
(
"ERO in report message does not have hop information"
);
return
null
;
}
ListIterator
<
PcepValueType
>
tlvIterator
=
llSubObj
.
listIterator
();
...
...
@@ -1665,16 +1740,34 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid
.
dst
(
dst
)
.
type
(
Link
.
Type
.
DIRECT
)
.
build
();
links
.
add
(
link
);
subObjList
.
add
(
link
);
src
=
dst
;
}
break
;
case
SrEroSubObject
.
TYPE
:
SrEroSubObject
srEroSubObj
=
(
SrEroSubObject
)
subObj
;
subObjList
.
add
(
srEroSubObj
.
getSid
());
if
(
srEroSubObj
.
getSt
()
==
PcepNaiIpv4Adjacency
.
ST_TYPE
)
{
PcepNaiIpv4Adjacency
nai
=
(
PcepNaiIpv4Adjacency
)
(
srEroSubObj
.
getNai
());
IpAddress
srcIp
=
IpAddress
.
valueOf
(
nai
.
getLocalIpv4Addr
());
src
=
new
ConnectPoint
(
IpElementId
.
ipElement
(
srcIp
),
PortNumber
.
portNumber
(
0
));
IpAddress
dstIp
=
IpAddress
.
valueOf
(
nai
.
getRemoteIpv4Addr
());
dst
=
new
ConnectPoint
(
IpElementId
.
ipElement
(
dstIp
),
PortNumber
.
portNumber
(
0
));
Link
link
=
DefaultLink
.
builder
()
.
providerId
(
providerId
)
.
src
(
src
)
.
dst
(
dst
)
.
type
(
Link
.
Type
.
DIRECT
)
.
build
();
subObjList
.
add
(
link
);
}
default
:
// the other sub objects are not required
}
}
return
new
DefaultPath
(
providerId
,
links
,
cost
,
EMPTY
)
;
return
subObjList
;
}
@Override
...
...
Please
register
or
login
to post a comment