OpenSDN source code
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 LargeCommunityDB;
47 class IServiceChainMgr;
48 class IStaticRouteMgr;
49 class LifetimeActor;
50 class LifetimeManager;
51 class OriginVnPathDB;
52 class PmsiTunnelDB;
54 class RoutingInstanceMgr;
55 class RoutingPolicyMgr;
56 class RTargetGroupMgr;
57 class XmppServer;
58 
59 class BgpServer {
60 public:
61  typedef boost::function<void()> AdminDownCb;
62  typedef boost::function<void(uint8_t)> DSCPUpdateCb;
63  typedef boost::function<void(as_t, as_t)> ASNUpdateCb;
64  typedef boost::function<void(Ip4Address)> IdentifierUpdateCb;
65  typedef boost::function<void(BgpPeer *)> VisitorFn;
66  typedef std::set<IStaticRouteMgr *> StaticRouteMgrList;
67 
68  explicit BgpServer(EventManager *evm);
69  virtual ~BgpServer();
70 
71  static void Initialize();
72  static void Terminate();
73 
74  virtual std::string ToString() const;
75 
76  uint16_t GetGracefulRestartTime() const;
77  uint32_t GetLongLivedGracefulRestartTime() const;
78  bool IsFastConvergenceEnabled() const;
79  uint16_t GetXmppHoldTime() const;
80  bool IsNextHopCheckEnabled() const;
81  uint32_t GetEndOfRibReceiveTime() const;
82  uint32_t GetEndOfRibSendTime() const;
83 
84  int RegisterPeer(BgpPeer *peer);
85  void UnregisterPeer(BgpPeer *peer);
86  BgpPeer *FindPeer(const std::string &name);
87  BgpPeer *FindNextPeer(const std::string &name = std::string());
88  void InsertPeer(TcpSession::Endpoint remote, BgpPeer *peer);
89  void RemovePeer(TcpSession::Endpoint remote, BgpPeer *peer);
90  virtual BgpPeer *FindPeer(TcpSession::Endpoint remote) const;
91  BgpPeer *FindExactPeer(const BgpPeer *peer) const;
92 
93  void Shutdown();
94 
96 
97  // accessors
102  const BgpConfigManager *config_manager() const { return config_mgr_.get(); }
105  return inst_mgr_.get();
106  }
109  return policy_mgr_.get();
110  }
113  return rtarget_group_mgr_.get();
114  }
116  if (family == Address::INET)
117  return inet_condition_listener_.get();
118  if (family == Address::INET6)
119  return inet6_condition_listener_.get();
120  if (family == Address::EVPN)
121  return evpn_condition_listener_.get();
122  assert(false);
123  return NULL;
124  }
126  if (family == SCAddress::INET)
127  return inet_condition_listener_.get();
128  if (family == SCAddress::INET6)
129  return inet6_condition_listener_.get();
130  if (family == SCAddress::EVPN)
131  return evpn_condition_listener_.get();
132  if (family == SCAddress::EVPN6)
133  return evpn6_condition_listener_.get();
134  assert(false);
135  return NULL;
136  }
138  if (family == SCAddress::INET)
139  return inet_service_chain_mgr_.get();
140  if (family == SCAddress::INET6)
141  return inet6_service_chain_mgr_.get();
142  if (family == SCAddress::EVPN)
143  return evpn_service_chain_mgr_.get();
144  if (family == SCAddress::EVPN6)
145  return evpn6_service_chain_mgr_.get();
146  assert(false);
147  return NULL;
148  }
150  if (family == Address::INETVPN)
151  return inetvpn_replicator_.get();
152  if (family == Address::EVPN)
153  return evpn_replicator_.get();
154  if (family == Address::ERMVPN)
155  return ermvpn_replicator_.get();
156  if (family == Address::MVPN)
157  return mvpn_replicator_.get();
158  if (family == Address::INET6VPN)
159  return inet6vpn_replicator_.get();
160  return NULL;
161  }
163  if (family == Address::INETVPN)
164  return inetvpn_replicator_.get();
165  if (family == Address::EVPN)
166  return evpn_replicator_.get();
167  if (family == Address::ERMVPN)
168  return ermvpn_replicator_.get();
169  if (family == Address::MVPN)
170  return mvpn_replicator_.get();
171  if (family == Address::INET6VPN)
172  return inet6vpn_replicator_.get();
173  return NULL;
174  }
175 
178  return membership_mgr_.get();
179  }
180 
181  AsPathDB *aspath_db() { return aspath_db_.get(); }
183  As4PathDB *as4path_db() { return as4path_db_.get(); }
184  BgpAttrDB *attr_db() { return attr_db_.get(); }
185  BgpOListDB *olist_db() { return olist_db_.get(); }
187  CommunityDB *comm_db() { return comm_db_.get(); }
190  ExtCommunityDB *extcomm_db() { return extcomm_db_.get(); }
192  OriginVnPathDB *ovnpath_db() { return ovnpath_db_.get(); }
194 
195  bool IsDeleted() const;
196  bool IsReadyForDeletion();
197  void RetryDelete();
198  bool logging_disabled() const { return logging_disabled_; }
199  void set_logging_disabled(bool flag) { logging_disabled_ = flag; }
200 
201  bool destroyed() const { return destroyed_; }
202  void set_destroyed() { destroyed_ = true; }
203 
204  DB *database() { return &db_; }
205  const std::string &localname() const;
206  bool admin_down() const { return admin_down_; }
207  uint32_t cluster_id() const { return cluster_id_; }
208  void set_cluster_id(uint32_t id) { cluster_id_ = id; }
212  uint32_t bgp_identifier() const { return bgp_identifier_.to_ulong(); }
213  uint32_t bgp_identifier_u32() const { return bgp_identifier_u32_; }
214 
215  std::string bgp_identifier_string() const {
216  return bgp_identifier_.to_string();
217  }
218  void UpdateBgpIdentifier(const Ip4Address &identifier);
219  uint32_t hold_time() const { return hold_time_; }
220  bool HasSelfConfiguration() const;
221 
222  // Status
223  uint32_t num_routing_instance() const;
224  uint32_t num_deleted_routing_instance() const;
225 
226  uint32_t num_bgp_peer() const { return bgp_count_; }
227  uint32_t num_deleting_bgp_peer() const { return deleting_count_; }
230  assert(deleting_count_ > 0);
231  deleting_count_--;
232  }
233 
234  uint32_t num_bgpaas_peer() const { return bgpaas_count_; }
238  assert(deleting_bgpaas_count_ > 0);
240  }
241 
242  uint32_t get_output_queue_depth() const;
243 
244  uint32_t num_service_chains() const;
245  uint32_t num_down_service_chains() const;
246  uint32_t num_static_routes() const;
247  uint32_t num_down_static_routes() const;
248 
250  num_up_peer_++;
251  }
253  assert(num_up_peer_);
254  num_up_peer_--;
255  }
256  uint32_t NumUpPeer() const {
257  return num_up_peer_;
258  }
261  }
263  assert(num_up_bgpaas_peer_);
265  }
266  uint32_t NumUpBgpaasPeer() const {
267  return num_up_bgpaas_peer_;
268  }
269 
271  boost::asio::io_context *ioservice();
272 
274  uint64_t message_build_error() const { return message_build_error_; }
275 
277  void UnregisterAdminDownCallback(int listener);
278  void NotifyAdminDown();
280  void UnregisterASNUpdateCallback(int listener);
281  void NotifyASNUpdate(as_t old_asn, as_t old_local_asn);
283  void UnregisterIdentifierUpdateCallback(int listener);
284  void NotifyIdentifierUpdate(Ip4Address old_identifier);
286  void UnregisterDSCPUpdateCallback(int listener);
287  void NotifyDSCPUpdate(int new_dscp_value);
288 
289  void InsertStaticRouteMgr(IStaticRouteMgr *srt_manager);
290  void RemoveStaticRouteMgr(IStaticRouteMgr *srt_manager);
291  void NotifyAllStaticRoutes();
292  uint32_t GetStaticRouteCount() const;
293  uint32_t GetDownStaticRouteCount() const;
296  return global_config_.get();
297  }
299  bool gr_helper_disable() const { return gr_helper_disable_; }
302  }
303  bool IsGRHelperModeEnabled() const;
304  bool CollectStats(BgpRouterState *state, bool first) const;
305  bool IsServerStartingUp() const;
307  bool mvpn_ipv4_enable() const { return mvpn_ipv4_enable_; }
308  void set_mvpn_ipv4_enable(bool flag) { mvpn_ipv4_enable_ = flag; }
309  bool enable_4byte_as() const;
310  void set_enable_4byte_as(bool flag);
311  bool ignore_aspath() const { return ignore_aspath_; }
312  void set_ignore_aspath(bool flag) { ignore_aspath_ = flag; }
313 
314 private:
315  class ConfigUpdater;
316  class DeleteActor;
317  friend class BgpServerTest;
318  friend class BgpServerUnitTest;
319  typedef std::map<std::string, BgpPeer *> BgpPeerList;
320  typedef std::vector<AdminDownCb> AdminDownListenersList;
321  typedef std::vector<ASNUpdateCb> ASNUpdateListenersList;
322  typedef std::vector<IdentifierUpdateCb> IdentifierUpdateListenersList;
323  typedef std::vector<DSCPUpdateCb> DSCPUpdateListenersList;
324  typedef std::multimap<TcpSession::Endpoint, BgpPeer *> EndpointPeerList;
325 
327  void FillPeerStats(const BgpPeer *peer) const;
328  void ClearBgpaaSPeers();
329 
330  // base config variables
331  tbb::spin_rw_mutex rw_mutex_;
334  boost::dynamic_bitset<> admin_down_bmap_; // free list.
335  uint32_t cluster_id_;
339  boost::dynamic_bitset<> asn_bmap_; // free list.
343  boost::dynamic_bitset<> id_bmap_; // free list.
345  boost::dynamic_bitset<> dscp_bmap_; // free list.
346  uint32_t hold_time_;
349 
351  boost::dynamic_bitset<> peer_bmap_;
352  tbb::atomic<uint32_t> bgp_count_;
353  tbb::atomic<uint32_t> num_up_peer_;
354  tbb::atomic<uint32_t> deleting_count_;
355  tbb::atomic<uint32_t> bgpaas_count_;
356  tbb::atomic<uint32_t> num_up_bgpaas_peer_;
357  tbb::atomic<uint32_t> deleting_bgpaas_count_;
360 
361  boost::scoped_ptr<LifetimeManager> lifetime_manager_;
362  boost::scoped_ptr<DeleteActor> deleter_;
367 
368  // databases
369  boost::scoped_ptr<AsPathDB> aspath_db_;
370  boost::scoped_ptr<AsPath4ByteDB> aspath_4byte_db_;
371  boost::scoped_ptr<As4PathDB> as4path_db_;
372  boost::scoped_ptr<BgpOListDB> olist_db_;
373  boost::scoped_ptr<ClusterListDB> cluster_list_db_;
374  boost::scoped_ptr<CommunityDB> comm_db_;
375  boost::scoped_ptr<EdgeDiscoveryDB> edge_discovery_db_;
376  boost::scoped_ptr<EdgeForwardingDB> edge_forwarding_db_;
377  boost::scoped_ptr<ExtCommunityDB> extcomm_db_;
378  boost::scoped_ptr<LargeCommunityDB> largecomm_db_;
379  boost::scoped_ptr<OriginVnPathDB> ovnpath_db_;
380  boost::scoped_ptr<PmsiTunnelDB> pmsi_tunnel_db_;
381  boost::scoped_ptr<BgpAttrDB> attr_db_;
382 
383  // sessions and state managers
385  boost::scoped_ptr<BgpUpdateSender> update_sender_;
386  boost::scoped_ptr<RoutingInstanceMgr> inst_mgr_;
387  boost::scoped_ptr<RoutingPolicyMgr> policy_mgr_;
388  boost::scoped_ptr<RTargetGroupMgr> rtarget_group_mgr_;
389  boost::scoped_ptr<BgpMembershipManager> membership_mgr_;
390  boost::scoped_ptr<BgpConditionListener> inet_condition_listener_;
391  boost::scoped_ptr<BgpConditionListener> inet6_condition_listener_;
392  boost::scoped_ptr<BgpConditionListener> evpn_condition_listener_;
393  boost::scoped_ptr<BgpConditionListener> evpn6_condition_listener_;
394  boost::scoped_ptr<RoutePathReplicator> inetvpn_replicator_;
395  boost::scoped_ptr<RoutePathReplicator> ermvpn_replicator_;
396  boost::scoped_ptr<RoutePathReplicator> mvpn_replicator_;
397  boost::scoped_ptr<RoutePathReplicator> evpn_replicator_;
398  boost::scoped_ptr<RoutePathReplicator> inet6vpn_replicator_;
399  boost::scoped_ptr<IServiceChainMgr> inet_service_chain_mgr_;
400  boost::scoped_ptr<IServiceChainMgr> inet6_service_chain_mgr_;
401  boost::scoped_ptr<IServiceChainMgr> evpn_service_chain_mgr_;
402  boost::scoped_ptr<IServiceChainMgr> evpn6_service_chain_mgr_;
403 
404  // configuration
405  boost::scoped_ptr<BgpGlobalSystemConfig> global_config_;
406  boost::scoped_ptr<BgpGlobalQosConfig> global_qos_;
407  boost::scoped_ptr<BgpConfigManager> config_mgr_;
408  boost::scoped_ptr<ConfigUpdater> updater_;
409 
410  mutable tbb::atomic<uint64_t> message_build_error_;
411 
413 };
414 
415 #endif // SRC_BGP_BGP_SERVER_H_
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
uint32_t as_t
Definition: bgp_common.h:21
Family
Definition: address.h:24
@ INET
Definition: address.h:26
@ EVPN
Definition: address.h:31
@ INET6VPN
Definition: address.h:29
@ ERMVPN
Definition: address.h:32
@ INET6
Definition: address.h:27
@ INETVPN
Definition: address.h:28
@ MVPN
Definition: address.h:33
static void Initialize()
Definition: bgp_server.cc:556
void RoutingInstanceMgrDeletionComplete(RoutingInstanceMgr *mgr)
void decrement_deleting_count()
Definition: bgp_server.h:229
boost::scoped_ptr< BgpAttrDB > attr_db_
Definition: bgp_server.h:381
boost::scoped_ptr< RoutePathReplicator > ermvpn_replicator_
Definition: bgp_server.h:395
boost::scoped_ptr< BgpConditionListener > inet6_condition_listener_
Definition: bgp_server.h:391
RTargetGroupMgr * rtarget_group_mgr()
Definition: bgp_server.h:111
uint32_t num_deleting_bgp_peer() const
Definition: bgp_server.h:227
std::string bgp_identifier_string() const
Definition: bgp_server.h:215
tbb::atomic< uint32_t > num_up_bgpaas_peer_
Definition: bgp_server.h:356
DSCPUpdateListenersList dscp_listeners_
Definition: bgp_server.h:344
uint32_t cluster_id() const
Definition: bgp_server.h:207
uint32_t GetStaticRouteCount() const
Definition: bgp_server.cc:1022
bool logging_disabled_
Definition: bgp_server.h:364
as_t local_autonomous_system_
Definition: bgp_server.h:337
bool CollectStats(BgpRouterState *state, bool first) const
Definition: bgp_server.cc:1073
ExtCommunityDB * extcomm_db()
Definition: bgp_server.h:190
const RoutingInstanceMgr * routing_instance_mgr() const
Definition: bgp_server.h:104
IServiceChainMgr * service_chain_mgr(SCAddress::Family family)
Definition: bgp_server.h:137
void RemovePeer(TcpSession::Endpoint remote, BgpPeer *peer)
Definition: bgp_server.cc:653
boost::asio::io_context * ioservice()
Definition: bgp_server.cc:690
uint32_t bgp_identifier_u32_
Definition: bgp_server.h:341
uint32_t num_service_chains() const
Definition: bgp_server.cc:782
BgpServer(EventManager *evm)
Definition: bgp_server.cc:485
BgpSessionManager * session_mgr_
Definition: bgp_server.h:384
uint32_t num_bgp_peer() const
Definition: bgp_server.h:226
uint32_t num_static_routes() const
Definition: bgp_server.cc:804
boost::scoped_ptr< IServiceChainMgr > evpn_service_chain_mgr_
Definition: bgp_server.h:401
uint32_t GetDownStaticRouteCount() const
Definition: bgp_server.cc:1033
void set_logging_disabled(bool flag)
Definition: bgp_server.h:199
friend class BgpServerTest
Definition: bgp_server.h:316
bool enable_4byte_as() const
Definition: bgp_server.cc:734
uint32_t GetEndOfRibSendTime() const
Definition: bgp_server.cc:726
LifetimeActor * deleter()
Definition: bgp_server.cc:572
BgpPeer * FindExactPeer(const BgpPeer *peer) const
Definition: bgp_server.cc:675
const RTargetGroupMgr * rtarget_group_mgr() const
Definition: bgp_server.h:112
BgpPeer * FindNextPeer(const std::string &name=std::string())
Definition: bgp_server.cc:642
AsPathDB * aspath_db()
Definition: bgp_server.h:181
tbb::spin_rw_mutex rw_mutex_
Definition: bgp_server.h:331
std::multimap< TcpSession::Endpoint, BgpPeer * > EndpointPeerList
Definition: bgp_server.h:324
uint32_t hold_time_
Definition: bgp_server.h:346
void VisitBgpPeers(BgpServer::VisitorFn) const
Definition: bgp_server.cc:812
void IncrementUpBgpaasPeerCount()
Definition: bgp_server.h:259
DISALLOW_COPY_AND_ASSIGN(BgpServer)
void UnregisterAdminDownCallback(int listener)
Definition: bgp_server.cc:835
void DecrementUpPeerCount()
Definition: bgp_server.h:252
boost::scoped_ptr< RoutePathReplicator > inetvpn_replicator_
Definition: bgp_server.h:394
bool ignore_aspath() const
Definition: bgp_server.h:311
boost::scoped_ptr< LargeCommunityDB > largecomm_db_
Definition: bgp_server.h:378
boost::dynamic_bitset admin_down_bmap_
Definition: bgp_server.h:334
boost::scoped_ptr< ClusterListDB > cluster_list_db_
Definition: bgp_server.h:373
void UnregisterPeer(BgpPeer *peer)
Definition: bgp_server.cc:610
boost::scoped_ptr< BgpUpdateSender > update_sender_
Definition: bgp_server.h:385
RoutingInstanceMgr * routing_instance_mgr()
Definition: bgp_server.h:103
Ip4Address bgp_identifier_
Definition: bgp_server.h:340
As4PathDB * as4path_db()
Definition: bgp_server.h:183
uint32_t num_down_static_routes() const
Definition: bgp_server.cc:808
boost::scoped_ptr< ConfigUpdater > updater_
Definition: bgp_server.h:408
void IncrementUpPeerCount()
Definition: bgp_server.h:249
const RoutingPolicyMgr * routing_policy_mgr() const
Definition: bgp_server.h:108
std::vector< DSCPUpdateCb > DSCPUpdateListenersList
Definition: bgp_server.h:323
bool gr_helper_disable() const
Definition: bgp_server.h:299
void set_destroyed()
Definition: bgp_server.h:202
BgpConditionListener * condition_listener(SCAddress::Family family)
Definition: bgp_server.h:125
void set_gr_helper_disable(bool gr_helper_disable)
Definition: bgp_server.h:300
boost::scoped_ptr< AsPathDB > aspath_db_
Definition: bgp_server.h:369
boost::function< void(BgpPeer *)> VisitorFn
Definition: bgp_server.h:65
bool HasSelfConfiguration() const
Definition: bgp_server.cc:576
tbb::atomic< uint32_t > deleting_bgpaas_count_
Definition: bgp_server.h:357
int RegisterIdentifierUpdateCallback(IdentifierUpdateCb callback)
Definition: bgp_server.cc:955
tbb::atomic< uint32_t > bgp_count_
Definition: bgp_server.h:352
uint32_t bgp_identifier() const
Definition: bgp_server.h:212
uint32_t GetEndOfRibReceiveTime() const
Definition: bgp_server.cc:722
boost::scoped_ptr< IServiceChainMgr > evpn6_service_chain_mgr_
Definition: bgp_server.h:402
std::vector< AdminDownCb > AdminDownListenersList
Definition: bgp_server.h:320
std::vector< ASNUpdateCb > ASNUpdateListenersList
Definition: bgp_server.h:321
void RetryDelete()
Definition: bgp_server.cc:426
tbb::atomic< uint64_t > message_build_error_
Definition: bgp_server.h:410
boost::scoped_ptr< EdgeDiscoveryDB > edge_discovery_db_
Definition: bgp_server.h:375
bool IsDeleted() const
Definition: bgp_server.cc:422
void set_ignore_aspath(bool flag)
Definition: bgp_server.h:312
uint32_t num_down_service_chains() const
Definition: bgp_server.cc:793
void DecrementUpBgpaasPeerCount()
Definition: bgp_server.h:262
boost::scoped_ptr< BgpOListDB > olist_db_
Definition: bgp_server.h:372
boost::scoped_ptr< BgpConfigManager > config_mgr_
Definition: bgp_server.h:407
std::map< std::string, BgpPeer * > BgpPeerList
Definition: bgp_server.h:319
void decrement_deleting_bgpaas_count()
Definition: bgp_server.h:237
EdgeDiscoveryDB * edge_discovery_db()
Definition: bgp_server.h:188
IdentifierUpdateListenersList id_listeners_
Definition: bgp_server.h:342
uint32_t num_deleting_bgpaas_peer() const
Definition: bgp_server.h:235
void NotifyASNUpdate(as_t old_asn, as_t old_local_asn)
Definition: bgp_server.cc:899
int RegisterPeer(BgpPeer *peer)
Definition: bgp_server.cc:586
bool IsFastConvergenceEnabled() const
Definition: bgp_server.cc:694
AsPath4ByteDB * aspath_4byte_db()
Definition: bgp_server.h:182
friend class BgpServerUnitTest
Definition: bgp_server.h:318
boost::dynamic_bitset dscp_bmap_
Definition: bgp_server.h:345
BgpConfigManager * config_manager()
Definition: bgp_server.h:101
BgpGlobalQosConfig * global_qos()
Definition: bgp_server.h:298
StaticRouteMgrList srt_manager_list_
Definition: bgp_server.h:348
boost::function< void(Ip4Address)> IdentifierUpdateCb
Definition: bgp_server.h:64
uint16_t GetGracefulRestartTime() const
Definition: bgp_server.cc:704
void UnregisterASNUpdateCallback(int listener)
Definition: bgp_server.cc:881
bool mvpn_ipv4_enable_
Definition: bgp_server.h:365
PmsiTunnelDB * pmsi_tunnel_db()
Definition: bgp_server.h:193
bool logging_disabled() const
Definition: bgp_server.h:198
int RegisterAdminDownCallback(AdminDownCb callback)
Definition: bgp_server.cc:819
ASNUpdateListenersList asn_listeners_
Definition: bgp_server.h:338
uint64_t message_build_error() const
Definition: bgp_server.h:274
boost::scoped_ptr< OriginVnPathDB > ovnpath_db_
Definition: bgp_server.h:379
uint32_t NumUpPeer() const
Definition: bgp_server.h:256
boost::scoped_ptr< BgpGlobalQosConfig > global_qos_
Definition: bgp_server.h:406
const BgpMembershipManager * membership_mgr() const
Definition: bgp_server.h:177
as_t autonomous_system_
Definition: bgp_server.h:336
void Shutdown()
Definition: bgp_server.cc:568
void UnregisterDSCPUpdateCallback(int listener)
Definition: bgp_server.cc:926
DB * database()
Definition: bgp_server.h:204
BgpConditionListener * condition_listener(Address::Family family)
Definition: bgp_server.h:115
as_t autonomous_system() const
Definition: bgp_server.h:209
void UpdateBgpIdentifier(const Ip4Address &identifier)
Definition: bgp_server.cc:1221
boost::scoped_ptr< BgpMembershipManager > membership_mgr_
Definition: bgp_server.h:389
virtual std::string ToString() const
Definition: bgp_server.cc:564
RoutePathReplicator * replicator(Address::Family family)
Definition: bgp_server.h:149
const BgpGlobalSystemConfig * global_config() const
Definition: bgp_server.h:295
bool mvpn_ipv4_enable() const
Definition: bgp_server.h:307
boost::dynamic_bitset asn_bmap_
Definition: bgp_server.h:339
static void Terminate()
Definition: bgp_server.cc:560
void set_cluster_id(uint32_t id)
Definition: bgp_server.h:208
void InsertStaticRouteMgr(IStaticRouteMgr *srt_manager)
Definition: bgp_server.cc:1000
void increment_message_build_error() const
Definition: bgp_server.h:273
BgpPeer * FindPeer(const std::string &name)
boost::scoped_ptr< RoutePathReplicator > inet6vpn_replicator_
Definition: bgp_server.h:398
tbb::atomic< uint32_t > bgpaas_count_
Definition: bgp_server.h:355
boost::scoped_ptr< RoutePathReplicator > evpn_replicator_
Definition: bgp_server.h:397
boost::scoped_ptr< RTargetGroupMgr > rtarget_group_mgr_
Definition: bgp_server.h:388
bool ignore_aspath_
Definition: bgp_server.h:366
boost::scoped_ptr< As4PathDB > as4path_db_
Definition: bgp_server.h:371
uint32_t num_deleted_routing_instance() const
Definition: bgp_server.cc:761
tbb::atomic< uint32_t > num_up_peer_
Definition: bgp_server.h:353
boost::scoped_ptr< BgpGlobalSystemConfig > global_config_
Definition: bgp_server.h:405
bool destroyed_
Definition: bgp_server.h:363
boost::function< void(uint8_t)> DSCPUpdateCb
Definition: bgp_server.h:62
void set_mvpn_ipv4_enable(bool flag)
Definition: bgp_server.h:308
void NotifyDSCPUpdate(int new_dscp_value)
Definition: bgp_server.cc:944
void set_autonomous_system(as_t asn)
Definition: bgp_server.h:210
BgpUpdateSender * update_sender()
Definition: bgp_server.h:99
boost::scoped_ptr< CommunityDB > comm_db_
Definition: bgp_server.h:374
bool IsNextHopCheckEnabled() const
Definition: bgp_server.cc:698
const RoutePathReplicator * replicator(Address::Family family) const
Definition: bgp_server.h:162
uint32_t bgp_identifier_u32() const
Definition: bgp_server.h:213
int RegisterDSCPUpdateCallback(DSCPUpdateCb cb)
Definition: bgp_server.cc:910
boost::scoped_ptr< EdgeForwardingDB > edge_forwarding_db_
Definition: bgp_server.h:376
uint16_t GetXmppHoldTime() const
Definition: bgp_server.cc:716
boost::scoped_ptr< AsPath4ByteDB > aspath_4byte_db_
Definition: bgp_server.h:370
uint32_t num_routing_instance() const
Definition: bgp_server.cc:756
tbb::atomic< uint32_t > deleting_count_
Definition: bgp_server.h:354
bool IsServerStartingUp() const
Definition: bgp_server.cc:730
boost::function< void()> AdminDownCb
Definition: bgp_server.h:61
BgpPeerList peer_list_
Definition: bgp_server.h:358
virtual ~BgpServer()
Definition: bgp_server.cc:550
uint32_t get_output_queue_depth() const
Definition: bgp_server.cc:766
void InsertPeer(TcpSession::Endpoint remote, BgpPeer *peer)
Definition: bgp_server.cc:647
as_t local_autonomous_system() const
Definition: bgp_server.h:211
boost::scoped_ptr< IServiceChainMgr > inet_service_chain_mgr_
Definition: bgp_server.h:399
EdgeForwardingDB * edge_forwarding_db()
Definition: bgp_server.h:189
OriginVnPathDB * ovnpath_db()
Definition: bgp_server.h:192
boost::scoped_ptr< BgpConditionListener > evpn_condition_listener_
Definition: bgp_server.h:392
const BgpConfigManager * config_manager() const
Definition: bgp_server.h:102
void NotifyIdentifierUpdate(Ip4Address old_identifier)
Definition: bgp_server.cc:989
boost::scoped_ptr< RoutePathReplicator > mvpn_replicator_
Definition: bgp_server.h:396
bool admin_down_
Definition: bgp_server.h:332
boost::scoped_ptr< DeleteActor > deleter_
Definition: bgp_server.h:362
void set_enable_4byte_as(bool flag)
Definition: bgp_server.cc:738
bool destroyed() const
Definition: bgp_server.h:201
void UnregisterIdentifierUpdateCallback(int listener)
Definition: bgp_server.cc:971
BgpAttrDB * attr_db()
Definition: bgp_server.h:184
void NotifyAllStaticRoutes()
Definition: bgp_server.cc:1012
boost::scoped_ptr< RoutingInstanceMgr > inst_mgr_
Definition: bgp_server.h:386
const std::string & localname() const
Definition: bgp_server.cc:686
CommunityDB * comm_db()
Definition: bgp_server.h:187
boost::function< void(as_t, as_t)> ASNUpdateCb
Definition: bgp_server.h:63
time_t GetRTargetTableLastUpdatedTimeStamp() const
Definition: bgp_server.cc:1214
BgpSessionManager * session_manager()
Definition: bgp_server.h:98
int RegisterASNUpdateCallback(ASNUpdateCb callback)
Definition: bgp_server.cc:865
BgpMembershipManager * membership_mgr()
Definition: bgp_server.h:176
BgpGlobalSystemConfig * global_config()
Definition: bgp_server.h:294
RoutingPolicyMgr * routing_policy_mgr()
Definition: bgp_server.h:107
LargeCommunityDB * largecomm_db()
Definition: bgp_server.h:191
boost::scoped_ptr< BgpConditionListener > evpn6_condition_listener_
Definition: bgp_server.h:393
EndpointPeerList endpoint_peer_list_
Definition: bgp_server.h:359
uint32_t NumUpBgpaasPeer() const
Definition: bgp_server.h:266
void NotifyAdminDown()
Definition: bgp_server.cc:854
boost::scoped_ptr< RoutingPolicyMgr > policy_mgr_
Definition: bgp_server.h:387
boost::dynamic_bitset peer_bmap_
Definition: bgp_server.h:351
boost::scoped_ptr< BgpConditionListener > inet_condition_listener_
Definition: bgp_server.h:390
boost::scoped_ptr< ExtCommunityDB > extcomm_db_
Definition: bgp_server.h:377
bool IsReadyForDeletion()
Definition: bgp_server.cc:432
bool gr_helper_disable_
Definition: bgp_server.h:347
LifetimeManager * lifetime_manager()
Definition: bgp_server.h:100
void increment_deleting_count()
Definition: bgp_server.h:228
bool admin_down() const
Definition: bgp_server.h:206
std::vector< IdentifierUpdateCb > IdentifierUpdateListenersList
Definition: bgp_server.h:322
bool IsGRHelperModeEnabled() const
Definition: bgp_server.cc:742
AdminDownListenersList admin_down_listeners_
Definition: bgp_server.h:333
boost::dynamic_bitset id_bmap_
Definition: bgp_server.h:343
boost::scoped_ptr< PmsiTunnelDB > pmsi_tunnel_db_
Definition: bgp_server.h:380
uint32_t num_bgpaas_peer() const
Definition: bgp_server.h:234
ClusterListDB * cluster_list_db()
Definition: bgp_server.h:186
uint32_t GetLongLivedGracefulRestartTime() const
Definition: bgp_server.cc:710
void increment_deleting_bgpaas_count()
Definition: bgp_server.h:236
uint32_t hold_time() const
Definition: bgp_server.h:219
void ClearBgpaaSPeers()
Definition: bgp_server.cc:664
void RemoveStaticRouteMgr(IStaticRouteMgr *srt_manager)
Definition: bgp_server.cc:1006
std::set< IStaticRouteMgr * > StaticRouteMgrList
Definition: bgp_server.h:66
boost::scoped_ptr< IServiceChainMgr > inet6_service_chain_mgr_
Definition: bgp_server.h:400
boost::scoped_ptr< LifetimeManager > lifetime_manager_
Definition: bgp_server.h:361
void FillPeerStats(const BgpPeer *peer) const
Definition: bgp_server.cc:1044
uint32_t cluster_id_
Definition: bgp_server.h:335
BgpOListDB * olist_db()
Definition: bgp_server.h:185
Definition: db.h:24
This class represents a database for managing LargeCommunity objects. It is used to store,...
Definition: community.h:694
boost::asio::ip::tcp::endpoint Endpoint
Definition: tcp_session.h:62
static EventManager evm