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