OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
peer_manager.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BGP_ROUTING_INSTANCE_PEER_MANAGER_H_
6 #define SRC_BGP_ROUTING_INSTANCE_PEER_MANAGER_H_
7 
8 #include <boost/asio/ip/tcp.hpp>
9 
10 #include <map>
11 #include <string>
12 #include <vector>
13 
14 #include "bgp/bgp_peer_key.h"
15 #include "bgp/ipeer.h"
16 #include "io/tcp_session.h"
17 
18 class BgpPeer;
19 class BgpServer;
20 class RoutingInstance;
21 class BgpNeighborResp;
22 class BgpSandeshContext;
23 
24 class PeerManager {
25 public:
26  typedef std::multimap<BgpPeerKey, BgpPeer *> BgpPeerKeyMap;
27  typedef std::map<std::string, BgpPeer *> BgpPeerNameMap;
28 
29  explicit PeerManager(RoutingInstance *instance) : instance_(instance) { }
30  virtual ~PeerManager() { }
31 
32  virtual BgpPeer *PeerFind(std::string address) const;
33  virtual BgpPeer *PeerLookup(std::string name) const;
34  virtual BgpPeer *PeerLookup(TcpSession::Endpoint remote_endpoint) const;
36  const BgpNeighborConfig *config);
37  void PeerResurrect(std::string name);
39  virtual void DestroyIPeer(IPeer *ipeer);
40  void ClearAllPeers();
41  void ClearAllInternalPeers();
42 
43  const BgpPeer *NextPeer(const BgpPeerKey &key) const;
44  size_t GetNeighborCount(std::string up_or_down);
45 
46  size_t size() { return peers_by_key_.size(); }
47  const std::string &name() const;
48  const RoutingInstance *instance() const { return instance_; }
50  BgpServer *server() const;
51 
52  const BgpPeerKeyMap &peer_map() const { return peers_by_key_; }
54 
55 private:
56  friend class PeerManagerTest;
57  friend class BgpServerTest;
58 
59  void InsertPeerByKey(BgpPeerKey key, BgpPeer *peer);
60  void RemovePeerByKey(BgpPeerKey key, BgpPeer *peer);
61  void InsertPeerByName(const std::string name, BgpPeer *peer);
62  void RemovePeerByName(const std::string name, BgpPeer *peer);
63 
67 };
68 
69 #endif // SRC_BGP_ROUTING_INSTANCE_PEER_MANAGER_H_
boost::asio::ip::tcp::endpoint Endpoint
Definition: tcp_session.h:62
void ClearAllInternalPeers()
virtual BgpPeer * PeerLookup(std::string name) const
BgpPeerNameMap peers_by_name_
Definition: peer_manager.h:65
BgpPeer * TriggerPeerDeletion(const BgpNeighborConfig *config)
Definition: peer_manager.cc:85
virtual BgpPeer * PeerFind(std::string address) const
const BgpPeerKeyMap & peer_map() const
Definition: peer_manager.h:52
RoutingInstance * instance()
Definition: peer_manager.h:49
const std::string & name() const
std::map< std::string, BgpPeer * > BgpPeerNameMap
Definition: peer_manager.h:27
virtual ~PeerManager()
Definition: peer_manager.h:30
Definition: ipeer.h:186
const BgpPeer * NextPeer(const BgpPeerKey &key) const
friend class BgpServerTest
Definition: peer_manager.h:57
std::multimap< BgpPeerKey, BgpPeer * > BgpPeerKeyMap
Definition: peer_manager.h:26
const RoutingInstance * instance() const
Definition: peer_manager.h:48
size_t size()
Definition: peer_manager.h:46
void PeerResurrect(std::string name)
Definition: peer_manager.cc:64
PeerManager(RoutingInstance *instance)
Definition: peer_manager.h:29
void RemovePeerByKey(BgpPeerKey key, BgpPeer *peer)
void InsertPeerByName(const std::string name, BgpPeer *peer)
void RemovePeerByName(const std::string name, BgpPeer *peer)
void ClearAllPeers()
virtual BgpPeer * PeerLocate(BgpServer *server, const BgpNeighborConfig *config)
Definition: peer_manager.cc:28
BgpServer * server() const
friend class PeerManagerTest
Definition: peer_manager.h:56
BgpPeerKeyMap peers_by_key_
Definition: peer_manager.h:64
virtual void DestroyIPeer(IPeer *ipeer)
BgpPeerKeyMap * peer_map_mutable()
Definition: peer_manager.h:53
RoutingInstance * instance_
Definition: peer_manager.h:66
size_t GetNeighborCount(std::string up_or_down)
void InsertPeerByKey(BgpPeerKey key, BgpPeer *peer)