17 using std::unique_ptr;
134 for (ExtCommunity::ExtCommunityList::const_iterator it = v.begin();
135 it != v.end(); ++it) {
136 uint64_t value =
get_value(it->data(), it->size());
143 uint16_t tag_index = 0;
147 uint32_t asn, tid, value;
148 for (LargeCommunity::LargeCommunityList::const_iterator it = v.begin();
149 it != v.end(); ++it) {
151 tid64 = tag_lc.
tag();
152 if ((tid64 & 0xFFFF0000) == 0) {
153 asn = tag_lc.as_number();
154 tid = ((tid64 & 0xFFFF00000000) >> 16) |
158 ext_comm->
communities.push_back(tag.GetExtCommunityValue());
161 Tag tag {tag_index, tid};
162 ext_comm->
communities.push_back(tag.GetExtCommunityValue());
163 ext_comm->
communities.push_back(tag4.GetExtCommunityValue());
169 for (
int i = 0; i < 3; i++) {
184 for (OriginVnPath::OriginVnList::const_iterator it = v.begin();
185 it != v.end(); ++it) {
186 uint64_t value =
get_value(it->data(), it->size());
198 std::vector<uint8_t> nh;
210 nlri->
nlri.push_back(prefix);
216 "Error encoding reach message for route " << route->
ToString() <<
238 nlri->
nlri.push_back(prefix);
244 "Error encoding unreach message for route " << route->
ToString() <<
300 nlri.
nlri.push_back(prefix);
336 const string **msg_str,
string *temp) {
#define BGP_LOG_WARNING_STR(obj, flags, arg)
const As4PathSpec & path() const
const AsPath4ByteSpec & path() const
const AsPathSpec & path() const
static Afi FamilyToAfi(Address::Family family)
static Safi FamilyToSafi(Address::Family family)
uint32_t local_pref() const
const LargeCommunity * large_community() const
const AsPath * as_path() const
const IpAddress & aggregator_adderess() const
const EdgeForwarding * edge_forwarding() const
const ClusterList * cluster_list() const
const OriginVnPath * origin_vn_path() const
const Community * community() const
as_t aggregator_as_num() const
const IpAddress & nexthop() const
const EdgeDiscovery * edge_discovery() const
const ExtCommunity * ext_community() const
const AsPath4Byte * aspath_4byte() const
const Ip4Address & originator_id() const
BgpAttrOrigin::OriginType origin() const
const PmsiTunnel * pmsi_tunnel() const
const As4Path * as4_path() const
bool atomic_aggregate() const
virtual Message * Create() const
virtual bool Start(const RibOut *ribout, bool cache_routes, const RibOutAttr *roattr, const BgpRoute *route)
uint8_t data_[BgpProto::kMaxMessageSize]
virtual const uint8_t * GetData(IPeerUpdate *peer, size_t *lenp, const std::string **msg_str, std::string *temp)
bool StartReach(const RibOut *ribout, const RibOutAttr *roattr, const BgpRoute *route)
bool UpdateLength(const char *tag, int size, int delta)
virtual bool AddRoute(const BgpRoute *route, const RibOutAttr *roattr)
EncodeOffsets encode_offsets_
bool StartUnreach(const BgpRoute *route)
static int Encode(const BgpMessage *msg, uint8_t *data, size_t size, EncodeOffsets *offsets=NULL, bool as4=false)
virtual void BuildProtoPrefix(BgpProtoPrefix *prefix, const BgpAttr *attr=NULL, uint32_t label=0, uint32_t l3_label=0) const
virtual void BuildBgpProtoNextHop(std::vector< uint8_t > &nh, IpAddress nexthop) const
void increment_message_build_error() const
virtual Address::Family family() const =0
const ClusterListSpec & cluster_list() const
virtual std::string ToString() const =0
const std::string & name() const
const EdgeDiscoverySpec & edge_discovery() const
const EdgeForwardingSpec & edge_forwarding() const
int FindOffset(const char *)
uint64_t num_reach_route_
uint64_t num_unreach_route_
std::vector< OriginVnValue > OriginVnList
const OriginVnList & origin_vns() const
const PmsiTunnelSpec & pmsi_tunnel() const
const BgpAttr * attr() const
uint32_t l3_label() const
BgpProto::BgpPeerType peer_type() const
bool as4_supported() const
Represents a single BGP Large Community tag.
uint64_t tag() const
Returns the tag id.
static void put_value(uint8_t *data, int size, uint64_t value)
static uint64_t get_value(const uint8_t *data, int size)
std::vector< BgpProtoPrefix * > nlri
std::vector< BgpAttribute * > path_attributes
std::vector< uint64_t > origin_vns