[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: |
|
| 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:
[0m[90m13:17:05.079[0m [36mDEBUG[m [90m[epollEventLoopGroup-11-2][0m 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
[0m[90m13:17:05.079[0m [36mDEBUG[m [90m[epollEventLoopGroup-11-2][0m 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.
[0m[90m13:17:05.080[0m [1;32mINFO[m [90m[epollEventLoopGroup-11-2][0m PcReq detected. Start Request Message handler
[0m[90m13:17:05.080[0m [1;32mINFO[m [90m[epollEventLoopGroup-11-2][0m Start PcRequest Message handler
[0m[90m13:17:05.080[0m [36mDEBUG[m [90m[epollEventLoopGroup-11-2][0m 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}}}}
[0m[90m13:17:05.080[0m [1;32mINFO[m [90m[epollEventLoopGroup-11-2][0m Received Compute Path request
[0m[90m13:17:05.080[0m [36mDEBUG[m [90m[epollEventLoopGroup-11-2][0m 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}}}}
[0m[90m13:17:05.080[0m [36mDEBUG[m [90m[epollEventLoopGroup-11-2][0m Compute path from Source Null
[0m[90m13:17:05.080[0m [1;31mERROR[m [90m[epollEventLoopGroup-11-2][0m 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>[0m[90m13:17:05.082[0m [1;32mINFO[m [90m[epollEventLoopGroup-11-2][0m 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}}}
[0m[90m13:17:05.083[0m [36mDEBUG[m [90m[epollEventLoopGroup-11-2][0m PCEP Message enqueued: Close{cCloseMessage=CCloseMessage{cClose=CClose{reason=1}}}
[0m[90m13:17:05.083[0m [1;32mINFO[m [90m[epollEventLoopGroup-11-2][0m Closing PCEP session channel: [id: 0xa2925209, L:/201.1.1.252:4189 - R:/1.1.1.1:58811]
[0m[90m13:17:05.083[0m [1;32mINFO[m [90m[epollEventLoopGroup-11-2][0m 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}
[0m[90m13:17:05.083[0m [36mDEBUG[m [90m[epollEventLoopGroup-11-2][0m 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
|