23 if (ret != 0)
return ret;
34 snprintf(repr,
sizeof(repr),
"ORIGIN <code: %d, flags: %02x> : %02x",
41 if (ret != 0)
return ret;
43 static_cast<const BgpAttrNextHop &>(rhs_attr).
nexthop);
57 snprintf(repr,
sizeof(repr),
"NEXTHOP <code: %d, flags: %02x> : %04x",
64 if (ret != 0)
return ret;
74 snprintf(repr,
sizeof(repr),
"MED <code: %d, flags: %02x> : %d",
81 if (ret != 0)
return ret;
83 static_cast<const BgpAttrLocalPref &>(rhs_attr).
local_pref);
92 snprintf(repr,
sizeof(repr),
"LOCAL_PREF <code: %d, flags: %02x> : %d",
103 snprintf(repr,
sizeof(repr),
"ATOMIC_AGGR <code: %d, flags: %02x>",
110 if (ret != 0)
return ret;
112 static_cast<const BgpAttr4ByteAggregator &>(rhs_attr).
as_num);
114 static_cast<const BgpAttr4ByteAggregator &>(rhs_attr).
address);
123 snprintf(repr,
sizeof(repr),
124 "Aggregator <code: %d, flags: %02x> : %d:%08x",
131 if (ret != 0)
return ret;
133 static_cast<const BgpAttrAggregator &>(rhs_attr).
as_num);
135 static_cast<const BgpAttrAggregator &>(rhs_attr).
address);
144 snprintf(repr,
sizeof(repr),
145 "Aggregator <code: %d, flags: %02x> : %d:%08x",
152 if (ret != 0)
return ret;
154 static_cast<const BgpAttrAs4Aggregator &>(rhs_attr).
as_num);
156 static_cast<const BgpAttrAs4Aggregator &>(rhs_attr).
address);
165 snprintf(repr,
sizeof(repr),
166 "Aggregator <code: %d, flags: %02x> : %d:%08x",
173 if (ret != 0)
return ret;
175 static_cast<const BgpAttrOriginatorId &>(rhs_attr).
originator_id);
185 snprintf(repr,
sizeof(repr),
"OriginatorId <code: %d, flags: 0x%02x> : %s",
202 if (ret != 0)
return ret;
204 static_cast<const ClusterListSpec &>(rhs_attr).
cluster_list);
213 std::stringstream repr;
214 repr <<
"CLUSTER_LIST <code: " << int(
code);
215 repr <<
", flags: 0x" << std::hex << int(
flags) <<
"> :";
216 for (vector<uint32_t>::const_iterator iter =
cluster_list.begin();
224 for (vector<uint32_t>::const_iterator iter =
cluster_list.begin();
226 if (*iter == cluster_id)
234 : cluster_list_db_(cluster_list_db),
248 if (ret != 0)
return ret;
255 for (
size_t i = 0; i <
nlri.size(); i++) {
271 for (vector<BgpProtoPrefix*>::const_iterator iter =
nlri.begin();
272 iter !=
nlri.end(); ++iter) {
276 bytes = (*iter)->prefixlen;
278 bytes = ((*iter)->prefixlen + 7) / 8;
287 tunnel_flags(0), tunnel_type(0), label(0) {
291 :
BgpAttribute(rhs), tunnel_flags(0), tunnel_type(0), label(0) {
296 if (ret != 0)
return ret;
310 std::ostringstream oss;
311 oss <<
"PmsiTunnel <code: " << int(
code);
312 oss <<
", flags: 0x" << std::hex << int(
flags) << std::dec <<
">";
313 oss <<
" Tunnel Flags: 0x" << std::hex << int(
tunnel_flags) << std::dec;
315 oss <<
" Label: 0x" << std::hex << int(
label) << std::dec;
316 oss <<
" (" << int(
label) <<
")";
331 label = (is_vni ? in_label : (in_label << 4 | 0x01));
342 const Ip4Address::bytes_type &bytes = in_identifier.to_bytes();
343 std::copy(bytes.begin(), bytes.begin() + 4,
identifier.begin());
349 return "RsvpP2mpLsp";
357 return "BidirPimTree";
359 return "IngressReplication";
361 return "MldpMp2mpLsp";
363 return "AssistedReplication";
367 std::ostringstream oss;
377 return "ARReplicator";
387 vector<string>
flags;
389 flags.push_back(
"LeafInfoRequired");
392 flags.push_back(
"EdgeReplicationSupported");
395 flags.push_back(
"None");
402 : pmsi_tunnel_db_(pmsi_tunnel_db),
403 pmsi_spec_(pmsi_spec) {
435 for (
size_t i = 0; i < rhs.
edge_list.size(); i++) {
451 address.resize(4, 0);
452 const Ip4Address::bytes_type &addr_bytes = addr.to_bytes();
453 std::copy(addr_bytes.begin(), addr_bytes.begin() + 4, address.begin());
457 uint32_t *first_label, uint32_t *last_label)
const {
458 *first_label = labels[0];
459 *last_label = labels[1];
463 uint32_t first_label, uint32_t last_label) {
464 labels.push_back(first_label);
465 labels.push_back(last_label);
479 if (ret != 0)
return ret;
493 std::ostringstream oss;
494 oss <<
"EdgeDiscovery <code: " << int(
code);
495 oss <<
", flags: 0x" << std::hex << int(
flags) << std::dec <<
">";
497 for (EdgeList::const_iterator it =
edge_list.begin();
499 const Edge *edge = *it;
500 uint32_t first_label, last_label;
501 edge->
GetLabels(&first_label, &last_label);
502 oss <<
" Edge[" << idx <<
"] = (" << edge->
GetIp4Address() <<
", ";
503 oss << first_label <<
"-" << last_label <<
")";
511 for (EdgeList::const_iterator iter =
edge_list.begin();
514 sz += (*iter)->address.size();
515 sz += (*iter)->labels.size() *
sizeof(uint32_t);
522 uint32_t first_label, last_label;
523 spec_edge->
GetLabels(&first_label, &last_label);
524 label_block =
new LabelBlock(first_label, last_label);
536 : edge_discovery_db_(edge_discovery_db),
539 for (EdgeDiscoverySpec::EdgeList::const_iterator it =
583 for (
size_t i = 0; i < rhs.
edge_list.size(); i++) {
603 inbound_address.resize(4, 0);
604 const Ip4Address::bytes_type &addr_bytes = addr.to_bytes();
605 std::copy(addr_bytes.begin(), addr_bytes.begin() + 4,
606 inbound_address.begin());
610 outbound_address.resize(4, 0);
611 const Ip4Address::bytes_type &addr_bytes = addr.to_bytes();
612 std::copy(addr_bytes.begin(), addr_bytes.begin() + 4,
613 outbound_address.begin());
629 if (ret != 0)
return ret;
643 std::ostringstream oss;
644 oss <<
"EdgeForwarding <code: " << int(
code);
645 oss <<
", flags: 0x" << std::hex << int(
flags) << std::dec <<
">";
647 for (EdgeList::const_iterator it =
edge_list.begin();
649 const Edge *edge = *it;
650 oss <<
" Edge[" << idx <<
"] = (";
662 for (EdgeList::const_iterator iter =
edge_list.begin();
665 sz += (*iter)->inbound_address.size();
666 sz += (*iter)->outbound_address.size();
689 : edge_forwarding_db_(edge_forwarding_db),
692 for (EdgeForwardingSpec::EdgeList::const_iterator it =
735 if (ret != 0)
return ret;
750 std::ostringstream oss;
751 oss <<
"OList <subcode: " << int(
subcode) <<
">";
753 for (Elements::const_iterator it =
elements.begin();
754 it !=
elements.end(); ++it, ++idx) {
756 oss <<
"OList[" << idx <<
"] = (";
757 oss <<
"address: " << elem.
address <<
", ";
758 oss <<
"label: " << elem.
label <<
", ";
759 oss <<
"encap-list:";
761 for (vector<string>::const_iterator e_it = elem.
encap.begin();
762 e_it != elem.
encap.end(); ++e_it, ++eid) {
771 : olist_db_(olist_db),
772 olist_spec_(olist_spec) {
774 for (BgpOListSpec::Elements::const_iterator it =
811 if (ret != 0)
return ret;
823 snprintf(repr,
sizeof(repr),
"LabelBlock <subcode: %d> : %d-%d",
830 if (ret != 0)
return ret;
832 static_cast<const BgpAttrSourceRd &>(rhs_attr).
source_rd);
842 snprintf(repr,
sizeof(repr),
"SourceRd <subcode: %d> : %s",
849 if (ret != 0)
return ret;
860 snprintf(repr,
sizeof(repr),
"Esi <subcode: %d> : %s",
867 if (ret != 0)
return ret;
878 snprintf(repr,
sizeof(repr),
"Params <subcode: %d> : 0x%016jx",
885 if (ret != 0)
return ret;
896 snprintf(repr,
sizeof(repr),
"SubProtocol <subcode: %d> : %s",
902 : attr_db_(NULL), origin_(
BgpAttrOrigin::INCOMPLETE), nexthop_(),
903 med_(0), local_pref_(0), atomic_aggregate_(false),
904 aggregator_as_num_(0), aggregator_as4_num_(0), params_(0) {
910 nexthop_(), med_(0), local_pref_(0), atomic_aggregate_(false),
911 aggregator_as_num_(0), aggregator_as4_num_(0), params_(0) {
919 atomic_aggregate_(false),
920 aggregator_as_num_(0), aggregator_as4_num_(0),
921 aggregator_address_(), params_(0) {
923 for (vector<BgpAttribute *>::const_iterator it = spec.begin();
924 it < spec.end(); it++) {
925 (*it)->ToCanonical(
this);
930 : attr_db_(rhs.attr_db_), origin_(rhs.origin_), nexthop_(rhs.nexthop_),
931 med_(rhs.med_), local_pref_(rhs.local_pref_),
932 atomic_aggregate_(rhs.atomic_aggregate_),
933 aggregator_as_num_(rhs.aggregator_as_num_),
934 aggregator_as4_num_(rhs.aggregator_as4_num_),
935 aggregator_address_(rhs.aggregator_address_),
936 originator_id_(rhs.originator_id_),
937 source_rd_(rhs.source_rd_), esi_(rhs.esi_), params_(rhs.params_),
938 as_path_(rhs.as_path_),
939 aspath_4byte_(rhs.aspath_4byte_),
940 as4_path_(rhs.as4_path_),
941 cluster_list_(rhs.cluster_list_),
942 community_(rhs.community_),
943 ext_community_(rhs.ext_community_),
944 origin_vn_path_(rhs.origin_vn_path_),
945 pmsi_tunnel_(rhs.pmsi_tunnel_),
946 edge_discovery_(rhs.edge_discovery_),
947 edge_forwarding_(rhs.edge_forwarding_),
948 label_block_(rhs.label_block_),
950 leaf_olist_(rhs.leaf_olist_),
951 sub_protocol_(rhs.sub_protocol_) {
1074 if (leaf_olist_spec) {
1084 return as_count > as4_count ? as_count : as4_count;
1104 return "incomplete";
1111 const string &bgp_origin_type) {
1112 if(bgp_origin_type ==
"IGP"){
1114 }
else if( bgp_origin_type ==
"EGP") {
1143 for (ExtCommunity::ExtCommunityList::const_iterator it =
1157 for (ExtCommunity::ExtCommunityList::const_iterator it =
1171 for (ExtCommunity::ExtCommunityList::const_iterator it =
1176 return etree.
leaf();
1185 for (ExtCommunity::ExtCommunityList::const_iterator it =
1199 for (ExtCommunity::ExtCommunityList::const_iterator it =
1215 if (
as_path() &&
as_path()->path().AsPathLoop(asn, max_loop_count)) {
1219 aspath_4byte()->path().AsPathLoop(asn, max_loop_count)) {
1223 as4_path()->path().AsPathLoop(asn, max_loop_count)) {
1262 boost::hash_combine(hash, attr.
origin_);
1263 boost::hash_combine(hash, attr.
nexthop_.to_string());
1264 boost::hash_combine(hash, attr.
med_);
1271 boost::hash_combine(hash, attr.
params_);
1281 boost::hash_range(hash, attr.
olist_->elements().begin(),
1282 attr.
olist_->elements().end());
1285 boost::hash_range(hash, attr.
leaf_olist_->elements().begin(),
1347 uint32_t local_pref) {
1397 const string &sbp) {
virtual ~EdgeForwarding()
tbb::atomic< int > refcount_
EdgeForwardingDB * edge_forwarding_db()
boost::intrusive_ptr< const AsPath > AsPathPtr
EdgeDiscoveryPtr edge_discovery_
void SetIp4Address(Ip4Address addr)
BgpAttrPtr ReplaceLeafOListAndLocate(const BgpAttr *attr, const BgpOListSpec *leaf_olist_spec)
virtual void ToCanonical(BgpAttr *attr)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
std::vector< std::string > encap
Ip4Address GetIdentifier() const
Ip4Address GetInboundIp4Address() const
const BgpOListSpec & olist() const
tbb::atomic< int > refcount_
std::vector< BgpProtoPrefix * > nlri
int operator()(const EdgeForwardingSpec::Edge *lhs, const EdgeForwardingSpec::Edge *rhs) const
tbb::atomic< int > refcount_
int operator()(const EdgeDiscovery::Edge *lhs, const EdgeDiscovery::Edge *rhs) const
EdgeForwarding(EdgeForwardingDB *edge_forwarding_db, const EdgeForwardingSpec &efspec)
void STLDeleteValues(Container *container)
BgpAttrPtr ReplaceOriginatorIdAndLocate(const BgpAttr *attr, Ip4Address originator_id)
ExtCommunityPtr ext_community_
int operator()(const EdgeForwarding::Edge *lhs, const EdgeForwarding::Edge *rhs) const
void set_pmsi_tunnel(const PmsiTunnelSpec *pmsi_spec)
TypePtr Locate(Type *attr)
LabelBlockPtr label_block() const
std::vector< uint8_t > outbound_address
void GetLabels(uint32_t *first_label, uint32_t *last_label) const
virtual std::string ToString() const
virtual size_t EncodeLength() const
void set_nexthop(IpAddress nexthop)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual void ToCanonical(BgpAttr *attr)
std::vector< std::string > GetTunnelFlagsStrings() const
std::string sub_protocol_
BgpAttrPtr ReplaceCommunityAndLocate(const BgpAttr *attr, CommunityPtr community)
void set_cluster_list(const ClusterListSpec *spec)
tbb::atomic< int > refcount_
boost::intrusive_ptr< const As4Path > As4PathPtr
RouteDistinguisher source_rd_
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
void set_origin(BgpAttrOrigin::OriginType org)
#define KEY_COMPARE(x, y)
virtual void ToCanonical(BgpAttr *attr)
boost::asio::ip::address IpAddress
static const MacAddress kZeroMac
EdgeDiscovery(EdgeDiscoveryDB *edge_discovery_db, const EdgeDiscoverySpec &edspec)
PmsiTunnelSpec pmsi_spec_
std::vector< uint8_t > address
PmsiTunnel(PmsiTunnelDB *pmsi_tunnel_db, const PmsiTunnelSpec &pmsi_spec)
void SetOutboundIp4Address(Ip4Address addr)
virtual std::string ToString() const
int CompareTo(const EdgeForwarding &rhs) const
EdgeForwardingSpec efspec_
IpAddress aggregator_address_
boost::intrusive_ptr< LabelBlock > LabelBlockPtr
BgpAttrPtr ReplaceNexthopAndLocate(const BgpAttr *attr, const IpAddress &addr)
OriginVnPathPtr origin_vn_path_
virtual std::string ToString() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
LabelBlockPtr label_block
void set_edge_discovery(const EdgeDiscoverySpec *edspec)
void set_community(CommunityPtr comm)
std::vector< BgpAttribute * > BgpAttrSpec
virtual int CompareTo(const BgpAttribute &rhs_attr) const
virtual std::string ToString() const
virtual std::string ToString() const
virtual std::string ToString() const
Edge(const EdgeDiscoverySpec::Edge *edge_spec)
static uint64_t get_value(const uint8_t *data, int size)
PmsiTunnelDB * pmsi_tunnel_db()
EdgeDiscoveryDB * edge_discovery_db()
std::string origin_string() const
tbb::atomic< int > refcount_
std::vector< uint32_t > cluster_list
virtual void ToCanonical(BgpAttr *attr)
virtual std::string ToString() const
virtual void ToCanonical(BgpAttr *attr)
AsPath4ByteDB * aspath_4byte_db()
void set_as_path(AsPathPtr aspath)
void set_source_rd(const RouteDistinguisher &source_rd)
OriginVnPathDB * ovnpath_db()
Ip4Address originator_id_
BgpAttrPtr ReplaceExtCommunityAndLocate(const BgpAttr *attr, ExtCommunityPtr extcomm)
virtual std::string ToString() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
void set_aggregator(as_t as_num, IpAddress address)
bool operator<(const Edge &rhs) const
virtual size_t EncodeLength() const
int IsAsPathLoop(as_t asn, uint8_t max_loop_count=0) const
MacAddress mac_address() const
boost::intrusive_ptr< const OriginVnPath > OriginVnPathPtr
virtual int CompareTo(const BgpAttribute &rhs) const
virtual void ToCanonical(BgpAttr *attr)
boost::intrusive_ptr< const AsPath4Byte > AsPath4BytePtr
virtual int CompareTo(const BgpAttribute &rhs_attr) const
void set_sub_protocol(const std::string &sub_protocol)
Ip4Address GetIp4Address() const
void set_esi(const EthernetSegmentId &esi)
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
Ip4Address inbound_address
virtual void ToCanonical(BgpAttr *attr)
virtual std::string ToString() const
Ip4Address GetOutboundIp4Address() const
bool single_active() const
void SetInboundIp4Address(Ip4Address addr)
void set_params(uint64_t params)
MacAddress mac_address() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
BgpAttrPtr ReplaceEsiAndLocate(const BgpAttr *attr, const EthernetSegmentId &esi)
void set_leaf_olist(const BgpOListSpec *leaf_olist_spec)
const AsPath4Byte * aspath_4byte() const
PmsiTunnelPtr pmsi_tunnel_
#define BOOL_KEY_COMPARE(x, y)
bool evpn_single_active() const
BgpAttrOrigin::OriginType origin_
virtual int CompareTo(const BgpAttribute &rhs) const
static std::string OriginToString(BgpAttrOrigin::OriginType origin)
bool operator<(const Edge &rhs) const
ExtCommunityDB * extcomm_db()
virtual int CompareTo(const BgpAttribute &rhs_attr) const
void SetLabels(uint32_t first_label, uint32_t last_label)
virtual void ToCanonical(BgpAttr *attr)
virtual void ToCanonical(BgpAttr *attr)
int CompareTo(const EdgeDiscovery &rhs) const
BgpAttrPtr ReplaceSubProtocolAndLocate(const BgpAttr *attr, const std::string &sbp)
ClusterList(ClusterListDB *cluster_list_db, const ClusterListSpec &spec)
std::string GetTunnelArTypeString() const
void SetIdentifier(Ip4Address identifier)
BgpAttrPtr ReplaceLocalPreferenceAndLocate(const BgpAttr *attr, uint32_t local_pref)
int CompareTo(const BgpAttr &rhs) const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
EdgeDiscoveryDB(BgpServer *server)
BgpAttrPtr ReplaceSourceRdAndLocate(const BgpAttr *attr, const RouteDistinguisher &source_rd)
BgpOList(BgpOListDB *olist_db, const BgpOListSpec &olist_spec)
virtual std::string ToString() const
virtual std::string ToString() const
const As4Path * as4_path() const
ClusterListDB * cluster_list_db()
virtual std::string ToString() const
virtual void ToCanonical(BgpAttr *attr)
virtual void ToCanonical(BgpAttr *attr)
ClusterListDB(BgpServer *server)
bool IsAsPathEmpty() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
BgpAttrPtr ReplaceOriginAndLocate(const BgpAttr *attr, BgpAttrOrigin::OriginType origin)
uint32_t sequence_number() const
void SetLabel(uint32_t label, const ExtCommunity *ext)
virtual std::string ToString() const
BgpAttrPtr ReplacePmsiTunnelAndLocate(const BgpAttr *attr, const PmsiTunnelSpec *pmsi_spec)
boost::asio::ip::address_v4 Ip4Address
const AsPath * as_path() const
void set_local_pref(uint32_t local_pref)
int STLSortedCompare(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2, CompareOp op)
std::vector< uint8_t > identifier
virtual std::string ToString() const
void set_edge_forwarding(const EdgeForwardingSpec *efspec)
EdgeDiscoveryDB * edge_discovery_db_
void set_originator_id(Ip4Address originator_id)
virtual void ToCanonical(BgpAttr *attr)
static BgpAttrOrigin::OriginType OriginFromString(const std::string &bgp_origin_type)
Address::Family nexthop_family() const
void set_label_block(LabelBlockPtr label_block)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
BgpOListDB(BgpServer *server)
BgpAttrPtr ReplaceAsPathAndLocate(const BgpAttr *attr, AsPathPtr aspath)
Ip4Address outbound_address
const Elements & elements() const
BgpAttrPtr ReplaceOListAndLocate(const BgpAttr *attr, const BgpOListSpec *olist_spec)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
PmsiTunnelDB(BgpServer *server)
int max_as_path_count() const
virtual size_t EncodeLength() const
BgpAttrOrigin::OriginType origin() const
ClusterListPtr cluster_list_
std::string ToString() const
virtual void ToCanonical(BgpAttr *attr)
int aspath_4byte_count() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
int operator()(const BgpOListElem *lhs, const BgpOListElem *rhs) const
void set_med(uint32_t med)
std::string ToString() const
EdgeDiscoverySpec edspec_
uint32_t GetLabel(const ExtCommunity *ext) const
LabelBlockPtr label_block_
uint32_t sequence_number() const
std::string GetTunnelTypeString() const
bool operator<(const BgpOListElem &rhs) const
virtual void ToCanonical(BgpAttr *attr)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
void set_ext_community(ExtCommunityPtr extcomm)
int as_path_count() const
int CompareTo(const BgpOList &rhs) const
virtual void ToCanonical(BgpAttr *attr)
Edge(const EdgeForwardingSpec::Edge *edge_spec)
EdgeForwardingPtr edge_forwarding_
void set_origin_vn_path(OriginVnPathPtr ovnpath)
RouteDistinguisher source_rd
void set_olist(const BgpOListSpec *olist_spec)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
bool ClusterListLoop(uint32_t cluster_id) const
std::vector< uint8_t > nexthop
void set_atomic_aggregate(bool ae)
std::size_t hash_value(BgpAttr const &attr)
virtual std::string ToString() const
ClusterListDB * cluster_list_db_
void set_aspath_4byte(AsPath4BytePtr aspath)
virtual void ToCanonical(BgpAttr *attr)
LabelBlockPtr label_block
void set_as4_path(As4PathPtr aspath)
virtual std::string ToString() const
std::vector< uint8_t > inbound_address
tbb::atomic< int > refcount_
virtual std::string ToString() const
EdgeForwardingDB * edge_forwarding_db_
virtual void ToCanonical(BgpAttr *attr)
BgpAttrDB(BgpServer *server)
virtual std::string ToString() const
BgpAttrPtr ReplaceOriginVnPathAndLocate(const BgpAttr *attr, OriginVnPathPtr ovnpath)
virtual void ToCanonical(BgpAttr *attr)
bool evpn_sticky_mac() const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
int operator()(const EdgeDiscoverySpec::Edge *lhs, const EdgeDiscoverySpec::Edge *rhs) const
virtual void ToCanonical(BgpAttr *attr)
uint32_t GetLabel(const ExtCommunity *ext) const
EdgeForwardingDB(BgpServer *server)
AsPath4BytePtr aspath_4byte_
virtual void ToCanonical(BgpAttr *attr)
std::vector< uint32_t > labels
PmsiTunnelDB * pmsi_tunnel_db_
void set_as4_aggregator(as_t as_num, IpAddress address)
virtual int CompareTo(const BgpAttribute &rhs_attr) const