OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bgp_route.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_ROUTE_H_
6 #define SRC_BGP_BGP_ROUTE_H_
7 
8 #include <string>
9 #include <vector>
10 #include <set>
11 
12 #include "bgp/bgp_path.h"
13 #include "base/address.h"
14 #include "route/route.h"
15 
16 class BgpAttr;
17 struct BgpProtoPrefix;
18 class IPeer;
19 class BgpTable;
20 class ShowRoute;
21 class ShowRouteBrief;
22 
23 class BgpRoute : public Route {
24 public:
25  BgpRoute();
26  ~BgpRoute();
27 
28  bool HasPaths() const { return front() != NULL; }
29  const BgpPath *BestPath() const;
30 
31  void InsertPath(BgpPath *path);
32  void DeletePath(BgpPath *path);
33 
34  const BgpPath *FindPath(BgpPath::PathSource src) const;
35  const BgpPath *FindPath(const IPeer *peer,
36  bool include_secondary = false) const;
37  BgpPath *FindPath(const IPeer *peer, bool include_secondary = false);
38  BgpPath *FindPath(const IpAddress &nexthop);
39  BgpPath *FindPath(BgpPath::PathSource src, const IPeer *peer,
40  uint32_t path_id);
41  BgpPath *FindPath(BgpPath::PathSource src, uint32_t path_id);
42  bool RemovePath(BgpPath::PathSource src, const IPeer *peer = NULL,
43  uint32_t path_id = 0);
44  bool RemovePath(BgpPath::PathSource src, uint32_t path_id);
45  bool RemovePath(const IPeer *peer);
46 
47  bool IsUsable() const;
48  virtual bool IsValid() const;
49 
50  // Check if there's a better path with the same forwarding information.
51  bool DuplicateForwardingPath(const BgpPath *in_path) const;
52 
54  const IPeer *peer, uint32_t path_id);
55  bool RemoveSecondaryPath(const BgpRoute *src_rt, BgpPath::PathSource src,
56  const IPeer *peer, uint32_t path_id);
59  }
60 
61  void NotifyOrDelete();
62  BgpTable *table();
63  const BgpTable *table() const;
64 
65  virtual std::string ToXmppIdString() const { return ToString(); }
66 
67  virtual void BuildProtoPrefix(BgpProtoPrefix *prefix,
68  const BgpAttr *attr = NULL,
69  uint32_t label = 0,
70  uint32_t l3_label = 0) const {
71  }
72  virtual void BuildBgpProtoNextHop(std::vector<uint8_t> &nh,
73  IpAddress nexthop) const {
74  }
75 
76  // number of paths
77  size_t count() const;
78 
79  // Fill info needed for introspect
80  void FillRouteInfo(const BgpTable *table, ShowRouteBrief *show_route) const;
81  void FillRouteInfo(const BgpTable *table, ShowRoute *show_route,
82  const std::string &source = "", const std::string &protocol = "") const;
83  uint32_t SubClusterId() const;
85  const std::set<std::string> &peer_sources() const { return peer_sources_; }
86  void add_peer_sources(std::string val) { peer_sources_.insert(val); }
87  void del_peer_sources(std::string val) {
88  if (peer_sources_.find(val) != peer_sources_.end()) {
89  peer_sources_.erase(val);
90  };
91  }
92 
93 private:
94  std::set<std::string> peer_sources_;
96 };
97 
98 #endif // SRC_BGP_BGP_ROUTE_H_
void FillRouteInfo(const BgpTable *table, ShowRouteBrief *show_route) const
Definition: bgp_route.cc:432
virtual std::string ToXmppIdString() const
Definition: bgp_route.h:65
const BgpPath * BestPath() const
Definition: bgp_route.cc:46
void NotifyOrDelete()
Definition: bgp_route.cc:747
bool RemoveSecondaryPath(const BgpRoute *src_rt, BgpPath::PathSource src, const IPeer *peer, uint32_t path_id)
Definition: bgp_route.cc:397
BgpRoute()
Definition: bgp_route.cc:35
boost::asio::ip::address IpAddress
Definition: address.h:13
virtual void BuildProtoPrefix(BgpProtoPrefix *prefix, const BgpAttr *attr=NULL, uint32_t label=0, uint32_t l3_label=0) const
Definition: bgp_route.h:67
Definition: route.h:14
const BgpPath * FindPath(BgpPath::PathSource src) const
Definition: bgp_route.cc:145
const std::set< std::string > & peer_sources() const
Definition: bgp_route.h:85
Definition: ipeer.h:186
bool IsUsable() const
Definition: bgp_route.cc:324
PathSource
Definition: bgp_path.h:37
virtual void BuildBgpProtoNextHop(std::vector< uint8_t > &nh, IpAddress nexthop) const
Definition: bgp_route.h:72
virtual std::string ToString() const =0
static RouteDistinguisher kZeroRd
Definition: rd.h:14
uint32_t SubClusterId() const
Definition: bgp_route.cc:755
void InsertPath(BgpPath *path)
Definition: bgp_route.cc:60
bool DuplicateForwardingPath(const BgpPath *in_path) const
Definition: bgp_route.cc:352
bool RemovePath(BgpPath::PathSource src, const IPeer *peer=NULL, uint32_t path_id=0)
Definition: bgp_route.cc:262
const Path * front() const
Definition: route.cc:16
BgpPath * FindSecondaryPath(BgpRoute *src_rt, BgpPath::PathSource src, const IPeer *peer, uint32_t path_id)
Definition: bgp_route.cc:372
BgpTable * table()
Definition: bgp_route.cc:424
bool HasPaths() const
Definition: bgp_route.h:28
size_t count() const
Definition: bgp_route.cc:420
std::set< std::string > peer_sources_
Definition: bgp_route.h:94
void DeletePath(BgpPath *path)
Definition: bgp_route.cc:126
~BgpRoute()
Definition: bgp_route.cc:38
void del_peer_sources(std::string val)
Definition: bgp_route.h:87
void add_peer_sources(std::string val)
Definition: bgp_route.h:86
DISALLOW_COPY_AND_ASSIGN(BgpRoute)
void AddExtCommunitySubCluster(BgpPath *path)
virtual bool IsValid() const
Definition: bgp_route.cc:338
virtual RouteDistinguisher GetRouteDistinguisher() const
Definition: bgp_route.h:57