7 #include <boost/foreach.hpp>
20 return addr.to_string();
24 const BgpAttrPtr ptr, uint32_t flags, uint32_t label,
26 : peer_(peer), path_id_(path_id), source_(src), attr_(ptr),
27 original_attr_(ptr), flags_(flags), label_(label), l3_label_(l3_label) {
31 uint32_t flags, uint32_t label, uint32_t l3_label)
32 : peer_(peer), path_id_(0), source_(src), attr_(ptr), original_attr_(ptr),
33 flags_(flags), label_(label), l3_label_(l3_label) {
37 uint32_t flags, uint32_t label, uint32_t l3_label)
38 : peer_(NULL), path_id_(path_id), source_(src), attr_(ptr),
39 original_attr_(ptr), flags_(flags), label_(label), l3_label_(l3_label) {
43 uint32_t flags, uint32_t label, uint32_t l3_label)
44 : peer_(NULL), path_id_(0), source_(src), attr_(ptr), original_attr_(ptr),
45 flags_(flags), label_(label), l3_label_(l3_label) {
49 #define BOOL_COMPARE(CondA, CondB) \
52 if (!(CondB)) return -1; \
54 if (CondB) return 1; \
77 bool llgr_stale =
attr_->community() &&
attr_->community()->ContainsValue(
101 (
attr_->neighbor_as() &&
142 uint32_t orig_id =
attr_->originator_id().to_ulong();
152 if (lpeer != NULL && rpeer != NULL) {
182 if (!
attr_->source_rd().IsZero())
183 return attr_->source_rd();
192 vector<string> flag_names;
194 flag_names.push_back(
"None");
201 vector<PathFlag> flags;
207 flags.push_back(
Stale);
227 for (
auto flag : flags) {
230 flag_names.push_back(
"AsPathLooped");
233 flag_names.push_back(
"NoNeighborAs");
236 flag_names.push_back(
"Stale");
239 flag_names.push_back(
"NoTunnelEncap");
242 flag_names.push_back(
"OriginatorIdLooped");
245 flag_names.push_back(
"ResolveNexthop");
248 flag_names.push_back(
"ResolvedPath");
251 flag_names.push_back(
"RoutingPolicyReject");
254 flag_names.push_back(
"LlgrStale");
257 flag_names.push_back(
"ClusterListLooped");
260 flag_names.push_back(
"AliasedPath");
263 flag_names.push_back(
"CheckGlobalErmVpnRoute");
275 if (combine_bgp_and_xmpp) {
283 return "ServiceChain";
285 return "StaticRoute";
297 :
BgpPath(peer, path_id, src, ptr, flags, label, l3_label) {
311 ReplaceSubClusterAndLocate(ext_community.get(),
314 ReplaceExtCommunityAndLocate(attr, ext_community);
322 SetAttr(modified_attr, modified_attr);
boost::asio::ip::address_v4 Ip4Address
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
#define BOOL_COMPARE(CondA, CondB)
uint32_t local_pref() const
bool evpn_sticky_mac() const
const OriginVnPath * origin_vn_path() const
uint32_t sequence_number() const
const Community * community() const
const ExtCommunity * ext_community() const
size_t cluster_list_length() const
const Ip4Address & originator_id() const
BgpAttrOrigin::OriginType origin() const
int max_as_path_count() const
bool always_compare_med() const
void UpdatePeerRefCount(int count, Address::Family family) const
virtual std::string ToString() const
void SetAttr(const BgpAttrPtr attr, const BgpAttrPtr original_attr)
BgpPath(const IPeer *peer, uint32_t path_id, PathSource src, const BgpAttrPtr ptr, uint32_t flags, uint32_t label, uint32_t l3_label=0)
bool PathSameNeighborAs(const BgpPath &rhs) const
void AddExtCommunitySubCluster(uint32_t subcluster_id)
static std::string PathIdString(uint32_t path_id)
std::vector< std::string > GetFlagsStringList() const
std::string GetSourceString(bool combine_bgp_and_xmpp=false) const
virtual bool IsReplicated() const
const BgpAttr * GetAttr() const
RouteDistinguisher GetSourceRouteDistinguisher() const
PathSource GetSource() const
int PathCompare(const BgpPath &rhs, bool allow_ecmp) const
const BgpAttr * GetOriginalAttr() const
const BgpPeerKey & peer_key() const
virtual RouteDistinguisher GetRouteDistinguisher() const
BgpSecondaryPath(const IPeer *peer, uint32_t path_id, PathSource src, const BgpAttrPtr attr, uint32_t flags, uint32_t label, uint32_t l3_label=0)
const BgpRoute * src_entry_
RouteDistinguisher GetPrimaryRouteDistinguisher() const
ExtCommunityDB * extcomm_db()
bool ignore_aspath() const
as_t autonomous_system() const
BgpGlobalSystemConfig * global_config()
virtual uint32_t bgp_identifier() const =0
virtual const std::string & ToString() const =0
virtual BgpProto::BgpPeerType PeerType() const =0
virtual bool IsXmppPeer() const =0
virtual void UpdateTotalPathCount(int count) const =0
virtual void UpdatePrimaryPathCount(int count, Address::Family family=Address::UNSPEC) const =0
static RouteDistinguisher kZeroRd
const bytes_type & GetExtCommunity() const
#define KEY_COMPARE(x, y)