OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bgp_config.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
3  */
4 #ifndef SRC_BGP_BGP_CONFIG_H__
5 #define SRC_BGP_BGP_CONFIG_H__
6 
7 #include <algorithm>
8 #include <map>
9 #include <set>
10 #include <string>
11 #include <utility>
12 #include <vector>
13 
14 #include "base/util.h"
15 #include "base/address.h"
16 #include "bgp/bgp_common.h"
18 #include "io/tcp_session.h"
19 #include "schema/vnc_cfg_types.h"
20 
21 class BgpServer;
22 
25  }
26 
27  bool operator<(const AuthenticationKey &rhs) const;
28  bool operator==(const AuthenticationKey &rhs) const;
29  void Reset() {
30  value = "";
31  start_time = 0;
32  }
33 
34  int id;
35  std::string value;
36  time_t start_time;
37 };
38 
39 typedef std::vector<AuthenticationKey> AuthenticationKeyChain;
40 
42 public:
43  enum KeyType {
44  NIL = 0,
45  MD5,
46  };
47  typedef AuthenticationKeyChain::iterator iterator;
48  typedef AuthenticationKeyChain::const_iterator const_iterator;
49 
50  iterator begin() { return key_chain_.begin(); }
51  iterator end() { return key_chain_.end(); }
52  const_iterator begin() const { return key_chain_.begin(); }
53  const_iterator end() const { return key_chain_.end(); }
54 
57 
58  bool operator==(const AuthenticationData &rhs) const;
59  bool operator<(const AuthenticationData &rhs) const;
61 
62  const AuthenticationKey *Find(int key_id) const;
63  bool IsMd5() const { return key_type_ == MD5; }
64  bool Empty() const;
65  void Clear();
66  std::string KeyTypeToString() const;
67  static std::string KeyTypeToString(KeyType key_type);
68  void AddKeyToKeyChain(const AuthenticationKey &key);
69 
70  KeyType key_type() const { return key_type_; }
71  void set_key_type(KeyType in_type) {
72  key_type_ = in_type;
73  }
74  const AuthenticationKeyChain &key_chain() const { return key_chain_; }
75  void set_key_chain(const AuthenticationKeyChain &in_chain) {
76  key_chain_ = in_chain;
77  }
78  std::vector<std::string> KeysToString() const;
79  std::vector<std::string> KeysToStringDetail() const;
80 
81 private:
84 };
85 
86 //
87 // Per address family configuration for a BGP neighbor.
88 //
90  explicit BgpFamilyAttributesConfig(const std::string &family)
91  : family(family), loop_count(0), prefix_limit(0), idle_timeout(0) {
92  }
93  bool operator==(const BgpFamilyAttributesConfig &rhs) const;
94 
95  std::string family;
96  uint8_t loop_count;
97  uint32_t prefix_limit;
98  uint32_t idle_timeout;
99  std::vector<std::string> default_tunnel_encap_list;
100 };
101 
102 //
103 // Comparator for BgpFamilyAttributesConfig.
104 //
107  const BgpFamilyAttributesConfig rhs) const {
108  KEY_COMPARE(lhs.family, rhs.family);
114  return 0;
115  }
116 };
117 
118 //
119 // The configuration associated with a BGP neighbor.
120 //
121 // BgpNeighborConfig represents a single session between the local bgp-router
122 // and a remote bgp-router. There may be multiple BgpNeighborConfigs for one
123 // BgpIfmapPeeringConfig, though there's typically just one.
124 //
125 // Each BgpNeighborConfig causes creation of a BgpPeer. BgpPeer has a pointer
126 // to the BgpNeighborConfig. This pointer is invalidated and cleared when the
127 // BgpPeer is undergoing deletion.
128 //
129 // BgpNeighborConfigs get created/updated/deleted when the
130 // BgpIfmapPeeringConfig is created/updated/deleted.
131 //
132 // The uuid_ field is used is there are multiple sessions to the same remote
133 // bgp-router i.e. there's multiple BgpNeighborConfigs for a BgpPeeringConfig.
134 //
135 // The name_ field contains the fully qualified name for the peer. If uuid_
136 // is non-empty i.e. there's multiple sessions to the same remote bgp-router,
137 // the uuid_ is appended to the remote peer's name to make it unique.
138 //
140 public:
141  typedef std::vector<std::string> AddressFamilyList;
142  typedef std::vector<BgpFamilyAttributesConfig> FamilyAttributesList;
143 
144  enum Type {
148  };
149 
152  bool operator<(const OriginOverrideConfig &rhs) const;
153 
155  std::string origin;
156  };
157 
159 
160  void CopyValues(const BgpNeighborConfig &rhs);
161 
162  const std::string &name() const { return name_; }
163  void set_name(const std::string &name) { name_ = name; }
164 
165  const std::string &uuid() const { return uuid_; }
166  void set_uuid(const std::string &uuid) { uuid_ = uuid; }
167 
168  const std::string &instance_name() const { return instance_name_; }
169  void set_instance_name(const std::string &instance_name) {
171  }
172 
173  const std::string &group_name() const { return group_name_; }
174  void set_group_name(const std::string &group_name) {
176  }
177 
178  Type peer_type() const { return type_; }
180 
181  bool admin_down() const { return admin_down_; }
183 
184  bool passive() const { return passive_; }
186 
187  bool as_override() const { return as_override_; }
189 
190  std::string private_as_action() const { return private_as_action_; }
191  void set_private_as_action(const std::string &private_as_action) {
193  }
194 
195  uint32_t cluster_id() const { return cluster_id_; }
197 
198  uint32_t peer_as() const { return peer_as_; }
199  void set_peer_as(uint32_t peer_as) { peer_as_ = peer_as; }
200 
201  const IpAddress &peer_address() const { return address_; }
202  void set_peer_address(const IpAddress &address) { address_ = address; }
203  std::string peer_address_string() const { return address_.to_string(); }
204 
205  uint32_t peer_identifier() const { return identifier_; }
206  void set_peer_identifier(uint32_t identifier) {
207  identifier_ = identifier;
208  }
209  std::string peer_identifier_string() const {
210  return Ip4Address(ntohl(identifier_)).to_string();
211  }
212 
213  const IpAddress &gateway_address(Address::Family family) const;
214  void set_gateway_address(Address::Family family, const IpAddress &address);
215 
216  uint16_t port() const { return port_; }
217  void set_port(uint16_t port) { port_ = port; }
218 
219  uint16_t source_port() const { return source_port_; }
221 
222  std::string router_type() const { return router_type_; }
223  void set_router_type(const std::string &router_type) {
225  }
226 
227  int hold_time() const { return hold_time_; }
229 
230  uint8_t loop_count() const { return loop_count_; }
232 
233  uint32_t local_as() const { return local_as_; }
234  void set_local_as(uint32_t local_as) { local_as_ = local_as; }
235 
236  uint32_t local_identifier() const { return local_identifier_; }
237  void set_local_identifier(uint32_t identifier) {
238  local_identifier_ = identifier;
239  }
240  std::string local_identifier_string() const {
241  return Ip4Address(ntohl(local_identifier_)).to_string();
242  }
243 
244  const AuthenticationData &auth_data() const {
245  return auth_data_;
246  }
247  void set_keydata(const AuthenticationData &in_auth_data) {
248  auth_data_ = in_auth_data;
249  }
250 
252 
255  }
256 
260  }
261 
262  uint64_t last_change_at() const { return last_change_at_; }
263  void set_last_change_at(uint64_t tstamp) const { last_change_at_ = tstamp; }
264 
265  std::string AuthKeyTypeToString() const;
266  std::vector<std::string> AuthKeysToString() const;
267 
268  int CompareTo(const BgpNeighborConfig &rhs) const;
269  bool operator!=(const BgpNeighborConfig &rhs) const {
270  return CompareTo(rhs) != 0;
271  }
272 
274  return origin_override_;
275  }
276  void SetOriginOverride(bool origin_override, std::string origin);
277 
278 private:
279  std::string name_;
280  std::string uuid_;
281  std::string instance_name_;
282  std::string group_name_;
284  std::string router_type_;
286  bool passive_;
288  std::string private_as_action_;
289  uint32_t cluster_id_;
290  uint32_t peer_as_;
291  uint32_t identifier_;
295  uint16_t port_;
296  uint16_t source_port_;
299  uint8_t loop_count_;
300  uint32_t local_as_;
302  mutable uint64_t last_change_at_;
306 
308 };
309 
310 //
311 // AggregateRouteConfig represents the route-aggregation config on a
312 // routing instance. This config is derived from routing-instance to
313 // route-aggregate link in schema. "route-aggregate" is a config object
314 // containing information about prefix to aggregate and nexthop.
315 // Routing instance may refer to multiple route-aggregate config object hence
316 // a list of AggregateRouteConfig is maintained in BgpInstanceConfig
317 // This list is not an ordered list.
318 //
323 };
324 
327  std::string routing_instance;
328  std::vector<std::string> prefix;
330  std::string service_instance;
332  std::string service_chain_id;
333  bool sc_head;
335 };
336 
338  bool operator<(const StaticRouteConfig &rhs) const;
342  std::vector<std::string> route_targets;
343  std::vector<std::string> communities;
344 };
345 
346 typedef std::vector<as_t> AsnList;
347 typedef std::vector<std::string> CommunityList;
348 typedef std::vector<std::string> ProtocolList;
349 
351  PrefixMatchConfig(std::string to_match, std::string match_type)
352  : prefix_to_match(to_match), prefix_match_type(match_type) {
353  }
354  std::string prefix_to_match;
355  std::string prefix_match_type;
356 };
357 
358 typedef std::vector<PrefixMatchConfig> PrefixMatchConfigList;
359 
367  std::string ToString() const;
368 };
369 
370 struct ActionUpdate {
378  uint32_t local_pref;
379  uint32_t med;
380 };
381 
383  enum ActionType {
387  };
390  std::string ToString() const;
391 };
392 
396 };
397 
398 // Route Policy configuration.
400 public:
401  typedef std::vector<RoutingPolicyTermConfig> RoutingPolicyTermList;
402  explicit BgpRoutingPolicyConfig(const std::string &name);
403  virtual ~BgpRoutingPolicyConfig();
404 
405  const std::string &name() const { return name_; }
406  void set_last_change_at(uint64_t tstamp) const { last_change_at_ = tstamp; }
407  void add_term(const RoutingPolicyTermConfig &term) {
408  terms_.push_back(term);
409  }
410  const RoutingPolicyTermList &terms() const { return terms_;}
411  void Clear();
412 
413 private:
414  std::string name_;
415  mutable uint64_t last_change_at_;
418 };
419 
420 // Instance configuration.
422 public:
423  typedef std::set<std::string> NeighborList;
424  typedef std::set<std::string> RouteTargetList;
425  typedef std::set<StaticRouteConfig> StaticRouteList;
426  typedef std::vector<ServiceChainConfig> ServiceChainList;
427  typedef std::vector<AggregateRouteConfig> AggregateRouteList;
428 
429  explicit BgpInstanceConfig(const std::string &name);
430  virtual ~BgpInstanceConfig();
431 
432  const std::string &name() const { return name_; }
433 
434  const NeighborList &neighbor_list() const { return neighbor_list_; }
435  void add_neighbor(const std::string &neighbor) {
436  neighbor_list_.insert(neighbor);
437  }
438  void delete_neighbor(const std::string &neighbor) {
439  neighbor_list_.erase(neighbor);
440  }
441 
442  const RouteTargetList &import_list() const { return import_list_; }
445  }
446  const RouteTargetList &export_list() const { return export_list_; }
449  }
450 
451  bool has_pnf() const { return has_pnf_; }
453 
454  const std::string &virtual_network() const { return virtual_network_; }
455  void set_virtual_network(const std::string &virtual_network) {
457  }
458 
462  }
463 
466  }
467  void set_virtual_network_allow_transit(bool allow_transit) {
468  virtual_network_allow_transit_ = allow_transit;
469  }
470 
473  }
476  }
477 
478 
479  int vxlan_id() const { return vxlan_id_; }
481 
482  uint64_t last_change_at() const { return last_change_at_; }
483  void set_last_change_at(uint64_t tstamp) const { last_change_at_ = tstamp; }
484 
485  const StaticRouteList &static_routes(Address::Family family) const;
487 
489  return service_chain_list_;
490  }
492  std::swap(service_chain_list_, *list);
493  }
495  const;
496 
498  return routing_policies_;
499  }
501  std::swap(routing_policies_, *list);
502  }
503 
506  AggregateRouteList *list);
507  void Clear();
508  void set_index(int index) { index_ = index; }
509  int index() const { return index_; }
510 
511 private:
512  friend class BgpInstanceConfigTest;
513 
514  std::string name_;
518  bool has_pnf_;
519  std::string virtual_network_;
523  int index_;
525  mutable uint64_t last_change_at_;
532 
534 };
535 
536 // Local configuration.
538 public:
539  explicit BgpProtocolConfig(const std::string &instance_name);
540  const std::string &instance_name() const {
541  return instance_name_;
542  }
543 
544  int CompareTo(const BgpProtocolConfig &rhs) const;
545 
546  bool admin_down() const { return admin_down_; }
548 
549  uint32_t cluster_id() const { return cluster_id_; }
551 
552  uint32_t identifier() const { return identifier_; }
554 
555  const std::string& subcluster_name() const { return subcluster_name_; }
556  void set_subcluster_name(const std::string& name) {
557  subcluster_name_ = name;
558  }
560 
561  uint32_t subcluster_id() const { return subcluster_id_; }
562  void set_subcluster_id(uint32_t id) {
563  subcluster_id_ = id;
564  }
566 
567  uint32_t autonomous_system() const { return autonomous_system_; }
570  }
571 
572  uint32_t local_autonomous_system() const {
574  }
577  }
578 
579  int port() const { return port_; }
580  void set_port(int port) { port_ = port; }
581 
582  uint32_t hold_time() const { return hold_time_; }
584 
585  uint64_t last_change_at() const { return last_change_at_; }
586  void set_last_change_at(uint64_t tstamp) const { last_change_at_ = tstamp; }
587 
588 private:
589  std::string instance_name_;
591  uint32_t cluster_id_;
594  uint32_t identifier_;
595  std::string subcluster_name_;
596  uint32_t subcluster_id_;
597  int port_;
598  uint32_t hold_time_;
599  mutable uint64_t last_change_at_;
600 
602 };
603 
604 // Global system configuration.
606 public:
607  static const int kEndOfRibTime = 300; // seconds
611  gr_bgp_helper_(false), gr_xmpp_helper_(false),
612  enable_4byte_as_(false),
614  bgpaas_port_end_(0),
615  fc_enabled_(false),
616  nh_check_enabled_(false),
617  always_compare_med_(false),
618  rd_cluster_seed_(0),
619  xmpp_hold_time_(90) {
620  }
622 
623  uint16_t gr_time() const { return gr_time_; }
624  void set_gr_time(uint16_t gr_time) { gr_time_ = gr_time; }
625  uint32_t llgr_time() const { return llgr_time_; }
627  uint32_t last_change_at() const { return last_change_at_; }
628  void set_last_change_at(uint32_t tstamp) const { last_change_at_ = tstamp; }
629  uint16_t end_of_rib_timeout() const { return end_of_rib_timeout_; }
630  void set_end_of_rib_timeout(uint16_t time) { end_of_rib_timeout_ = time; }
631  bool gr_bgp_helper() const { return gr_bgp_helper_; }
632  void set_gr_bgp_helper(bool helper) { gr_bgp_helper_ = helper; }
633  bool gr_xmpp_helper() const { return gr_xmpp_helper_; }
634  void set_gr_xmpp_helper(bool helper) { gr_xmpp_helper_ = helper; }
635  bool gr_enable() const { return gr_enable_; }
636  void set_gr_enable(bool enable) { gr_enable_ = enable; }
637  bool enable_4byte_as() const { return enable_4byte_as_; }
638  void set_enable_4byte_as(bool as_4byte) { enable_4byte_as_ = as_4byte; }
639  bool fc_enabled() const {
640  return fc_enabled_;
641  }
642  void set_fc_enabled(bool enable) {
643  fc_enabled_ = enable;
644  }
645  bool nh_check_enabled() const {
646  return nh_check_enabled_;
647  }
648  void set_nh_check_enabled(bool enable) {
649  nh_check_enabled_ = enable;
650  }
651  bool always_compare_med() const { return always_compare_med_; }
654  }
655  uint8_t xmpp_hold_time() const {
656  return xmpp_hold_time_;
657  }
658  void set_xmpp_hold_time(uint8_t hold_time) {
659  xmpp_hold_time_ = hold_time;
660  }
661  uint16_t rd_cluster_seed() const {
662  return rd_cluster_seed_;
663  }
664  void set_rd_cluster_seed(uint16_t seed) {
665  rd_cluster_seed_ = seed;
666  }
667  uint16_t bgpaas_port_start() const { return bgpaas_port_start_; }
670  }
671  uint16_t bgpaas_port_end() const { return bgpaas_port_end_; }
674  }
675 private:
676  mutable uint64_t last_change_at_;
677  uint16_t gr_time_;
678  uint32_t llgr_time_;
691 
693 };
694 
695 // Global Qos configuration.
697 public:
700  }
702  uint64_t last_change_at() const { return last_change_at_; }
703  void set_last_change_at(uint64_t tstamp) const { last_change_at_ = tstamp; }
704  uint8_t control_dscp() const { return control_dscp_; }
705  void set_control_dscp(uint8_t value) { control_dscp_ = value; }
706  uint8_t analytics_dscp() const { return analytics_dscp_; }
707  void set_analytics_dscp(uint8_t value) { analytics_dscp_ = value; }
708 
709 private:
710  mutable uint64_t last_change_at_;
711  uint8_t control_dscp_;
713 
715 };
716 
717 /*
718  * BgpConfigManager defines the interface between the BGP server and the
719  * configuration sub-system. Multiple configuration sub-systems are
720  * supported.
721  */
723 public:
724  enum EventType {
729  };
730 
731  typedef boost::function<void(const BgpProtocolConfig *, EventType)>
733  typedef boost::function<void(const BgpInstanceConfig *, EventType)>
735  typedef boost::function<void(const BgpNeighborConfig *, EventType)>
737  typedef boost::function<void(const BgpRoutingPolicyConfig *, EventType)>
739  typedef boost::function<void(const BgpGlobalSystemConfig *, EventType)>
741  typedef boost::function<void(const BgpGlobalQosConfig *, EventType)>
743 
744  struct Observers {
751  };
752 
753  typedef std::map<std::string, BgpRoutingPolicyConfig *> RoutingPolicyMap;
754  typedef std::pair<RoutingPolicyMap::const_iterator,
755  RoutingPolicyMap::const_iterator> RoutingPolicyMapRange;
756  typedef std::map<std::string, BgpInstanceConfig *> InstanceMap;
757  typedef std::pair<InstanceMap::const_iterator,
758  InstanceMap::const_iterator> InstanceMapRange;
759  typedef std::map<std::string, BgpNeighborConfig *> NeighborMap;
760  typedef std::pair<NeighborMap::const_iterator,
761  NeighborMap::const_iterator> NeighborMapRange;
762 
763  static const char *kMasterNetwork;
764  static const char *kMasterInstance;
765  static const char *kFabricInstance;
766  static const int kDefaultPort;
767  static const uint32_t kDefaultAutonomousSystem;
768 
769  explicit BgpConfigManager(BgpServer *server);
770  virtual ~BgpConfigManager();
771 
772  void RegisterObservers(const Observers &obs) { obs_.push_back(obs); }
773 
774  virtual void Terminate() = 0;
775  virtual const std::string &localname() const = 0;
776 
778  const std::string &start_policy = std::string()) const = 0;
780  const std::string &start_instance = std::string()) const = 0;
782  const std::string &instance_name) const = 0;
783 
784  virtual int NeighborCount(const std::string &instance_name) const = 0;
785 
786  virtual void ResetRoutingInstanceIndexBit(int index) = 0;
787  virtual const BgpInstanceConfig *FindInstance(
788  const std::string &name) const = 0;
790  const std::string &name) const = 0;
791  virtual const BgpProtocolConfig *GetProtocolConfig(
792  const std::string &instance_name) const = 0;
793  virtual const BgpNeighborConfig *FindNeighbor(
794  const std::string &instance_name, const std::string &name) const = 0;
795 
796  // Invoke registered observer
797  template <typename BgpConfigObject>
798  void Notify(const BgpConfigObject *, EventType);
799 
800  const BgpServer *server() { return server_; }
801 
802 private:
804  std::vector<Observers> obs_;
805 
807 };
808 
809 #endif // SRC_BGP_BGP_CONFIG_H__
std::string virtual_network_
Definition: bgp_config.h:519
uint64_t last_change_at_
Definition: bgp_config.h:525
int port() const
Definition: bgp_config.h:579
std::vector< std::string > route_targets
Definition: bgp_config.h:342
void set_peer_address(const IpAddress &address)
Definition: bgp_config.h:202
const std::string & virtual_network() const
Definition: bgp_config.h:454
BgpGlobalSystemConfigObserver system
Definition: bgp_config.h:749
virtual void ResetRoutingInstanceIndexBit(int index)=0
uint32_t local_pref
Definition: bgp_config.h:378
virtual NeighborMapRange NeighborMapItems(const std::string &instance_name) const =0
boost::asio::ip::tcp::endpoint Endpoint
Definition: tcp_session.h:62
uint8_t analytics_dscp_
Definition: bgp_config.h:712
const RouteTargetList & import_list() const
Definition: bgp_config.h:442
bool nh_check_enabled() const
Definition: bgp_config.h:645
void delete_neighbor(const std::string &neighbor)
Definition: bgp_config.h:438
const OriginOverrideConfig & origin_override() const
Definition: bgp_config.h:273
void set_last_change_at(uint64_t tstamp) const
Definition: bgp_config.h:406
std::vector< std::string > AddressFamilyList
Definition: bgp_config.h:141
std::map< std::string, BgpRoutingPolicyConfig * > RoutingPolicyMap
Definition: bgp_config.h:753
void set_cluster_id(uint32_t cluster_id)
Definition: bgp_config.h:550
void set_subcluster_name(const std::string &name)
Definition: bgp_config.h:556
std::string name_
Definition: bgp_config.h:279
void add_term(const RoutingPolicyTermConfig &term)
Definition: bgp_config.h:407
RouteTargetList import_list_
Definition: bgp_config.h:516
ServiceChainList service_chain_list_
Definition: bgp_config.h:530
BgpRoutingPolicyConfig(const std::string &name)
Definition: bgp_config.cc:409
void set_virtual_network_index(int virtual_network_index)
Definition: bgp_config.h:460
uint32_t hold_time() const
Definition: bgp_config.h:582
IpAddress address
Definition: bgp_config.h:339
bool admin_down() const
Definition: bgp_config.h:181
void set_virtual_network_pbb_evpn_enable(bool pbb_evpn)
Definition: bgp_config.h:474
void set_gateway_address(Address::Family family, const IpAddress &address)
Definition: bgp_config.cc:272
uint64_t last_change_at() const
Definition: bgp_config.h:262
RoutingPolicyTermList terms_
Definition: bgp_config.h:416
uint8_t control_dscp() const
Definition: bgp_config.h:704
std::pair< RoutingPolicyMap::const_iterator, RoutingPolicyMap::const_iterator > RoutingPolicyMapRange
Definition: bgp_config.h:755
void set_name(const std::string &name)
Definition: bgp_config.h:163
void set_group_name(const std::string &group_name)
Definition: bgp_config.h:174
AuthenticationKeyChain::const_iterator const_iterator
Definition: bgp_config.h:48
SCAddress::Family family
Definition: bgp_config.h:326
void set_virtual_network_allow_transit(bool allow_transit)
Definition: bgp_config.h:467
const std::string & name() const
Definition: bgp_config.h:162
std::pair< InstanceMap::const_iterator, InstanceMap::const_iterator > InstanceMapRange
Definition: bgp_config.h:758
void set_gr_time(uint16_t gr_time)
Definition: bgp_config.h:624
BgpInstanceObserver instance
Definition: bgp_config.h:746
void set_identifier(uint32_t identifier)
Definition: bgp_config.h:553
uint32_t hold_time_
Definition: bgp_config.h:598
int CompareTo(const BgpProtocolConfig &rhs) const
Definition: bgp_config.cc:321
std::vector< AuthenticationKey > AuthenticationKeyChain
Definition: bgp_config.h:39
const std::string & instance_name() const
Definition: bgp_config.h:168
uint32_t autonomous_system() const
Definition: bgp_config.h:567
bool IsMd5() const
Definition: bgp_config.h:63
void set_virtual_network(const std::string &virtual_network)
Definition: bgp_config.h:455
bool gr_bgp_helper() const
Definition: bgp_config.h:631
std::string KeyTypeToString() const
Definition: bgp_config.cc:114
Family
Definition: address.h:24
void set_always_compare_med(bool always_compare_med)
Definition: bgp_config.h:652
#define KEY_COMPARE(x, y)
Definition: util.h:70
static const char * kMasterInstance
Definition: bgp_config.h:764
bool virtual_network_allow_transit_
Definition: bgp_config.h:521
void reset_subcluster_id()
Definition: bgp_config.h:565
BgpConfigManager(BgpServer *server)
Definition: bgp_config.cc:505
void swap_aggregate_routes(Address::Family family, AggregateRouteList *list)
Definition: bgp_config.cc:399
void Notify(const BgpConfigObject *, EventType)
boost::asio::ip::address IpAddress
Definition: address.h:13
const AuthenticationKeyChain & key_chain() const
Definition: bgp_config.h:74
uint32_t last_change_at() const
Definition: bgp_config.h:627
DISALLOW_COPY_AND_ASSIGN(BgpGlobalSystemConfig)
boost::function< void(const BgpGlobalSystemConfig *, EventType)> BgpGlobalSystemConfigObserver
Definition: bgp_config.h:740
PrefixMatchConfigList prefixes_to_match
Definition: bgp_config.h:362
void set_key_chain(const AuthenticationKeyChain &in_chain)
Definition: bgp_config.h:75
void RegisterObservers(const Observers &obs)
Definition: bgp_config.h:772
uint16_t rd_cluster_seed() const
Definition: bgp_config.h:661
std::string instance_name_
Definition: bgp_config.h:589
void set_peer_type(Type type)
Definition: bgp_config.h:179
void set_local_as(uint32_t local_as)
Definition: bgp_config.h:234
void set_subcluster_id(uint32_t id)
Definition: bgp_config.h:562
CommunityList community_match
Definition: bgp_config.h:363
BgpInstanceConfig(const std::string &name)
Definition: bgp_config.cc:331
const std::string & group_name() const
Definition: bgp_config.h:173
void set_vxlan_id(int vxlan_id)
Definition: bgp_config.h:480
void swap_routing_policy_list(RoutingPolicyConfigList *list)
Definition: bgp_config.h:500
std::vector< AggregateRouteConfig > AggregateRouteList
Definition: bgp_config.h:427
void set_private_as_action(const std::string &private_as_action)
Definition: bgp_config.h:191
virtual ~BgpRoutingPolicyConfig()
Definition: bgp_config.cc:414
void set_peer_identifier(uint32_t identifier)
Definition: bgp_config.h:206
int CompareTo(const BgpNeighborConfig &rhs) const
Definition: bgp_config.cc:227
void set_import_list(const RouteTargetList &import_list)
Definition: bgp_config.h:443
uint16_t bgpaas_port_end_
Definition: bgp_config.h:685
std::set< std::string > RouteTargetList
Definition: bgp_config.h:424
StaticRouteList inet6_static_routes_
Definition: bgp_config.h:527
boost::uuids::uuid uuid
void set_loop_count(uint8_t loop_count)
Definition: bgp_config.h:231
IpAddress nexthop
Definition: bgp_config.h:341
TcpSession::Endpoint remote_endpoint_
Definition: bgp_config.h:297
uint32_t subcluster_id_
Definition: bgp_config.h:596
const RouteTargetList & export_list() const
Definition: bgp_config.h:446
bool Empty() const
Definition: bgp_config.cc:106
void set_hold_time(int hold_time)
Definition: bgp_config.h:228
const FamilyAttributesList & family_attributes_list() const
Definition: bgp_config.h:253
BgpProtocolObserver protocol
Definition: bgp_config.h:745
uint32_t local_autonomous_system() const
Definition: bgp_config.h:572
std::set< StaticRouteConfig > StaticRouteList
Definition: bgp_config.h:425
std::vector< std::string > communities
Definition: bgp_config.h:343
std::vector< std::string > KeysToString() const
Definition: bgp_config.cc:132
uint32_t local_identifier_
Definition: bgp_config.h:301
AuthenticationKeyChain key_chain_
Definition: bgp_config.h:83
std::string router_type() const
Definition: bgp_config.h:222
bool virtual_network_pbb_evpn_enable() const
Definition: bgp_config.h:471
uint32_t autonomous_system_
Definition: bgp_config.h:592
uint64_t last_change_at() const
Definition: bgp_config.h:585
virtual const BgpInstanceConfig * FindInstance(const std::string &name) const =0
void set_source_port(uint16_t source_port)
Definition: bgp_config.h:220
CommunityList ext_community_remove
Definition: bgp_config.h:377
StaticRouteList inet_static_routes_
Definition: bgp_config.h:526
std::string private_as_action() const
Definition: bgp_config.h:190
std::string prefix_to_match
Definition: bgp_config.h:354
static const int kEndOfRibTime
Definition: bgp_config.h:607
void set_last_change_at(uint64_t tstamp) const
Definition: bgp_config.h:483
uint8_t loop_count() const
Definition: bgp_config.h:230
IpAddress address_
Definition: bgp_config.h:292
void set_last_change_at(uint64_t tstamp) const
Definition: bgp_config.h:586
std::string uuid_
Definition: bgp_config.h:280
virtual const std::string & localname() const =0
const AuthenticationKey * Find(int key_id) const
Definition: bgp_config.cc:95
std::string group_name_
Definition: bgp_config.h:282
ProtocolList protocols_match
Definition: bgp_config.h:361
std::vector< std::string > KeysToStringDetail() const
Definition: bgp_config.cc:143
PrefixMatchConfig(std::string to_match, std::string match_type)
Definition: bgp_config.h:351
bool admin_down() const
Definition: bgp_config.h:546
bool has_pnf() const
Definition: bgp_config.h:451
CommunityList community_remove
Definition: bgp_config.h:374
RoutingPolicyActionConfig action
Definition: bgp_config.h:395
bool gr_xmpp_helper() const
Definition: bgp_config.h:633
void set_local_autonomous_system(uint32_t local_autonomous_system)
Definition: bgp_config.h:575
int hold_time() const
Definition: bgp_config.h:227
uint32_t peer_as() const
Definition: bgp_config.h:198
virtual int NeighborCount(const std::string &instance_name) const =0
const std::string & name() const
Definition: bgp_config.h:405
uint16_t source_port() const
Definition: bgp_config.h:219
DISALLOW_COPY_AND_ASSIGN(BgpConfigManager)
bool always_compare_med() const
Definition: bgp_config.h:651
void SetOriginOverride(bool origin_override, std::string origin)
Definition: bgp_config.cc:256
boost::function< void(const BgpRoutingPolicyConfig *, EventType)> BgpRoutingPolicyObserver
Definition: bgp_config.h:738
uint32_t identifier_
Definition: bgp_config.h:594
BgpProtocolConfig(const std::string &instance_name)
Definition: bgp_config.cc:309
boost::function< void(const BgpNeighborConfig *, EventType)> BgpNeighborObserver
Definition: bgp_config.h:736
std::vector< std::string > default_tunnel_encap_list
Definition: bgp_config.h:99
uint16_t gr_time() const
Definition: bgp_config.h:623
void set_hold_time(uint32_t hold_time)
Definition: bgp_config.h:583
AuthenticationKeyChain::iterator iterator
Definition: bgp_config.h:47
Type peer_type() const
Definition: bgp_config.h:178
void set_key_type(KeyType in_type)
Definition: bgp_config.h:71
std::string peer_address_string() const
Definition: bgp_config.h:203
int index() const
Definition: bgp_config.h:509
DISALLOW_COPY_AND_ASSIGN(BgpNeighborConfig)
uint8_t type
Definition: load_balance.h:109
IpAddress inet_gateway_address_
Definition: bgp_config.h:293
void set_router_type(const std::string &router_type)
Definition: bgp_config.h:223
std::vector< Observers > obs_
Definition: bgp_config.h:804
BgpFamilyAttributesConfig(const std::string &family)
Definition: bgp_config.h:90
bool operator==(const AuthenticationData &rhs) const
Definition: bgp_config.cc:63
bool fc_enabled() const
Definition: bgp_config.h:639
iterator begin()
Definition: bgp_config.h:50
const ServiceChainConfig * service_chain_info(SCAddress::Family family) const
Definition: bgp_config.cc:379
uint32_t identifier() const
Definition: bgp_config.h:552
virtual const BgpRoutingPolicyConfig * FindRoutingPolicy(const std::string &name) const =0
bool as_override() const
Definition: bgp_config.h:187
std::vector< std::string > prefix
Definition: bgp_config.h:328
std::vector< PrefixMatchConfig > PrefixMatchConfigList
Definition: bgp_config.h:358
void swap_service_chain_list(ServiceChainList *list)
Definition: bgp_config.h:491
BgpServer * server_
Definition: bgp_config.h:803
std::string prefix_match_type
Definition: bgp_config.h:355
DISALLOW_COPY_AND_ASSIGN(BgpRoutingPolicyConfig)
uint32_t cluster_id_
Definition: bgp_config.h:591
uint8_t control_dscp_
Definition: bgp_config.h:711
static const char * kMasterNetwork
Definition: bgp_config.h:763
uint64_t last_change_at_
Definition: bgp_config.h:302
void swap_static_routes(Address::Family family, StaticRouteList *list)
Definition: bgp_config.cc:369
BgpGlobalQosConfigObserver qos
Definition: bgp_config.h:750
bool operator==(const BgpFamilyAttributesConfig &rhs) const
Definition: bgp_config.cc:170
std::pair< NeighborMap::const_iterator, NeighborMap::const_iterator > NeighborMapRange
Definition: bgp_config.h:761
uint64_t last_change_at() const
Definition: bgp_config.h:482
FamilyAttributesList family_attributes_list_
Definition: bgp_config.h:304
std::string router_type_
Definition: bgp_config.h:284
std::string routing_instance
Definition: bgp_config.h:327
std::vector< RoutingPolicyAttachInfo > RoutingPolicyConfigList
Definition: bgp_common.h:40
bool virtual_network_pbb_evpn_enable_
Definition: bgp_config.h:522
void set_analytics_dscp(uint8_t value)
Definition: bgp_config.h:707
uint16_t bgpaas_port_start_
Definition: bgp_config.h:684
std::vector< std::string > AuthKeysToString() const
Definition: bgp_config.cc:297
uint32_t peer_as_
Definition: bgp_config.h:290
void set_family_attributes_list(const FamilyAttributesList &family_attributes_list)
Definition: bgp_config.h:257
BgpNeighborObserver neighbor
Definition: bgp_config.h:747
std::string ToString() const
Definition: bgp_config.cc:464
bool operator<(const StaticRouteConfig &rhs) const
Definition: bgp_config.cc:302
uint16_t end_of_rib_timeout() const
Definition: bgp_config.h:629
CommunityList community_add
Definition: bgp_config.h:373
const AuthenticationData & auth_data() const
Definition: bgp_config.h:244
uint16_t port() const
Definition: bgp_config.h:216
uint32_t med
Definition: bgp_config.h:379
RoutingPolicyMatchConfig match
Definition: bgp_config.h:394
std::string peer_identifier_string() const
Definition: bgp_config.h:209
std::set< std::string > NeighborList
Definition: bgp_config.h:423
void set_last_change_at(uint32_t tstamp) const
Definition: bgp_config.h:628
std::vector< std::string > CommunityList
Definition: bgp_config.h:347
void set_local_identifier(uint32_t identifier)
Definition: bgp_config.h:237
void set_enable_4byte_as(bool as_4byte)
Definition: bgp_config.h:638
std::string source_routing_instance
Definition: bgp_config.h:331
std::vector< RoutingPolicyTermConfig > RoutingPolicyTermList
Definition: bgp_config.h:401
bool operator<(const AuthenticationKey &rhs) const
Definition: bgp_config.cc:39
std::string AuthKeyTypeToString() const
Definition: bgp_config.cc:292
CommunityList ext_community_set
Definition: bgp_config.h:375
uint32_t local_as() const
Definition: bgp_config.h:233
void set_gr_xmpp_helper(bool helper)
Definition: bgp_config.h:634
friend class BgpInstanceConfigTest
Definition: bgp_config.h:512
std::string ToString() const
Definition: bgp_config.cc:421
const ServiceChainList & service_chain_list() const
Definition: bgp_config.h:488
AggregateRouteList inet6_aggregate_routes_
Definition: bgp_config.h:529
virtual const BgpNeighborConfig * FindNeighbor(const std::string &instance_name, const std::string &name) const =0
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
uint32_t subcluster_id() const
Definition: bgp_config.h:561
std::vector< as_t > AsnList
Definition: bgp_config.h:346
std::string value
Definition: bgp_config.h:35
uint16_t bgpaas_port_start() const
Definition: bgp_config.h:667
uint32_t cluster_id() const
Definition: bgp_config.h:195
virtual InstanceMapRange InstanceMapItems(const std::string &start_instance=std::string()) const =0
DISALLOW_COPY_AND_ASSIGN(BgpProtocolConfig)
AddressFamilyList GetAddressFamilies() const
Definition: bgp_config.cc:283
RouteTargetList export_list_
Definition: bgp_config.h:517
std::map< std::string, BgpInstanceConfig * > InstanceMap
Definition: bgp_config.h:756
std::vector< BgpFamilyAttributesConfig > FamilyAttributesList
Definition: bgp_config.h:142
std::string service_instance
Definition: bgp_config.h:330
std::vector< ServiceChainConfig > ServiceChainList
Definition: bgp_config.h:426
void set_llgr_time(uint64_t llgr_time)
Definition: bgp_config.h:626
void set_keydata(const AuthenticationData &in_auth_data)
Definition: bgp_config.h:247
uint8_t analytics_dscp() const
Definition: bgp_config.h:706
const_iterator end() const
Definition: bgp_config.h:53
uint8_t xmpp_hold_time() const
Definition: bgp_config.h:655
void set_fc_enabled(bool enable)
Definition: bgp_config.h:642
uint32_t identifier_
Definition: bgp_config.h:291
const AggregateRouteList & aggregate_routes(Address::Family family) const
Definition: bgp_config.cc:390
uint16_t bgpaas_port_end() const
Definition: bgp_config.h:671
const IpAddress & gateway_address(Address::Family family) const
Definition: bgp_config.cc:262
int virtual_network_index_
Definition: bgp_config.h:520
void set_rd_cluster_seed(uint16_t seed)
Definition: bgp_config.h:664
virtual ~BgpInstanceConfig()
Definition: bgp_config.cc:342
void set_gr_bgp_helper(bool helper)
Definition: bgp_config.h:632
uint64_t last_change_at() const
Definition: bgp_config.h:702
void set_last_change_at(uint64_t tstamp) const
Definition: bgp_config.h:263
uint32_t cluster_id_
Definition: bgp_config.h:289
void set_last_change_at(uint64_t tstamp) const
Definition: bgp_config.h:703
BgpRoutingPolicyObserver policy
Definition: bgp_config.h:748
IpAddress inet6_gateway_address_
Definition: bgp_config.h:294
boost::function< void(const BgpGlobalQosConfig *, EventType)> BgpGlobalQosConfigObserver
Definition: bgp_config.h:742
AggregateRouteList inet_aggregate_routes_
Definition: bgp_config.h:528
NeighborList neighbor_list_
Definition: bgp_config.h:515
DISALLOW_COPY_AND_ASSIGN(BgpGlobalQosConfig)
void set_bgpaas_port_start(uint16_t bgpaas_port_start)
Definition: bgp_config.h:668
void set_admin_down(bool admin_down)
Definition: bgp_config.h:182
uint64_t last_change_at_
Definition: bgp_config.h:676
void set_export_list(const RouteTargetList &export_list)
Definition: bgp_config.h:447
void set_admin_down(bool admin_down)
Definition: bgp_config.h:547
const RoutingPolicyConfigList & routing_policy_list() const
Definition: bgp_config.h:497
bool operator<(const OriginOverrideConfig &rhs) const
Definition: bgp_config.cc:157
AuthenticationData auth_data_
Definition: bgp_config.h:303
uint16_t rd_cluster_seed_
Definition: bgp_config.h:689
void set_gr_enable(bool enable)
Definition: bgp_config.h:636
CommunityList ext_community_match
Definition: bgp_config.h:365
static const char * kFabricInstance
Definition: bgp_config.h:765
void set_has_pnf(bool has_pnf)
Definition: bgp_config.h:452
void set_instance_name(const std::string &instance_name)
Definition: bgp_config.h:169
std::string private_as_action_
Definition: bgp_config.h:288
bool passive() const
Definition: bgp_config.h:184
static const int kDefaultPort
Definition: bgp_config.h:766
std::map< std::string, BgpNeighborConfig * > NeighborMap
Definition: bgp_config.h:759
bool enable_4byte_as() const
Definition: bgp_config.h:637
uint16_t source_port_
Definition: bgp_config.h:296
uint64_t last_change_at_
Definition: bgp_config.h:710
void set_passive(bool passive)
Definition: bgp_config.h:185
uint32_t local_autonomous_system_
Definition: bgp_config.h:593
void add_neighbor(const std::string &neighbor)
Definition: bgp_config.h:435
void set_xmpp_hold_time(uint8_t hold_time)
Definition: bgp_config.h:658
void set_autonomous_system(uint32_t autonomous_system)
Definition: bgp_config.h:568
KeyType key_type() const
Definition: bgp_config.h:70
std::string name_
Definition: bgp_config.h:514
int vxlan_id() const
Definition: bgp_config.h:479
void set_cluster_id(uint32_t cluster_id)
Definition: bgp_config.h:196
const_iterator begin() const
Definition: bgp_config.h:52
OriginOverrideConfig origin_override_
Definition: bgp_config.h:305
void set_port(int port)
Definition: bgp_config.h:580
void set_index(int index)
Definition: bgp_config.h:508
const std::string & uuid() const
Definition: bgp_config.h:165
void set_peer_as(uint32_t peer_as)
Definition: bgp_config.h:199
uint32_t local_identifier() const
Definition: bgp_config.h:236
uint8_t loop_count_
Definition: bgp_config.h:299
void set_port(uint16_t port)
Definition: bgp_config.h:217
void AddKeyToKeyChain(const AuthenticationKey &key)
Definition: bgp_config.cc:91
std::string local_identifier_string() const
Definition: bgp_config.h:240
uint32_t local_as_
Definition: bgp_config.h:300
bool operator==(const AuthenticationKey &rhs) const
Definition: bgp_config.cc:44
const NeighborList & neighbor_list() const
Definition: bgp_config.h:434
AuthenticationData & operator=(const AuthenticationData &rhs)
Definition: bgp_config.cc:84
boost::function< void(const BgpProtocolConfig *, EventType)> BgpProtocolObserver
Definition: bgp_config.h:732
virtual ~BgpConfigManager()
Definition: bgp_config.cc:509
virtual const BgpProtocolConfig * GetProtocolConfig(const std::string &instance_name) const =0
void set_as_override(bool as_override)
Definition: bgp_config.h:188
int virtual_network_index() const
Definition: bgp_config.h:459
bool operator!=(const BgpNeighborConfig &rhs) const
Definition: bgp_config.h:269
boost::function< void(const BgpInstanceConfig *, EventType)> BgpInstanceObserver
Definition: bgp_config.h:734
const std::string & instance_name() const
Definition: bgp_config.h:540
const std::string & name() const
Definition: bgp_config.h:432
uint64_t last_change_at_
Definition: bgp_config.h:599
bool virtual_network_allow_transit() const
Definition: bgp_config.h:464
CommunityList community_set
Definition: bgp_config.h:372
RoutingPolicyConfigList routing_policies_
Definition: bgp_config.h:531
uint32_t llgr_time() const
Definition: bgp_config.h:625
CommunityList ext_community_add
Definition: bgp_config.h:376
std::string service_chain_address
Definition: bgp_config.h:329
const IpAddress & peer_address() const
Definition: bgp_config.h:201
const BgpServer * server()
Definition: bgp_config.h:800
void set_end_of_rib_timeout(uint16_t time)
Definition: bgp_config.h:630
void CopyValues(const BgpNeighborConfig &rhs)
Definition: bgp_config.cc:202
std::string instance_name_
Definition: bgp_config.h:281
bool gr_enable() const
Definition: bgp_config.h:635
bool operator<(const AuthenticationData &rhs) const
Definition: bgp_config.cc:57
AsnList aspath_expand
Definition: bgp_config.h:371
virtual RoutingPolicyMapRange RoutingPolicyMapItems(const std::string &start_policy=std::string()) const =0
const std::string & subcluster_name() const
Definition: bgp_config.h:555
const StaticRouteList & static_routes(Address::Family family) const
Definition: bgp_config.cc:359
void reset_subcluster_name()
Definition: bgp_config.h:559
std::vector< std::string > ProtocolList
Definition: bgp_config.h:348
void set_uuid(const std::string &uuid)
Definition: bgp_config.h:166
std::string subcluster_name_
Definition: bgp_config.h:595
int operator()(const BgpFamilyAttributesConfig lhs, const BgpFamilyAttributesConfig rhs) const
Definition: bgp_config.h:106
void set_bgpaas_port_end(uint16_t bgpaas_port_end)
Definition: bgp_config.h:672
DISALLOW_COPY_AND_ASSIGN(BgpInstanceConfig)
uint32_t cluster_id() const
Definition: bgp_config.h:549
uint16_t end_of_rib_timeout_
Definition: bgp_config.h:679
std::string service_chain_id
Definition: bgp_config.h:332
uint32_t peer_identifier() const
Definition: bgp_config.h:205
virtual void Terminate()=0
iterator end()
Definition: bgp_config.h:51
static const uint32_t kDefaultAutonomousSystem
Definition: bgp_config.h:767
void set_nh_check_enabled(bool enable)
Definition: bgp_config.h:648
void set_control_dscp(uint8_t value)
Definition: bgp_config.h:705
const RoutingPolicyTermList & terms() const
Definition: bgp_config.h:410