5 #ifndef SRC_BGP_BGP_SERVER_H_
6 #define SRC_BGP_BGP_SERVER_H_
8 #include <tbb/spin_rw_mutex.h>
9 #include <boost/asio/ip/tcp.hpp>
10 #include <boost/dynamic_bitset.hpp>
11 #include <boost/scoped_ptr.hpp>
12 #include <boost/bind/bind.hpp>
28 using namespace boost::placeholders;
74 static void Initialize();
75 static void Terminate();
77 virtual std::string
ToString()
const;
79 uint16_t GetGracefulRestartTime()
const;
80 uint32_t GetLongLivedGracefulRestartTime()
const;
81 bool IsFastConvergenceEnabled()
const;
82 uint16_t GetXmppHoldTime()
const;
83 bool IsNextHopCheckEnabled()
const;
84 uint32_t GetEndOfRibReceiveTime()
const;
85 uint32_t GetEndOfRibSendTime()
const;
87 int RegisterPeer(
BgpPeer *peer);
88 void UnregisterPeer(
BgpPeer *peer);
90 BgpPeer *FindNextPeer(
const std::string &name = std::string());
108 return inst_mgr_.get();
112 return policy_mgr_.get();
116 return rtarget_group_mgr_.get();
120 return inet_condition_listener_.get();
122 return inet6_condition_listener_.get();
124 return evpn_condition_listener_.get();
130 return inet_condition_listener_.get();
132 return inet6_condition_listener_.get();
134 return evpn_condition_listener_.get();
136 return evpn6_condition_listener_.get();
142 return inet_service_chain_mgr_.get();
144 return inet6_service_chain_mgr_.get();
146 return evpn_service_chain_mgr_.get();
148 return evpn6_service_chain_mgr_.get();
154 return inetvpn_replicator_.get();
156 return evpn_replicator_.get();
158 return ermvpn_replicator_.get();
160 return mvpn_replicator_.get();
162 return inet6vpn_replicator_.get();
167 return inetvpn_replicator_.get();
169 return evpn_replicator_.get();
171 return ermvpn_replicator_.get();
173 return mvpn_replicator_.get();
175 return inet6vpn_replicator_.get();
181 return membership_mgr_.get();
198 bool IsDeleted()
const;
199 bool IsReadyForDeletion();
208 const std::string &localname()
const;
219 return bgp_identifier_.to_string();
221 void UpdateBgpIdentifier(
const Ip4Address &identifier);
223 bool HasSelfConfiguration()
const;
226 uint32_t num_routing_instance()
const;
227 uint32_t num_deleted_routing_instance()
const;
233 assert(deleting_count_ > 0);
241 assert(deleting_bgpaas_count_ > 0);
242 deleting_bgpaas_count_--;
245 uint32_t get_output_queue_depth()
const;
247 uint32_t num_service_chains()
const;
248 uint32_t num_down_service_chains()
const;
249 uint32_t num_static_routes()
const;
250 uint32_t num_down_static_routes()
const;
256 assert(num_up_peer_);
263 num_up_bgpaas_peer_++;
266 assert(num_up_bgpaas_peer_);
267 num_up_bgpaas_peer_--;
270 return num_up_bgpaas_peer_;
274 boost::asio::io_context *ioservice();
279 int RegisterAdminDownCallback(AdminDownCb callback);
280 void UnregisterAdminDownCallback(
int listener);
281 void NotifyAdminDown();
282 int RegisterASNUpdateCallback(ASNUpdateCb callback);
283 void UnregisterASNUpdateCallback(
int listener);
284 void NotifyASNUpdate(
as_t old_asn,
as_t old_local_asn);
285 int RegisterIdentifierUpdateCallback(IdentifierUpdateCb callback);
286 void UnregisterIdentifierUpdateCallback(
int listener);
287 void NotifyIdentifierUpdate(
Ip4Address old_identifier);
288 int RegisterDSCPUpdateCallback(DSCPUpdateCb cb);
289 void UnregisterDSCPUpdateCallback(
int listener);
290 void NotifyDSCPUpdate(
int new_dscp_value);
294 void NotifyAllStaticRoutes();
295 uint32_t GetStaticRouteCount()
const;
296 uint32_t GetDownStaticRouteCount()
const;
299 return global_config_.get();
304 gr_helper_disable_ = gr_helper_disable;
306 bool IsGRHelperModeEnabled()
const;
307 bool CollectStats(BgpRouterState *state,
bool first)
const;
308 bool IsServerStartingUp()
const;
309 time_t GetRTargetTableLastUpdatedTimeStamp()
const;
312 bool enable_4byte_as()
const;
313 void set_enable_4byte_as(
bool flag);
320 friend class BgpServerTest;
321 friend class BgpServerUnitTest;
330 void FillPeerStats(
const BgpPeer *peer)
const;
331 void ClearBgpaaSPeers();
boost::asio::ip::address_v4 Ip4Address
std::atomic< uint32_t > num_up_bgpaas_peer_
void RoutingInstanceMgrDeletionComplete(RoutingInstanceMgr *mgr)
void decrement_deleting_count()
boost::scoped_ptr< BgpAttrDB > attr_db_
boost::scoped_ptr< RoutePathReplicator > ermvpn_replicator_
boost::scoped_ptr< BgpConditionListener > inet6_condition_listener_
RTargetGroupMgr * rtarget_group_mgr()
uint32_t num_deleting_bgp_peer() const
std::string bgp_identifier_string() const
DSCPUpdateListenersList dscp_listeners_
uint32_t cluster_id() const
as_t local_autonomous_system_
ExtCommunityDB * extcomm_db()
std::atomic< uint32_t > deleting_count_
const RoutingInstanceMgr * routing_instance_mgr() const
IServiceChainMgr * service_chain_mgr(SCAddress::Family family)
uint32_t bgp_identifier_u32_
BgpSessionManager * session_mgr_
uint32_t num_bgp_peer() const
boost::scoped_ptr< IServiceChainMgr > evpn_service_chain_mgr_
void set_logging_disabled(bool flag)
const RTargetGroupMgr * rtarget_group_mgr() const
tbb::spin_rw_mutex rw_mutex_
std::multimap< TcpSession::Endpoint, BgpPeer * > EndpointPeerList
void IncrementUpBgpaasPeerCount()
DISALLOW_COPY_AND_ASSIGN(BgpServer)
void DecrementUpPeerCount()
boost::scoped_ptr< RoutePathReplicator > inetvpn_replicator_
bool ignore_aspath() const
boost::scoped_ptr< LargeCommunityDB > largecomm_db_
boost::dynamic_bitset admin_down_bmap_
std::atomic< uint32_t > num_up_peer_
boost::scoped_ptr< ClusterListDB > cluster_list_db_
boost::scoped_ptr< BgpUpdateSender > update_sender_
RoutingInstanceMgr * routing_instance_mgr()
Ip4Address bgp_identifier_
boost::scoped_ptr< ConfigUpdater > updater_
void IncrementUpPeerCount()
const RoutingPolicyMgr * routing_policy_mgr() const
std::vector< DSCPUpdateCb > DSCPUpdateListenersList
bool gr_helper_disable() const
BgpConditionListener * condition_listener(SCAddress::Family family)
void set_gr_helper_disable(bool gr_helper_disable)
boost::scoped_ptr< AsPathDB > aspath_db_
boost::function< void(BgpPeer *)> VisitorFn
uint32_t bgp_identifier() const
boost::scoped_ptr< IServiceChainMgr > evpn6_service_chain_mgr_
std::vector< AdminDownCb > AdminDownListenersList
std::atomic< uint32_t > bgpaas_count_
std::vector< ASNUpdateCb > ASNUpdateListenersList
std::atomic< uint32_t > bgp_count_
boost::scoped_ptr< EdgeDiscoveryDB > edge_discovery_db_
void set_ignore_aspath(bool flag)
void DecrementUpBgpaasPeerCount()
boost::scoped_ptr< BgpOListDB > olist_db_
boost::scoped_ptr< BgpConfigManager > config_mgr_
std::map< std::string, BgpPeer * > BgpPeerList
void decrement_deleting_bgpaas_count()
EdgeDiscoveryDB * edge_discovery_db()
IdentifierUpdateListenersList id_listeners_
uint32_t num_deleting_bgpaas_peer() const
AsPath4ByteDB * aspath_4byte_db()
boost::dynamic_bitset dscp_bmap_
BgpConfigManager * config_manager()
BgpGlobalQosConfig * global_qos()
StaticRouteMgrList srt_manager_list_
boost::function< void(Ip4Address)> IdentifierUpdateCb
PmsiTunnelDB * pmsi_tunnel_db()
bool logging_disabled() const
ASNUpdateListenersList asn_listeners_
uint64_t message_build_error() const
std::atomic< uint64_t > message_build_error_
boost::scoped_ptr< OriginVnPathDB > ovnpath_db_
uint32_t NumUpPeer() const
boost::scoped_ptr< BgpGlobalQosConfig > global_qos_
const BgpMembershipManager * membership_mgr() const
BgpConditionListener * condition_listener(Address::Family family)
as_t autonomous_system() const
boost::scoped_ptr< BgpMembershipManager > membership_mgr_
RoutePathReplicator * replicator(Address::Family family)
const BgpGlobalSystemConfig * global_config() const
bool mvpn_ipv4_enable() const
boost::dynamic_bitset asn_bmap_
void set_cluster_id(uint32_t id)
void increment_message_build_error() const
BgpPeer * FindPeer(const std::string &name)
boost::scoped_ptr< RoutePathReplicator > inet6vpn_replicator_
boost::scoped_ptr< RoutePathReplicator > evpn_replicator_
boost::scoped_ptr< RTargetGroupMgr > rtarget_group_mgr_
boost::scoped_ptr< As4PathDB > as4path_db_
boost::scoped_ptr< BgpGlobalSystemConfig > global_config_
boost::function< void(uint8_t)> DSCPUpdateCb
void set_mvpn_ipv4_enable(bool flag)
void set_autonomous_system(as_t asn)
BgpUpdateSender * update_sender()
boost::scoped_ptr< CommunityDB > comm_db_
const RoutePathReplicator * replicator(Address::Family family) const
uint32_t bgp_identifier_u32() const
boost::scoped_ptr< EdgeForwardingDB > edge_forwarding_db_
boost::scoped_ptr< AsPath4ByteDB > aspath_4byte_db_
boost::function< void()> AdminDownCb
as_t local_autonomous_system() const
boost::scoped_ptr< IServiceChainMgr > inet_service_chain_mgr_
EdgeForwardingDB * edge_forwarding_db()
OriginVnPathDB * ovnpath_db()
boost::scoped_ptr< BgpConditionListener > evpn_condition_listener_
const BgpConfigManager * config_manager() const
boost::scoped_ptr< RoutePathReplicator > mvpn_replicator_
boost::scoped_ptr< DeleteActor > deleter_
boost::scoped_ptr< RoutingInstanceMgr > inst_mgr_
boost::function< void(as_t, as_t)> ASNUpdateCb
BgpSessionManager * session_manager()
BgpMembershipManager * membership_mgr()
BgpGlobalSystemConfig * global_config()
RoutingPolicyMgr * routing_policy_mgr()
LargeCommunityDB * largecomm_db()
boost::scoped_ptr< BgpConditionListener > evpn6_condition_listener_
EndpointPeerList endpoint_peer_list_
uint32_t NumUpBgpaasPeer() const
std::atomic< uint32_t > deleting_bgpaas_count_
boost::scoped_ptr< RoutingPolicyMgr > policy_mgr_
boost::dynamic_bitset peer_bmap_
boost::scoped_ptr< BgpConditionListener > inet_condition_listener_
boost::scoped_ptr< ExtCommunityDB > extcomm_db_
LifetimeManager * lifetime_manager()
void increment_deleting_count()
std::vector< IdentifierUpdateCb > IdentifierUpdateListenersList
AdminDownListenersList admin_down_listeners_
boost::dynamic_bitset id_bmap_
boost::scoped_ptr< PmsiTunnelDB > pmsi_tunnel_db_
uint32_t num_bgpaas_peer() const
ClusterListDB * cluster_list_db()
void increment_deleting_bgpaas_count()
uint32_t hold_time() const
std::set< IStaticRouteMgr * > StaticRouteMgrList
boost::scoped_ptr< IServiceChainMgr > inet6_service_chain_mgr_
boost::scoped_ptr< LifetimeManager > lifetime_manager_
boost::asio::ip::tcp::endpoint Endpoint
static string ToString(PhysicalDevice::ManagementProtocol proto)