OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bgp_server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BGP_BGP_SERVER_H_
6 #define SRC_BGP_BGP_SERVER_H_
7 
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.hpp>
13 #include "io/event_manager.h"
14 
15 #include <map>
16 #include <set>
17 #include <string>
18 #include <vector>
19 
20 #include "bgp/bgp_common.h"
21 #include "db/db.h"
22 #include "io/tcp_server.h"
23 #include "io/tcp_session.h"
24 #include "base/address.h"
26 
27 class AsPathDB;
28 class AsPath4ByteDB;
29 class As4PathDB;
30 class BgpAttrDB;
32 class BgpConfigManager;
34 class BgpGlobalQosConfig;
36 class BgpOListDB;
37 class BgpPeer;
38 class BgpRouterState;
39 class BgpSessionManager;
40 class BgpUpdateSender;
41 class ClusterListDB;
42 class CommunityDB;
43 class EdgeDiscoveryDB;
44 class EdgeForwardingDB;
45 class ExtCommunityDB;
46 class IServiceChainMgr;
47 class IStaticRouteMgr;
48 class LifetimeActor;
49 class LifetimeManager;
50 class OriginVnPathDB;
51 class PmsiTunnelDB;
53 class RoutingInstanceMgr;
54 class RoutingPolicyMgr;
55 class RTargetGroupMgr;
56 class XmppServer;
57 
58 class BgpServer {
59 public:
60  typedef boost::function<void()> AdminDownCb;
61  typedef boost::function<void(uint8_t)> DSCPUpdateCb;
62  typedef boost::function<void(as_t, as_t)> ASNUpdateCb;
63  typedef boost::function<void(Ip4Address)> IdentifierUpdateCb;
64  typedef boost::function<void(BgpPeer *)> VisitorFn;
65  typedef std::set<IStaticRouteMgr *> StaticRouteMgrList;
66 
67  explicit BgpServer(EventManager *evm);
68  virtual ~BgpServer();
69 
70  static void Initialize();
71  static void Terminate();
72 
73  virtual std::string ToString() const;
74 
75  uint16_t GetGracefulRestartTime() const;
76  uint32_t GetLongLivedGracefulRestartTime() const;
77  bool IsFastConvergenceEnabled() const;
78  uint16_t GetXmppHoldTime() const;
79  bool IsNextHopCheckEnabled() const;
80  uint32_t GetEndOfRibReceiveTime() const;
81  uint32_t GetEndOfRibSendTime() const;
82 
83  int RegisterPeer(BgpPeer *peer);
84  void UnregisterPeer(BgpPeer *peer);
85  BgpPeer *FindPeer(const std::string &name);
86  BgpPeer *FindNextPeer(const std::string &name = std::string());
87  void InsertPeer(TcpSession::Endpoint remote, BgpPeer *peer);
88  void RemovePeer(TcpSession::Endpoint remote, BgpPeer *peer);
89  virtual BgpPeer *FindPeer(TcpSession::Endpoint remote) const;
90  BgpPeer *FindExactPeer(const BgpPeer *peer) const;
91 
92  void Shutdown();
93 
95 
96  // accessors
101  const BgpConfigManager *config_manager() const { return config_mgr_.get(); }
104  return inst_mgr_.get();
105  }
108  return policy_mgr_.get();
109  }
112  return rtarget_group_mgr_.get();
113  }
115  if (family == Address::INET)
116  return inet_condition_listener_.get();
117  if (family == Address::INET6)
118  return inet6_condition_listener_.get();
119  if (family == Address::EVPN)
120  return evpn_condition_listener_.get();
121  assert(false);
122  return NULL;
123  }
125  if (family == SCAddress::INET)
126  return inet_condition_listener_.get();
127  if (family == SCAddress::INET6)
128  return inet6_condition_listener_.get();
129  if (family == SCAddress::EVPN)
130  return evpn_condition_listener_.get();
131  if (family == SCAddress::EVPN6)
132  return evpn6_condition_listener_.get();
133  assert(false);
134  return NULL;
135  }
137  if (family == SCAddress::INET)
138  return inet_service_chain_mgr_.get();
139  if (family == SCAddress::INET6)
140  return inet6_service_chain_mgr_.get();
141  if (family == SCAddress::EVPN)
142  return evpn_service_chain_mgr_.get();
143  if (family == SCAddress::EVPN6)
144  return evpn6_service_chain_mgr_.get();
145  assert(false);
146  return NULL;
147  }
149  if (family == Address::INETVPN)
150  return inetvpn_replicator_.get();
151  if (family == Address::EVPN)
152  return evpn_replicator_.get();
153  if (family == Address::ERMVPN)
154  return ermvpn_replicator_.get();
155  if (family == Address::MVPN)
156  return mvpn_replicator_.get();
157  if (family == Address::INET6VPN)
158  return inet6vpn_replicator_.get();
159  return NULL;
160  }
162  if (family == Address::INETVPN)
163  return inetvpn_replicator_.get();
164  if (family == Address::EVPN)
165  return evpn_replicator_.get();
166  if (family == Address::ERMVPN)
167  return ermvpn_replicator_.get();
168  if (family == Address::MVPN)
169  return mvpn_replicator_.get();
170  if (family == Address::INET6VPN)
171  return inet6vpn_replicator_.get();
172  return NULL;
173  }
174 
177  return membership_mgr_.get();
178  }
179 
180  AsPathDB *aspath_db() { return aspath_db_.get(); }
182  As4PathDB *as4path_db() { return as4path_db_.get(); }
183  BgpAttrDB *attr_db() { return attr_db_.get(); }
184  BgpOListDB *olist_db() { return olist_db_.get(); }
186  CommunityDB *comm_db() { return comm_db_.get(); }
189  ExtCommunityDB *extcomm_db() { return extcomm_db_.get(); }
190  OriginVnPathDB *ovnpath_db() { return ovnpath_db_.get(); }
192 
193  bool IsDeleted() const;
194  bool IsReadyForDeletion();
195  void RetryDelete();
196  bool logging_disabled() const { return logging_disabled_; }
197  void set_logging_disabled(bool flag) { logging_disabled_ = flag; }
198 
199  bool destroyed() const { return destroyed_; }
200  void set_destroyed() { destroyed_ = true; }
201 
202  DB *database() { return &db_; }
203  const std::string &localname() const;
204  bool admin_down() const { return admin_down_; }
205  uint32_t cluster_id() const { return cluster_id_; }
206  void set_cluster_id(uint32_t id) { cluster_id_ = id; }
210  uint32_t bgp_identifier() const { return bgp_identifier_.to_ulong(); }
211  uint32_t bgp_identifier_u32() const { return bgp_identifier_u32_; }
212 
213  std::string bgp_identifier_string() const {
214  return bgp_identifier_.to_string();
215  }
216  void UpdateBgpIdentifier(const Ip4Address &identifier);
217  uint32_t hold_time() const { return hold_time_; }
218  bool HasSelfConfiguration() const;
219 
220  // Status
221  uint32_t num_routing_instance() const;
222  uint32_t num_deleted_routing_instance() const;
223 
224  uint32_t num_bgp_peer() const { return bgp_count_; }
225  uint32_t num_deleting_bgp_peer() const { return deleting_count_; }
228  assert(deleting_count_ > 0);
229  deleting_count_--;
230  }
231 
232  uint32_t num_bgpaas_peer() const { return bgpaas_count_; }
236  assert(deleting_bgpaas_count_ > 0);
238  }
239 
240  uint32_t get_output_queue_depth() const;
241 
242  uint32_t num_service_chains() const;
243  uint32_t num_down_service_chains() const;
244  uint32_t num_static_routes() const;
245  uint32_t num_down_static_routes() const;
246 
248  num_up_peer_++;
249  }
251  assert(num_up_peer_);
252  num_up_peer_--;
253  }
254  uint32_t NumUpPeer() const {
255  return num_up_peer_;
256  }
259  }
261  assert(num_up_bgpaas_peer_);
263  }
264  uint32_t NumUpBgpaasPeer() const {
265  return num_up_bgpaas_peer_;
266  }
267 
269  boost::asio::io_context *ioservice();
270 
272  uint64_t message_build_error() const { return message_build_error_; }
273 
275  void UnregisterAdminDownCallback(int listener);
276  void NotifyAdminDown();
278  void UnregisterASNUpdateCallback(int listener);
279  void NotifyASNUpdate(as_t old_asn, as_t old_local_asn);
281  void UnregisterIdentifierUpdateCallback(int listener);
282  void NotifyIdentifierUpdate(Ip4Address old_identifier);
284  void UnregisterDSCPUpdateCallback(int listener);
285  void NotifyDSCPUpdate(int new_dscp_value);
286 
287  void InsertStaticRouteMgr(IStaticRouteMgr *srt_manager);
288  void RemoveStaticRouteMgr(IStaticRouteMgr *srt_manager);
289  void NotifyAllStaticRoutes();
290  uint32_t GetStaticRouteCount() const;
291  uint32_t GetDownStaticRouteCount() const;
294  return global_config_.get();
295  }
297  bool gr_helper_disable() const { return gr_helper_disable_; }
300  }
301  bool IsGRHelperModeEnabled() const;
302  bool CollectStats(BgpRouterState *state, bool first) const;
303  bool IsServerStartingUp() const;
305  bool mvpn_ipv4_enable() const { return mvpn_ipv4_enable_; }
306  void set_mvpn_ipv4_enable(bool flag) { mvpn_ipv4_enable_ = flag; }
307  bool enable_4byte_as() const;
308  void set_enable_4byte_as(bool flag);
309  bool ignore_aspath() const { return ignore_aspath_; }
310  void set_ignore_aspath(bool flag) { ignore_aspath_ = flag; }
311 
312 private:
313  class ConfigUpdater;
314  class DeleteActor;
315  friend class BgpServerTest;
316  friend class BgpServerUnitTest;
317  typedef std::map<std::string, BgpPeer *> BgpPeerList;
318  typedef std::vector<AdminDownCb> AdminDownListenersList;
319  typedef std::vector<ASNUpdateCb> ASNUpdateListenersList;
320  typedef std::vector<IdentifierUpdateCb> IdentifierUpdateListenersList;
321  typedef std::vector<DSCPUpdateCb> DSCPUpdateListenersList;
322  typedef std::multimap<TcpSession::Endpoint, BgpPeer *> EndpointPeerList;
323 
325  void FillPeerStats(const BgpPeer *peer) const;
326  void ClearBgpaaSPeers();
327 
328  // base config variables
329  tbb::spin_rw_mutex rw_mutex_;
332  boost::dynamic_bitset<> admin_down_bmap_; // free list.
333  uint32_t cluster_id_;
337  boost::dynamic_bitset<> asn_bmap_; // free list.
341  boost::dynamic_bitset<> id_bmap_; // free list.
343  boost::dynamic_bitset<> dscp_bmap_; // free list.
344  uint32_t hold_time_;
347 
349  boost::dynamic_bitset<> peer_bmap_;
350  tbb::atomic<uint32_t> bgp_count_;
351  tbb::atomic<uint32_t> num_up_peer_;
352  tbb::atomic<uint32_t> deleting_count_;
353  tbb::atomic<uint32_t> bgpaas_count_;
354  tbb::atomic<uint32_t> num_up_bgpaas_peer_;
355  tbb::atomic<uint32_t> deleting_bgpaas_count_;
358 
359  boost::scoped_ptr<LifetimeManager> lifetime_manager_;
360  boost::scoped_ptr<DeleteActor> deleter_;
365 
366  // databases
367  boost::scoped_ptr<AsPathDB> aspath_db_;
368  boost::scoped_ptr<AsPath4ByteDB> aspath_4byte_db_;
369  boost::scoped_ptr<As4PathDB> as4path_db_;
370  boost::scoped_ptr<BgpOListDB> olist_db_;
371  boost::scoped_ptr<ClusterListDB> cluster_list_db_;
372  boost::scoped_ptr<CommunityDB> comm_db_;
373  boost::scoped_ptr<EdgeDiscoveryDB> edge_discovery_db_;
374  boost::scoped_ptr<EdgeForwardingDB> edge_forwarding_db_;
375  boost::scoped_ptr<ExtCommunityDB> extcomm_db_;
376  boost::scoped_ptr<OriginVnPathDB> ovnpath_db_;
377  boost::scoped_ptr<PmsiTunnelDB> pmsi_tunnel_db_;
378  boost::scoped_ptr<BgpAttrDB> attr_db_;
379 
380  // sessions and state managers
382  boost::scoped_ptr<BgpUpdateSender> update_sender_;
383  boost::scoped_ptr<RoutingInstanceMgr> inst_mgr_;
384  boost::scoped_ptr<RoutingPolicyMgr> policy_mgr_;
385  boost::scoped_ptr<RTargetGroupMgr> rtarget_group_mgr_;
386  boost::scoped_ptr<BgpMembershipManager> membership_mgr_;
387  boost::scoped_ptr<BgpConditionListener> inet_condition_listener_;
388  boost::scoped_ptr<BgpConditionListener> inet6_condition_listener_;
389  boost::scoped_ptr<BgpConditionListener> evpn_condition_listener_;
390  boost::scoped_ptr<BgpConditionListener> evpn6_condition_listener_;
391  boost::scoped_ptr<RoutePathReplicator> inetvpn_replicator_;
392  boost::scoped_ptr<RoutePathReplicator> ermvpn_replicator_;
393  boost::scoped_ptr<RoutePathReplicator> mvpn_replicator_;
394  boost::scoped_ptr<RoutePathReplicator> evpn_replicator_;
395  boost::scoped_ptr<RoutePathReplicator> inet6vpn_replicator_;
396  boost::scoped_ptr<IServiceChainMgr> inet_service_chain_mgr_;
397  boost::scoped_ptr<IServiceChainMgr> inet6_service_chain_mgr_;
398  boost::scoped_ptr<IServiceChainMgr> evpn_service_chain_mgr_;
399  boost::scoped_ptr<IServiceChainMgr> evpn6_service_chain_mgr_;
400 
401  // configuration
402  boost::scoped_ptr<BgpGlobalSystemConfig> global_config_;
403  boost::scoped_ptr<BgpGlobalQosConfig> global_qos_;
404  boost::scoped_ptr<BgpConfigManager> config_mgr_;
405  boost::scoped_ptr<ConfigUpdater> updater_;
406 
407  mutable tbb::atomic<uint64_t> message_build_error_;
408 
410 };
411 
412 #endif // SRC_BGP_BGP_SERVER_H_
boost::scoped_ptr< EdgeDiscoveryDB > edge_discovery_db_
Definition: bgp_server.h:373
EdgeForwardingDB * edge_forwarding_db()
Definition: bgp_server.h:188
DISALLOW_COPY_AND_ASSIGN(BgpServer)
bool ignore_aspath_
Definition: bgp_server.h:364
void increment_deleting_count()
Definition: bgp_server.h:226
std::vector< AdminDownCb > AdminDownListenersList
Definition: bgp_server.h:318
bool IsNextHopCheckEnabled() const
Definition: bgp_server.cc:697
BgpOListDB * olist_db()
Definition: bgp_server.h:184
LifetimeActor * deleter()
Definition: bgp_server.cc:571
boost::dynamic_bitset dscp_bmap_
Definition: bgp_server.h:343
boost::asio::ip::tcp::endpoint Endpoint
Definition: tcp_session.h:62
const RoutePathReplicator * replicator(Address::Family family) const
Definition: bgp_server.h:161
void DecrementUpBgpaasPeerCount()
Definition: bgp_server.h:260
boost::scoped_ptr< RoutePathReplicator > mvpn_replicator_
Definition: bgp_server.h:393
void set_ignore_aspath(bool flag)
Definition: bgp_server.h:310
boost::scoped_ptr< RTargetGroupMgr > rtarget_group_mgr_
Definition: bgp_server.h:385
boost::scoped_ptr< BgpGlobalQosConfig > global_qos_
Definition: bgp_server.h:403
void UnregisterAdminDownCallback(int listener)
Definition: bgp_server.cc:834
boost::dynamic_bitset id_bmap_
Definition: bgp_server.h:341
std::set< IStaticRouteMgr * > StaticRouteMgrList
Definition: bgp_server.h:65
boost::scoped_ptr< BgpConfigManager > config_mgr_
Definition: bgp_server.h:404
bool gr_helper_disable_
Definition: bgp_server.h:345
BgpPeerList peer_list_
Definition: bgp_server.h:356
boost::dynamic_bitset peer_bmap_
Definition: bgp_server.h:349
uint32_t NumUpPeer() const
Definition: bgp_server.h:254
bool destroyed_
Definition: bgp_server.h:361
tbb::spin_rw_mutex rw_mutex_
Definition: bgp_server.h:329
bool logging_disabled() const
Definition: bgp_server.h:196
BgpServer(EventManager *evm)
Definition: bgp_server.cc:485
AdminDownListenersList admin_down_listeners_
Definition: bgp_server.h:331
bool IsServerStartingUp() const
Definition: bgp_server.cc:729
as_t local_autonomous_system_
Definition: bgp_server.h:335
boost::scoped_ptr< LifetimeManager > lifetime_manager_
Definition: bgp_server.h:359
uint32_t bgp_identifier_u32() const
Definition: bgp_server.h:211
void UnregisterASNUpdateCallback(int listener)
Definition: bgp_server.cc:880
uint32_t num_static_routes() const
Definition: bgp_server.cc:803
boost::function< void(as_t, as_t)> ASNUpdateCb
Definition: bgp_server.h:62
void set_destroyed()
Definition: bgp_server.h:200
tbb::atomic< uint32_t > deleting_bgpaas_count_
Definition: bgp_server.h:355
DB * database()
Definition: bgp_server.h:202
uint32_t num_deleting_bgp_peer() const
Definition: bgp_server.h:225
boost::scoped_ptr< IServiceChainMgr > evpn6_service_chain_mgr_
Definition: bgp_server.h:399
Family
Definition: address.h:24
uint32_t NumUpBgpaasPeer() const
Definition: bgp_server.h:264
void InsertStaticRouteMgr(IStaticRouteMgr *srt_manager)
Definition: bgp_server.cc:999
void VisitBgpPeers(BgpServer::VisitorFn) const
Definition: bgp_server.cc:811
CommunityDB * comm_db()
Definition: bgp_server.h:186
boost::scoped_ptr< BgpOListDB > olist_db_
Definition: bgp_server.h:370
ASNUpdateListenersList asn_listeners_
Definition: bgp_server.h:336
bool IsReadyForDeletion()
Definition: bgp_server.cc:432
BgpGlobalSystemConfig * global_config()
Definition: bgp_server.h:292
boost::scoped_ptr< BgpConditionListener > inet6_condition_listener_
Definition: bgp_server.h:388
uint32_t GetLongLivedGracefulRestartTime() const
Definition: bgp_server.cc:709
void NotifyASNUpdate(as_t old_asn, as_t old_local_asn)
Definition: bgp_server.cc:898
BgpGlobalQosConfig * global_qos()
Definition: bgp_server.h:296
boost::scoped_ptr< RoutePathReplicator > inetvpn_replicator_
Definition: bgp_server.h:391
static void Terminate()
Definition: bgp_server.cc:559
tbb::atomic< uint32_t > num_up_bgpaas_peer_
Definition: bgp_server.h:354
RoutingInstanceMgr * routing_instance_mgr()
Definition: bgp_server.h:102
boost::scoped_ptr< As4PathDB > as4path_db_
Definition: bgp_server.h:369
Ip4Address bgp_identifier_
Definition: bgp_server.h:338
time_t GetRTargetTableLastUpdatedTimeStamp() const
Definition: bgp_server.cc:1213
boost::scoped_ptr< AsPathDB > aspath_db_
Definition: bgp_server.h:367
uint32_t cluster_id_
Definition: bgp_server.h:333
uint32_t get_output_queue_depth() const
Definition: bgp_server.cc:765
void Shutdown()
Definition: bgp_server.cc:567
BgpPeer * FindExactPeer(const BgpPeer *peer) const
Definition: bgp_server.cc:674
boost::scoped_ptr< PmsiTunnelDB > pmsi_tunnel_db_
Definition: bgp_server.h:377
void RoutingInstanceMgrDeletionComplete(RoutingInstanceMgr *mgr)
bool IsFastConvergenceEnabled() const
Definition: bgp_server.cc:693
BgpPeer * FindPeer(const std::string &name)
BgpConditionListener * condition_listener(Address::Family family)
Definition: bgp_server.h:114
RoutePathReplicator * replicator(Address::Family family)
Definition: bgp_server.h:148
boost::scoped_ptr< BgpConditionListener > inet_condition_listener_
Definition: bgp_server.h:387
uint32_t hold_time_
Definition: bgp_server.h:344
const BgpMembershipManager * membership_mgr() const
Definition: bgp_server.h:176
boost::scoped_ptr< BgpGlobalSystemConfig > global_config_
Definition: bgp_server.h:402
void IncrementUpPeerCount()
Definition: bgp_server.h:247
uint64_t message_build_error() const
Definition: bgp_server.h:272
std::vector< DSCPUpdateCb > DSCPUpdateListenersList
Definition: bgp_server.h:321
boost::scoped_ptr< BgpConditionListener > evpn_condition_listener_
Definition: bgp_server.h:389
int RegisterDSCPUpdateCallback(DSCPUpdateCb cb)
Definition: bgp_server.cc:909
std::map< std::string, BgpPeer * > BgpPeerList
Definition: bgp_server.h:317
bool IsGRHelperModeEnabled() const
Definition: bgp_server.cc:741
uint32_t as_t
Definition: bgp_common.h:21
uint32_t hold_time() const
Definition: bgp_server.h:217
PmsiTunnelDB * pmsi_tunnel_db()
Definition: bgp_server.h:191
EdgeDiscoveryDB * edge_discovery_db()
Definition: bgp_server.h:187
tbb::atomic< uint64_t > message_build_error_
Definition: bgp_server.h:407
AsPath4ByteDB * aspath_4byte_db()
Definition: bgp_server.h:181
void NotifyAllStaticRoutes()
Definition: bgp_server.cc:1011
OriginVnPathDB * ovnpath_db()
Definition: bgp_server.h:190
const BgpConfigManager * config_manager() const
Definition: bgp_server.h:101
void RetryDelete()
Definition: bgp_server.cc:426
boost::scoped_ptr< ExtCommunityDB > extcomm_db_
Definition: bgp_server.h:375
void FillPeerStats(const BgpPeer *peer) const
Definition: bgp_server.cc:1043
const RoutingInstanceMgr * routing_instance_mgr() const
Definition: bgp_server.h:103
uint32_t num_routing_instance() const
Definition: bgp_server.cc:755
as_t local_autonomous_system() const
Definition: bgp_server.h:209
tbb::atomic< uint32_t > deleting_count_
Definition: bgp_server.h:352
void DecrementUpPeerCount()
Definition: bgp_server.h:250
boost::scoped_ptr< AsPath4ByteDB > aspath_4byte_db_
Definition: bgp_server.h:368
Definition: db.h:24
uint32_t GetDownStaticRouteCount() const
Definition: bgp_server.cc:1032
RoutingPolicyMgr * routing_policy_mgr()
Definition: bgp_server.h:106
bool logging_disabled_
Definition: bgp_server.h:362
boost::function< void(uint8_t)> DSCPUpdateCb
Definition: bgp_server.h:61
std::vector< ASNUpdateCb > ASNUpdateListenersList
Definition: bgp_server.h:319
std::vector< IdentifierUpdateCb > IdentifierUpdateListenersList
Definition: bgp_server.h:320
std::string bgp_identifier_string() const
Definition: bgp_server.h:213
uint32_t GetEndOfRibReceiveTime() const
Definition: bgp_server.cc:721
int RegisterIdentifierUpdateCallback(IdentifierUpdateCb callback)
Definition: bgp_server.cc:954
boost::scoped_ptr< IServiceChainMgr > evpn_service_chain_mgr_
Definition: bgp_server.h:398
bool admin_down() const
Definition: bgp_server.h:204
IdentifierUpdateListenersList id_listeners_
Definition: bgp_server.h:340
tbb::atomic< uint32_t > num_up_peer_
Definition: bgp_server.h:351
void increment_deleting_bgpaas_count()
Definition: bgp_server.h:234
ExtCommunityDB * extcomm_db()
Definition: bgp_server.h:189
void set_logging_disabled(bool flag)
Definition: bgp_server.h:197
BgpConditionListener * condition_listener(SCAddress::Family family)
Definition: bgp_server.h:124
boost::function< void(Ip4Address)> IdentifierUpdateCb
Definition: bgp_server.h:63
BgpConfigManager * config_manager()
Definition: bgp_server.h:100
IServiceChainMgr * service_chain_mgr(SCAddress::Family family)
Definition: bgp_server.h:136
boost::dynamic_bitset admin_down_bmap_
Definition: bgp_server.h:332
BgpSessionManager * session_mgr_
Definition: bgp_server.h:381
bool mvpn_ipv4_enable() const
Definition: bgp_server.h:305
uint32_t bgp_identifier_u32_
Definition: bgp_server.h:339
void NotifyDSCPUpdate(int new_dscp_value)
Definition: bgp_server.cc:943
as_t autonomous_system_
Definition: bgp_server.h:334
boost::scoped_ptr< ClusterListDB > cluster_list_db_
Definition: bgp_server.h:371
StaticRouteMgrList srt_manager_list_
Definition: bgp_server.h:346
friend class BgpServerTest
Definition: bgp_server.h:314
int RegisterASNUpdateCallback(ASNUpdateCb callback)
Definition: bgp_server.cc:864
boost::scoped_ptr< RoutePathReplicator > ermvpn_replicator_
Definition: bgp_server.h:392
boost::scoped_ptr< DeleteActor > deleter_
Definition: bgp_server.h:360
void RemovePeer(TcpSession::Endpoint remote, BgpPeer *peer)
Definition: bgp_server.cc:652
int RegisterPeer(BgpPeer *peer)
Definition: bgp_server.cc:585
bool CollectStats(BgpRouterState *state, bool first) const
Definition: bgp_server.cc:1072
bool mvpn_ipv4_enable_
Definition: bgp_server.h:363
uint16_t GetXmppHoldTime() const
Definition: bgp_server.cc:715
boost::scoped_ptr< BgpUpdateSender > update_sender_
Definition: bgp_server.h:382
uint32_t num_deleting_bgpaas_peer() const
Definition: bgp_server.h:233
BgpSessionManager * session_manager()
Definition: bgp_server.h:97
boost::scoped_ptr< IServiceChainMgr > inet6_service_chain_mgr_
Definition: bgp_server.h:397
const RoutingPolicyMgr * routing_policy_mgr() const
Definition: bgp_server.h:107
boost::scoped_ptr< CommunityDB > comm_db_
Definition: bgp_server.h:372
boost::scoped_ptr< ConfigUpdater > updater_
Definition: bgp_server.h:405
As4PathDB * as4path_db()
Definition: bgp_server.h:182
boost::scoped_ptr< BgpMembershipManager > membership_mgr_
Definition: bgp_server.h:386
boost::scoped_ptr< BgpAttrDB > attr_db_
Definition: bgp_server.h:378
boost::scoped_ptr< EdgeForwardingDB > edge_forwarding_db_
Definition: bgp_server.h:374
bool destroyed() const
Definition: bgp_server.h:199
tbb::atomic< uint32_t > bgp_count_
Definition: bgp_server.h:350
ClusterListDB * cluster_list_db()
Definition: bgp_server.h:185
void decrement_deleting_count()
Definition: bgp_server.h:227
void UpdateBgpIdentifier(const Ip4Address &identifier)
Definition: bgp_server.cc:1220
uint32_t num_service_chains() const
Definition: bgp_server.cc:781
uint32_t num_deleted_routing_instance() const
Definition: bgp_server.cc:760
LifetimeManager * lifetime_manager()
Definition: bgp_server.h:99
const RTargetGroupMgr * rtarget_group_mgr() const
Definition: bgp_server.h:111
uint32_t num_down_service_chains() const
Definition: bgp_server.cc:792
tbb::atomic< uint32_t > bgpaas_count_
Definition: bgp_server.h:353
boost::function< void()> AdminDownCb
Definition: bgp_server.h:60
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
void InsertPeer(TcpSession::Endpoint remote, BgpPeer *peer)
Definition: bgp_server.cc:646
const BgpGlobalSystemConfig * global_config() const
Definition: bgp_server.h:293
void set_gr_helper_disable(bool gr_helper_disable)
Definition: bgp_server.h:298
bool HasSelfConfiguration() const
Definition: bgp_server.cc:575
void UnregisterDSCPUpdateCallback(int listener)
Definition: bgp_server.cc:925
boost::scoped_ptr< BgpConditionListener > evpn6_condition_listener_
Definition: bgp_server.h:390
void NotifyIdentifierUpdate(Ip4Address old_identifier)
Definition: bgp_server.cc:988
std::multimap< TcpSession::Endpoint, BgpPeer * > EndpointPeerList
Definition: bgp_server.h:322
boost::asio::io_context * ioservice()
Definition: bgp_server.cc:689
void set_autonomous_system(as_t asn)
Definition: bgp_server.h:208
bool admin_down_
Definition: bgp_server.h:330
uint32_t bgp_identifier() const
Definition: bgp_server.h:210
BgpUpdateSender * update_sender()
Definition: bgp_server.h:98
void set_mvpn_ipv4_enable(bool flag)
Definition: bgp_server.h:306
uint32_t GetEndOfRibSendTime() const
Definition: bgp_server.cc:725
int RegisterAdminDownCallback(AdminDownCb callback)
Definition: bgp_server.cc:818
uint32_t num_down_static_routes() const
Definition: bgp_server.cc:807
boost::scoped_ptr< RoutePathReplicator > evpn_replicator_
Definition: bgp_server.h:394
BgpAttrDB * attr_db()
Definition: bgp_server.h:183
void UnregisterPeer(BgpPeer *peer)
Definition: bgp_server.cc:609
virtual ~BgpServer()
Definition: bgp_server.cc:549
boost::scoped_ptr< IServiceChainMgr > inet_service_chain_mgr_
Definition: bgp_server.h:396
static void Initialize()
Definition: bgp_server.cc:555
void set_enable_4byte_as(bool flag)
Definition: bgp_server.cc:737
uint32_t GetStaticRouteCount() const
Definition: bgp_server.cc:1021
void IncrementUpBgpaasPeerCount()
Definition: bgp_server.h:257
bool enable_4byte_as() const
Definition: bgp_server.cc:733
EndpointPeerList endpoint_peer_list_
Definition: bgp_server.h:357
BgpPeer * FindNextPeer(const std::string &name=std::string())
Definition: bgp_server.cc:641
friend class BgpServerUnitTest
Definition: bgp_server.h:316
BgpMembershipManager * membership_mgr()
Definition: bgp_server.h:175
boost::scoped_ptr< RoutingPolicyMgr > policy_mgr_
Definition: bgp_server.h:384
uint32_t num_bgp_peer() const
Definition: bgp_server.h:224
virtual std::string ToString() const
Definition: bgp_server.cc:563
uint32_t num_bgpaas_peer() const
Definition: bgp_server.h:232
uint32_t cluster_id() const
Definition: bgp_server.h:205
uint16_t GetGracefulRestartTime() const
Definition: bgp_server.cc:703
void ClearBgpaaSPeers()
Definition: bgp_server.cc:663
void decrement_deleting_bgpaas_count()
Definition: bgp_server.h:235
bool IsDeleted() const
Definition: bgp_server.cc:422
boost::scoped_ptr< OriginVnPathDB > ovnpath_db_
Definition: bgp_server.h:376
bool ignore_aspath() const
Definition: bgp_server.h:309
AsPathDB * aspath_db()
Definition: bgp_server.h:180
as_t autonomous_system() const
Definition: bgp_server.h:207
boost::scoped_ptr< RoutePathReplicator > inet6vpn_replicator_
Definition: bgp_server.h:395
DSCPUpdateListenersList dscp_listeners_
Definition: bgp_server.h:342
void UnregisterIdentifierUpdateCallback(int listener)
Definition: bgp_server.cc:970
bool gr_helper_disable() const
Definition: bgp_server.h:297
boost::dynamic_bitset asn_bmap_
Definition: bgp_server.h:337
void increment_message_build_error() const
Definition: bgp_server.h:271
void set_cluster_id(uint32_t id)
Definition: bgp_server.h:206
boost::function< void(BgpPeer *)> VisitorFn
Definition: bgp_server.h:64
boost::scoped_ptr< RoutingInstanceMgr > inst_mgr_
Definition: bgp_server.h:383
static EventManager evm
void NotifyAdminDown()
Definition: bgp_server.cc:853
void RemoveStaticRouteMgr(IStaticRouteMgr *srt_manager)
Definition: bgp_server.cc:1005
RTargetGroupMgr * rtarget_group_mgr()
Definition: bgp_server.h:110
const std::string & localname() const
Definition: bgp_server.cc:685