func NewPeer(g config.Global, conf config.Neighbor, loc *table.TableManager) *Peer { peer := &Peer{ gConf: g, conf: conf, rfMap: make(map[bgp.RouteFamily]bool), capMap: make(map[bgp.BGPCapabilityCode][]bgp.ParameterCapabilityInterface), outgoing: make(chan *bgp.BGPMessage, 128), localRib: loc, } conf.NeighborState.SessionState = uint32(bgp.BGP_FSM_IDLE) conf.Timers.TimersState.Downtime = time.Now().Unix() for _, rf := range conf.AfiSafis.AfiSafiList { k, _ := bgp.GetRouteFamily(rf.AfiSafiName) peer.rfMap[k] = true } id := net.ParseIP(string(conf.RouteReflector.RouteReflectorConfig.RouteReflectorClusterId)).To4() peer.peerInfo = &table.PeerInfo{ AS: conf.NeighborConfig.PeerAs, LocalAS: g.GlobalConfig.As, LocalID: g.GlobalConfig.RouterId, Address: conf.NeighborConfig.NeighborAddress, RouteReflectorClient: peer.isRouteReflectorClient(), RouteReflectorClusterID: id, } peer.adjRib = table.NewAdjRib(peer.configuredRFlist()) peer.fsm = NewFSM(&g, &conf) peer.isConfederationMember = config.IsConfederationMember(&g, &conf) return peer }
func NewPeer(g config.Global, config config.Neighbor) *Peer { peer := &Peer{ globalConfig: g, config: config, rfMap: make(map[bgp.RouteFamily]bool), capMap: make(map[bgp.BGPCapabilityCode]bgp.ParameterCapabilityInterface), } config.BgpNeighborCommonState.State = uint32(bgp.BGP_FSM_IDLE) config.BgpNeighborCommonState.Downtime = time.Now().Unix() for _, rf := range config.AfiSafiList { k, _ := bgp.GetRouteFamily(rf.AfiSafiName) peer.rfMap[k] = true } peer.peerInfo = &table.PeerInfo{ AS: config.PeerAs, LocalID: g.RouterId, Address: config.NeighborAddress, } peer.adjRib = table.NewAdjRib(peer.configuredRFlist()) peer.fsm = NewFSM(&g, &config) if config.PeerAs != g.As { peer.isEBGP = true for _, member := range g.Confederation.MemberAs { if member == config.PeerAs { peer.isConfederationMember = true break } } } return peer }
func NewPeer(g *config.Global, conf *config.Neighbor, loc *table.TableManager, policy *table.RoutingPolicy) *Peer { peer := &Peer{ outgoing: make(chan *FsmOutgoingMsg, 128), localRib: loc, policy: policy, fsm: NewFSM(g, conf, policy), prefixLimitWarned: make(map[bgp.RouteFamily]bool), } if peer.isRouteServerClient() { peer.tableId = conf.Config.NeighborAddress } else { peer.tableId = table.GLOBAL_RIB_NAME } rfs, _ := config.AfiSafis(conf.AfiSafis).ToRfList() peer.adjRibIn = table.NewAdjRib(peer.ID(), rfs) peer.adjRibOut = table.NewAdjRib(peer.ID(), rfs) return peer }
func NewPeer(g config.Global, conf config.Neighbor, loc *table.TableManager, policy *table.RoutingPolicy) *Peer { peer := &Peer{ gConf: g, conf: conf, outgoing: make(chan *bgp.BGPMessage, 128), localRib: loc, policy: policy, } tableId := table.GLOBAL_RIB_NAME if peer.isRouteServerClient() { tableId = conf.Config.NeighborAddress } peer.tableId = tableId conf.State.SessionState = config.IntToSessionStateMap[int(bgp.BGP_FSM_IDLE)] conf.Timers.State.Downtime = time.Now().Unix() rfs, _ := config.AfiSafis(conf.AfiSafis).ToRfList() peer.adjRibIn = table.NewAdjRib(peer.ID(), rfs) peer.adjRibOut = table.NewAdjRib(peer.ID(), rfs) peer.fsm = NewFSM(&g, &conf, policy) return peer }
func NewPeer(g config.Global, conf config.Neighbor, loc *table.TableManager) *Peer { peer := &Peer{ gConf: g, conf: conf, rfMap: make(map[bgp.RouteFamily]bool), capMap: make(map[bgp.BGPCapabilityCode][]bgp.ParameterCapabilityInterface), outgoing: make(chan *bgp.BGPMessage, 128), localRib: loc, } conf.NeighborState.SessionState = uint32(bgp.BGP_FSM_IDLE) conf.Timers.TimersState.Downtime = time.Now().Unix() peer.adjRib = table.NewAdjRib(peer.configuredRFlist()) peer.fsm = NewFSM(&g, &conf, peer) return peer }