[BGPCEP-1008] ODL Sulfur : PCEP Session terminates when a PCReq is received . Log shows "Compute path from Source Null" Created: 26/May/22  Updated: 08/Jun/22

Status: Open
Project: bgpcep
Component/s: None
Affects Version/s: 0.17.2
Fix Version/s: None

Type: Bug Priority: Highest
Reporter: Aseem Rai Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: pcep
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File Graph_operational.json     File initial_Pcep_topology.json     File linkstate_routes_bgp-example-rib.json     HTML File log_file_sulfur_1    

 Description   

Description

Initially , the BGPLS topology ( bgp-example rib ) and the Graph topology ( mapped using example-link-state-topology) is correctly populated ( GET response of linkstate routes and Graph topology attached) .  The PCEP session between this PCE and our PCC is also successfully established ( GET response of pcep-topology attached ). 

When i send a first PCRequest ( either for RSVP TE tunnel or Segment Routing MPLS tunnel) , the PCEP session is terminated by the PCE . 

In the log file, i see the message "Compute path from Source Null" after which an exception is raised. 

After this, the PCEP sessions keeps flapping.

Log: 

13:17:05.079 DEBUG [epollEventLoopGroup-11-2] Message was received: Pcreq{pcreqMessage=PcreqMessage{requests=[Requests{rp=Rp{biDirectional=false, eroCompression=false, fragmentation=false, ignore=false, loose=true, makeBeforeBreak=false, order=false, p2mp=false, pathKey=false, processingRule=true, reoptimization=false, requestId=RequestId{_value=2}, supplyOf=false, tlvs=Tlvs{pathSetupType=PathSetupType{pst=1}}}, segmentComputation=SegmentComputation{p2p=P2p{endpointsObj=EndpointsObj{addressFamily=Ipv4Case{ipv4=Ipv4{destinationIpv4Address=Ipv4Address{_value=5.5.5.5}, sourceIpv4Address=Ipv4Address{_value=1.1.1.1}}}, ignore=false, processingRule=true}}}}]}} from /1.1.1.1:58811
13:17:05.079 DEBUG [epollEventLoopGroup-11-2] PCEP message Pcreq{pcreqMessage=PcreqMessage{requests=[Requests{rp=Rp{biDirectional=false, eroCompression=false, fragmentation=false, ignore=false, loose=true, makeBeforeBreak=false, order=false, p2mp=false, pathKey=false, processingRule=true, reoptimization=false, requestId=RequestId{_value=2}, supplyOf=false, tlvs=Tlvs{pathSetupType=PathSetupType{pst=1}}}, segmentComputation=SegmentComputation{p2p=P2p{endpointsObj=EndpointsObj{addressFamily=Ipv4Case{ipv4=Ipv4{destinationIpv4Address=Ipv4Address{_value=5.5.5.5}, sourceIpv4Address=Ipv4Address{_value=1.1.1.1}}}, ignore=false, processingRule=true}}}}]}} received.
13:17:05.080 INFO [epollEventLoopGroup-11-2] PcReq detected. Start Request Message handler
13:17:05.080 INFO [epollEventLoopGroup-11-2] Start PcRequest Message handler
13:17:05.080 DEBUG [epollEventLoopGroup-11-2] Process request Requests{rp=Rp{biDirectional=false, eroCompression=false, fragmentation=false, ignore=false, loose=true, makeBeforeBreak=false, order=false, p2mp=false, pathKey=false, processingRule=true, reoptimization=false, requestId=RequestId{_value=2}, supplyOf=false, tlvs=Tlvs{pathSetupType=PathSetupType{pst=1}}}, segmentComputation=SegmentComputation{p2p=P2p{endpointsObj=EndpointsObj{addressFamily=Ipv4Case{ipv4=Ipv4{destinationIpv4Address=Ipv4Address{_value=5.5.5.5}, sourceIpv4Address=Ipv4Address{_value=1.1.1.1}}}, ignore=false, processingRule=true}}}}
13:17:05.080 INFO [epollEventLoopGroup-11-2] Received Compute Path request
13:17:05.080 DEBUG [epollEventLoopGroup-11-2] Request for path computation Requests{rp=Rp{biDirectional=false, eroCompression=false, fragmentation=false, ignore=false, loose=true, makeBeforeBreak=false, order=false, p2mp=false, pathKey=false, processingRule=true, reoptimization=false, requestId=RequestId{_value=2}, supplyOf=false, tlvs=Tlvs{pathSetupType=PathSetupType{pst=1}}}, segmentComputation=SegmentComputation{p2p=P2p{endpointsObj=EndpointsObj{addressFamily=Ipv4Case{ipv4=Ipv4{destinationIpv4Address=Ipv4Address{_value=5.5.5.5}, sourceIpv4Address=Ipv4Address{_value=1.1.1.1}}}, ignore=false, processingRule=true}}}}
13:17:05.080 DEBUG [epollEventLoopGroup-11-2] Compute path from Source Null
13:17:05.080 ERROR [epollEventLoopGroup-11-2] Exception captured for session PCEPSessionImpl{channel=[id: 0xa2925209, L:/201.1.1.252:4189 - R:/1.1.1.1:58811], localOpen=Open{deadTimer=120, keepalive=30, sessionId=1, tlvs=Tlvs{augmentation=[Tlvs1{srPceCapability=SrPceCapability{msd=0, nFlag=false, xFlag=false}}, Tlvs1{stateful=Stateful{lspUpdateCapability=true, augmentation=[Stateful1{deltaLspSyncCapability=true, includeDbVersion=true, triggeredInitialSync=true, triggeredResync=true}, Stateful1{initiation=true}]}}]}}, remoteOpen=Open{deadTimer=120, ignore=false, keepalive=30, processingRule=false, sessionId=10, tlvs=Tlvs{augmentation=[Tlvs1{srPceCapability=SrPceCapability{msd=6, nFlag=false, xFlag=false}}, Tlvs3{}, Tlvs1{stateful=Stateful{lspUpdateCapability=true, augmentation=[Stateful1{}, Stateful1{initiation=true}]}}]}, version=ProtocolVersion{_value=1}}}, closing session.
java.lang.NullPointerException: null<snip>13:17:05.082 INFO [epollEventLoopGroup-11-2] Closing PCEP session with reason UNKNOWN: PCEPSessionImpl{channel=[id: 0xa2925209, L:/201.1.1.252:4189 - R:/1.1.1.1:58811], localOpen=Open{deadTimer=120, keepalive=30, sessionId=1, tlvs=Tlvs{augmentation=[Tlvs1{srPceCapability=SrPceCapability{msd=0, nFlag=false, xFlag=false}}, Tlvs1{stateful=Stateful{lspUpdateCapability=true, augmentation=[Stateful1{deltaLspSyncCapability=true, includeDbVersion=true, triggeredInitialSync=true, triggeredResync=true}, Stateful1{initiation=true}]}}]}}, remoteOpen=Open{deadTimer=120, ignore=false, keepalive=30, processingRule=false, sessionId=10, tlvs=Tlvs{augmentation=[Tlvs1{srPceCapability=SrPceCapability{msd=6, nFlag=false, xFlag=false}}, Tlvs3null, Tlvs1{stateful=Stateful{lspUpdateCapability=true, augmentation=[Stateful1null, Stateful1{initiation=true}]}}]}, version=ProtocolVersion{_value=1}}}
13:17:05.083 DEBUG [epollEventLoopGroup-11-2] PCEP Message enqueued: Close{cCloseMessage=CCloseMessage{cClose=CClose{reason=1}}}
13:17:05.083 INFO [epollEventLoopGroup-11-2] Closing PCEP session channel: [id: 0xa2925209, L:/201.1.1.252:4189 - R:/1.1.1.1:58811]
13:17:05.083 INFO [epollEventLoopGroup-11-2] Session PCEPSessionImpl{channel=[id: 0xa2925209, L:/201.1.1.252:4189 ! R:/1.1.1.1:58811], localOpen=Open{deadTimer=120, keepalive=30, sessionId=1, tlvs=Tlvs{augmentation=[Tlvs1{srPceCapability=SrPceCapability{msd=0, nFlag=false, xFlag=false}}, Tlvs1{stateful=Stateful{lspUpdateCapability=true, augmentation=[Stateful1{deltaLspSyncCapability=true, includeDbVersion=true, triggeredInitialSync=true, triggeredResync=true}, Stateful1{initiation=true}]}}]}}, remoteOpen=Open{deadTimer=120, ignore=false, keepalive=30, processingRule=false, sessionId=10, tlvs=Tlvs{augmentation=[Tlvs1{srPceCapability=SrPceCapability{msd=6, nFlag=false, xFlag=false}}, Tlvs3null, Tlvs1{stateful=Stateful{lspUpdateCapability=true, augmentation=[Stateful1null, Stateful1{initiation=true}]}}]}, version=ProtocolVersion{_value=1}}} terminated by peer with reason PCEPCloseTermination{reason=UNKNOWN}
13:17:05.083 DEBUG [epollEventLoopGroup-11-2] Node KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, o 

