diff options
Diffstat (limited to 'table/table.go')
-rw-r--r-- | table/table.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/table/table.go b/table/table.go index 3bc5bb3f..0d6abd29 100644 --- a/table/table.go +++ b/table/table.go @@ -88,6 +88,31 @@ func (t *Table) deletePathsByVrf(vrf *Vrf) []*Path { if p.IsLocal() && vrf.Rd.String() == rd.String() { p.IsWithdraw = true pathList = append(pathList, p) + break + } + } + } + return pathList +} + +func (t *Table) deleteRTCPathsByVrf(vrf *Vrf, vrfs map[string]*Vrf) []*Path { + pathList := make([]*Path, 0) + if t.routeFamily != bgp.RF_RTC_UC { + return pathList + } + for _, target := range vrf.ImportRt { + lhs := target.String() + for _, dest := range t.destinations { + nlri := dest.GetNlri().(*bgp.RouteTargetMembershipNLRI) + rhs := nlri.RouteTarget.String() + if lhs == rhs && isLastTargetUser(vrfs, target) { + for _, p := range dest.GetKnownPathList() { + if p.IsLocal() { + p.IsWithdraw = true + pathList = append(pathList, p) + break + } + } } } } |