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;
498 #endif // SRC_BGP_BGP_ASPATH_H_
As4Path(As4PathDB *aspath_db, const As4PathSpec &spec)
boost::intrusive_ptr< const AsPath > AsPathPtr
bool AsPathLoop(as2_t as, uint8_t max_loop_count=0) const
int intrusive_ptr_add_ref(const AsPath *cpath)
friend int intrusive_ptr_del_ref(const As4Path *cpath)
virtual size_t EncodeLength() const
friend void intrusive_ptr_release(const AsPath *cpath)
void STLDeleteValues(Container *container)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
friend int intrusive_ptr_del_ref(const AsPath4Byte *cpath)
bool operator()(const AsPath *lhs, const AsPath *rhs)
const AsPathSpec & path() const
static const as_t kMinPrivateAs4
AsPath4ByteSpec * Replace(as_t old_asn, as_t asn) const
int CompareTo(const As4Path &rhs) const
boost::intrusive_ptr< const As4Path > As4PathPtr
bool AsLeftMostMatch(as_t as) const
std::vector< PathSegment * > path_segments
AsPathSpec * Add(as2_t asn) const
#define KEY_COMPARE(x, y)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
tbb::atomic< int > refcount_
as_t AsLeftMostPublic() const
virtual void ToCanonical(BgpAttr *attr)
friend std::size_t hash_value(As4Path const &as_path)
std::vector< as_t > path_segment
virtual std::string ToString() const
AsPath(AsPathDB *aspath_db)
AsPath4ByteDB(BgpServer *server)
static const as_t kMaxPrivateAs4
int CompareTo(const PathSegment &rhs) const
virtual void ToCanonical(BgpAttr *attr)
int CompareTo(const PathSegment &rhs) const
As4PathSpec * Add(as_t asn) const
virtual void ToCanonical(BgpAttr *attr)
AsPathSpec(const BgpAttribute &rhs)
boost::intrusive_ptr< const AsPath4Byte > AsPath4BytePtr
std::vector< PathSegment * > path_segments
int CompareTo(const AsPath4Byte &rhs) const
static bool AsIsPrivate(as_t as)
As4PathSpec(const BgpAttribute &rhs)
as_t AsLeftMostPublic() const
friend std::size_t hash_value(const AsPath4Byte &as_path)
AsPathSpec * RemovePrivate(bool all, as2_t asn, as2_t peer_as) const
friend int intrusive_ptr_del_ref(const AsPath *cpath)
bool AsLeftMostMatch(as2_t as) const
int CompareTo(const PathSegment &rhs) const
As4PathDB(BgpServer *server)
bool AsPathLoop(as_t as, uint8_t max_loop_count=0) const
tbb::atomic< int > refcount_
As4PathSpec(const As4PathSpec &rhs)
As4PathSpec * RemovePrivate(bool all, as_t asn, as_t peer_as) const
bool operator()(const As4Path *lhs, const As4Path *rhs)
virtual int CompareTo(const BgpAttribute &rhs_attr) const
static const as_t kMinPrivateAs4
friend std::size_t hash_value(const AsPath &as_path)
AsPath4ByteSpec * Add(as_t asn) const
virtual std::string ToString() const
static bool AsIsPrivate(as2_t as)
bool AsPathLoop(as_t as, uint8_t max_loop_count=0) const
static const uint8_t kFlags
static const as_t kMinPrivateAs
std::vector< as_t > path_segment
bool AsLeftMostMatch(as_t as) const
int intrusive_ptr_del_ref(const AsPath *cpath)
as2_t neighbor_as() const
bool operator()(const AsPath4Byte *lhs, const AsPath4Byte *rhs)
const AsPath4ByteSpec & path() const
static bool AsIsPrivate(as_t as)
AsPath(AsPathDB *aspath_db, const AsPathSpec &spec)
AsPath4ByteSpec * RemovePrivate(bool all, as_t asn, as_t peer_as) const
static const uint8_t kFlags
static const as2_t kMaxPrivateAs
AsPathSpec(const AsPathSpec &rhs)
AsPathDB(BgpServer *server)
virtual size_t EncodeLength() const
void intrusive_ptr_release(const AsPath *cpath)
static const uint8_t kFlags
const As4PathSpec & path() const
friend int intrusive_ptr_add_ref(const AsPath4Byte *cpath)
AsPath4Byte(AsPath4ByteDB *aspath_db, const AsPath4ByteSpec &spec)
AsPath4ByteSpec(const AsPath4ByteSpec &rhs)
AsPath4Byte(AsPath4ByteDB *aspath_db)
virtual size_t EncodeLength() const
std::vector< as2_t > path_segment
static const as_t kMaxPrivateAs
std::vector< PathSegment * > path_segments
virtual std::string ToString() const
tbb::atomic< int > refcount_
AsPathSpec * Replace(as2_t old_asn, as2_t asn) const
AsPath4ByteSpec(const BgpAttribute &rhs)
friend int intrusive_ptr_add_ref(const As4Path *cpath)
friend void intrusive_ptr_release(const AsPath4Byte *cpath)
friend int intrusive_ptr_add_ref(const AsPath *cpath)
int CompareTo(const AsPath &rhs) const
friend void intrusive_ptr_release(const As4Path *cpath)
static const as_t kMinPrivateAs
as2_t AsLeftMostPublic() const
static const as_t kMaxPrivateAs4
static const as_t kMaxPrivateAs
As4Path(As4PathDB *aspath_db)
AsPath4ByteDB * aspath_db_
static const as2_t kMinPrivateAs
As4PathSpec * Replace(as_t old_asn, as_t asn) const