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;
boost::intrusive_ptr< AgentRouteWalker > AgentRouteWalkerPtr
SandeshTraceBufferPtr AgentDBwalkTraceBuf
void intrusive_ptr_add_ref(AgentRouteWalker *w)
void intrusive_ptr_release(AgentRouteWalker *w)
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge,...
AgentRouteWalkerManager(Agent *agent)
DISALLOW_COPY_AND_ASSIGN(AgentRouteWalkerManager)
RouteWalkerDBState * CreateState(VrfEntry *vrf)
WalkRefList walk_ref_list_
void RemoveWalkReferencesInVrf(RouteWalkerDBState *state, VrfEntry *vrf)
void ReleaseWalker(AgentRouteWalker *walker)
DBTable::ListenerId vrf_listener_id_
virtual ~AgentRouteWalkerManager()
void RemoveWalker(AgentRouteWalkerPtr walker)
uint8_t walk_ref_list_size() const
void RegisterWalker(AgentRouteWalker *walker)
void ValidateAgentRouteWalker(AgentRouteWalkerPtr walker) const
DBTable::ListenerId vrf_listener_id() const
std::set< AgentRouteWalkerPtr > WalkRefList
std::set< AgentRouteWalkerPtr >::iterator WalkRefListIter
bool marked_for_deletion_
void VrfNotify(DBTablePartBase *partition, DBEntryBase *e)
DISALLOW_COPY_AND_ASSIGN(AgentRouteWalker)
RouteWalkDoneCb route_walk_done_for_vrf_cb_
void RouteWalkDoneForVrfCallback(RouteWalkDoneCb cb)
virtual bool RouteWalkNotify(DBTablePartBase *partition, DBEntryBase *e)
bool AreAllWalksDone() const
void RouteWalkDoneInternal(DBTableBase *part, AgentRouteWalkerPtr ptr)
DBTable::DBTableWalkRef AllocateRouteTableReferences(AgentRouteTable *table)
RouteWalkerDBState * LocateRouteWalkerDBState(VrfEntry *vrf)
bool IsRouteTableWalkCompleted(RouteWalkerDBState *state)
tbb::atomic< uint32_t > refcount_
AgentRouteWalkerManager * mgr_
void StartRouteWalk(VrfEntry *vrf)
AgentRouteWalker(const std::string &name, Agent *agent)
bool IsValidVrfWalkRef() const
void IncrementRouteWalkCount(const VrfEntry *vrf)
DBTable::DBTableWalkRef delete_walk_ref_
bool Deregister(DBTablePartBase *partition, DBEntryBase *e)
void WalkTable(AgentRouteTable *table, DBTable::DBTableWalkRef &route_table_walk_ref)
bool IsDeregisterDone() const
boost::function< void(VrfEntry *)> RouteWalkDoneCb
virtual void VrfWalkDone(DBTableBase *part)
DBTable::DBTableWalkRef & vrf_walk_ref()
virtual ~AgentRouteWalker()
bool IsValidDeleteWalkRef() const
void OnRouteTableWalkCompleteForVrf(VrfEntry *vrf)
virtual bool VrfWalkNotify(DBTablePartBase *partition, DBEntryBase *e)
DBTable::DBTableWalkRef & delete_walk_ref()
friend void intrusive_ptr_add_ref(AgentRouteWalker *w)
void Callback(VrfEntry *vrf)
static void DeregisterDone(AgentRouteWalkerPtr walker)
DBTable::DBTableWalkRef vrf_walk_ref_
VrfRouteWalkCountMap route_walk_count_
void DecrementRouteWalkCount(const VrfEntry *vrf)
std::map< const VrfEntry *, tbb::atomic< int > > VrfRouteWalkCountMap
void WalkDoneCallback(WalkDone cb)
void ReleaseVrfWalkReference()
void DecrementWalkCount()
DBTable::DBTableWalkRef LocateRouteTableWalkRef(const VrfEntry *vrf, RouteWalkerDBState *state, AgentRouteTable *table)
friend void intrusive_ptr_release(AgentRouteWalker *w)
void VrfWalkDoneInternal(DBTableBase *part)
AgentRouteWalkerManager * mgr()
boost::function< void()> WalkDone
void IncrementWalkCount()
bool AreAllRouteWalksDone(const VrfEntry *vrf) const
virtual void RouteWalkDone(DBTableBase *part)
uint32_t refcount() const
bool IsWalkCompleted() const
tbb::atomic< int > walk_count_
void set_mgr(AgentRouteWalkerManager *mgr)
static const int kInvalidWalkCount
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
AgentRouteWalkerRefMap::iterator AgentRouteWalkerRefMapIter
AgentRouteWalkerRefMap::const_iterator AgentRouteWalkerRefMapConstIter
std::map< AgentRouteWalkerPtr, RouteWalkRef > AgentRouteWalkerRefMap
boost::array< DBTable::DBTableWalkRef, Agent::ROUTE_TABLE_MAX > RouteWalkRef
AgentRouteWalkerRefMap walker_ref_map_