Full log file attached ( please see the last part of the log file ) . 

All the graph and linkstate routes responses are attached . Also, pcep-topology response is attached too. 

 

 



 Comments   
Comment by Olivier Dugeon [ 01/Jun/22 ]

It seems that the Path Computation algorithm is not founding the source vertex to start the path computation. Unfortunately, the error is not catch correctly which cause the PCEP session to be closed.

When requesting a Path Computation, the algorithm starts by searching the vertex ID of source and destination routers from the IP address. In your case, the source IP address 1.1.1.1 corresponds to vertex ID 1 and destination IP address 5.5.5.5 correspond to vertex ID 5. But, this wrong. It should be 1.1.1.1 => 16843009 and 5.5.5.5 => 84215045 which is the decimal value of the IP addresses. So, it seems that the graph is wrong.

Can you tell us how the graph is fulfil ? automatically from BGP-LS ? manually ? If it from BGP-LS, I suspect a problem with the origin of the IGP: ospf as I tested it with IS-IS routing protocol intensively but less with OSPF topology.

In order to help us to determine what's wrong, on the same topology, can you use the RPC 'Get Constrained Path' (see https://docs.opendaylight.org/projects/bgpcep/en/latest/algo/algo-user-guide-running-algo.html#id4) and report what you get? Here, you should used the wrong vertex ID 1 for 1.1.1.1 and 5 for 5.5.5.5

 

 

 

Comment by Aseem Rai [ 03/Jun/22 ]

hello odd22 

The topology is built using BGP-LS automatically. We only used the link-state-topology and the graph-topology was created using that . I have tried this with both isis and ospf , but the results are same . 

I will check the RPC get constrained path and will post the response. 

Thank you for your help. 

Regards

Aseem.

Comment by Olivier Dugeon [ 08/Jun/22 ]

Dear Assem,

I installed a fresh opendaylight Sulfur release (with BGPCEP version 0.17.2) on our lab and all is working fine on my side. The graph topology is built from the link state routes learnt through BGP-LS. Vertices and Edges ID are correctly formatted from the corresponding IP addresses. I try both RPC and PcReq messages to got computed path. I also requested computed path with unknown source and/or destination addresses. I got a NO PATH answer as expected without any crash nor PCEP session closed.

I'm using a Juniper router as BGP-LS speaker. What do you use ? Have you verify that the link state topology is correct ? For that purpose, in addition to the link state route from BGP-LS, can you also provide the json output of the example-linkstate-topology with this REST API:

GET /rests/data/network-topology:network-topology/topology=example-linkstate-topology?content=nonconfig

Regards

Olivier

 

Generated at Wed Feb 07 19:14:45 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.