summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--pkg/server/fsm.go8
-rw-r--r--pkg/server/fsm_test.go4
-rw-r--r--pkg/server/peer.go88
-rw-r--r--pkg/server/server.go62
-rw-r--r--pkg/server/server_test.go29
5 files changed, 97 insertions, 94 deletions
diff --git a/pkg/server/fsm.go b/pkg/server/fsm.go
index 4830feb2..6a8fd942 100644
--- a/pkg/server/fsm.go
+++ b/pkg/server/fsm.go
@@ -408,8 +408,8 @@ func (fsm *FSM) connectLoop() error {
fsm.lock.RLock()
tick := int(fsm.pConf.Timers.Config.ConnectRetry)
fsm.lock.RUnlock()
- if tick < MIN_CONNECT_RETRY {
- tick = MIN_CONNECT_RETRY
+ if tick < minConnectRetry {
+ tick = minConnectRetry
}
r := rand.New(rand.NewSource(time.Now().UnixNano()))
@@ -438,7 +438,7 @@ func (fsm *FSM) connectLoop() error {
d := tcpDialer{
Dialer: net.Dialer{
LocalAddr: laddr,
- Timeout: time.Duration(MIN_CONNECT_RETRY-1) * time.Second,
+ Timeout: time.Duration(minConnectRetry-1) * time.Second,
},
AuthPassword: fsm.pConf.Config.AuthPassword,
}
@@ -493,7 +493,7 @@ func (fsm *FSM) connectLoop() error {
go connect()
}
case <-fsm.getActiveCh:
- timer.Reset(time.Duration(r.Intn(MIN_CONNECT_RETRY)+MIN_CONNECT_RETRY) * time.Second)
+ timer.Reset(time.Duration(r.Intn(minConnectRetry)+minConnectRetry) * time.Second)
}
}
}
diff --git a/pkg/server/fsm_test.go b/pkg/server/fsm_test.go
index dad6563a..e7daa9b6 100644
--- a/pkg/server/fsm_test.go
+++ b/pkg/server/fsm_test.go
@@ -308,8 +308,8 @@ func TestCheckOwnASLoop(t *testing.T) {
assert.False(hasOwnASLoop(65200, 0, aspath))
}
-func makePeerAndHandler() (*Peer, *FSMHandler) {
- p := &Peer{
+func makePeerAndHandler() (*peer, *FSMHandler) {
+ p := &peer{
fsm: NewFSM(&config.Global{}, &config.Neighbor{}, table.NewRoutingPolicy()),
outgoing: channels.NewInfiniteChannel(),
}
diff --git a/pkg/server/peer.go b/pkg/server/peer.go
index 632e14a4..28bf0fee 100644
--- a/pkg/server/peer.go
+++ b/pkg/server/peer.go
@@ -29,37 +29,37 @@ import (
)
const (
- FLOP_THRESHOLD = time.Second * 30
- MIN_CONNECT_RETRY = 10
+ flopThreshold = time.Second * 30
+ minConnectRetry = 10
)
-type PeerGroup struct {
+type peerGroup struct {
Conf *config.PeerGroup
members map[string]config.Neighbor
dynamicNeighbors map[string]*config.DynamicNeighbor
}
-func NewPeerGroup(c *config.PeerGroup) *PeerGroup {
- return &PeerGroup{
+func newPeerGroup(c *config.PeerGroup) *peerGroup {
+ return &peerGroup{
Conf: c,
members: make(map[string]config.Neighbor),
dynamicNeighbors: make(map[string]*config.DynamicNeighbor),
}
}
-func (pg *PeerGroup) AddMember(c config.Neighbor) {
+func (pg *peerGroup) AddMember(c config.Neighbor) {
pg.members[c.State.NeighborAddress] = c
}
-func (pg *PeerGroup) DeleteMember(c config.Neighbor) {
+func (pg *peerGroup) DeleteMember(c config.Neighbor) {
delete(pg.members, c.State.NeighborAddress)
}
-func (pg *PeerGroup) AddDynamicNeighbor(c *config.DynamicNeighbor) {
+func (pg *peerGroup) AddDynamicNeighbor(c *config.DynamicNeighbor) {
pg.dynamicNeighbors[c.Config.Prefix] = c
}
-func newDynamicPeer(g *config.Global, neighborAddress string, pg *config.PeerGroup, loc *table.TableManager, policy *table.RoutingPolicy) *Peer {
+func newDynamicPeer(g *config.Global, neighborAddress string, pg *config.PeerGroup, loc *table.TableManager, policy *table.RoutingPolicy) *peer {
conf := config.Neighbor{
Config: config.NeighborConfig{
PeerGroup: pg.Config.PeerGroupName,
@@ -87,14 +87,14 @@ func newDynamicPeer(g *config.Global, neighborAddress string, pg *config.PeerGro
}).Debugf("Can't set default config: %s", err)
return nil
}
- peer := NewPeer(g, &conf, loc, policy)
+ peer := newPeer(g, &conf, loc, policy)
peer.fsm.lock.Lock()
peer.fsm.state = bgp.BGP_FSM_ACTIVE
peer.fsm.lock.Unlock()
return peer
}
-type Peer struct {
+type peer struct {
tableId string
fsm *FSM
adjRibIn *table.AdjRib
@@ -105,8 +105,8 @@ type Peer struct {
llgrEndChs []chan struct{}
}
-func NewPeer(g *config.Global, conf *config.Neighbor, loc *table.TableManager, policy *table.RoutingPolicy) *Peer {
- peer := &Peer{
+func newPeer(g *config.Global, conf *config.Neighbor, loc *table.TableManager, policy *table.RoutingPolicy) *peer {
+ peer := &peer{
outgoing: channels.NewInfiniteChannel(),
localRib: loc,
policy: policy,
@@ -123,45 +123,45 @@ func NewPeer(g *config.Global, conf *config.Neighbor, loc *table.TableManager, p
return peer
}
-func (peer *Peer) AS() uint32 {
+func (peer *peer) AS() uint32 {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
return peer.fsm.pConf.State.PeerAs
}
-func (peer *Peer) ID() string {
+func (peer *peer) ID() string {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
return peer.fsm.pConf.State.NeighborAddress
}
-func (peer *Peer) TableID() string {
+func (peer *peer) TableID() string {
return peer.tableId
}
-func (peer *Peer) isIBGPPeer() bool {
+func (peer *peer) isIBGPPeer() bool {
return peer.fsm.pConf.State.PeerAs == peer.fsm.gConf.Config.As
}
-func (peer *Peer) isRouteServerClient() bool {
+func (peer *peer) isRouteServerClient() bool {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
return peer.fsm.pConf.RouteServer.Config.RouteServerClient
}
-func (peer *Peer) isRouteReflectorClient() bool {
+func (peer *peer) isRouteReflectorClient() bool {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
return peer.fsm.pConf.RouteReflector.Config.RouteReflectorClient
}
-func (peer *Peer) isGracefulRestartEnabled() bool {
+func (peer *peer) isGracefulRestartEnabled() bool {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
return peer.fsm.pConf.GracefulRestart.State.Enabled
}
-func (peer *Peer) getAddPathMode(family bgp.RouteFamily) bgp.BGPAddPathMode {
+func (peer *peer) getAddPathMode(family bgp.RouteFamily) bgp.BGPAddPathMode {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
if mode, y := peer.fsm.rfMap[family]; y {
@@ -170,21 +170,21 @@ func (peer *Peer) getAddPathMode(family bgp.RouteFamily) bgp.BGPAddPathMode {
return bgp.BGP_ADD_PATH_NONE
}
-func (peer *Peer) isAddPathReceiveEnabled(family bgp.RouteFamily) bool {
+func (peer *peer) isAddPathReceiveEnabled(family bgp.RouteFamily) bool {
return (peer.getAddPathMode(family) & bgp.BGP_ADD_PATH_RECEIVE) > 0
}
-func (peer *Peer) isAddPathSendEnabled(family bgp.RouteFamily) bool {
+func (peer *peer) isAddPathSendEnabled(family bgp.RouteFamily) bool {
return (peer.getAddPathMode(family) & bgp.BGP_ADD_PATH_SEND) > 0
}
-func (peer *Peer) isDynamicNeighbor() bool {
+func (peer *peer) isDynamicNeighbor() bool {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
return peer.fsm.pConf.Config.NeighborAddress == "" && peer.fsm.pConf.Config.NeighborInterface == ""
}
-func (peer *Peer) recvedAllEOR() bool {
+func (peer *peer) recvedAllEOR() bool {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
for _, a := range peer.fsm.pConf.AfiSafis {
@@ -195,14 +195,14 @@ func (peer *Peer) recvedAllEOR() bool {
return true
}
-func (peer *Peer) configuredRFlist() []bgp.RouteFamily {
+func (peer *peer) configuredRFlist() []bgp.RouteFamily {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
rfs, _ := config.AfiSafis(peer.fsm.pConf.AfiSafis).ToRfList()
return rfs
}
-func (peer *Peer) negotiatedRFList() []bgp.RouteFamily {
+func (peer *peer) negotiatedRFList() []bgp.RouteFamily {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
l := make([]bgp.RouteFamily, 0, len(peer.fsm.rfMap))
@@ -212,7 +212,7 @@ func (peer *Peer) negotiatedRFList() []bgp.RouteFamily {
return l
}
-func (peer *Peer) toGlobalFamilies(families []bgp.RouteFamily) []bgp.RouteFamily {
+func (peer *peer) toGlobalFamilies(families []bgp.RouteFamily) []bgp.RouteFamily {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
if peer.fsm.pConf.Config.Vrf != "" {
@@ -256,7 +256,7 @@ func classifyFamilies(all, part []bgp.RouteFamily) ([]bgp.RouteFamily, []bgp.Rou
return a, b
}
-func (peer *Peer) forwardingPreservedFamilies() ([]bgp.RouteFamily, []bgp.RouteFamily) {
+func (peer *peer) forwardingPreservedFamilies() ([]bgp.RouteFamily, []bgp.RouteFamily) {
peer.fsm.lock.RLock()
list := []bgp.RouteFamily{}
for _, a := range peer.fsm.pConf.AfiSafis {
@@ -268,7 +268,7 @@ func (peer *Peer) forwardingPreservedFamilies() ([]bgp.RouteFamily, []bgp.RouteF
return classifyFamilies(peer.configuredRFlist(), list)
}
-func (peer *Peer) llgrFamilies() ([]bgp.RouteFamily, []bgp.RouteFamily) {
+func (peer *peer) llgrFamilies() ([]bgp.RouteFamily, []bgp.RouteFamily) {
peer.fsm.lock.RLock()
list := []bgp.RouteFamily{}
for _, a := range peer.fsm.pConf.AfiSafis {
@@ -280,7 +280,7 @@ func (peer *Peer) llgrFamilies() ([]bgp.RouteFamily, []bgp.RouteFamily) {
return classifyFamilies(peer.configuredRFlist(), list)
}
-func (peer *Peer) isLLGREnabledFamily(family bgp.RouteFamily) bool {
+func (peer *peer) isLLGREnabledFamily(family bgp.RouteFamily) bool {
peer.fsm.lock.RLock()
llgrEnabled := peer.fsm.pConf.GracefulRestart.Config.LongLivedEnabled
peer.fsm.lock.RUnlock()
@@ -296,7 +296,7 @@ func (peer *Peer) isLLGREnabledFamily(family bgp.RouteFamily) bool {
return false
}
-func (peer *Peer) llgrRestartTime(family bgp.RouteFamily) uint32 {
+func (peer *peer) llgrRestartTime(family bgp.RouteFamily) uint32 {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
for _, a := range peer.fsm.pConf.AfiSafis {
@@ -307,7 +307,7 @@ func (peer *Peer) llgrRestartTime(family bgp.RouteFamily) uint32 {
return 0
}
-func (peer *Peer) llgrRestartTimerExpired(family bgp.RouteFamily) bool {
+func (peer *peer) llgrRestartTimerExpired(family bgp.RouteFamily) bool {
peer.fsm.lock.RLock()
defer peer.fsm.lock.RUnlock()
all := true
@@ -323,7 +323,7 @@ func (peer *Peer) llgrRestartTimerExpired(family bgp.RouteFamily) bool {
return all
}
-func (peer *Peer) markLLGRStale(fs []bgp.RouteFamily) []*table.Path {
+func (peer *peer) markLLGRStale(fs []bgp.RouteFamily) []*table.Path {
paths := peer.adjRibIn.PathList(fs, true)
for i, p := range paths {
doStale := true
@@ -343,7 +343,7 @@ func (peer *Peer) markLLGRStale(fs []bgp.RouteFamily) []*table.Path {
return paths
}
-func (peer *Peer) stopPeerRestarting() {
+func (peer *peer) stopPeerRestarting() {
peer.fsm.lock.Lock()
defer peer.fsm.lock.Unlock()
peer.fsm.pConf.GracefulRestart.State.PeerRestarting = false
@@ -354,7 +354,7 @@ func (peer *Peer) stopPeerRestarting() {
}
-func (peer *Peer) filterPathFromSourcePeer(path, old *table.Path) *table.Path {
+func (peer *peer) filterPathFromSourcePeer(path, old *table.Path) *table.Path {
if peer.ID() != path.GetSource().Address.String() {
return path
}
@@ -389,7 +389,7 @@ func (peer *Peer) filterPathFromSourcePeer(path, old *table.Path) *table.Path {
return nil
}
-func (peer *Peer) doPrefixLimit(k bgp.RouteFamily, c *config.PrefixLimitConfig) *bgp.BGPMessage {
+func (peer *peer) doPrefixLimit(k bgp.RouteFamily, c *config.PrefixLimitConfig) *bgp.BGPMessage {
if maxPrefixes := int(c.MaxPrefixes); maxPrefixes > 0 {
count := peer.adjRibIn.Count([]bgp.RouteFamily{k})
pct := int(c.ShutdownThresholdPct)
@@ -414,7 +414,7 @@ func (peer *Peer) doPrefixLimit(k bgp.RouteFamily, c *config.PrefixLimitConfig)
}
-func (peer *Peer) updatePrefixLimitConfig(c []config.AfiSafi) error {
+func (peer *peer) updatePrefixLimitConfig(c []config.AfiSafi) error {
peer.fsm.lock.RLock()
x := peer.fsm.pConf.AfiSafis
peer.fsm.lock.RUnlock()
@@ -451,7 +451,7 @@ func (peer *Peer) updatePrefixLimitConfig(c []config.AfiSafi) error {
return nil
}
-func (peer *Peer) handleUpdate(e *FsmMsg) ([]*table.Path, []bgp.RouteFamily, *bgp.BGPMessage) {
+func (peer *peer) handleUpdate(e *FsmMsg) ([]*table.Path, []bgp.RouteFamily, *bgp.BGPMessage) {
m := e.MsgData.(*bgp.BGPMessage)
update := m.Body.(*bgp.BGPUpdate)
log.WithFields(log.Fields{
@@ -526,18 +526,18 @@ func (peer *Peer) handleUpdate(e *FsmMsg) ([]*table.Path, []bgp.RouteFamily, *bg
return nil, nil, nil
}
-func (peer *Peer) startFSMHandler(incoming *channels.InfiniteChannel, stateCh chan *FsmMsg) {
+func (peer *peer) startFSMHandler(incoming *channels.InfiniteChannel, stateCh chan *FsmMsg) {
handler := NewFSMHandler(peer.fsm, incoming, stateCh, peer.outgoing)
peer.fsm.lock.Lock()
peer.fsm.h = handler
peer.fsm.lock.Unlock()
}
-func (peer *Peer) StaleAll(rfList []bgp.RouteFamily) []*table.Path {
+func (peer *peer) StaleAll(rfList []bgp.RouteFamily) []*table.Path {
return peer.adjRibIn.StaleAll(rfList)
}
-func (peer *Peer) PassConn(conn *net.TCPConn) {
+func (peer *peer) PassConn(conn *net.TCPConn) {
select {
case peer.fsm.connCh <- conn:
default:
@@ -549,11 +549,11 @@ func (peer *Peer) PassConn(conn *net.TCPConn) {
}
}
-func (peer *Peer) DropAll(rfList []bgp.RouteFamily) {
+func (peer *peer) DropAll(rfList []bgp.RouteFamily) {
peer.adjRibIn.Drop(rfList)
}
-func (peer *Peer) stopFSM() error {
+func (peer *peer) stopFSM() error {
failed := false
peer.fsm.lock.RLock()
addr := peer.fsm.pConf.State.NeighborAddress
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 33c892aa..f9b1007c 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -105,8 +105,8 @@ type BgpServer struct {
mgmtCh chan *mgmtOp
policy *table.RoutingPolicy
listeners []*tcpListener
- neighborMap map[string]*Peer
- peerGroupMap map[string]*PeerGroup
+ neighborMap map[string]*peer
+ peerGroupMap map[string]*peerGroup
globalRib *table.TableManager
rsRib *table.TableManager
roaManager *roaManager
@@ -121,8 +121,8 @@ type BgpServer struct {
func NewBgpServer() *BgpServer {
roaManager, _ := newROAManager(0)
s := &BgpServer{
- neighborMap: make(map[string]*Peer),
- peerGroupMap: make(map[string]*PeerGroup),
+ neighborMap: make(map[string]*peer),
+ peerGroupMap: make(map[string]*peerGroup),
policy: table.NewRoutingPolicy(),
roaManager: roaManager,
mgmtCh: make(chan *mgmtOp, 1),
@@ -331,10 +331,10 @@ func (server *BgpServer) Serve() {
}
}
-func (server *BgpServer) matchLongestDynamicNeighborPrefix(a string) *PeerGroup {
+func (server *BgpServer) matchLongestDynamicNeighborPrefix(a string) *peerGroup {
ipAddr := net.ParseIP(a)
longestMask := net.CIDRMask(0, 32).String()
- var longestPG *PeerGroup
+ var longestPG *peerGroup
for _, pg := range server.peerGroupMap {
for _, d := range pg.dynamicNeighbors {
_, netAddr, _ := net.ParseCIDR(d.Config.Prefix)
@@ -349,7 +349,7 @@ func (server *BgpServer) matchLongestDynamicNeighborPrefix(a string) *PeerGroup
return longestPG
}
-func sendFsmOutgoingMsg(peer *Peer, paths []*table.Path, notification *bgp.BGPMessage, stayIdle bool) {
+func sendFsmOutgoingMsg(peer *peer, paths []*table.Path, notification *bgp.BGPMessage, stayIdle bool) {
peer.outgoing.In() <- &FsmOutgoingMsg{
Paths: paths,
Notification: notification,
@@ -357,7 +357,7 @@ func sendFsmOutgoingMsg(peer *Peer, paths []*table.Path, notification *bgp.BGPMe
}
}
-func isASLoop(peer *Peer, path *table.Path) bool {
+func isASLoop(peer *peer, path *table.Path) bool {
for _, as := range path.GetAsList() {
if as == peer.AS() {
return true
@@ -366,7 +366,7 @@ func isASLoop(peer *Peer, path *table.Path) bool {
return false
}
-func filterpath(peer *Peer, path, old *table.Path) *table.Path {
+func filterpath(peer *peer, path, old *table.Path) *table.Path {
if path == nil {
return nil
}
@@ -476,7 +476,7 @@ func filterpath(peer *Peer, path, old *table.Path) *table.Path {
return path
}
-func (s *BgpServer) filterpath(peer *Peer, path, old *table.Path) *table.Path {
+func (s *BgpServer) filterpath(peer *peer, path, old *table.Path) *table.Path {
// Special handling for RTM NLRI.
if path != nil && path.GetRouteFamily() == bgp.RF_RTC_UC && !path.IsWithdraw {
// If the given "path" is locally generated and the same with "old", we
@@ -634,7 +634,7 @@ func (server *BgpServer) notifyBestWatcher(best []*table.Path, multipath [][]*ta
server.notifyWatcher(WATCH_EVENT_TYPE_BEST_PATH, w)
}
-func (s *BgpServer) toConfig(peer *Peer, getAdvertised bool) *config.Neighbor {
+func (s *BgpServer) toConfig(peer *peer, getAdvertised bool) *config.Neighbor {
// create copy which can be access to without mutex
peer.fsm.lock.RLock()
conf := *peer.fsm.pConf
@@ -693,7 +693,7 @@ func (s *BgpServer) toConfig(peer *Peer, getAdvertised bool) *config.Neighbor {
return &conf
}
-func (server *BgpServer) notifyPrePolicyUpdateWatcher(peer *Peer, pathList []*table.Path, msg *bgp.BGPMessage, timestamp time.Time, payload []byte) {
+func (server *BgpServer) notifyPrePolicyUpdateWatcher(peer *peer, pathList []*table.Path, msg *bgp.BGPMessage, timestamp time.Time, payload []byte) {
if !server.isWatched(WATCH_EVENT_TYPE_PRE_UPDATE) || peer == nil {
return
}
@@ -723,7 +723,7 @@ func (server *BgpServer) notifyPrePolicyUpdateWatcher(peer *Peer, pathList []*ta
server.notifyWatcher(WATCH_EVENT_TYPE_PRE_UPDATE, ev)
}
-func (server *BgpServer) notifyPostPolicyUpdateWatcher(peer *Peer, pathList []*table.Path) {
+func (server *BgpServer) notifyPostPolicyUpdateWatcher(peer *peer, pathList []*table.Path) {
if !server.isWatched(WATCH_EVENT_TYPE_POST_UPDATE) || peer == nil {
return
}
@@ -751,7 +751,7 @@ func (server *BgpServer) notifyPostPolicyUpdateWatcher(peer *Peer, pathList []*t
server.notifyWatcher(WATCH_EVENT_TYPE_POST_UPDATE, ev)
}
-func newWatchEventPeerState(peer *Peer, m *FsmMsg) *WatchEventPeerState {
+func newWatchEventPeerState(peer *peer, m *FsmMsg) *WatchEventPeerState {
_, rport := peer.fsm.RemoteHostPort()
laddr, lport := peer.fsm.LocalHostPort()
sentOpen := buildopen(peer.fsm.gConf, peer.fsm.pConf)
@@ -780,7 +780,7 @@ func newWatchEventPeerState(peer *Peer, m *FsmMsg) *WatchEventPeerState {
return e
}
-func (server *BgpServer) broadcastPeerState(peer *Peer, oldState bgp.FSMState, e *FsmMsg) {
+func (server *BgpServer) broadcastPeerState(peer *peer, oldState bgp.FSMState, e *FsmMsg) {
peer.fsm.lock.RLock()
newState := peer.fsm.state
peer.fsm.lock.RUnlock()
@@ -789,7 +789,7 @@ func (server *BgpServer) broadcastPeerState(peer *Peer, oldState bgp.FSMState, e
}
}
-func (server *BgpServer) notifyMessageWatcher(peer *Peer, timestamp time.Time, msg *bgp.BGPMessage, isSent bool) {
+func (server *BgpServer) notifyMessageWatcher(peer *peer, timestamp time.Time, msg *bgp.BGPMessage, isSent bool) {
// validation should be done in the caller of this function
peer.fsm.lock.RLock()
_, y := peer.fsm.capMap[bgp.BGP_CAP_FOUR_OCTET_AS_NUMBER]
@@ -811,14 +811,14 @@ func (server *BgpServer) notifyMessageWatcher(peer *Peer, timestamp time.Time, m
}
}
-func (server *BgpServer) notifyRecvMessageWatcher(peer *Peer, timestamp time.Time, msg *bgp.BGPMessage) {
+func (server *BgpServer) notifyRecvMessageWatcher(peer *peer, timestamp time.Time, msg *bgp.BGPMessage) {
if peer == nil || !server.isWatched(WATCH_EVENT_TYPE_RECV_MSG) {
return
}
server.notifyMessageWatcher(peer, timestamp, msg, false)
}
-func (s *BgpServer) getBestFromLocal(peer *Peer, rfList []bgp.RouteFamily) ([]*table.Path, []*table.Path) {
+func (s *BgpServer) getBestFromLocal(peer *peer, rfList []bgp.RouteFamily) ([]*table.Path, []*table.Path) {
pathList := []*table.Path{}
filtered := []*table.Path{}
for _, family := range peer.toGlobalFamilies(rfList) {
@@ -844,7 +844,7 @@ func (s *BgpServer) getBestFromLocal(peer *Peer, rfList []bgp.RouteFamily) ([]*t
return pathList, filtered
}
-func (s *BgpServer) processOutgoingPaths(peer *Peer, paths, olds []*table.Path) []*table.Path {
+func (s *BgpServer) processOutgoingPaths(peer *peer, paths, olds []*table.Path) []*table.Path {
peer.fsm.lock.RLock()
notEstablished := peer.fsm.state != bgp.BGP_FSM_ESTABLISHED
localRestarting := peer.fsm.pConf.GracefulRestart.State.LocalRestarting
@@ -876,7 +876,7 @@ func (s *BgpServer) processOutgoingPaths(peer *Peer, paths, olds []*table.Path)
return outgoing
}
-func (s *BgpServer) handleRouteRefresh(peer *Peer, e *FsmMsg) []*table.Path {
+func (s *BgpServer) handleRouteRefresh(peer *peer, e *FsmMsg) []*table.Path {
m := e.MsgData.(*bgp.BGPMessage)
rr := m.Body.(*bgp.BGPRouteRefresh)
rf := bgp.AfiSafiToRouteFamily(rr.AFI, rr.SAFI)
@@ -912,7 +912,7 @@ func (s *BgpServer) handleRouteRefresh(peer *Peer, e *FsmMsg) []*table.Path {
return accepted
}
-func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) {
+func (server *BgpServer) propagateUpdate(peer *peer, pathList []*table.Path) {
rs := peer != nil && peer.isRouteServerClient()
vrf := false
if peer != nil {
@@ -1023,7 +1023,7 @@ func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) {
}
}
-func (server *BgpServer) dropPeerAllRoutes(peer *Peer, families []bgp.RouteFamily) {
+func (server *BgpServer) dropPeerAllRoutes(peer *peer, families []bgp.RouteFamily) {
peer.fsm.lock.RLock()
peerInfo := peer.fsm.peerInfo
peer.fsm.lock.RUnlock()
@@ -1058,7 +1058,7 @@ func dstsToPaths(id string, as uint32, dsts []*table.Update) ([]*table.Path, []*
return bestList, oldList, mpathList
}
-func (server *BgpServer) propagateUpdateToNeighbors(source *Peer, newPath *table.Path, dsts []*table.Update, needOld bool) {
+func (server *BgpServer) propagateUpdateToNeighbors(source *peer, newPath *table.Path, dsts []*table.Update, needOld bool) {
if table.SelectionOptions.DisableBestPathSelection {
return
}
@@ -1125,7 +1125,7 @@ func (server *BgpServer) propagateUpdateToNeighbors(source *Peer, newPath *table
}
}
-func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) {
+func (server *BgpServer) handleFSMMessage(peer *peer, e *FsmMsg) {
switch e.MsgType {
case FSM_MSG_STATE_CHANGE:
nextState := e.MsgData.(bgp.FSMState)
@@ -1144,7 +1144,7 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) {
if oldState == bgp.BGP_FSM_ESTABLISHED {
t := time.Now()
peer.fsm.lock.Lock()
- if t.Sub(time.Unix(peer.fsm.pConf.Timers.State.Uptime, 0)) < FLOP_THRESHOLD {
+ if t.Sub(time.Unix(peer.fsm.pConf.Timers.State.Uptime, 0)) < flopThreshold {
peer.fsm.pConf.State.Flops++
}
graceful := peer.fsm.reason.Type == FSM_GRACEFUL_RESTART
@@ -2052,7 +2052,7 @@ func (s *BgpServer) DeleteVrf(ctx context.Context, r *api.DeleteVrfRequest) erro
}, true)
}
-func familiesForSoftreset(peer *Peer, family bgp.RouteFamily) []bgp.RouteFamily {
+func familiesForSoftreset(peer *peer, family bgp.RouteFamily) []bgp.RouteFamily {
if family == bgp.RouteFamily(0) {
configured := peer.configuredRFlist()
families := make([]bgp.RouteFamily, 0, len(configured))
@@ -2493,7 +2493,7 @@ func (server *BgpServer) addPeerGroup(c *config.PeerGroup) error {
"Name": name,
}).Info("Add a peer group configuration")
- server.peerGroupMap[c.Config.PeerGroupName] = NewPeerGroup(c)
+ server.peerGroupMap[c.Config.PeerGroupName] = newPeerGroup(c)
return nil
}
@@ -2561,7 +2561,7 @@ func (server *BgpServer) addNeighbor(c *config.Neighbor) error {
if c.RouteServer.Config.RouteServerClient {
rib = server.rsRib
}
- peer := NewPeer(&server.bgpConfig.Global, c, rib, server.policy)
+ peer := newPeer(&server.bgpConfig.Global, c, rib, server.policy)
server.policy.Reset(nil, map[string]config.ApplyPolicy{peer.ID(): c.ApplyPolicy})
server.neighborMap[addr] = peer
if name := c.Config.PeerGroup; name != "" {
@@ -2828,18 +2828,18 @@ func (s *BgpServer) UpdateNeighbor(ctx context.Context, r *api.UpdatePeerRequest
return &api.UpdatePeerResponse{NeedsSoftResetIn: doSoftReset}, err
}
-func (s *BgpServer) addrToPeers(addr string) (l []*Peer, err error) {
+func (s *BgpServer) addrToPeers(addr string) (l []*peer, err error) {
if len(addr) == 0 {
for _, p := range s.neighborMap {
l = append(l, p)
}
return l, nil
}
- peer, found := s.neighborMap[addr]
+ p, found := s.neighborMap[addr]
if !found {
return l, fmt.Errorf("Neighbor that has %v doesn't exist.", addr)
}
- return []*Peer{peer}, nil
+ return []*peer{p}, nil
}
func (s *BgpServer) sendNotification(op, addr string, subcode uint8, data []byte) error {
diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go
index 8d17c03d..a5141e76 100644
--- a/pkg/server/server_test.go
+++ b/pkg/server/server_test.go
@@ -358,13 +358,13 @@ func TestNumGoroutineWithAddDeleteNeighbor(t *testing.T) {
assert.Equal(num, runtime.NumGoroutine())
}
-func newPeerandInfo(myAs, as uint32, address string, rib *table.TableManager) (*Peer, *table.PeerInfo) {
+func newPeerandInfo(myAs, as uint32, address string, rib *table.TableManager) (*peer, *table.PeerInfo) {
nConf := &config.Neighbor{Config: config.NeighborConfig{PeerAs: as, NeighborAddress: address}}
gConf := &config.Global{Config: config.GlobalConfig{As: myAs}}
config.SetDefaultNeighborConfigValues(nConf, nil, gConf)
policy := table.NewRoutingPolicy()
policy.Reset(&config.RoutingPolicy{}, nil)
- p := NewPeer(
+ p := newPeer(
&config.Global{Config: config.GlobalConfig{As: myAs}},
nConf,
rib,
@@ -804,7 +804,7 @@ func TestFamiliesForSoftreset(t *testing.T) {
},
}
}
- peer := &Peer{
+ peer := &peer{
fsm: &FSM{
pConf: &config.Neighbor{
AfiSafis: []config.AfiSafi{f(bgp.RF_RTC_UC), f(bgp.RF_IPv4_UC), f(bgp.RF_IPv6_UC)},
@@ -825,31 +825,30 @@ func TestFamiliesForSoftreset(t *testing.T) {
assert.NotContains(t, families, bgp.RF_RTC_UC)
}
-func runNewServer(ctx context.Context, as uint32, routerId string, listenPort int32) (*BgpServer, error) {
+func runNewServer(ctx context.Context, as uint32, routerID string, listenPort int32) (*BgpServer, context.CancelFunc, error) {
s := NewBgpServer()
ctxInner, cancelInner := context.WithCancel(ctx)
go s.Serve()
go func() {
<-ctxInner.Done()
- stopCtx, _ := context.WithTimeout(context.Background(), 10*time.Second)
+ stopCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
if err := s.StopBgp(stopCtx, &api.StopBgpRequest{}); err != nil {
log.Fatalf("Failed to stop server %s: %s", s.bgpConfig.Global.Config.RouterId, err)
}
+ cancel()
}()
err := s.StartBgp(ctx, &api.StartBgpRequest{
Global: &api.Global{
As: as,
- RouterId: routerId,
+ RouterId: routerID,
ListenPort: listenPort,
},
})
if err != nil {
- cancelInner()
- return nil, err
+ s = nil
}
-
- return s, nil
+ return s, cancelInner, err
}
func peerServers(t *testing.T, ctx context.Context, servers []*BgpServer, families []config.AfiSafiType) error {
@@ -936,14 +935,16 @@ func TestDoNotReactToDuplicateRTCMemberships(t *testing.T) {
defer cancel()
log.SetLevel(log.DebugLevel)
- s1, err := runNewServer(ctx, 1, "1.1.1.1", 10179)
+ s1, cf1, err := runNewServer(ctx, 1, "1.1.1.1", 10179)
if err != nil {
t.Fatal(err)
}
- s2, err := runNewServer(ctx, 1, "2.2.2.2", 20179)
+ defer func() { cf1() }()
+ s2, cf2, err := runNewServer(ctx, 1, "2.2.2.2", 20179)
if err != nil {
t.Fatal(err)
}
+ defer func() { cf2() }()
addVrf(t, ctx, s1, "vrf1", "111:111", 1)
addVrf(t, ctx, s2, "vrf1", "111:111", 1)
@@ -1013,7 +1014,7 @@ func TestDoNotReactToDuplicateRTCMemberships(t *testing.T) {
s1Peer := s2.neighborMap["127.0.0.1"]
s2.propagateUpdate(s1Peer, []*table.Path{rtcPath})
- awaitUpdateCtx, _ := context.WithTimeout(ctx, time.Second)
+ awaitUpdateCtx, cancel := context.WithTimeout(ctx, time.Second)
for done := false; !done; {
select {
case ev := <-watcher.Event():
@@ -1026,9 +1027,11 @@ func TestDoNotReactToDuplicateRTCMemberships(t *testing.T) {
}
}
}
+ //case <-timer.C:
case <-awaitUpdateCtx.Done():
log.Infof("await update done")
done = true
}
}
+ cancel()
}