summaryrefslogtreecommitdiffhomepage
path: root/server/server.go
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2018-05-26 10:53:38 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2018-05-26 10:53:38 +0900
commit36d682afc2a16a29708aacfb0687d010a3b69348 (patch)
tree9e9a1d460227a836c658fb31d945ab009bba3448 /server/server.go
parenta0c8ba4ec1b2ec84adcd0b7f90121412fc4a4093 (diff)
server: fix infinite rtc update loop with addpath
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'server/server.go')
-rw-r--r--server/server.go10
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() {