diff options
author | IWASE Yusuke <iwase.yusuke0@gmail.com> | 2017-08-04 15:54:44 +0900 |
---|---|---|
committer | fujita <fujita@fujita-no-MacBook.local> | 2017-09-14 09:22:04 +0900 |
commit | bb7d2f2541d67e7c2660ab80a91cb852e49ce1fb (patch) | |
tree | 4dc594a662f997f37bf2855514978d7bb006975f /server | |
parent | e82f1ebad2214e16960d08fe2ad85cd9422a187b (diff) |
config: Introduce Family field into AfiSafiState
To reduce the translations of "AfiSafiName" into "bgp.RouteFamily", this
patch introduces "Family" field into "AfiSafiState" and stores the
translated value.
Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com>
Diffstat (limited to 'server')
-rw-r--r-- | server/fsm.go | 15 | ||||
-rw-r--r-- | server/peer.go | 31 | ||||
-rw-r--r-- | server/server.go | 2 |
3 files changed, 17 insertions, 31 deletions
diff --git a/server/fsm.go b/server/fsm.go index 55a3aa0c..df31b30b 100644 --- a/server/fsm.go +++ b/server/fsm.go @@ -562,9 +562,8 @@ func (h *FSMHandler) active() (bgp.FSMState, FsmStateReason) { func capabilitiesFromConfig(pConf *config.Neighbor) []bgp.ParameterCapabilityInterface { caps := make([]bgp.ParameterCapabilityInterface, 0, 4) caps = append(caps, bgp.NewCapRouteRefresh()) - for _, rf := range pConf.AfiSafis { - family, _ := bgp.GetRouteFamily(string(rf.Config.AfiSafiName)) - caps = append(caps, bgp.NewCapMultiProtocol(family)) + for _, af := range pConf.AfiSafis { + caps = append(caps, bgp.NewCapMultiProtocol(af.State.Family)) } caps = append(caps, bgp.NewCapFourOctetASNumber(pConf.Config.LocalAs)) @@ -580,7 +579,6 @@ func capabilitiesFromConfig(pConf *config.Neighbor) []bgp.ParameterCapabilityInt if !c.HelperOnly { for i, rf := range pConf.AfiSafis { - k, _ := bgp.GetRouteFamily(string(rf.Config.AfiSafiName)) if m := rf.MpGracefulRestart.Config; m.Enabled { // When restarting, always flag forwaring bit. // This can be a lie, depending on how gobgpd is used. @@ -589,11 +587,11 @@ func capabilitiesFromConfig(pConf *config.Neighbor) []bgp.ParameterCapabilityInt // is a l2 switch which continues to work with no // relation to bgpd, this behavior is ok. // TODO consideration of other use-cases - tuples = append(tuples, bgp.NewCapGracefulRestartTuple(k, restarting)) + tuples = append(tuples, bgp.NewCapGracefulRestartTuple(rf.State.Family, restarting)) pConf.AfiSafis[i].MpGracefulRestart.State.Advertised = true } if m := rf.LongLivedGracefulRestart.Config; m.Enabled { - ltuples = append(ltuples, bgp.NewCapLongLivedGracefulRestartTuple(k, restarting, m.RestartTime)) + ltuples = append(ltuples, bgp.NewCapLongLivedGracefulRestartTuple(rf.State.Family, restarting, m.RestartTime)) } } } @@ -629,9 +627,8 @@ func capabilitiesFromConfig(pConf *config.Neighbor) []bgp.ParameterCapabilityInt } if uint8(mode) > 0 { items := make([]*bgp.CapAddPathTuple, 0, len(pConf.AfiSafis)) - for _, rf := range pConf.AfiSafis { - k, _ := bgp.GetRouteFamily(string(rf.Config.AfiSafiName)) - items = append(items, bgp.NewCapAddPathTuple(k, mode)) + for _, af := range pConf.AfiSafis { + items = append(items, bgp.NewCapAddPathTuple(af.State.Family, mode)) } caps = append(caps, bgp.NewCapAddPath(items)) } diff --git a/server/peer.go b/server/peer.go index 4d2d1ceb..4a1860e8 100644 --- a/server/peer.go +++ b/server/peer.go @@ -215,8 +215,7 @@ func (peer *Peer) forwardingPreservedFamilies() ([]bgp.RouteFamily, []bgp.RouteF list := []bgp.RouteFamily{} for _, a := range peer.fsm.pConf.AfiSafis { if s := a.MpGracefulRestart.State; s.Enabled && s.Received { - f, _ := bgp.GetRouteFamily(string(a.Config.AfiSafiName)) - list = append(list, f) + list = append(list, a.State.Family) } } return classifyFamilies(peer.configuredRFlist(), list) @@ -226,8 +225,7 @@ func (peer *Peer) llgrFamilies() ([]bgp.RouteFamily, []bgp.RouteFamily) { list := []bgp.RouteFamily{} for _, a := range peer.fsm.pConf.AfiSafis { if a.LongLivedGracefulRestart.State.Enabled { - f, _ := bgp.GetRouteFamily(string(a.Config.AfiSafiName)) - list = append(list, f) + list = append(list, a.State.Family) } } return classifyFamilies(peer.configuredRFlist(), list) @@ -248,7 +246,7 @@ func (peer *Peer) isLLGREnabledFamily(family bgp.RouteFamily) bool { func (peer *Peer) llgrRestartTime(family bgp.RouteFamily) uint32 { for _, a := range peer.fsm.pConf.AfiSafis { - if f, _ := bgp.GetRouteFamily(string(a.Config.AfiSafiName)); f == family { + if a.State.Family == family { return a.LongLivedGracefulRestart.State.PeerRestartTime } } @@ -258,7 +256,7 @@ func (peer *Peer) llgrRestartTime(family bgp.RouteFamily) uint32 { func (peer *Peer) llgrRestartTimerExpired(family bgp.RouteFamily) bool { all := true for _, a := range peer.fsm.pConf.AfiSafis { - if f, _ := bgp.GetRouteFamily(string(a.Config.AfiSafiName)); f == family { + if a.State.Family == family { a.LongLivedGracefulRestart.State.PeerRestartTimerExpired = true } s := a.LongLivedGracefulRestart.State @@ -498,18 +496,10 @@ func (peer *Peer) updatePrefixLimitConfig(c []config.AfiSafi) error { } m := make(map[bgp.RouteFamily]config.PrefixLimitConfig) for _, e := range x { - k, err := bgp.GetRouteFamily(string(e.Config.AfiSafiName)) - if err != nil { - return err - } - m[k] = e.PrefixLimit.Config + m[e.State.Family] = e.PrefixLimit.Config } for _, e := range y { - k, err := bgp.GetRouteFamily(string(e.Config.AfiSafiName)) - if err != nil { - return err - } - if p, ok := m[k]; !ok { + if p, ok := m[e.State.Family]; !ok { return fmt.Errorf("changing supported afi-safi is not allowed") } else if !p.Equal(&e.PrefixLimit.Config) { log.WithFields(log.Fields{ @@ -521,8 +511,8 @@ func (peer *Peer) updatePrefixLimitConfig(c []config.AfiSafi) error { "OldShutdownThresholdPct": p.ShutdownThresholdPct, "NewShutdownThresholdPct": e.PrefixLimit.Config.ShutdownThresholdPct, }).Warnf("update prefix limit configuration") - peer.prefixLimitWarned[k] = false - if msg := peer.doPrefixLimit(k, &e.PrefixLimit.Config); msg != nil { + peer.prefixLimitWarned[e.State.Family] = false + if msg := peer.doPrefixLimit(e.State.Family, &e.PrefixLimit.Config); msg != nil { sendFsmOutgoingMsg(peer, nil, msg, true) } } @@ -544,9 +534,8 @@ func (peer *Peer) handleUpdate(e *FsmMsg) ([]*table.Path, []bgp.RouteFamily, *bg peer.fsm.pConf.Timers.State.UpdateRecvTime = time.Now().Unix() if len(e.PathList) > 0 { peer.adjRibIn.Update(e.PathList) - for _, family := range peer.fsm.pConf.AfiSafis { - k, _ := bgp.GetRouteFamily(string(family.Config.AfiSafiName)) - if msg := peer.doPrefixLimit(k, &family.PrefixLimit.Config); msg != nil { + for _, af := range peer.fsm.pConf.AfiSafis { + if msg := peer.doPrefixLimit(af.State.Family, &af.PrefixLimit.Config); msg != nil { return nil, nil, msg } } diff --git a/server/server.go b/server/server.go index ac435172..d4b790a1 100644 --- a/server/server.go +++ b/server/server.go @@ -1009,7 +1009,7 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) { rtc = true } for i, a := range peer.fsm.pConf.AfiSafis { - if g, _ := bgp.GetRouteFamily(string(a.Config.AfiSafiName)); f == g { + if a.State.Family == f { peer.fsm.pConf.AfiSafis[i].MpGracefulRestart.State.EndOfRibReceived = true } } |