summaryrefslogtreecommitdiffhomepage
path: root/server/server.go
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-10-19 18:46:19 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-10-19 18:46:19 +0900
commite191737ce9f9ca46aea9e5991be8330a81703191 (patch)
treef40a2bca4e54efdfc24111ac6e8bc290d9e2b383 /server/server.go
parente52ed21de6397fe3c16325dc08c738ba8201854d (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.go34
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)...)
}