5 #ifndef SRC_BGP_BGP_ASPATH_H_
6 #define SRC_BGP_BGP_ASPATH_H_
8 #include <boost/intrusive_ptr.hpp>
9 #include <tbb/atomic.h>
72 virtual std::string
ToString()
const;
101 std::vector<AsPathSpec::PathSegment *>::const_iterator i;
107 count += (*i)->path_segment.size();
115 const std::vector<AsPathSpec::PathSegment *> &rps =
120 std::vector<AsPathSpec::PathSegment *>::const_iterator i, j;
121 for (i = lps.begin(), j = rps.begin(); i < lps.end(); i++, j++) {
122 int ret = (*i)->CompareTo(**j);
123 if (ret != 0)
return ret;
148 return cpath->
refcount_.fetch_and_increment();
152 return cpath->
refcount_.fetch_and_decrement();
156 int prev = cpath->
refcount_.fetch_and_decrement();
174 AsPathCompare, AsPathDB> {
229 virtual std::string
ToString()
const;
257 std::vector<AsPath4ByteSpec::PathSegment *>::const_iterator i;
260 if ((*i)->path_segment_type ==
264 count += (*i)->path_segment.size();
271 const std::vector<AsPath4ByteSpec::PathSegment *> &lps =
273 const std::vector<AsPath4ByteSpec::PathSegment *> &rps =
278 std::vector<AsPath4ByteSpec::PathSegment *>::const_iterator i, j;
279 for (i = lps.begin(), j = rps.begin(); i < lps.end(); i++, j++) {
280 int ret = (*i)->CompareTo(**j);
281 if (ret != 0)
return ret;
306 return cpath->
refcount_.fetch_and_increment();
310 return cpath->
refcount_.fetch_and_decrement();
314 int prev = cpath->
refcount_.fetch_and_decrement();
332 AsPath4ByteSpec, AsPath4ByteCompare, AsPath4ByteDB> {
389 virtual std::string
ToString()
const;
417 std::vector<As4PathSpec::PathSegment *>::const_iterator i;
423 count += (*i)->path_segment.size();
431 const std::vector<As4PathSpec::PathSegment *> &rps =
436 std::vector<As4PathSpec::PathSegment *>::const_iterator i, j;
437 for (i = lps.begin(), j = rps.begin(); i < lps.end(); i++, j++) {
438 int ret = (*i)->CompareTo(**j);
439 if (ret != 0)
return ret;
464 return cpath->
refcount_.fetch_and_increment();
468 return cpath->
refcount_.fetch_and_decrement();
472 int prev = cpath->
refcount_.fetch_and_decrement();
490 As4PathCompare, As4PathDB> {
497 typedef boost::intrusive_ptr<const As4Path>
As4PathPtr;
void intrusive_ptr_release(const AsPath *cpath)
int intrusive_ptr_del_ref(const AsPath *cpath)
boost::intrusive_ptr< const AsPath4Byte > AsPath4BytePtr
boost::intrusive_ptr< const As4Path > As4PathPtr
int intrusive_ptr_add_ref(const AsPath *cpath)
boost::intrusive_ptr< const AsPath > AsPathPtr
As4PathDB(BgpServer *server)
const As4PathSpec & path() const
friend int intrusive_ptr_add_ref(const As4Path *cpath)
tbb::atomic< int > refcount_
friend void intrusive_ptr_release(const As4Path *cpath)
friend int intrusive_ptr_del_ref(const As4Path *cpath)
int CompareTo(const As4Path &rhs) const
As4Path(As4PathDB *aspath_db, const As4PathSpec &spec)
As4Path(As4PathDB *aspath_db)
friend std::size_t hash_value(As4Path const &as_path)
AsPath4ByteDB(BgpServer *server)
friend void intrusive_ptr_release(const AsPath4Byte *cpath)
const AsPath4ByteSpec & path() const
friend int intrusive_ptr_del_ref(const AsPath4Byte *cpath)
tbb::atomic< int > refcount_
AsPath4Byte(AsPath4ByteDB *aspath_db, const AsPath4ByteSpec &spec)
int CompareTo(const AsPath4Byte &rhs) const
AsPath4Byte(AsPath4ByteDB *aspath_db)
friend int intrusive_ptr_add_ref(const AsPath4Byte *cpath)
friend std::size_t hash_value(const AsPath4Byte &as_path)
AsPath4ByteDB * aspath_db_
AsPathDB(BgpServer *server)
friend void intrusive_ptr_release(const AsPath *cpath)
tbb::atomic< int > refcount_
friend int intrusive_ptr_del_ref(const AsPath *cpath)
AsPath(AsPathDB *aspath_db, const AsPathSpec &spec)
as2_t neighbor_as() const
friend std::size_t hash_value(const AsPath &as_path)
const AsPathSpec & path() const
friend int intrusive_ptr_add_ref(const AsPath *cpath)
AsPath(AsPathDB *aspath_db)
int CompareTo(const AsPath &rhs) const
bool operator()(const As4Path *lhs, const As4Path *rhs)
int CompareTo(const PathSegment &rhs) const
std::vector< as_t > path_segment
As4PathSpec * Replace(as_t old_asn, as_t asn) const
As4PathSpec(const As4PathSpec &rhs)
As4PathSpec * RemovePrivate(bool all, as_t asn, as_t peer_as) const
bool AsLeftMostMatch(as_t as) const
std::vector< PathSegment * > path_segments
virtual std::string ToString() const
As4PathSpec * Add(as_t asn) const
as_t AsLeftMostPublic() const
static const as_t kMaxPrivateAs4
bool AsPathLoop(as_t as, uint8_t max_loop_count=0) const
virtual void ToCanonical(BgpAttr *attr)
static const as_t kMinPrivateAs4
static const as_t kMaxPrivateAs
As4PathSpec(const BgpAttribute &rhs)
virtual size_t EncodeLength() const
static const uint8_t kFlags
As4PathSpec * Add(const std::vector< as_t > &asn_list) const
static bool AsIsPrivate(as_t as)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
static const as_t kMinPrivateAs
bool operator()(const AsPath4Byte *lhs, const AsPath4Byte *rhs)
std::vector< as_t > path_segment
int CompareTo(const PathSegment &rhs) const
AsPath4ByteSpec * Add(const std::vector< as_t > &asn_list) const
static const as_t kMinPrivateAs4
virtual int CompareTo(const BgpAttribute &rhs_attr) const
bool AsPathLoop(as_t as, uint8_t max_loop_count=0) const
virtual std::string ToString() const
static const as_t kMinPrivateAs
virtual size_t EncodeLength() const
AsPath4ByteSpec(const BgpAttribute &rhs)
AsPath4ByteSpec * Add(as_t asn) const
std::vector< PathSegment * > path_segments
static const as_t kMaxPrivateAs4
static const uint8_t kFlags
AsPath4ByteSpec * Replace(as_t old_asn, as_t asn) const
static bool AsIsPrivate(as_t as)
AsPath4ByteSpec * RemovePrivate(bool all, as_t asn, as_t peer_as) const
bool AsLeftMostMatch(as_t as) const
static const as_t kMaxPrivateAs
virtual void ToCanonical(BgpAttr *attr)
AsPath4ByteSpec(const AsPath4ByteSpec &rhs)
as_t AsLeftMostPublic() const
bool operator()(const AsPath *lhs, const AsPath *rhs)
int CompareTo(const PathSegment &rhs) const
std::vector< as2_t > path_segment
virtual size_t EncodeLength() const
AsPathSpec(const BgpAttribute &rhs)
AsPathSpec(const AsPathSpec &rhs)
AsPathSpec * Add(const std::vector< as_t > &asn_list) const
virtual int CompareTo(const BgpAttribute &rhs_attr) const
AsPathSpec * Add(const std::vector< as2_t > &asn_list) const
as2_t AsLeftMostPublic() const
AsPathSpec * Replace(as2_t old_asn, as2_t asn) const
bool AsLeftMostMatch(as2_t as) const
virtual std::string ToString() const
AsPathSpec * Add(as2_t asn) const
static const as2_t kMaxPrivateAs
static const uint8_t kFlags
std::vector< PathSegment * > path_segments
static bool AsIsPrivate(as2_t as)
virtual void ToCanonical(BgpAttr *attr)
bool AsPathLoop(as2_t as, uint8_t max_loop_count=0) const
AsPathSpec * RemovePrivate(bool all, as2_t asn, as2_t peer_as) const
static const as2_t kMinPrivateAs
#define KEY_COMPARE(x, y)
void STLDeleteValues(Container *container)