Skip to content

Commit

Permalink
server: use negotiated family instead configured
Browse files Browse the repository at this point in the history
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
  • Loading branch information
fujita committed May 22, 2018
1 parent 9c8b20a commit 30e519e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 9 deletions.
8 changes: 8 additions & 0 deletions server/peer.go
Expand Up @@ -182,6 +182,14 @@ func (peer *Peer) configuredRFlist() []bgp.RouteFamily {
return rfs
}

func (peer *Peer) negotiatedRFList() []bgp.RouteFamily {
l := make([]bgp.RouteFamily, 0, len(peer.fsm.rfMap))
for family, _ := range peer.fsm.rfMap {
l = append(l, family)
}
return l
}

func (peer *Peer) toGlobalFamilies(families []bgp.RouteFamily) []bgp.RouteFamily {
if peer.fsm.pConf.Config.Vrf != "" {
fs := make([]bgp.RouteFamily, 0, len(families))
Expand Down
18 changes: 9 additions & 9 deletions server/server.go
Expand Up @@ -891,15 +891,15 @@ func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) {
// graph that is derived from Route Target membership information.
if peer != nil && path != nil && path.GetRouteFamily() == bgp.RF_RTC_UC {
rt := path.GetNlri().(*bgp.RouteTargetMembershipNLRI).RouteTarget
fs := make([]bgp.RouteFamily, 0, len(peer.configuredRFlist()))
for _, f := range peer.configuredRFlist() {
fs := make([]bgp.RouteFamily, 0, len(peer.negotiatedRFList()))
for _, f := range peer.negotiatedRFList() {
if f != bgp.RF_RTC_UC {
fs = append(fs, f)
}
}
var candidates []*table.Path
if path.IsWithdraw {
candidates, _ = server.getBestFromLocal(peer, peer.configuredRFlist())
candidates, _ = server.getBestFromLocal(peer, fs)
} else {
candidates = server.globalRib.GetBestPathList(peer.TableID(), 0, fs)
}
Expand Down Expand Up @@ -1141,13 +1141,13 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) {
if c := peer.fsm.pConf.GetAfiSafi(bgp.RF_RTC_UC); y && !peer.fsm.pConf.GracefulRestart.State.PeerRestarting && c.RouteTargetMembership.Config.DeferralTime > 0 {
pathList, _ = server.getBestFromLocal(peer, []bgp.RouteFamily{bgp.RF_RTC_UC})
t := c.RouteTargetMembership.Config.DeferralTime
for _, f := range peer.configuredRFlist() {
for _, f := range peer.negotiatedRFList() {
if f != bgp.RF_RTC_UC {
time.AfterFunc(time.Second*time.Duration(t), deferralExpiredFunc(f))
}
}
} else {
pathList, _ = server.getBestFromLocal(peer, peer.configuredRFlist())
pathList, _ = server.getBestFromLocal(peer, peer.negotiatedRFList())
}

if len(pathList) > 0 {
Expand Down Expand Up @@ -1283,7 +1283,7 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) {
if !p.isGracefulRestartEnabled() {
continue
}
paths, _ := server.getBestFromLocal(p, p.configuredRFlist())
paths, _ := server.getBestFromLocal(p, p.negotiatedRFList())
if len(paths) > 0 {
sendFsmOutgoingMsg(p, paths, nil, false)
}
Expand Down Expand Up @@ -1319,8 +1319,8 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) {
"Topic": "Peer",
"Key": peer.ID(),
}).Debug("received route-target eor. flash non-route-target NLRIs")
families := make([]bgp.RouteFamily, 0, len(peer.configuredRFlist()))
for _, f := range peer.configuredRFlist() {
families := make([]bgp.RouteFamily, 0, len(peer.negotiatedRFList()))
for _, f := range peer.negotiatedRFList() {
if f != bgp.RF_RTC_UC {
families = append(families, f)
}
Expand Down Expand Up @@ -1750,7 +1750,7 @@ func (s *BgpServer) softResetOut(addr string, family bgp.RouteFamily, deferral b

families := []bgp.RouteFamily{family}
if family == bgp.RouteFamily(0) {
families = peer.configuredRFlist()
families = peer.negotiatedRFList()
}

if deferral {
Expand Down

0 comments on commit 30e519e

Please sign in to comment.