diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2018-05-26 10:53:38 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2018-05-26 10:53:38 +0900 |
commit | 36d682afc2a16a29708aacfb0687d010a3b69348 (patch) | |
tree | 9e9a1d460227a836c658fb31d945ab009bba3448 /server | |
parent | a0c8ba4ec1b2ec84adcd0b7f90121412fc4a4093 (diff) |
server: fix infinite rtc update loop with addpath
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'server')
-rw-r--r-- | server/server.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/server/server.go b/server/server.go index 0baeffd1..6deea0dd 100644 --- a/server/server.go +++ b/server/server.go @@ -1006,6 +1006,16 @@ func (server *BgpServer) propagateUpdateToNeighbors(source *Peer, newPath *table }() } else { bestList = []*table.Path{newPath} + if newPath.GetRouteFamily() == bgp.RF_RTC_UC { + // we assumes that new "path" nlri was already sent before. This assumption avoids the + // infinite UPDATE loop between Route Reflector and its clients. + for _, old := range dsts[0].OldKnownPathList { + if old.IsLocal() { + bestList = []*table.Path{} + break + } + } + } } oldList = nil } else if targetPeer.isRouteServerClient() { |