5 #ifndef SRC_BGP_BGP_MEMBERSHIP_H_
6 #define SRC_BGP_BGP_MEMBERSHIP_H_
8 #include <boost/dynamic_bitset.hpp>
9 #include <boost/scoped_ptr.hpp>
10 #include <tbb/atomic.h>
11 #include <tbb/spin_rw_mutex.h>
24 class BgpNeighborResp;
29 class ShowMembershipPeerInfo;
30 class ShowRoutingInstanceTable;
88 typedef boost::function<void(IPeer *, BgpTable *, bool)>
106 int *instance_id = NULL, uint64_t *subscription_gen_id = NULL)
const;
108 int instance_id, uint64_t subscription_gen_id);
117 std::list<BgpTable *> *table_list)
const;
134 virtual bool AssertRegister(PeerRibState *prs,
bool do_assert =
true);
137 bool do_assert =
true);
138 virtual bool AssertWalkRibIn(PeerRibState *prs,
bool do_assert =
true);
522 #endif // SRC_BGP_BGP_MEMBERSHIP_H_
PeerState(BgpMembershipManager *manager, IPeer *peer)
virtual void UnregisterRibOut(IPeer *peer, BgpTable *table)
void ProcessRegisterRibEvent(Event *event)
void ProcessUnregisterRibEvent(Event *event)
boost::function< void(IPeer *, BgpTable *, bool)> PeerRegistrationCallback
void ProcessUnregisterRibCompleteEvent(Event *event)
RibOutStateMap ribout_state_map_
void EnqueuePeerRibState(PeerRibState *prs)
friend class BgpMembershipTest
std::map< const IPeer *, PeerState * > PeerStateMap
bool WalkCallback(DBTablePartBase *tpart, DBEntryBase *db_entry)
RibOutStateList ribout_state_list_
PeerRibList peer_rib_list_
DISALLOW_COPY_AND_ASSIGN(RibState)
virtual bool EventCallbackInternal(Event *event)
size_t GetMembershipCount() const
void RegisterRibOut(const RibExportPolicy &policy)
RibStateSet rib_state_set_
void EnqueueEvent(Event *event)
tbb::atomic< uint64_t > total_jobs_count_
friend class BgpMembershipTest
boost::dynamic_bitset registration_bmap_
bool IsQueueEmpty() const
BgpMembershipManager::PeerRibState PeerRibState
PeerRibState * LocatePeerRibState(RibState *rs)
void EnqueueRibState(RibState *rs)
tbb::spin_rw_mutex rw_mutex_
std::list< RibOutState * > RibOutStateList
PeerStateMap peer_state_map_
bool IsRegistered(const IPeer *peer, const BgpTable *table) const
BgpMembershipManager(BgpServer *server)
std::map< const RibState *, PeerRibState * > PeerRibStateMap
PeerRibList pending_peer_rib_list_
BgpMembershipManager::PeerRibState PeerRibState
size_t rib_state_list_size_
const BgpTable * table() const
virtual void Register(IPeer *peer, BgpTable *table, const RibExportPolicy &policy, int instance_id=-1)
boost::scoped_ptr< TaskTrigger > trigger_
bool IsQueueEmpty() const
BgpMembershipManager * manager_
std::set< RibState * > RibStateSet
PeerRegistrationListenerList registration_callbacks_
void TriggerWalkRibCompleteEvent(IPeer *peer, BgpTable *table)
size_t GetMembershipCount() const
void FillPeerMembershipInfo(const IPeer *peer, BgpNeighborResp *resp) const
BgpMembershipManager::PeerRibList PeerRibList
bool RemovePeerRibState(PeerRibState *prs)
void DestroyPeerState(PeerState *ps)
bool GetRegistrationInfo(const IPeer *peer, const BgpTable *table, int *instance_id=NULL, uint64_t *subscription_gen_id=NULL) const
BgpMembershipManager::PeerRibState PeerRibState
void TriggerUnregisterRibCompleteEvent(IPeer *peer, BgpTable *table)
PeerRibState * LocatePeerRibState(IPeer *peer, BgpTable *table)
const RibPeerSet & leave_bitset()
void FillPeerMembershipInfo(BgpNeighborResp *resp) const
RibStateMap rib_state_map_
void WalkRibIn(IPeer *peer, BgpTable *table)
boost::scoped_ptr< Walker > walker_
RibState(BgpMembershipManager *manager, BgpTable *table)
DISALLOW_COPY_AND_ASSIGN(PeerRibState)
std::set< PeerRibState * > PeerRibList
const IPeer * peer() const
RibOutState * LocateRibOutState(RibOut *ribout)
DISALLOW_COPY_AND_ASSIGN(RibOutState)
void set_ribin_registered(bool value)
void LeavePeer(int index)
void DestroyPeerRibState(PeerRibState *prs)
std::vector< PeerRegistrationCallback > PeerRegistrationListenerList
virtual bool AssertRegisterRibIn(PeerRibState *prs, IPeer *peer, bool do_assert=true)
void SetQueueDisable(bool value)
DISALLOW_COPY_AND_ASSIGN(BgpMembershipManager)
virtual ~BgpMembershipManager()
bool ribout_registered() const
BgpMembershipManager * manager_
void RegisterRibIn(IPeer *peer, BgpTable *table)
void SetQueueDisable(bool value)
bool RemovePeerRibState(PeerRibState *prs)
std::set< const IPeer * > PeerList
void UnregisterPeerRegistrationCallback(int id)
RibStateList rib_state_list_
void DestroyRibState(RibState *ps)
virtual void Unregister(IPeer *peer, BgpTable *table)
boost::scoped_ptr< WorkQueue< Event * > > event_queue_
void set_ribout_registered(bool value)
std::map< RibOut *, RibOutState * > RibOutStateMap
DISALLOW_COPY_AND_ASSIGN(PeerState)
std::map< const BgpTable *, RibState * > RibStateMap
BgpMembershipManager::EventType EventType
void UnregisterRibIn(IPeer *peer, BgpTable *table)
BgpMembershipManager::PeerRibList PeerRibList
DISALLOW_COPY_AND_ASSIGN(Walker)
RibState * LocateRibState(BgpTable *table)
uint64_t total_jobs_count() const
Walker(BgpMembershipManager *manager)
size_t GetPeerListSize() const
void TriggerRegisterRibCompleteEvent(IPeer *peer, BgpTable *table)
bool ribin_registered() const
void SetRegistrationInfo(const IPeer *peer, const BgpTable *table, int instance_id, uint64_t subscription_gen_id)
BgpMembershipManager::Event Event
size_t GetRibOutStateListSize() const
void FillRoutingInstanceTableInfo(ShowRoutingInstanceTable *srit, const BgpTable *table) const
void GetRegisteredRibs(std::list< BgpTable * > *table_list) const
void UnregisterRibInUnlocked(PeerRibState *prs)
void WalkDoneCallback(DBTableBase *table)
friend class BgpXmppUnitTest
uint64_t subscription_gen_id() const
void set_instance_id(int instance_id)
DBTable::DBTableWalkRef walk_ref_
void ProcessWalkRibCompleteEvent(Event *event)
size_t ribout_state_list_size_
PeerRibState(BgpMembershipManager *manager, PeerState *ps, RibState *rs)
PeerRibState * FindPeerRibState(const IPeer *peer, const BgpTable *table)
void increment_walk_count()
virtual bool AssertRegister(PeerRibState *prs, bool do_assert=true)
friend class BgpServerUnitTest
BgpMembershipManager * manager_
virtual bool AssertWalkRibIn(PeerRibState *prs, bool do_assert=true)
BgpMembershipManager * manager_
std::list< RibState * > RibStateList
void Enqueue(RibState *rs)
bool IsRibInRegistered(const IPeer *peer, const BgpTable *table) const
void FillRoutingInstanceTableInfo(ShowRoutingInstanceTable *srit) const
RibState * FindRibState(const BgpTable *table)
bool IsRibOutRegistered(const IPeer *peer, const BgpTable *table) const
const IPeer * peer() const
PeerState * LocatePeerState(IPeer *peer)
tbb::atomic< uint64_t > current_jobs_count_
void set_subscription_gen_id(uint64_t subscription_gen_id)
void ProcessRegisterRibCompleteEvent(Event *event)
const PeerState * peer_state() const
PeerRibState * FindPeerRibState(const RibState *rs)
Event(EventType event_type, IPeer *peer, BgpTable *table)
BgpMembershipManager::RibState RibState
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
RibOutState(RibOut *ribout)
uint64_t current_jobs_count() const
PeerRibList peer_rib_list_
PeerState * FindPeerState(const IPeer *peer)
void ClearPeerRibStateList()
uint64_t subscription_gen_id_
void GetRegisteredRibs(const IPeer *peer, std::list< BgpTable * > *table_list) const
BgpMembershipManager::RibState RibState
PeerRibList::iterator iterator
LifetimeRef< RibState > table_delete_ref_
void NotifyPeerRegistration(IPeer *peer, BgpTable *table, bool unregister)
size_t GetPeerRibListSize() const
BgpMembershipManager::Action action() const
int RegisterPeerRegistrationCallback(PeerRegistrationCallback callback)
virtual bool AssertUnregister(PeerRibState *prs, bool do_assert=true)
uint32_t GetRibOutQueueDepth(const IPeer *peer, const BgpTable *table) const
void set_action(BgpMembershipManager::Action action)
size_t GetQueueSize() const
bool EventCallback(Event *event)
void FillMembershipInfo(ShowMembershipPeerInfo *smpi) const
const RibPeerSet & join_bitset()
BgpMembershipManager::Action action_
void InsertPeerRibState(PeerRibState *prs)