5 #ifndef SRC_BGP_BGP_ATTR_H_
6 #define SRC_BGP_BGP_ATTR_H_
8 #include <boost/intrusive_ptr.hpp>
9 #include <tbb/atomic.h>
58 virtual std::string
ToString()
const;
76 if (ip_nexthop.is_v4()) {
77 nexthop = ip_nexthop.to_v4().to_ulong();
78 }
else if (ip_nexthop.is_v6()) {
86 virtual std::string
ToString()
const;
101 virtual std::string
ToString()
const;
118 virtual std::string
ToString()
const;
129 virtual std::string
ToString()
const;
147 virtual std::string
ToString()
const;
165 virtual std::string
ToString()
const;
183 virtual std::string
ToString()
const;
200 virtual std::string
ToString()
const;
215 virtual std::string
ToString()
const;
249 return ccluster_list->
refcount_.fetch_and_increment();
253 return ccluster_list->
refcount_.fetch_and_decrement();
257 int prev = ccluster_list->
refcount_.fetch_and_decrement();
290 std::vector<uint8_t> nh) :
311 std::vector<BgpProtoPrefix *>
nlri;
347 virtual std::string
ToString()
const;
403 return cpmsi_tunnel->
refcount_.fetch_and_increment();
407 return cpmsi_tunnel->
refcount_.fetch_and_decrement();
411 int prev = cpmsi_tunnel->
refcount_.fetch_and_decrement();
446 virtual std::string
ToString()
const;
452 void GetLabels(uint32_t *first_label, uint32_t *last_label)
const;
453 void SetLabels(uint32_t first_label, uint32_t last_label);
507 return cediscovery->
refcount_.fetch_and_increment();
511 return cediscovery->
refcount_.fetch_and_decrement();
515 int prev = cediscovery->
refcount_.fetch_and_decrement();
535 EdgeDiscoveryCompare,
551 virtual std::string
ToString()
const;
614 return ceforwarding->
refcount_.fetch_and_increment();
618 return ceforwarding->
refcount_.fetch_and_decrement();
622 int prev = ceforwarding->
refcount_.fetch_and_decrement();
643 EdgeForwardingCompare,
660 virtual std::string
ToString()
const;
666 std::vector<std::string>
encap = std::vector<std::string>())
691 virtual std::string
ToString()
const;
729 return colist->
refcount_.fetch_and_increment();
733 return colist->
refcount_.fetch_and_decrement();
737 int prev = colist->
refcount_.fetch_and_decrement();
778 virtual std::string
ToString()
const;
790 virtual std::string
ToString()
const;
802 virtual std::string
ToString()
const;
819 virtual std::string
ToString()
const;
974 return cattrp->
refcount_.fetch_and_increment();
978 return cattrp->
refcount_.fetch_and_decrement();
982 int prev = cattrp->
refcount_.fetch_and_decrement();
1000 BgpAttrCompare, BgpAttrDB> {
1014 uint32_t local_pref);
1030 const std::string &sbp);
boost::asio::ip::address_v6 Ip6Address
boost::asio::ip::address IpAddress
boost::asio::ip::address_v4 Ip4Address
boost::intrusive_ptr< const AsPath4Byte > AsPath4BytePtr
boost::intrusive_ptr< const As4Path > As4PathPtr
boost::intrusive_ptr< const AsPath > AsPathPtr
boost::intrusive_ptr< EdgeDiscovery > EdgeDiscoveryPtr
void intrusive_ptr_release(const ClusterList *ccluster_list)
std::vector< BgpAttribute * > BgpAttrSpec
boost::intrusive_ptr< EdgeForwarding > EdgeForwardingPtr
boost::intrusive_ptr< BgpOList > BgpOListPtr
boost::intrusive_ptr< ClusterList > ClusterListPtr
int intrusive_ptr_del_ref(const ClusterList *ccluster_list)
int intrusive_ptr_add_ref(const ClusterList *ccluster_list)
boost::intrusive_ptr< PmsiTunnel > PmsiTunnelPtr
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
boost::intrusive_ptr< const OriginVnPath > OriginVnPathPtr
BgpAttrPtr ReplaceOriginatorIdAndLocate(const BgpAttr *attr, Ip4Address originator_id)
BgpAttrDB(BgpServer *server)
BgpAttrPtr ReplaceLocalPreferenceAndLocate(const BgpAttr *attr, uint32_t local_pref)
BgpAttrPtr ReplaceOListAndLocate(const BgpAttr *attr, const BgpOListSpec *olist_spec)
BgpAttrPtr ReplaceNexthopAndLocate(const BgpAttr *attr, const IpAddress &addr)
BgpAttrPtr ReplaceLeafOListAndLocate(const BgpAttr *attr, const BgpOListSpec *leaf_olist_spec)
BgpAttrPtr ReplaceSubProtocolAndLocate(const BgpAttr *attr, const std::string &sbp)
BgpAttrPtr ReplaceAsPathAndLocate(const BgpAttr *attr, AsPathPtr aspath)
BgpAttrPtr ReplaceOriginAndLocate(const BgpAttr *attr, BgpAttrOrigin::OriginType origin)
BgpAttrPtr ReplacePmsiTunnelAndLocate(const BgpAttr *attr, const PmsiTunnelSpec *pmsi_spec)
BgpAttrPtr ReplaceExtCommunityAndLocate(const BgpAttr *attr, ExtCommunityPtr extcomm)
BgpAttrPtr ReplaceSourceRdAndLocate(const BgpAttr *attr, const RouteDistinguisher &source_rd)
BgpAttrPtr ReplaceOriginVnPathAndLocate(const BgpAttr *attr, OriginVnPathPtr ovnpath)
BgpAttrPtr ReplaceEsiAndLocate(const BgpAttr *attr, const EthernetSegmentId &esi)
const BgpServer * server() const
BgpAttrPtr ReplaceCommunityAndLocate(const BgpAttr *attr, CommunityPtr community)
const BgpAttrDB * attr_db() const
void set_sub_protocol(const std::string &sub_protocol)
Ip4Address originator_id_
void set_aspath_4byte(AsPath4BytePtr aspath)
uint32_t local_pref() const
const AsPath * as_path() const
int as_path_count() const
void set_source_rd(const RouteDistinguisher &source_rd)
MacAddress mac_address() const
void set_community(CommunityPtr comm)
static BgpAttrOrigin::OriginType OriginFromString(const std::string &bgp_origin_type)
void set_params(uint64_t params)
tbb::atomic< int > refcount_
const IpAddress & aggregator_adderess() const
bool IsAsPathEmpty() const
void set_leaf_olist(const BgpOListSpec *leaf_olist_spec)
int as4_path_count() const
void set_esi(const EthernetSegmentId &esi)
IpAddress aggregator_address_
static std::string OriginToString(BgpAttrOrigin::OriginType origin)
RouteDistinguisher source_rd_
std::string origin_string() const
void set_edge_discovery(const EdgeDiscoverySpec *edspec)
void set_as_path(AsPathPtr aspath)
const EdgeForwarding * edge_forwarding() const
friend std::size_t hash_value(BgpAttr const &attr)
void set_atomic_aggregate(bool ae)
OriginVnPathPtr origin_vn_path_
ExtCommunityPtr ext_community_
void set_med(uint32_t med)
void set_as4_path(As4PathPtr aspath)
void set_origin_vn_path(OriginVnPathPtr ovnpath)
BgpAttrOrigin::OriginType origin_
const ClusterList * cluster_list() const
void set_edge_forwarding(const EdgeForwardingSpec *efspec)
EdgeForwardingPtr edge_forwarding_
int IsAsPathLoop(as_t asn, uint8_t max_loop_count=0) const
EdgeDiscoveryPtr edge_discovery_
const std::string & sub_protocol() const
LabelBlockPtr label_block() const
void set_local_pref(uint32_t local_pref)
friend int intrusive_ptr_add_ref(const BgpAttr *cattrp)
LabelBlockPtr label_block_
bool evpn_sticky_mac() const
const OriginVnPath * origin_vn_path() const
ClusterListPtr cluster_list_
uint32_t sequence_number() const
void set_origin(BgpAttrOrigin::OriginType org)
void set_as4_aggregator(as_t as_num, IpAddress address)
const Community * community() const
void set_cluster_list(const ClusterListSpec *spec)
AsPath4BytePtr aspath_4byte_
const RouteDistinguisher & source_rd() const
BgpOListPtr olist() const
as_t aggregator_as_num() const
void set_aggregator(as_t as_num, IpAddress address)
void set_nexthop(IpAddress nexthop)
int aspath_4byte_count() const
friend int intrusive_ptr_del_ref(const BgpAttr *cattrp)
void set_label_block(LabelBlockPtr label_block)
std::string sub_protocol_
const IpAddress & nexthop() const
bool evpn_single_active() const
const EdgeDiscovery * edge_discovery() const
BgpOListPtr leaf_olist() const
const ExtCommunity * ext_community() const
int CompareTo(const BgpAttr &rhs) const
Address::Family nexthop_family() const
const AsPath4Byte * aspath_4byte() const
as_t aggregator_as4_num() const
size_t cluster_list_length() const
PmsiTunnelPtr pmsi_tunnel_
void set_ext_community(ExtCommunityPtr extcomm)
const Ip4Address & originator_id() const
BgpAttrOrigin::OriginType origin() const
void set_originator_id(Ip4Address originator_id)
const EthernetSegmentId & esi() const
int max_as_path_count() const
const PmsiTunnel * pmsi_tunnel() const
const As4Path * as4_path() const
bool atomic_aggregate() const
void set_olist(const BgpOListSpec *olist_spec)
void set_pmsi_tunnel(const PmsiTunnelSpec *pmsi_spec)
friend void intrusive_ptr_release(const BgpAttr *cattrp)
BgpOListDB(BgpServer *server)
bool operator<(const BgpOListElem &rhs) const
std::vector< std::string > encap
BgpOListElem(Ip4Address address, uint32_t label, std::vector< std::string > encap=std::vector< std::string >())
friend std::size_t hash_value(const BgpOList &olist)
const BgpOListSpec & olist() const
BgpOList(BgpOListDB *olist_db, const BgpOListSpec &olist_spec)
friend void intrusive_ptr_release(const BgpOList *colist)
const Elements & elements() const
friend int intrusive_ptr_add_ref(const BgpOList *colist)
int CompareTo(const BgpOList &rhs) const
std::vector< BgpOListElem * > Elements
tbb::atomic< int > refcount_
friend int intrusive_ptr_del_ref(const BgpOList *colist)
ClusterListDB(BgpServer *server)
friend void intrusive_ptr_release(const ClusterList *ccluster_list)
tbb::atomic< int > refcount_
friend std::size_t hash_value(const ClusterList &cluster_list)
ClusterListDB * cluster_list_db_
const ClusterListSpec & cluster_list() const
int CompareTo(const ClusterList &rhs) const
friend int intrusive_ptr_del_ref(const ClusterList *ccluster_list)
friend int intrusive_ptr_add_ref(const ClusterList *ccluster_list)
ClusterList(ClusterListDB *cluster_list_db, const ClusterListSpec &spec)
EdgeDiscoveryDB(BgpServer *server)
EdgeDiscoveryDB * edge_discovery_db_
friend int intrusive_ptr_add_ref(const EdgeDiscovery *ediscovery)
EdgeDiscovery(EdgeDiscoveryDB *edge_discovery_db, const EdgeDiscoverySpec &edspec)
friend std::size_t hash_value(const EdgeDiscovery &edge_discovery)
friend int intrusive_ptr_del_ref(const EdgeDiscovery *ediscovery)
EdgeDiscoverySpec edspec_
friend void intrusive_ptr_release(const EdgeDiscovery *ediscovery)
std::vector< Edge * > EdgeList
const EdgeDiscoverySpec & edge_discovery() const
int CompareTo(const EdgeDiscovery &rhs) const
tbb::atomic< int > refcount_
EdgeForwardingDB(BgpServer *server)
tbb::atomic< int > refcount_
friend std::size_t hash_value(const EdgeForwarding &edge_forwarding)
virtual ~EdgeForwarding()
friend void intrusive_ptr_release(const EdgeForwarding *ceforwarding)
const EdgeForwardingSpec & edge_forwarding() const
EdgeForwarding(EdgeForwardingDB *edge_forwarding_db, const EdgeForwardingSpec &efspec)
int CompareTo(const EdgeForwarding &rhs) const
EdgeForwardingSpec efspec_
friend int intrusive_ptr_del_ref(const EdgeForwarding *ceforwarding)
std::vector< Edge * > EdgeList
friend int intrusive_ptr_add_ref(const EdgeForwarding *ceforwarding)
EdgeForwardingDB * edge_forwarding_db_
PmsiTunnelDB(BgpServer *server)
PmsiTunnel(PmsiTunnelDB *pmsi_tunnel_db, const PmsiTunnelSpec &pmsi_spec)
const uint8_t tunnel_flags() const
friend void intrusive_ptr_release(const PmsiTunnel *cpmsi_tunnel)
uint32_t GetLabel(const ExtCommunity *ext) const
const PmsiTunnelSpec & pmsi_tunnel() const
PmsiTunnelSpec pmsi_spec_
PmsiTunnelDB * pmsi_tunnel_db_
friend std::size_t hash_value(const PmsiTunnel &pmsi_tunnel)
int CompareTo(const PmsiTunnel &rhs) const
const uint32_t label() const
const uint8_t tunnel_type() const
tbb::atomic< int > refcount_
friend int intrusive_ptr_add_ref(const PmsiTunnel *cpmsi_tunnel)
const Ip4Address identifier() const
friend int intrusive_ptr_del_ref(const PmsiTunnel *cpmsi_tunnel)
boost::intrusive_ptr< LabelBlock > LabelBlockPtr
virtual std::string ToString() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual void ToCanonical(BgpAttr *attr)
BgpAttr4ByteAggregator(uint32_t as_num, uint32_t address)
static const uint8_t kFlags
BgpAttr4ByteAggregator(const BgpAttribute &rhs)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual void ToCanonical(BgpAttr *attr)
static const uint8_t kFlags
BgpAttrAggregator(const BgpAttribute &rhs)
virtual std::string ToString() const
BgpAttrAggregator(uint32_t as_num, uint32_t address)
virtual void ToCanonical(BgpAttr *attr)
BgpAttrAs4Aggregator(uint32_t as_num, uint32_t address)
BgpAttrAs4Aggregator(const BgpAttribute &rhs)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
static const uint8_t kFlags
virtual std::string ToString() const
BgpAttrAtomicAggregate(const BgpAttribute &rhs)
virtual void ToCanonical(BgpAttr *attr)
virtual std::string ToString() const
static const uint8_t kFlags
bool operator()(const BgpAttr *lhs, const BgpAttr *rhs)
virtual void ToCanonical(BgpAttr *attr)
BgpAttrEsi(const EthernetSegmentId &esi)
BgpAttrEsi(const BgpAttribute &rhs)
virtual std::string ToString() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
virtual void ToCanonical(BgpAttr *attr)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
LabelBlockPtr label_block
BgpAttrLabelBlock(const BgpAttribute &rhs)
BgpAttrLabelBlock(LabelBlockPtr label_block)
BgpAttrLocalPref(const BgpAttribute &rhs)
BgpAttrLocalPref(uint32_t local_pref)
static const int kDefault
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
static const uint8_t kFlags
virtual void ToCanonical(BgpAttr *attr)
static const uint8_t kFlags
BgpAttrMultiExitDisc(uint32_t med)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual void ToCanonical(BgpAttr *attr)
BgpAttrMultiExitDisc(const BgpAttribute &rhs)
virtual std::string ToString() const
BgpAttrNextHop(uint32_t nexthop)
BgpAttrNextHop(Ip4Address v4_nexthop)
virtual void ToCanonical(BgpAttr *attr)
static const uint8_t kFlags
BgpAttrNextHop(IpAddress ip_nexthop)
BgpAttrNextHop(Ip6Address v6_nexthop)
virtual std::string ToString() const
BgpAttrNextHop(const BgpAttribute &rhs)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
BgpAttrOrigin(int origin)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
BgpAttrOrigin(const BgpAttribute &rhs)
static const uint8_t kFlags
virtual void ToCanonical(BgpAttr *attr)
virtual std::string ToString() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
static const uint8_t kFlags
BgpAttrOriginatorId(const BgpAttribute &rhs)
BgpAttrOriginatorId(uint32_t originator_id)
virtual void ToCanonical(BgpAttr *attr)
virtual void ToCanonical(BgpAttr *attr)
BgpAttrParams(const BgpAttribute &rhs)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
BgpAttrParams(uint64_t params)
BgpAttrSourceRd(const BgpAttribute &rhs)
virtual void ToCanonical(BgpAttr *attr)
virtual std::string ToString() const
BgpAttrSourceRd(const RouteDistinguisher &source_rd)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
RouteDistinguisher source_rd
virtual void ToCanonical(BgpAttr *attr)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
BgpAttrSubProtocol(const std::string &sbp)
BgpAttrSubProtocol(const BgpAttribute &rhs)
BgpAttrUnknown(const BgpAttribute &rhs)
std::vector< uint8_t > value
virtual int CompareTo(const BgpAttribute &rhs_attr) const
BgpMpNlri(BgpAttribute::Code code, uint16_t afi, uint8_t safi)
static const uint8_t kFlags
virtual size_t EncodeLength() const
BgpMpNlri(const BgpAttribute &rhs)
std::vector< BgpProtoPrefix * > nlri
std::vector< uint8_t > nexthop
virtual void ToCanonical(BgpAttr *attr)
BgpMpNlri(BgpAttribute::Code code, uint16_t afi, uint8_t safi, std::vector< uint8_t > nh)
BgpMpNlri(BgpAttribute::Code code)
bool operator()(const BgpOList *lhs, const BgpOList *rhs)
bool operator()(const BgpOListElem *lhs, const BgpOListElem *rhs)
std::vector< BgpOListElem > Elements
virtual void ToCanonical(BgpAttr *attr)
BgpOListSpec(uint8_t subcode)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
bool operator()(const ClusterList *lhs, const ClusterList *rhs)
bool ClusterListLoop(uint32_t cluster_id) const
ClusterListSpec(const ClusterListSpec &rhs)
virtual void ToCanonical(BgpAttr *attr)
virtual std::string ToString() const
ClusterListSpec(const BgpAttribute &rhs)
virtual int CompareTo(const BgpAttribute &rhs) const
static const uint8_t kFlags
std::vector< uint32_t > cluster_list
bool operator()(const EdgeDiscovery *lhs, const EdgeDiscovery *rhs)
void SetLabels(uint32_t first_label, uint32_t last_label)
void SetIp4Address(Ip4Address addr)
void GetLabels(uint32_t *first_label, uint32_t *last_label) const
Ip4Address GetIp4Address() const
std::vector< uint8_t > address
std::vector< uint32_t > labels
static const uint8_t kFlags
virtual void ToCanonical(BgpAttr *attr)
virtual size_t EncodeLength() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
std::vector< Edge * > EdgeList
virtual std::string ToString() const
bool operator()(const Edge *lhs, const Edge *rhs)
LabelBlockPtr label_block
Edge(const EdgeDiscoverySpec::Edge *edge_spec)
bool operator<(const Edge &rhs) const
bool operator()(const EdgeForwarding *lhs, const EdgeForwarding *rhs)
Ip4Address GetOutboundIp4Address() const
std::vector< uint8_t > inbound_address
void SetOutboundIp4Address(Ip4Address addr)
void SetInboundIp4Address(Ip4Address addr)
Ip4Address GetInboundIp4Address() const
std::vector< uint8_t > outbound_address
virtual void ToCanonical(BgpAttr *attr)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
std::vector< Edge * > EdgeList
static const uint8_t kFlags
virtual size_t EncodeLength() const
virtual std::string ToString() const
bool operator()(const Edge *lhs, const Edge *rhs)
Edge(const EdgeForwardingSpec::Edge *edge_spec)
bool operator<(const Edge &rhs) const
Ip4Address outbound_address
Ip4Address inbound_address
bool operator()(const PmsiTunnel *lhs, const PmsiTunnel *rhs)
std::string GetTunnelArTypeString() const
std::string GetTunnelTypeString() const
static const uint8_t kFlags
std::vector< std::string > GetTunnelFlagsStrings() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
@ AssistedReplicationType
@ EdgeReplicationSupported
virtual void ToCanonical(BgpAttr *attr)
Ip4Address GetIdentifier() const
std::vector< uint8_t > identifier
virtual std::string ToString() const
uint32_t GetLabel(const ExtCommunity *ext) const
@ AssistedReplicationContrail
void SetIdentifier(Ip4Address identifier)
void SetLabel(uint32_t label, const ExtCommunity *ext)
void STLDeleteValues(Container *container)
#define BOOL_KEY_COMPARE(x, y)