diff options
Diffstat (limited to 'server/peer.go')
-rw-r--r-- | server/peer.go | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/server/peer.go b/server/peer.go index 3b0bd44b..a36c44a2 100644 --- a/server/peer.go +++ b/server/peer.go @@ -43,6 +43,7 @@ type Peer struct { outgoing chan *bgp.BGPMessage inPolicies []*policy.Policy defaultInPolicy config.DefaultPolicyType + accepted uint32 importPolicies []*policy.Policy defaultImportPolicy config.DefaultPolicyType exportPolicies []*policy.Policy @@ -291,13 +292,11 @@ func (peer *Peer) ToApiStruct() *api.Peer { advertized := uint32(0) received := uint32(0) - accepted := uint32(0) if f.state == bgp.BGP_FSM_ESTABLISHED { for _, rf := range peer.configuredRFlist() { advertized += uint32(peer.adjRib.GetOutCount(rf)) received += uint32(peer.adjRib.GetInCount(rf)) // FIXME: we should store 'accepted' in memory - accepted += uint32(len(peer.ApplyPolicy(POLICY_DIRECTION_IN, peer.adjRib.GetInPathList(rf)))) } } @@ -331,7 +330,7 @@ func (peer *Peer) ToApiStruct() *api.Peer { Uptime: uptime, Downtime: downtime, Received: received, - Accepted: accepted, + Accepted: peer.accepted, Advertized: advertized, OutQ: uint32(len(peer.outgoing)), Flops: s.Flops, @@ -443,6 +442,9 @@ func (peer *Peer) ApplyPolicy(d PolicyDirection, paths []*table.Path) []*table.P switch result { case policy.ROUTE_TYPE_ACCEPT: newpaths = append(newpaths, newpath) + if d == POLICY_DIRECTION_IN { + peer.accepted += 1 + } case policy.ROUTE_TYPE_REJECT: log.WithFields(log.Fields{ "Topic": "Peer", @@ -454,3 +456,8 @@ func (peer *Peer) ApplyPolicy(d PolicyDirection, paths []*table.Path) []*table.P } return newpaths } + +func (peer *Peer) DropAll(rf bgp.RouteFamily) { + peer.adjRib.DropAll(rf) + peer.accepted = 0 +} |