diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-10-19 18:46:19 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-10-19 18:46:19 +0900 |
commit | e191737ce9f9ca46aea9e5991be8330a81703191 (patch) | |
tree | f40a2bca4e54efdfc24111ac6e8bc290d9e2b383 /server/server.go | |
parent | e52ed21de6397fe3c16325dc08c738ba8201854d (diff) |
server: fix the number of accepted
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'server/server.go')
-rw-r--r-- | server/server.go | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/server/server.go b/server/server.go index 9b684afc..50e562b2 100644 --- a/server/server.go +++ b/server/server.go @@ -356,16 +356,10 @@ func (server *BgpServer) Serve() { if peer.isRouteServerClient() { peer.setPolicy(server.policyMap) pathList := make([]*table.Path, 0) + rfList := peer.configuredRFlist() for _, p := range server.neighborMap { - if p.isRouteServerClient() == false { - continue - } - for _, rf := range peer.configuredRFlist() { - for _, path := range p.adjRib.GetInPathList(rf) { - if path.Filtered == false { - pathList = append(pathList, path) - } - } + if p.isRouteServerClient() == true { + pathList = append(pathList, p.getAccepted(rfList)...) } } pathList, _ = peer.ApplyPolicy(table.POLICY_DIRECTION_IMPORT, pathList) @@ -651,7 +645,6 @@ func (server *BgpServer) broadcastPeerState(peer *Peer) { func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) []*SenderMsg { msgs := make([]*SenderMsg, 0) if peer != nil && peer.isRouteServerClient() { - pathList, _ = peer.ApplyPolicy(table.POLICY_DIRECTION_IN, pathList) for _, targetPeer := range server.neighborMap { rib := targetPeer.localRib if !targetPeer.isRouteServerClient() || rib.OwnerName() == peer.conf.NeighborConfig.NeighborAddress.String() { @@ -814,7 +807,18 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *fsmMsg, incoming chan * server.broadcastMsgs = append(server.broadcastMsgs, bm) } } - msgs = append(msgs, server.propagateUpdate(peer, pathList)...) + // FIXME: refactor peer.handleBGPmessage and this func + if peer.isRouteServerClient() { + var accepted []*table.Path + for _, p := range pathList { + if p.Filtered == false { + accepted = append(accepted, p) + } + } + msgs = append(msgs, server.propagateUpdate(peer, accepted)...) + } else { + msgs = append(msgs, server.propagateUpdate(peer, pathList)...) + } default: log.WithFields(log.Fields{ "Topic": "Peer", @@ -1454,10 +1458,6 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { if err != nil { break } - for _, peer := range peers { - peer.staleAccepted = false - peer.accepted = 0 - } if grpcReq.RequestType == REQ_NEIGHBOR_SOFT_RESET { logOp(grpcReq.Name, "Neighbor soft reset") } else { @@ -1466,6 +1466,10 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { for _, peer := range peers { pathList := peer.adjRib.GetInPathList(grpcReq.RouteFamily) + if peer.isRouteServerClient() { + pathList, _ = peer.ApplyPolicy(table.POLICY_DIRECTION_IN, pathList) + peer.updateAccepted(uint32(len(pathList))) + } msgs = append(msgs, server.propagateUpdate(peer, pathList)...) } |