OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ermvpn_table.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_ERMVPN_ERMVPN_TABLE_H_
6 #define SRC_BGP_ERMVPN_ERMVPN_TABLE_H_
7 
8 #include <string>
9 
10 #include "bgp/bgp_attr.h"
11 #include "bgp/bgp_table.h"
13 
14 class BgpServer;
15 class BgpRoute;
16 class McastTreeManager;
17 class MvpnProjectManager;
18 
19 class ErmVpnTable : public BgpTable {
20 public:
21  static const int kPartitionCount = 1;
22 
24  RequestKey(const ErmVpnPrefix &prefix, const IPeer *ipeer)
25  : prefix(prefix), peer(ipeer) {
26  }
28  const IPeer *peer;
29  virtual const IPeer *GetPeer() const { return peer; }
30  };
31 
32  ErmVpnTable(DB *db, const std::string &name);
33 
34  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *key) const;
35  virtual std::unique_ptr<DBEntry> AllocEntryStr(const std::string &key) const;
36 
37  virtual Address::Family family() const { return Address::ERMVPN; }
38  bool IsMaster() const;
39  virtual bool IsVpnTable() const { return IsMaster(); }
40 
41  virtual size_t Hash(const DBEntry *entry) const;
42  virtual size_t Hash(const DBRequestKey *key) const;
43  size_t Hash(const Ip4Address &group) const;
44  virtual int PartitionCount() const { return kPartitionCount; }
45 
46  virtual BgpRoute *RouteReplicate(BgpServer *server, BgpTable *src_table,
47  BgpRoute *src_rt, const BgpPath *path,
48  ExtCommunityPtr ptr);
49 
50  virtual bool Export(RibOut *ribout, Route *route,
51  const RibPeerSet &peerset,
52  UpdateInfoSList &info_slist);
53  static DBTableBase *CreateTable(DB *db, const std::string &name);
54  size_t HashFunction(const ErmVpnPrefix &prefix) const;
55  bool IsGlobalTreeRootRoute(ErmVpnRoute *rt) const;
56 
57  const ErmVpnRoute *FindRoute(const ErmVpnPrefix &prefix) const;
58  ErmVpnRoute *FindRoute(const ErmVpnPrefix &prefix);
59  void CreateTreeManager();
60  void DestroyTreeManager();
62  const McastTreeManager *GetTreeManager() const;
63  virtual void set_routing_instance(RoutingInstance *rtinstance);
64  const McastTreeManager *tree_manager() const { return tree_manager_; }
70  return mvpn_project_manager_;
71  }
72  void GetMvpnSourceAddress(ErmVpnRoute *ermvpn_route,
73  Ip4Address *address) const;
74 
75 private:
76  friend class BgpMulticastTest;
77 
78  virtual BgpRoute *TableFind(DBTablePartition *rtp,
79  const DBRequestKey *prefix);
82 
84 };
85 
86 #endif // SRC_BGP_ERMVPN_ERMVPN_TABLE_H_
virtual void set_routing_instance(RoutingInstance *rtinstance)
const MvpnProjectManager * mvpn_project_manager() const
Definition: ermvpn_table.h:69
size_t HashFunction(const ErmVpnPrefix &prefix) const
Definition: ermvpn_table.cc:20
McastTreeManager * tree_manager_
Definition: ermvpn_table.h:80
void CreateTreeManager()
ErmVpnTable(DB *db, const std::string &name)
Definition: ermvpn_table.cc:24
Family
Definition: address.h:24
McastTreeManager * tree_manager()
Definition: ermvpn_table.h:65
MvpnProjectManager * mvpn_project_manager()
Definition: ermvpn_table.h:68
MvpnProjectManager * mvpn_project_manager_
Definition: ermvpn_table.h:81
Definition: route.h:14
virtual Address::Family family() const
Definition: ermvpn_table.h:37
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: ermvpn_table.cc:66
virtual const IPeer * GetPeer() const
Definition: ermvpn_table.h:29
virtual BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_table, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
Definition: ermvpn_table.cc:72
Definition: ipeer.h:186
const ErmVpnRoute * FindRoute(const ErmVpnPrefix &prefix) const
void CreateMvpnProjectManager()
const McastTreeManager * tree_manager() const
Definition: ermvpn_table.h:64
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)
Definition: db.h:24
McastTreeManager * GetTreeManager()
boost::intrusive_ptr< const ExtCommunity > ExtCommunityPtr
Definition: community.h:448
virtual size_t Hash(const DBEntry *entry) const
Definition: ermvpn_table.cc:41
const std::string & name() const
Definition: db_table.h:110
friend class BgpMulticastTest
Definition: ermvpn_table.h:76
bool IsMaster() const
virtual bool IsVpnTable() const
Definition: ermvpn_table.h:39
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
static const int kPartitionCount
Definition: ermvpn_table.h:21
virtual int PartitionCount() const
Definition: ermvpn_table.h:44
bool IsGlobalTreeRootRoute(ErmVpnRoute *rt) const
void DestroyTreeManager()
BgpServer * server()
Definition: bgp_table.cc:88
DISALLOW_COPY_AND_ASSIGN(ErmVpnTable)
void DestroyMvpnProjectManager()
virtual BgpRoute * TableFind(DBTablePartition *rtp, const DBRequestKey *prefix)
Definition: ermvpn_table.cc:59
void GetMvpnSourceAddress(ErmVpnRoute *ermvpn_route, Ip4Address *address) const
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
Definition: ermvpn_table.cc:35
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
Definition: ermvpn_table.cc:28
RequestKey(const ErmVpnPrefix &prefix, const IPeer *ipeer)
Definition: ermvpn_table.h:24