diff options
author | ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp> | 2015-08-17 15:54:07 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-08-19 13:29:33 +0900 |
commit | c14a63575c62addaf96c78f4de9aef6e3c430f0f (patch) | |
tree | 272698e91435a7cd0a765dee37069096f4052501 /table/table.go | |
parent | 22b43f7ae7daf381520a529157be4c71c11c2bc8 (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.go | 25 |
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)] |