OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bgp_config_ifmap.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_CONFIG_IFMAP_H__
6 #define SRC_BGP_BGP_CONFIG_IFMAP_H__
7 
8 #include <boost/function.hpp>
9 #include <boost/scoped_ptr.hpp>
10 
11 #include <map>
12 #include <set>
13 #include <string>
14 #include <utility>
15 #include <vector>
16 
17 #include "base/task_trigger.h"
18 #include "base/util.h"
19 #include "base/index_map.h"
20 #include "bgp/bgp_config.h"
22 #include "ifmap/ifmap_node_proxy.h"
23 
24 #define EVPN_ES_IMPORT_ROUTE_TARGET_AS2 (BGP_RTGT_MIN_ID_AS2 - 1) // 7999999
25 #define EVPN_ES_IMPORT_ROUTE_TARGET_AS4 (BGP_RTGT_MIN_ID_AS4 - 1) // 7999
26 
27 class BgpConfigListener;
32 class BgpServer;
33 class DB;
34 class DBGraph;
35 
36 namespace autogen {
37 class BgpPeering;
38 class BgpRouter;
39 class RoutingInstance;
40 class RoutingPolicy;
41 class RoutingPolicyRoutingInstance;
42 struct BgpRouterParams;
43 }
44 
45 //
46 // A BgpIfmapPeeringConfig corresponds to a bgp-peering link in the
47 // schema. Since a bgp-peering is a link with attributes, it's
48 // represented as a node in the configuration database. There's a
49 // single BgpIfmapPeeringConfig between a given pair of bgp-routers in
50 // a particular routing-instance.
51 //
52 // A bgp-peering link is represented in IFMap DB using a autogen::BgpPeering
53 // object. This object has a vector of autogen::BgpSessions, with each entry
54 // corresponding to a single session. A BgpNeighborConfig is created for each
55 // session.
56 //
57 // The NeighborMap keeps pointers to all the BgpNeighborConfig objects
58 // for a BgpIfmapPeeringConfig. There's typically just a single entry
59 // in this map, but we allow for multiple entries if there's more than
60 // 1 autogen::BgpSesssion in the autogen::BgpPeering.
61 //
62 // A BgpIfmapPeeringConfig gets created/updated/deleted when the
63 // IFMapNode for the bgp-peering is created/updated/deleted.
64 //
65 // There's no direct operational object corresponding to
66 // BgpIfmapPeeringConfig. A BgpIfmapPeeringConfig results in the
67 // creation of one or more BgpNeighborConfigs each of which is
68 // associated with a BgpPeer.
69 //
70 // The instance_ field is a back pointer to the BgpInstanceConfig object for
71 // the routing-instance to which this bgp-peering belongs.
72 // The IFMapNodeProxy maintains a reference to the IFMapNode object for the
73 // bgp-peering in the ifmap metadata table.
74 //
76 public:
77  typedef std::map<std::string, BgpNeighborConfig *> NeighborMap;
78 
81 
82  void SetNodeProxy(IFMapNodeProxy *proxy);
83  void Update(BgpIfmapConfigManager *manager,
84  const autogen::BgpPeering *peering);
85  void Delete(BgpIfmapConfigManager *manager);
86 
87  static bool GetRouterPair(DBGraph *db_graph, const std::string &localname,
88  IFMapNode *node,
89  std::pair<IFMapNode *, IFMapNode *> *pair);
90 
91  const IFMapNode *node() const { return node_proxy_.node(); }
93  const BgpIfmapInstanceConfig *instance() const { return instance_; }
94  std::string name() const { return name_; }
95  size_t size() const { return neighbors_.size(); }
96  const autogen::BgpPeering *bgp_peering() const {
97  return bgp_peering_.get();
98  }
99 
100 private:
102  const autogen::BgpRouter *local_rt_config,
103  const std::string &peername,
104  const autogen::BgpRouter *remote_rt_config,
105  const autogen::BgpPeering *peering, NeighborMap *map);
106 
108  std::string name_;
111  boost::intrusive_ptr<const autogen::BgpPeering> bgp_peering_;
112 
114 };
115 
116 //
117 // Represents a local IFMap bgp-router node in a specific routing-instance.
118 //
119 // A BgpProtocolConfig is created/updated/deleted when the IFMapNode for the
120 // bgp-router is created/updated/deleted.
121 //
122 // The instance_ field is a back pointer to the BgpInstanceConfig object for
123 // the routing-instance to which this bgp-router belongs.
124 // The IFMapNodeProxy maintains a reference to the IFMapNode object for the
125 // bgp-router in the ifmap bgp-router table.
126 //
128 public:
131 
132  void SetNodeProxy(IFMapNodeProxy *proxy);
133 
134  void Update(BgpIfmapConfigManager *manager,
135  const autogen::BgpRouter *router);
136  void Delete(BgpIfmapConfigManager *manager);
137 
138  const std::string &InstanceName() const;
139 
140  const autogen::BgpRouterParams &router_params() const;
141  const autogen::BgpRouter *bgp_router() const { return bgp_router_.get(); }
142 
143  IFMapNode *node() { return node_proxy_.node(); }
145 
146  const BgpProtocolConfig *protocol_config() const { return &data_; }
147 
148 private:
152  boost::intrusive_ptr<const autogen::BgpRouter> bgp_router_;
153 
155 };
156 
157 //
158 // Internal representation of routing-instance.
159 //
160 // A BgpInstanceConfig causes creation of a RoutingInstance. RoutingInstance
161 // has a pointer to the BgpInstanceConfig. This pointer gets invalidated and
162 // cleared when the RoutingInstance is undergoing deletion.
163 //
164 // The IFMapNodeProxy maintains a reference to the IFMapNode object for the
165 // routing-instance in the ifmap routing-instance table.
166 //
167 // The BgpInstanceConfig for the master instance is manually created when the
168 // BgpConfigManager is initialized. It gets deleted when the BgpConfigManager
169 // is terminated.
170 //
171 // For other routing-instances, a BgpInstanceConfig is created when we first
172 // see the IFMapNode for the routing-instance or when we see the IFMapNode for
173 // the local bgp-router in the routing-instance.
174 //
175 // BgpInstanceConfig is deleted only when all references to it are
176 // gone. The IFMapNode for the routing-instance must be deleted, any
177 // BgpProtcolConfig for the local bgp-router in the routing-instance
178 // must be deleted and all the BgpNeighborConfigs and
179 // BgpIfmapPeeringConfigs in the routing-instance must be deleted.
180 //
181 // The protocol_ field is a pointer to the BgpProtocolConfig object
182 // for the local bgp-router object, if any, in the routing-instance.
183 // The NeighborMap keeps pointers to all the BgpNeighborConfig objects
184 // in a BgpInstanceConfig. The PeeringMap keeps pointers to all the
185 // BgpIfmapPeeringConfig objects in the BgpInstanceConfig.
186 //
188 public:
190  typedef std::map<std::string,
192  typedef std::map<std::string,
194  typedef std::map<std::string,
196 
197  explicit BgpIfmapInstanceConfig(const std::string &name);
199 
200  void SetNodeProxy(IFMapNodeProxy *proxy);
201 
202  void Update(BgpIfmapConfigManager *manager,
203  const autogen::RoutingInstance *config);
204 
205  // The corresponding if-map node has been deleted.
206  void ResetConfig();
207  bool DeleteIfEmpty(BgpConfigManager *manager);
208 
210  return protocol_.get();
211  }
213  return protocol_.get();
214  }
216  void ResetProtocol();
217 
218  void AddNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor);
219  void ChangeNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor);
220  void DeleteNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor);
221  const BgpNeighborConfig *FindNeighbor(const std::string &name) const;
222 
224 
225  const NeighborMap &neighbors() const { return neighbors_; }
226  const PeeringMap &peerings() const { return peerings_; }
227 
228  void AddPeering(BgpIfmapPeeringConfig *peering);
229  void DeletePeering(BgpIfmapPeeringConfig *peering);
230 
231  IFMapNode *node() { return node_proxy_.node(); }
232  const std::string &name() const { return name_; }
233 
235  const BgpInstanceConfig *instance_config() const { return &data_; }
236 
237  const RouteTargetList &import_list() const {
238  return data_.import_list();
239  }
240  const RouteTargetList &export_list() const {
241  return data_.export_list();
242  }
243  const std::string &virtual_network() const {
244  return data_.virtual_network();
245  }
249  void set_index(int index) { index_ = index; };
250  int index() const { return index_; }
251  std::string GetVitFromId(uint32_t identifier) const;
252  std::string GetESRouteTarget(uint32_t as) const;
255  void ProcessIdentifierUpdate(uint32_t new_id, uint32_t old_id);
256  void ProcessASUpdate(uint32_t new_as, uint32_t old_as);
257 
258 private:
259  friend class BgpConfigManagerTest;
260 
261  std::string name_;
264  int index_;
265  boost::scoped_ptr<BgpIfmapProtocolConfig> protocol_;
269 
271 };
272 
274 public:
278 
279  void SetNodeProxy(IFMapNodeProxy *proxy);
280 
281  const IFMapNode *node() const { return node_proxy_.node(); }
282  std::string name() const { return name_; }
283  const autogen::RoutingPolicyRoutingInstance *routing_policy_link() const {
284  return ri_rp_link_.get();
285  }
286  static bool GetInstancePolicyPair(DBGraph *graph, IFMapNode *node,
287  std::pair<IFMapNode *, IFMapNode *> *pair);
290 
291  void Update(BgpIfmapConfigManager *manager,
292  const autogen::RoutingPolicyRoutingInstance *ri_rp);
293  void Delete(BgpIfmapConfigManager *manager);
294 
295 private:
298  std::string name_;
300  boost::intrusive_ptr<
301  const autogen::RoutingPolicyRoutingInstance> ri_rp_link_;
302 
304 };
305 
307 public:
308  typedef std::map<std::string, BgpIfmapInstanceConfig *> InstanceMap;
309  explicit BgpIfmapRoutingPolicyConfig(const std::string &name);
311 
312  void SetNodeProxy(IFMapNodeProxy *proxy);
313 
314  // The corresponding if-map node has been deleted.
315  void ResetConfig();
316  void Delete(BgpConfigManager *manager);
317  bool DeleteIfEmpty(BgpConfigManager *manager);
318 
319  void Update(BgpIfmapConfigManager *manager,
320  const autogen::RoutingPolicy *policy);
321 
322  IFMapNode *node() { return node_proxy_.node(); }
323  const std::string &name() const { return name_; }
324 
327  return &data_;
328  }
329 
332 
333 private:
334  friend class BgpConfigManagerTest;
335 
336  std::string name_;
339  boost::intrusive_ptr<const autogen::RoutingPolicy> routing_policy_;
341 
343 };
344 
346 public:
347  const BgpGlobalSystemConfig *config() const { return &data_; }
348  bool Update(BgpIfmapConfigManager *manager,
349  const autogen::GlobalSystemConfig *system);
350 
351 private:
353 };
354 
356 public:
357  const BgpGlobalQosConfig *config() const { return &data_; }
358  bool Update(BgpIfmapConfigManager *manager,
359  const autogen::GlobalQosConfig *qos);
360 
361 private:
363 };
364 
365 //
366 // BgpConfigData contains all the configuration data that's relevant to a
367 // node. The BgpConfigManager has a pointer to BgpConfigData.
368 //
369 // The IfmapInstanceMap stores pointers to the BgpIfmapInstanceConfigs
370 // that have been created for all the routing-instances.
371 // The IfmapPeeringMap stores pointers to the BgpIfmapPeeringConfigs
372 // that have been created for all the bgp-peerings.
373 // The IfmapRoutingPolicyMap stores pointers to the BgpIfmapRoutingPolicyConfig
374 // that have been created for all the routing-policy.
375 //
377 public:
380  typedef IndexMap<std::string,
382  typedef std::map<std::string,
384  typedef std::map<std::string,
386  typedef std::map<std::string,
388 
391 
392  BgpIfmapInstanceConfig *LocateInstance(const std::string &name);
394  BgpIfmapInstanceConfig *FindInstance(const std::string &name);
395  const BgpIfmapInstanceConfig *FindInstance(const std::string &name) const;
396 
397  // Routing Policy
398  BgpIfmapRoutingPolicyConfig *LocateRoutingPolicy(const std::string &name);
400  BgpIfmapRoutingPolicyConfig *FindRoutingPolicy(const std::string &name);
402  const std::string &name) const;
403 
405  IFMapNodeProxy *proxy);
407  BgpIfmapPeeringConfig *FindPeering(const std::string &name);
408  const BgpIfmapPeeringConfig *FindPeering(const std::string &name) const;
409  int PeeringCount() const { return peerings_.size(); }
410 
413  IFMapNodeProxy *proxy);
416  const std::string &name);
418  const std::string &name) const;
419 
421  const std::string &start_name = std::string()) const;
423  const std::string &start_name = std::string()) const;
424 
426  const IfmapPeeringMap &peerings() const { return peerings_; }
429  return &global_config_;
430  }
433  return &global_qos_;
434  }
436  uint32_t new_id, uint32_t old_id, uint32_t new_as, uint32_t old_as);
437 
438 private:
447 
449 };
450 
451 //
452 // This class is responsible for managing all bgp related configuration for
453 // a BgpServer. A BgpServer allocates an instance of a BgpConfigManager.
454 //
455 // BgpConfigManager listens to updates for IFMap objects which are relevant
456 // to BGP. This is accomplished using an instance of the BgpConfigListener.
457 // The BgpConfigListener is used to build a ChangeList of BgpConfigDeltas
458 // that are then processed by the BgpConfigManager.
459 //
460 // Internal representations of interesting IFMap objects are generated and
461 // updated as BgpConfigDeltas are processed. An instance of BgpConfigData
462 // is used to store the internal representations (the BgpXyzConfig classes).
463 //
464 // Notifications of changes to the internal representations are sent to the
465 // registered Observers. The BgpServer::ConfigUpdater is the only client that
466 // registers observers.
467 //
470 public:
472  virtual ~BgpIfmapConfigManager();
473 
474  void Initialize(DB *db, DBGraph *db_graph, const std::string &localname);
475 
476  /*
477  * begin: BgpConfigManager Interface
478  */
479  virtual void Terminate();
480  virtual const std::string &localname() const { return localname_; }
481 
483  const std::string &start_name = std::string()) const;
485  const std::string &start_name = std::string()) const;
487  const std::string &instance_name) const;
488 
489  virtual int NeighborCount(const std::string &instance_name) const;
490  virtual void ResetRoutingInstanceIndexBit(int index);
491 
492  virtual const BgpInstanceConfig *FindInstance(
493  const std::string &name) const;
495  const std::string &name) const;
496  virtual const BgpProtocolConfig *GetProtocolConfig(
497  const std::string &instance_name) const;
498  virtual const BgpNeighborConfig *FindNeighbor(
499  const std::string &instance_name, const std::string &name) const;
500  // end: BgpConfigManager
501 
502  void DefaultBgpRouterParams(autogen::BgpRouterParams *param);
503  void OnChange();
504 
505  DB *database() { return db_; }
506  DBGraph *graph() { return db_graph_; }
507  const BgpIfmapConfigData *config() const { return config_.get(); }
508  BgpIfmapConfigData *config() { return config_.get(); }
511 
512 private:
513  friend class BgpConfigListenerTest;
514 
515  typedef std::vector<BgpConfigDelta> ChangeList;
516  typedef std::map<std::string,
517  boost::function<void(const BgpConfigDelta &)> >IdentifierMap;
518 
519  void IdentifierMapInit();
520  void DefaultConfig();
521 
522  void ProcessChanges(const ChangeList &change_list);
523  void ProcessRoutingInstance(const BgpConfigDelta &change);
524  void ProcessRoutingPolicyLink(const BgpConfigDelta &change);
525  void ProcessRoutingPolicy(const BgpConfigDelta &change);
526  void ProcessBgpRouter(const BgpConfigDelta &change);
527  void ProcessBgpProtocol(const BgpConfigDelta &change);
528  void ProcessBgpPeering(const BgpConfigDelta &change);
529  void ProcessGlobalSystemConfig(const BgpConfigDelta &delta);
530  void ProcessGlobalQosConfig(const BgpConfigDelta &delta);
531 
532  bool ConfigHandler();
533 
534  static const int kConfigTaskInstanceId;
535 
536  DB *db_;
538  std::string localname_;
540 
542  boost::scoped_ptr<BgpConfigListener> listener_;
543  boost::scoped_ptr<BgpIfmapConfigData> config_;
544 
546 };
547 
548 #endif // SRC_BGP_BGP_CONFIG_IFMAP_H_
virtual const BgpNeighborConfig * FindNeighbor(const std::string &instance_name, const std::string &name) const
void ProcessGlobalSystemConfig(const BgpConfigDelta &delta)
void ProcessRoutingPolicy(const BgpConfigDelta &change)
const std::string & virtual_network() const
Definition: bgp_config.h:454
BgpIfmapRoutingPolicyConfig * policy_
const RouteTargetList & export_list() const
BgpIfmapPeeringConfig * FindPeering(const std::string &name)
const RouteTargetList & import_list() const
Definition: bgp_config.h:442
void Update(BgpIfmapConfigManager *manager, const autogen::BgpRouter *router)
const BgpNeighborConfig * FindNeighbor(const std::string &name) const
std::map< std::string, BgpRoutingPolicyConfig * > RoutingPolicyMap
Definition: bgp_config.h:753
void DeleteRoutingPolicyLink(BgpIfmapRoutingPolicyLinkConfig *ri_rp_link)
const BgpGlobalQosConfig * config() const
void AddPeering(BgpIfmapPeeringConfig *peering)
BgpIfmapInstanceConfig * instance()
IFMapNodeProxy node_proxy_
void AddInstance(BgpIfmapInstanceConfig *rti)
const IFMapNode * node() const
void ProcessBgpPeering(const BgpConfigDelta &change)
boost::intrusive_ptr< const autogen::BgpPeering > bgp_peering_
void Update(BgpIfmapConfigManager *manager, const autogen::RoutingPolicy *policy)
IFMapNodeProxy node_proxy_
BgpConfigManager::RoutingPolicyMapRange RoutingPolicyMapItems(const std::string &start_name=std::string()) const
const RouteTargetList & import_list() const
BgpIfmapPeeringConfig * CreatePeering(BgpIfmapInstanceConfig *rti, IFMapNodeProxy *proxy)
BgpIfmapConfigManager(BgpServer *server)
std::map< std::string, BgpNeighborConfig * > NeighborMap
std::pair< RoutingPolicyMap::const_iterator, RoutingPolicyMap::const_iterator > RoutingPolicyMapRange
Definition: bgp_config.h:755
BgpGlobalQosConfig data_
const BgpIfmapConfigData * config() const
std::pair< InstanceMap::const_iterator, InstanceMap::const_iterator > InstanceMapRange
Definition: bgp_config.h:758
void Update(BgpIfmapConfigManager *manager, const autogen::RoutingInstance *config)
void Update(BgpIfmapConfigManager *manager, const autogen::RoutingPolicyRoutingInstance *ri_rp)
BgpIfmapConfigData * config()
bool Update(BgpIfmapConfigManager *manager, const autogen::GlobalSystemConfig *system)
const PeeringMap & peerings() const
DISALLOW_COPY_AND_ASSIGN(BgpIfmapPeeringConfig)
void SetNodeProxy(IFMapNodeProxy *proxy)
void BuildNeighbors(BgpIfmapConfigManager *manager, const autogen::BgpRouter *local_rt_config, const std::string &peername, const autogen::BgpRouter *remote_rt_config, const autogen::BgpPeering *peering, NeighborMap *map)
BgpIfmapProtocolConfig * protocol_config_mutable()
const BgpIfmapGlobalSystemConfig * global_config() const
DISALLOW_COPY_AND_ASSIGN(BgpIfmapInstanceConfig)
void ProcessIdentifierAndASUpdate(BgpIfmapConfigManager *manager, uint32_t new_id, uint32_t old_id, uint32_t new_as, uint32_t old_as)
BgpGlobalSystemConfig data_
virtual const BgpRoutingPolicyConfig * FindRoutingPolicy(const std::string &name) const
void Delete(BgpIfmapConfigManager *manager)
BgpIfmapRoutingPolicyConfig * LocateRoutingPolicy(const std::string &name)
std::map< std::string, BgpIfmapRoutingPolicyConfig * > RouitngPolicyMap
BgpIfmapRoutingPolicyLinkConfig * CreateRoutingPolicyLink(BgpIfmapInstanceConfig *rti, BgpIfmapRoutingPolicyConfig *rtp, IFMapNodeProxy *proxy)
void set_index(int index)
const autogen::RoutingPolicyRoutingInstance * routing_policy_link() const
std::map< std::string, BgpIfmapInstanceConfig * > InstanceMap
std::set< std::string > RouteTargetList
Definition: bgp_config.h:424
void DeletePeering(BgpIfmapPeeringConfig *peering)
BgpInstanceMap instance_config_map_
DISALLOW_COPY_AND_ASSIGN(BgpIfmapRoutingPolicyConfig)
const RouteTargetList & export_list() const
Definition: bgp_config.h:446
BgpIfmapGlobalQosConfig global_qos_
IfmapInstanceMap instances_
const BgpIfmapGlobalQosConfig * global_qos() const
void SetNodeProxy(IFMapNodeProxy *proxy)
void AddNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor)
friend class BgpConfigListenerTest
const BgpInstanceConfig * instance_config() const
boost::scoped_ptr< BgpIfmapConfigData > config_
void ProcessBgpProtocol(const BgpConfigDelta &change)
void DeleteNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor)
DISALLOW_COPY_AND_ASSIGN(BgpIfmapProtocolConfig)
void Initialize(DB *db, DBGraph *db_graph, const std::string &localname)
DISALLOW_COPY_AND_ASSIGN(BgpIfmapRoutingPolicyLinkConfig)
void DeletePeering(BgpIfmapPeeringConfig *peer)
BgpRoutingPolicyConfig data_
Definition: db.h:24
void Delete(BgpIfmapConfigManager *manager)
virtual const std::string & localname() const
BgpIfmapRoutingPolicyConfig * policy()
bool Update(BgpIfmapConfigManager *manager, const autogen::GlobalQosConfig *qos)
const NeighborMap & neighbors() const
const BgpGlobalSystemConfig * config() const
BgpIfmapRoutingPolicyLinkConfig * FindRoutingPolicyLink(const std::string &name)
std::string name() const
IfmapPeeringMap peerings_
boost::intrusive_ptr< const autogen::BgpRouter > bgp_router_
void DeleteRoutingPolicy(BgpIfmapRoutingPolicyConfig *rtp)
static bool GetRouterPair(DBGraph *db_graph, const std::string &localname, IFMapNode *node, std::pair< IFMapNode *, IFMapNode * > *pair)
const autogen::BgpRouterParams & router_params() const
const std::string & name() const
BgpProtocolConfig data_
const BgpRoutingPolicyConfig * routing_policy_config() const
BgpInstanceConfig::RouteTargetList RouteTargetList
IfmapRoutingPolicyMap routing_policies_
void InsertVitAndESRTargetInImportList(BgpIfmapConfigManager *manager, BgpInstanceConfig::RouteTargetList &import_list)
virtual int NeighborCount(const std::string &instance_name) const
size_t size() const
std::pair< NeighborMap::const_iterator, NeighborMap::const_iterator > NeighborMapRange
Definition: bgp_config.h:761
BgpIfmapInstanceConfig * instance_
BgpIfmapInstanceConfig * LocateInstance(const std::string &name)
virtual RoutingPolicyMapRange RoutingPolicyMapItems(const std::string &start_name=std::string()) const
const std::string & virtual_network() const
BgpIfmapInstanceConfig * instance_
bool DeleteIfEmpty(BgpConfigManager *manager)
void DeleteRoutingPolicy(BgpIfmapRoutingPolicyConfig *rtp)
std::string GetESRouteTarget(uint32_t as) const
virtual const BgpProtocolConfig * GetProtocolConfig(const std::string &instance_name) const
const BgpIfmapInstanceConfig * instance() const
int PeeringCount() const
bool DeleteIfEmpty(BgpConfigManager *manager)
RouitngPolicyMap routing_policies_
static const int kConfigTaskInstanceId
void ProcessIdentifierUpdate(uint32_t new_id, uint32_t old_id)
virtual InstanceMapRange InstanceMapItems(const std::string &start_name=std::string()) const
IndexMap< std::string, BgpIfmapInstanceConfig, BitSet > IfmapInstanceMap
void SetNodeProxy(IFMapNodeProxy *proxy)
BgpIfmapInstanceConfig * instance()
void UpdateInstanceConfig(BgpIfmapInstanceConfig *rti, BgpConfigManager::EventType event)
BgpIfmapPeeringConfig(BgpIfmapInstanceConfig *instance)
Definition: bitset.h:17
boost::intrusive_ptr< const autogen::RoutingPolicy > routing_policy_
void AddRoutingPolicy(BgpIfmapRoutingPolicyConfig *rtp)
std::map< std::string, BgpInstanceConfig * > InstanceMap
Definition: bgp_config.h:756
void ProcessASUpdate(uint32_t new_as, uint32_t old_as)
const IfmapPeeringMap & peerings() const
std::map< std::string, BgpIfmapRoutingPolicyLinkConfig * > IfmapRoutingPolicyLinkMap
void ProcessBgpRouter(const BgpConfigDelta &change)
const std::string & InstanceName() const
BgpRoutingPolicyMap routing_policy_config_map_
virtual const BgpInstanceConfig * FindInstance(const std::string &name) const
IfmapRoutingPolicyLinkMap ri_rp_links_
const std::string & name() const
DISALLOW_COPY_AND_ASSIGN(BgpIfmapConfigData)
BgpIfmapProtocolConfig(BgpIfmapInstanceConfig *instance)
BgpIfmapInstanceConfig * instance_
void DeleteInstance(BgpIfmapInstanceConfig *rti)
DISALLOW_COPY_AND_ASSIGN(BgpIfmapConfigManager)
std::string GetVitFromId(uint32_t identifier) const
const autogen::BgpPeering * bgp_peering() const
const BgpIfmapProtocolConfig * protocol_config() const
void RemoveInstance(BgpIfmapInstanceConfig *rti)
void Delete(BgpConfigManager *manager)
BgpIfmapGlobalSystemConfig global_config_
BgpIfmapRoutingPolicyConfig(const std::string &name)
friend class BgpConfigManagerTest
void ProcessChanges(const ChangeList &change_list)
IFMapNodeProxy node_proxy_
std::map< std::string, BgpNeighborConfig * > NeighborMap
boost::scoped_ptr< BgpIfmapProtocolConfig > protocol_
IFMapNode * node()
void ProcessGlobalQosConfig(const BgpConfigDelta &delta)
void SetNodeProxy(IFMapNodeProxy *proxy)
std::vector< BgpConfigDelta > ChangeList
BgpConfigManager::InstanceMap BgpInstanceMap
void ChangeNeighbor(BgpConfigManager *manager, BgpNeighborConfig *neighbor)
void ProcessRoutingInstance(const BgpConfigDelta &change)
BgpIfmapProtocolConfig * LocateProtocol()
boost::scoped_ptr< BgpConfigListener > listener_
BgpIfmapGlobalQosConfig * global_qos()
void SetNodeProxy(IFMapNodeProxy *proxy)
BgpConfigManager::NeighborMapRange NeighborMapItems() const
void Update(BgpIfmapConfigManager *manager, const autogen::BgpPeering *peering)
std::map< std::string, boost::function< void(const BgpConfigDelta &)> > IdentifierMap
BgpInstanceConfig * instance_config()
void Delete(BgpIfmapConfigManager *manager)
int virtual_network_index() const
Definition: bgp_config.h:459
BgpIfmapRoutingPolicyLinkConfig(BgpIfmapInstanceConfig *rti, BgpIfmapRoutingPolicyConfig *rtp)
virtual void ResetRoutingInstanceIndexBit(int index)
IfmapInstanceMap & instances()
const BgpIfmapInstanceConfig * instance()
BgpIfmapInstanceConfig * FindInstance(const std::string &name)
BgpIfmapInstanceConfig(const std::string &name)
const BgpServer * server()
Definition: bgp_config.h:800
BgpConfigManager::InstanceMapRange InstanceMapItems(const std::string &start_name=std::string()) const
const BgpProtocolConfig * protocol_config() const
std::map< std::string, BgpIfmapPeeringConfig * > IfmapPeeringMap
BgpInstanceConfig data_
const IFMapNode * node() const
boost::intrusive_ptr< const autogen::RoutingPolicyRoutingInstance > ri_rp_link_
std::map< std::string, BgpIfmapPeeringConfig * > PeeringMap
virtual NeighborMapRange NeighborMapItems(const std::string &instance_name) const
BgpRoutingPolicyConfig * routing_policy_config()
BgpIfmapRoutingPolicyConfig * FindRoutingPolicy(const std::string &name)
const autogen::BgpRouter * bgp_router() const
void DefaultBgpRouterParams(autogen::BgpRouterParams *param)
static bool GetInstancePolicyPair(DBGraph *graph, IFMapNode *node, std::pair< IFMapNode *, IFMapNode * > *pair)
BgpConfigManager::RoutingPolicyMap BgpRoutingPolicyMap
void ProcessRoutingPolicyLink(const BgpConfigDelta &change)
int virtual_network_index() const
std::map< std::string, BgpIfmapRoutingPolicyConfig * > IfmapRoutingPolicyMap
BgpIfmapGlobalSystemConfig * global_config()