diff --git a/routingtable/adjRIBOut/adj_rib_out.go b/routingtable/adjRIBOut/adj_rib_out.go index d55f98e1291321930e8e473a10602fcb4604feb5..e211479b0480a338259a0dccce1a66b060ebcfe1 100644 --- a/routingtable/adjRIBOut/adj_rib_out.go +++ b/routingtable/adjRIBOut/adj_rib_out.go @@ -111,14 +111,19 @@ func (a *AdjRIBOut) RemovePath(pfx bnet.Prefix, p *route.Path) bool { } a.rt.RemovePath(pfx, p) - pathID, err := a.pathIDManager.releasePath(p) - if err != nil { - log.Warningf("Unable to release path: %v", err) - return true + + // If the neighbar has AddPath capabilities, try to find the PathID + if a.neighbor.CapAddPathRX { + pathID, err := a.pathIDManager.releasePath(p) + if err != nil { + log.Warningf("Unable to release path for prefix %s: %v", pfx.String(), err) + return true + } + + p = p.Copy() + p.BGPPath.PathIdentifier = pathID } - p = p.Copy() - p.BGPPath.PathIdentifier = pathID a.removePathFromClients(pfx, p) return true }