OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
routing_instance.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_ROUTING_INSTANCE_ROUTING_INSTANCE_H_
6 #define SRC_BGP_ROUTING_INSTANCE_ROUTING_INSTANCE_H_
7 
8 
9 #include <boost/asio/ip/tcp.hpp>
10 #include <boost/dynamic_bitset.hpp>
11 #include <boost/intrusive_ptr.hpp>
12 #include <boost/iterator/iterator_facade.hpp>
13 #include <boost/scoped_ptr.hpp>
14 #include <tbb/mutex.h>
15 #include <tbb/spin_rw_mutex.h>
16 
17 #include <list>
18 #include <map>
19 #include <set>
20 #include <string>
21 #include <vector>
22 
23 #include "base/bitset.h"
24 #include "base/index_map.h"
25 #include "base/lifetime.h"
26 #include "base/address.h"
27 #include "bgp/bgp_common.h"
30 #include "sandesh/sandesh_trace.h"
31 
32 class DBTable;
33 class BgpAttr;
34 class BgpInstanceConfig;
35 class BgpNeighborConfig;
36 class BgpPath;
37 class BgpRoute;
38 class BgpServer;
39 class BgpTable;
40 class IRouteAggregator;
41 class IStaticRouteMgr;
42 class RouteDistinguisher;
43 class RoutingInstanceMgr;
44 class RoutingInstanceInfo;
45 class RoutingInstanceStatsData;
46 class RoutingTableStats;
47 class BgpNeighborResp;
48 class ExtCommunity;
49 class LifetimeActor;
50 class PeerManager;
51 class ShowRouteTable;
52 class TaskTrigger;
53 
55 public:
56  typedef std::set<RouteTarget> RouteTargetList;
57  typedef std::map<std::string, BgpTable *> RouteTableList;
58  typedef std::map<Address::Family, BgpTable *> RouteTableFamilyList;
59 
60  RoutingInstance(std::string name, BgpServer *server,
61  RoutingInstanceMgr *mgr,
62  const BgpInstanceConfig *config);
63  virtual ~RoutingInstance();
64 
66  const RouteTableList &GetTables() const { return vrf_tables_by_name_; }
67 
74  void UpdateAllStaticRoutes();
75 
79 
80  void ProcessConfig();
82  void ClearConfig();
83 
84  static std::string GetTableName(std::string instance_name,
85  Address::Family fmly);
86  static std::string GetVrfFromTableName(const std::string table);
87 
89  const BgpTable *GetTable(Address::Family fmly) const;
90 
91  void AddTable(BgpTable *tbl);
92 
93  void RemoveTable(BgpTable *tbl);
94 
95  const RouteTargetList &GetImportList() const { return import_; }
96  const RouteTargetList &GetExportList() const { return export_; }
97  bool HasExportTarget(const ExtCommunity *extcomm) const;
98 
99  const RouteDistinguisher *GetRD() const {
100  return rd_.get();
101  }
102 
103  void TriggerTableDelete(BgpTable *table);
104  void TableDeleteComplete(BgpTable *table);
105  void DestroyDBTable(DBTable *table);
106 
107  bool MayDelete() const;
108  void ManagedDelete();
110  const LifetimeActor *deleter() const;
111  bool deleted() const;
112 
113  void set_index(int index);
114  int index() const { return index_; }
115  bool always_subscribe() const { return always_subscribe_; }
116  bool IsMasterRoutingInstance() const {
117  return is_master_;
118  }
119 
120  const std::string &name() const { return name_; }
121  const std::string GetVirtualNetworkName() const;
122 
123  const BgpInstanceConfig *config() const { return config_; }
124  int virtual_network_index() const;
125  bool virtual_network_allow_transit() const;
126  bool virtual_network_pbb_evpn_enable() const;
127  int vxlan_id() const;
128 
129  const RoutingInstanceMgr *manager() const { return mgr_; }
131  RoutingInstanceInfo GetDataCollection(const char *operation);
132 
133  BgpServer *server() { return server_; }
134  const BgpServer *server() const { return server_; }
135 
136  // Remove import and export route target
137  // and Leave corresponding RtGroup
138  void ClearRouteTarget();
139 
140  void CreateNeighbors();
141 
143  if (family == Address::INET)
144  return inet_static_route_mgr_.get();
145  if (family == Address::INET6)
146  return inet6_static_route_mgr_.get();
147  assert(false);
148  return NULL;
149  }
150 
152 
154  if (family == Address::INET)
155  return inet_route_aggregator_.get();
156  if (family == Address::INET6)
157  return inet6_route_aggregator_.get();
158  assert(false);
159  return NULL;
160  }
161 
164 
165  size_t peer_manager_size() const;
167  const PeerManager *peer_manager() const { return peer_manager_.get(); }
169 
172  return routing_policies_;
173  }
175 
176  void AddRoutingPolicy(RoutingPolicyPtr policy);
177 
178  bool IsServiceChainRoute(const BgpRoute *route) const;
179 
180  bool ProcessRoutingPolicy(const BgpRoute *route, BgpPath *path) const;
181 
182  // Check whether the route is aggregate route
183  bool IsAggregateRoute(const BgpTable *table, const BgpRoute *route) const;
184 
185  // Check whether the route is contributing route to aggregate route
186  bool IsContributingRoute(const BgpTable *table,
187  const BgpRoute *route) const;
188 
190  const std::string &mvpn_project_manager_network() const {
192  }
195  }
196  void set_mvpn_project_manager_network(std::string network) {
198  }
199 
200 private:
201  friend class RoutingInstanceMgr;
202  class DeleteActor;
203 
204  void AddMvpnRTargetRoute(as_t asn);
205  void DeleteMvpnRTargetRoute(as_t old_asn, Ip4Address old_ip);
206 
207  void AddRTargetRoute(as_t asn, const RouteTarget &rtarget);
208  void DeleteRTargetRoute(as_t asn, const RouteTarget &rtarget);
209  void InitAllRTargetRoutes(as_t asn);
210  void FlushAllRTargetRoutes(as_t asn);
211  void ProcessIdentifierUpdate(as_t asn);
212 
213  void AddRouteTarget(bool import, std::vector<std::string> *change_list,
214  RouteTargetList::const_iterator it);
215  void DeleteRouteTarget(bool import, std::vector<std::string> *change_list,
216  RouteTargetList::iterator it);
217 
218  // Cleanup all the state prior to deletion.
219  void Shutdown();
220 
224  Address::Family vpn_family);
225  void ClearFamilyRouteTarget(Address::Family vrf_family,
226  Address::Family vpn_family);
227 
228  std::string name_;
229  int index_;
230  std::unique_ptr<RouteDistinguisher> rd_;
240  std::string virtual_network_;
246  boost::scoped_ptr<DeleteActor> deleter_;
248  boost::scoped_ptr<IStaticRouteMgr> inet_static_route_mgr_;
249  boost::scoped_ptr<IStaticRouteMgr> inet6_static_route_mgr_;
250  boost::scoped_ptr<IRouteAggregator> inet_route_aggregator_;
251  boost::scoped_ptr<IRouteAggregator> inet6_route_aggregator_;
252  boost::scoped_ptr<PeerManager> peer_manager_;
255 };
256 
257 
258 class RoutingInstanceSet : public BitSet {
259 };
260 
261 //
262 // This class is responsible for life cycle management of RoutingInstances.
263 //
264 // In order to speed up creation of RoutingInstances at startup, multiple
265 // bgp::ConfigHelper tasks running in parallel are used instead of creating
266 // from the bgp::Config task directly. A hash of the RoutingInstance name
267 // is calculated and the name is added to one of the instance_config_lists_.
268 // Each list is processed independently in a bgp::ConfigHelper task.
269 //
270 // As RoutingInstance creation doesn't happen in-line from bgp::Config task,
271 // creation of BgpPeers in non-master RoutingInstances needs to be deferred
272 // till after RoutingInstance itself is created. This is handled by adding
273 // the RoutingInstance name to neighbor_config_list_ and creating BgpPeers
274 // from bgp::Config task. Assumption is that there will be a small number of
275 // RoutingInstances with BgpPeers.
276 //
277 // As RoutingInstances can be created from parallel bgp::ConfigHelper tasks,
278 // a mutex is used to serialize access to shared data structures such as the
279 // instances_ map, target_map_ and vn_index_map_.
280 //
282 public:
283  typedef std::set<std::string> RoutingInstanceConfigList;
284  typedef std::map<std::string, RoutingInstance *> RoutingInstanceList;
285  typedef std::map<std::string, SandeshTraceBufferPtr>
287  typedef std::list<std::string> RoutingInstanceTraceBufferList;
288  typedef RoutingInstanceList::iterator name_iterator;
289  typedef RoutingInstanceList::const_iterator const_name_iterator;
290  typedef RoutingInstanceList::iterator RoutingInstanceIterator;
291  typedef std::multimap<RouteTarget, RoutingInstance *> InstanceTargetMap;
292  typedef std::multimap<int, RoutingInstance *> VnIndexMap;
293 
294  typedef boost::function<void(std::string, int)> RoutingInstanceCb;
295  typedef std::vector<RoutingInstanceCb> InstanceOpListenersList;
296  typedef std::set<std::string> MvpnManagerNetworks;
297  typedef std::map<std::string, MvpnManagerNetworks>
299 
300  enum Operation {
304  };
305 
307  virtual ~RoutingInstanceMgr();
308 
310  return instances_.begin();
311  }
312 
314  return instances_.end();
315  }
316 
317  name_iterator name_begin() { return instances_.begin(); }
318  name_iterator name_end() { return instances_.end(); }
319  name_iterator name_lower_bound(const std::string &name) {
320  return instances_.lower_bound(name);
321  }
324  const_name_iterator name_clower_bound(const std::string &name) {
325  return instances_.lower_bound(name);
326  }
327 
329  void NotifyInstanceOp(std::string name, Operation deleted);
330  void UnregisterInstanceOpCallback(int id);
331 
332  const RoutingInstance *GetInstanceByTarget(const RouteTarget &target) const;
333  std::string GetVirtualNetworkByVnIndex(int vn_index) const;
334  int GetVnIndexByExtCommunity(const ExtCommunity *community) const;
335 
338  RoutingInstance *GetRoutingInstance(const std::string &name);
339  const RoutingInstance *GetRoutingInstance(const std::string &name) const;
340  RoutingInstance *GetRoutingInstanceLocked(const std::string &name);
341  void InsertRoutingInstance(RoutingInstance *rtinstance);
342  void LocateRoutingInstance(const BgpInstanceConfig *config);
343  void LocateRoutingInstance(const std::string &name);
345  void UpdateRoutingInstance(RoutingInstance *rtinstance,
346  const BgpInstanceConfig *config);
347  virtual void DeleteRoutingInstance(const std::string &name);
348  void DestroyRoutingInstance(RoutingInstance *rtinstance);
349 
350  // Trace buffer related functions
351  SandeshTraceBufferPtr LocateTraceBuffer(const std::string &name);
352  SandeshTraceBufferPtr GetTraceBuffer(const std::string &name);
353  void DisableTraceBuffer(const std::string &name);
354  bool HasRoutingInstanceActiveTraceBuf(const std::string &name) const;
355  bool HasRoutingInstanceDormantTraceBuf(const std::string &name) const;
356  SandeshTraceBufferPtr GetActiveTraceBuffer(const std::string &name) const;
357  SandeshTraceBufferPtr GetDormantTraceBuffer(const std::string &name) const;
362 
365  }
367  return trace_buf_threshold_;
368  }
369 
370  bool deleted();
371  bool MayDelete() const;
372  void ManagedDelete();
373  void Shutdown();
374 
376 
377  size_t count() const { return instances_.size(); }
378  BgpServer *server() { return server_; }
379  const BgpServer *server() const { return server_; }
381  tbb::mutex &mutex() { return mutex_; }
382 
383  uint32_t deleted_count() const { return deleted_count_; }
386 
387  bool CreateVirtualNetworkMapping(const std::string &virtual_network,
388  const std::string &instance_name);
389  bool DeleteVirtualNetworkMapping(const std::string &virtual_network,
390  const std::string &instance_name);
391  uint32_t SendTableStatsUve();
393  return mvpn_project_managers_;
394  }
396  return mvpn_project_managers_;
397  }
398  size_t GetMvpnProjectManagerCount(const std::string &network) const;
399  static std::string GetPrimaryRoutingInstanceName(const string &name_in);
400 
401 private:
402  friend class BgpConfigTest;
404  class DeleteActor;
405 
406  bool ProcessInstanceConfigList(int idx);
408 
410  void InstanceTargetRemove(const RoutingInstance *rti);
412  void InstanceVnIndexRemove(const RoutingInstance *rti);
413 
414  const RoutingInstance *GetInstanceByVnIndex(int vn_index) const;
415  int GetVnIndexByRouteTarget(const RouteTarget &rtarget) const;
416 
417  void ASNUpdateCallback(as_t old_asn, as_t old_local_asn);
418  void IdentifierUpdateCallback(Ip4Address old_identifier);
419 
424  void SetTableStatsUve(Address::Family family,
425  const std::map<std::string, RoutingTableStats> &stats_map,
426  RoutingInstanceStatsData *instance_info) const;
427 
429  mutable tbb::mutex mutex_;
430  mutable tbb::spin_rw_mutex rw_mutex_;
431  std::vector<RoutingInstanceConfigList> instance_config_lists_;
432  std::vector<TaskTrigger *> instance_config_triggers_;
434  boost::scoped_ptr<TaskTrigger> neighbor_config_trigger_;
442  uint32_t deleted_count_;
447  boost::scoped_ptr<DeleteActor> deleter_;
449  boost::dynamic_bitset<> bmap_; // free list.
451 
452  // Map of virtual-network names to routing-instance names.
453  typedef std::map<std::string, std::set<std::string> > VirtualNetworksMap;
455 
457 };
458 
459 #endif // SRC_BGP_ROUTING_INSTANCE_ROUTING_INSTANCE_H_
RoutingInstanceList::iterator name_iterator
void DisableInstanceConfigListProcessing()
BgpTable * VrfTableCreate(Address::Family vrf_family, Address::Family vpn_family)
const RoutingInstance * GetInstanceByTarget(const RouteTarget &target) const
InstanceTargetMap target_map_
void AddTable(BgpTable *tbl)
bool MayDelete() const
RoutingInstance(std::string name, BgpServer *server, RoutingInstanceMgr *mgr, const BgpInstanceConfig *config)
const BgpInstanceConfig * config_
MvpnProjectManagerNetworks mvpn_project_managers_
size_t GetRoutingInstanceActiveTraceBufSize() const
size_t GetRoutingInstanceDormantTraceBufSize() const
RoutingInstanceTraceBufferMap trace_buffer_dormant_
const RouteTargetList & GetImportList() const
RoutingInstance * default_rtinstance_
virtual ~RoutingInstance()
BgpTable * GetTable(Address::Family fmly)
int RegisterInstanceOpCallback(RoutingInstanceCb cb)
const RouteDistinguisher * GetRD() const
static std::string GetTableName(std::string instance_name, Address::Family fmly)
const RouteTargetList & GetExportList() const
PeerManager * peer_manager()
void DisableTraceBuffer(const std::string &name)
void FlushRouteAggregationConfig()
RoutingInstance * GetRoutingInstance(const std::string &name)
size_t count() const
boost::scoped_ptr< TaskTrigger > neighbor_config_trigger_
std::vector< RoutingInstanceCb > InstanceOpListenersList
void DeleteRTargetRoute(as_t asn, const RouteTarget &rtarget)
void UpdateConfig(const BgpInstanceConfig *config)
int virtual_network_index() const
std::list< std::string > RoutingInstanceTraceBufferList
void EnableNeighborConfigListProcessing()
const BgpServer * server() const
BgpServer * server()
SandeshTraceBufferPtr GetDormantTraceBuffer(const std::string &name) const
RoutingInstanceList instances_
Family
Definition: address.h:24
IRouteAggregator * LocateRouteAggregator(Address::Family family)
boost::scoped_ptr< IRouteAggregator > inet6_route_aggregator_
name_iterator name_begin()
LifetimeActor * deleter()
const PeerManager * peer_manager() const
void DestroyRouteAggregator(Address::Family family)
boost::scoped_ptr< IRouteAggregator > inet_route_aggregator_
uint32_t deleted_count() const
BgpTable * RTargetTableCreate()
const_name_iterator name_cend()
virtual void DeleteRoutingInstance(const std::string &name)
void InstanceVnIndexRemove(const RoutingInstance *rti)
void IdentifierUpdateCallback(Ip4Address old_identifier)
void set_mvpn_project_manager_network(std::string network)
void ProcessRoutingPolicyConfig()
void InitAllRTargetRoutes(as_t asn)
static std::string GetPrimaryRoutingInstanceName(const string &name_in)
RoutingInstanceIterator end()
std::map< std::string, std::set< std::string > > VirtualNetworksMap
std::string virtual_network_
void NotifyInstanceOp(std::string name, Operation deleted)
std::multimap< RouteTarget, RoutingInstance * > InstanceTargetMap
const std::string & name() const
void UpdateRouteAggregationConfig()
int vxlan_id() const
int GetVnIndexByExtCommunity(const ExtCommunity *community) const
RoutingInstance * GetDefaultRoutingInstance()
boost::scoped_ptr< IStaticRouteMgr > inet_static_route_mgr_
void AddRouteTarget(bool import, std::vector< std::string > *change_list, RouteTargetList::const_iterator it)
LifetimeRef< RoutingInstanceMgr > server_delete_ref_
const_name_iterator name_cbegin()
RoutingPolicyAttachList * routing_policies()
RoutingInstanceInfo GetDataCollection(const char *operation)
boost::scoped_ptr< PeerManager > peer_manager_
size_t GetRoutingInstanceDormantTraceBufferCapacity() const
int GetVnIndexByRouteTarget(const RouteTarget &rtarget) const
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
BgpServer * server()
uint32_t as_t
Definition: bgp_common.h:21
SandeshTraceBufferPtr LocateTraceBuffer(const std::string &name)
std::string & mvpn_project_manager_network()
void ProcessServiceChainConfig()
RouteTableFamilyList vrf_tables_by_family_
const std::string & mvpn_project_manager_network() const
RouteTargetList import_
boost::dynamic_bitset bmap_
boost::scoped_ptr< DeleteActor > deleter_
RoutingInstanceTraceBufferMap trace_buffer_active_
friend class BgpConfigTest
RouteTableList & GetTables()
bool virtual_network_allow_transit() const
size_t GetEnvRoutingInstanceDormantTraceBufferThreshold() const
void CreateRoutingInstanceNeighbors(const BgpInstanceConfig *config)
void DeleteRouteTarget(bool import, std::vector< std::string > *change_list, RouteTargetList::iterator it)
std::string mvpn_project_manager_network_
std::set< std::string > RoutingInstanceConfigList
void DestroyDBTable(DBTable *table)
bool IsAggregateRoute(const BgpTable *table, const BgpRoute *route) const
IRouteAggregator * route_aggregator(Address::Family family) const
RoutingInstance * CreateRoutingInstance(const BgpInstanceConfig *config)
void DisableNeighborConfigListProcessing()
void DeleteMvpnRTargetRoute(as_t old_asn, Ip4Address old_ip)
bool virtual_network_pbb_evpn_enable_
bool ProcessInstanceConfigList(int idx)
void DestroyRoutingInstance(RoutingInstance *rtinstance)
bool MayDelete() const
friend class RoutingInstanceMgrTest
void UpdateRoutingPolicyConfig()
tbb::spin_rw_mutex rw_mutex_
boost::scoped_ptr< DeleteActor > deleter_
uint32_t SendTableStatsUve()
MvpnProjectManagerNetworks & mvpn_project_managers()
boost::function< void(std::string, int)> RoutingInstanceCb
size_t peer_manager_size() const
LifetimeRef< RoutingInstance > manager_delete_ref_
SandeshTraceBufferPtr trace_buffer() const
BgpServer * server_
bool virtual_network_allow_transit_
RouteTargetList export_
void EnableInstanceConfigListProcessing()
bool IsContributingRoute(const BgpTable *table, const BgpRoute *route) const
VirtualNetworksMap virtual_networks_
bool HasRoutingInstanceActiveTraceBuf(const std::string &name) const
RoutingInstanceList::const_iterator const_name_iterator
const_name_iterator name_clower_bound(const std::string &name)
bool HasExportTarget(const ExtCommunity *extcomm) const
const BgpInstanceConfig * config() const
RoutingInstance * GetRoutingInstanceLocked(const std::string &name)
void InsertRoutingInstance(RoutingInstance *rtinstance)
void InstanceTargetAdd(RoutingInstance *rti)
const RoutingPolicyAttachList & routing_policies() const
BgpTable * VpnTableCreate(Address::Family vpn_family)
void LocateRoutingInstance(const BgpInstanceConfig *config)
void AddRTargetRoute(as_t asn, const RouteTarget &rtarget)
bool ProcessRoutingPolicy(const BgpRoute *route, BgpPath *path) const
std::multimap< int, RoutingInstance * > VnIndexMap
LifetimeActor * deleter()
const BgpServer * server() const
void UnregisterInstanceOpCallback(int id)
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
Definition: bitset.h:17
std::vector< TaskTrigger * > instance_config_triggers_
std::map< std::string, BgpTable * > RouteTableList
tbb::mutex & mutex()
static std::string GetVrfFromTableName(const std::string table)
virtual ~RoutingInstanceMgr()
InstanceOpListenersList callbacks_
void TableDeleteComplete(BgpTable *table)
const RoutingInstanceMgr * manager() const
bool virtual_network_pbb_evpn_enable() const
bool DeleteVirtualNetworkMapping(const std::string &virtual_network, const std::string &instance_name)
bool IsMasterRoutingInstance() const
RoutingPolicyAttachList routing_policies_
const RoutingInstance * GetInstanceByVnIndex(int vn_index) const
void ClearFamilyRouteTarget(Address::Family vrf_family, Address::Family vpn_family)
name_iterator name_lower_bound(const std::string &name)
RoutingInstanceConfigList neighbor_config_list_
std::list< RoutingPolicyInfo > RoutingPolicyAttachList
Definition: bgp_common.h:47
IStaticRouteMgr * static_route_mgr(Address::Family family)
bool CreateVirtualNetworkMapping(const std::string &virtual_network, const std::string &instance_name)
int GetOriginVnForAggregateRoute(Address::Family family) const
void ProcessIdentifierUpdate(as_t asn)
std::string GetVirtualNetworkByVnIndex(int vn_index) const
std::map< std::string, RoutingInstance * > RoutingInstanceList
bool IsServiceChainRoute(const BgpRoute *route) const
const std::string GetVirtualNetworkName() const
RoutingInstanceMgr * mgr_
bool HasRoutingInstanceDormantTraceBuf(const std::string &name) const
name_iterator name_end()
size_t GetMvpnProjectManagerCount(const std::string &network) const
std::set< std::string > MvpnManagerNetworks
RoutingInstanceMgr(BgpServer *server)
const MvpnProjectManagerNetworks & mvpn_project_managers() const
RoutingInstanceIterator begin()
IStaticRouteMgr * LocateStaticRouteMgr(Address::Family family)
size_t GetRoutingInstanceDormantTraceBufferThreshold() const
boost::intrusive_ptr< RoutingPolicy > RoutingPolicyPtr
Definition: bgp_common.h:28
RouteTableList vrf_tables_by_name_
RoutingInstanceTraceBufferList trace_buffer_dormant_list_
const RouteTableList & GetTables() const
std::map< std::string, MvpnManagerNetworks > MvpnProjectManagerNetworks
void FlushAllRTargetRoutes(as_t asn)
void InstanceVnIndexAdd(RoutingInstance *rti)
bool deleted() const
RoutingInstanceMgr * manager()
void TriggerTableDelete(BgpTable *table)
boost::scoped_ptr< IStaticRouteMgr > inet6_static_route_mgr_
std::map< Address::Family, BgpTable * > RouteTableFamilyList
void AddMvpnRTargetRoute(as_t asn)
PeerManager * LocatePeerManager()
std::set< RouteTarget > RouteTargetList
bool always_subscribe() const
void ASNUpdateCallback(as_t old_asn, as_t old_local_asn)
SandeshTraceBufferPtr trace_buffer_
void AddRoutingPolicy(RoutingPolicyPtr policy)
void SetTableStatsUve(Address::Family family, const std::map< std::string, RoutingTableStats > &stats_map, RoutingInstanceStatsData *instance_info) const
RoutingInstanceList::iterator RoutingInstanceIterator
SandeshTraceBufferPtr GetActiveTraceBuffer(const std::string &name) const
void ProcessRouteAggregationConfig()
SandeshTraceBufferPtr GetTraceBuffer(const std::string &name)
void UpdateRoutingInstance(RoutingInstance *rtinstance, const BgpInstanceConfig *config)
int index() const
size_t GetEnvRoutingInstanceDormantTraceBufferCapacity() const
void set_index(int index)
std::vector< RoutingInstanceConfigList > instance_config_lists_
void RemoveTable(BgpTable *tbl)
std::unique_ptr< RouteDistinguisher > rd_
std::map< std::string, SandeshTraceBufferPtr > RoutingInstanceTraceBufferMap
void InstanceTargetRemove(const RoutingInstance *rti)