diff options
Diffstat (limited to 'server/peer.go')
-rw-r--r-- | server/peer.go | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/server/peer.go b/server/peer.go index 15c25353..eaf1e4ac 100644 --- a/server/peer.go +++ b/server/peer.go @@ -35,7 +35,6 @@ type Peer struct { tableId string fsm *FSM adjRibIn *table.AdjRib - adjRibOut *table.AdjRib outgoing *channels.InfiniteChannel policy *table.RoutingPolicy localRib *table.TableManager @@ -58,7 +57,6 @@ func NewPeer(g *config.Global, conf *config.Neighbor, loc *table.TableManager, p } rfs, _ := config.AfiSafis(conf.AfiSafis).ToRfList() peer.adjRibIn = table.NewAdjRib(peer.ID(), rfs) - peer.adjRibOut = table.NewAdjRib(peer.ID(), rfs) return peer } @@ -237,10 +235,11 @@ func (peer *Peer) filterpath(path, old *table.Path) *table.Path { // special handling for RTC nlri // see comments in (*Destination).Calculate() if path != nil && path.GetRouteFamily() == bgp.RF_RTC_UC && !path.IsWithdraw { - // if we already sent the same nlri, ignore this - if peer.adjRibOut.Exists(path) { - return nil - } + + // If we already sent the same nlri, send unnecessary + // update. Fix this after the API change between table + // and server packages. + dst := peer.localRib.GetDestination(path) path = nil // we send a path even if it is not a best path @@ -289,11 +288,9 @@ func (peer *Peer) filterpath(path, old *table.Path) *table.Path { // Procedure section (Section 4.7). Note that this requirement // implies that such routes should be withdrawn from any such neighbor. if path != nil && !path.IsWithdraw && !peer.isLLGREnabledFamily(path.GetRouteFamily()) && path.IsLLGRStale() { - if peer.adjRibOut.Exists(path) { - path = path.Clone(true) - } else { - return nil - } + // we send unnecessary withdrawn even if we didn't + // sent the route. + path = path.Clone(true) } // remove local-pref attribute @@ -347,8 +344,6 @@ func (peer *Peer) processOutgoingPaths(paths, olds []*table.Path) []*table.Path outgoing = append(outgoing, p) } } - - peer.adjRibOut.Update(outgoing) return outgoing } @@ -372,9 +367,7 @@ func (peer *Peer) handleRouteRefresh(e *FsmMsg) []*table.Path { return nil } rfList := []bgp.RouteFamily{rf} - peer.adjRibOut.Drop(rfList) accepted, filtered := peer.getBestFromLocal(rfList) - peer.adjRibOut.Update(accepted) for _, path := range filtered { path.IsWithdraw = true accepted = append(accepted, path) @@ -541,7 +534,8 @@ func (peer *Peer) ToConfig() *config.Neighbor { if peer.fsm.state == bgp.BGP_FSM_ESTABLISHED { rfList := peer.configuredRFlist() - conf.State.AdjTable.Advertised = uint32(peer.adjRibOut.Count(rfList)) + pathList, _ := peer.getBestFromLocal(rfList) + conf.State.AdjTable.Advertised = uint32(len(pathList)) conf.State.AdjTable.Received = uint32(peer.adjRibIn.Count(rfList)) conf.State.AdjTable.Accepted = uint32(peer.adjRibIn.Accepted(rfList)) @@ -556,5 +550,4 @@ func (peer *Peer) ToConfig() *config.Neighbor { func (peer *Peer) DropAll(rfList []bgp.RouteFamily) { peer.adjRibIn.Drop(rfList) - peer.adjRibOut.Drop(rfList) } |