summaryrefslogtreecommitdiffhomepage
path: root/table/table.go
diff options
context:
space:
mode:
authorISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>2015-08-17 15:54:07 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-08-19 13:29:33 +0900
commitc14a63575c62addaf96c78f4de9aef6e3c430f0f (patch)
tree272698e91435a7cd0a765dee37069096f4052501 /table/table.go
parent22b43f7ae7daf381520a529157be4c71c11c2bc8 (diff)
table: withdraw self-generated vrfed routes when a vrf deleted
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'table/table.go')
-rw-r--r--table/table.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/table/table.go b/table/table.go
index a5f867d4..3bc5bb3f 100644
--- a/table/table.go
+++ b/table/table.go
@@ -69,6 +69,31 @@ func (t *Table) DeleteDestByPeer(peerInfo *PeerInfo) []*Destination {
return changedDests
}
+func (t *Table) deletePathsByVrf(vrf *Vrf) []*Path {
+ pathList := make([]*Path, 0)
+ for _, dest := range t.destinations {
+ for _, p := range dest.GetKnownPathList() {
+ var rd bgp.RouteDistinguisherInterface
+ nlri := p.GetNlri()
+ switch nlri.(type) {
+ case *bgp.LabeledVPNIPAddrPrefix:
+ rd = nlri.(*bgp.LabeledVPNIPAddrPrefix).RD
+ case *bgp.LabeledVPNIPv6AddrPrefix:
+ rd = nlri.(*bgp.LabeledVPNIPv6AddrPrefix).RD
+ case *bgp.EVPNNLRI:
+ rd = nlri.(*bgp.EVPNNLRI).RD()
+ default:
+ return pathList
+ }
+ if p.IsLocal() && vrf.Rd.String() == rd.String() {
+ p.IsWithdraw = true
+ pathList = append(pathList, p)
+ }
+ }
+ }
+ return pathList
+}
+
func (t *Table) deleteDestByNlri(nlri bgp.AddrPrefixInterface) *Destination {
destinations := t.GetDestinations()
dest := destinations[t.tableKey(nlri)]