5 #ifndef vnsw_agent_route_walker_hpp
6 #define vnsw_agent_route_walker_hpp
8 #include <boost/intrusive_ptr.hpp>
9 #include <boost/array.hpp>
13 #include <sandesh/sandesh_trace.h>
69 #define AGENT_DBWALK_TRACE_BUF "AgentDBwalkTrace"
72 #define AGENT_DBWALK_TRACE(obj, ...) do { \
73 obj::TraceMsg(AgentDBwalkTraceBuf, __FILE__, __LINE__, ##__VA_ARGS__); \
83 typedef boost::array<DBTable::DBTableWalkRef, Agent::ROUTE_TABLE_MAX>
RouteWalkRef;
int intrusive_ptr_add_ref(const AsPath *cpath)
boost::array< DBTable::DBTableWalkRef, Agent::ROUTE_TABLE_MAX > RouteWalkRef
void ValidateAgentRouteWalker(AgentRouteWalkerPtr walker) const
RouteWalkerDBState * CreateState(VrfEntry *vrf)
void VrfNotify(DBTablePartBase *partition, DBEntryBase *e)
static void DeregisterDone(AgentRouteWalkerPtr walker)
void WalkDoneCallback(WalkDone cb)
void Callback(VrfEntry *vrf)
void RemoveWalker(AgentRouteWalkerPtr walker)
virtual bool VrfWalkNotify(DBTablePartBase *partition, DBEntryBase *e)
RouteWalkDoneCb route_walk_done_for_vrf_cb_
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge, EVPN (Type2/Type5). This base class contains common code for all types of route tables.
std::map< AgentRouteWalkerPtr, RouteWalkRef > AgentRouteWalkerRefMap
uint32_t refcount() const
void set_mgr(AgentRouteWalkerManager *mgr)
void VrfWalkDoneInternal(DBTableBase *part)
void DecrementWalkCount()
void OnRouteTableWalkCompleteForVrf(VrfEntry *vrf)
AgentRouteWalkerManager * mgr_
virtual ~AgentRouteWalker()
AgentRouteWalker(const std::string &name, Agent *agent)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
bool marked_for_deletion_
std::map< const VrfEntry *, tbb::atomic< int > > VrfRouteWalkCountMap
DBTable::DBTableWalkRef delete_walk_ref_
boost::function< void(VrfEntry *)> RouteWalkDoneCb
bool IsRouteTableWalkCompleted(RouteWalkerDBState *state)
bool Deregister(DBTablePartBase *partition, DBEntryBase *e)
virtual bool RouteWalkNotify(DBTablePartBase *partition, DBEntryBase *e)
virtual void RouteWalkDone(DBTableBase *part)
void RegisterWalker(AgentRouteWalker *walker)
void WalkTable(AgentRouteTable *table, DBTable::DBTableWalkRef &route_table_walk_ref)
bool IsValidVrfWalkRef() const
SandeshTraceBufferPtr AgentDBwalkTraceBuf
DBTable::DBTableWalkRef LocateRouteTableWalkRef(const VrfEntry *vrf, RouteWalkerDBState *state, AgentRouteTable *table)
AgentRouteWalkerRefMap::const_iterator AgentRouteWalkerRefMapConstIter
DBTable::ListenerId vrf_listener_id() const
friend void intrusive_ptr_add_ref(AgentRouteWalker *w)
bool AreAllWalksDone() const
tbb::atomic< uint32_t > refcount_
void StartRouteWalk(VrfEntry *vrf)
AgentRouteWalkerManager * mgr()
AgentRouteWalkerRefMap::iterator AgentRouteWalkerRefMapIter
void RouteWalkDoneForVrfCallback(RouteWalkDoneCb cb)
bool IsWalkCompleted() const
DBTable::DBTableWalkRef vrf_walk_ref_
boost::intrusive_ptr< AgentRouteWalker > AgentRouteWalkerPtr
DBTable::DBTableWalkRef & vrf_walk_ref()
void IncrementWalkCount()
uint8_t walk_ref_list_size() const
void RemoveWalkReferencesInVrf(RouteWalkerDBState *state, VrfEntry *vrf)
static const int kInvalidWalkCount
void DecrementRouteWalkCount(const VrfEntry *vrf)
virtual ~AgentRouteWalkerManager()
std::set< AgentRouteWalkerPtr >::iterator WalkRefListIter
tbb::atomic< int > walk_count_
void ReleaseWalker(AgentRouteWalker *walker)
DBTable::ListenerId vrf_listener_id_
void IncrementRouteWalkCount(const VrfEntry *vrf)
DISALLOW_COPY_AND_ASSIGN(AgentRouteWalkerManager)
DISALLOW_COPY_AND_ASSIGN(AgentRouteWalker)
AgentRouteWalkerManager(Agent *agent)
void intrusive_ptr_release(const AsPath *cpath)
WalkRefList walk_ref_list_
DBTable::DBTableWalkRef & delete_walk_ref()
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
AgentRouteWalkerRefMap walker_ref_map_
void ReleaseVrfWalkReference()
bool AreAllRouteWalksDone(const VrfEntry *vrf) const
virtual void VrfWalkDone(DBTableBase *part)
friend void intrusive_ptr_release(AgentRouteWalker *w)
bool IsDeregisterDone() const
DBTable::DBTableWalkRef AllocateRouteTableReferences(AgentRouteTable *table)
VrfRouteWalkCountMap route_walk_count_
boost::function< void()> WalkDone
std::set< AgentRouteWalkerPtr > WalkRefList
RouteWalkerDBState * LocateRouteWalkerDBState(VrfEntry *vrf)
bool IsValidDeleteWalkRef() const
void RouteWalkDoneInternal(DBTableBase *part, AgentRouteWalkerPtr ptr)