OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mvpn_table.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BGP_MVPN_MVPN_TABLE_H_
6 #define SRC_BGP_MVPN_MVPN_TABLE_H_
7 
8 #include <map>
9 #include <set>
10 #include <string>
11 
12 #include "bgp/bgp_attr.h"
13 #include "bgp/bgp_table.h"
14 #include "bgp/mvpn/mvpn_route.h"
16 
17 class BgpPath;
18 class BgpRoute;
19 class BgpServer;
20 class MvpnManager;
21 class MvpnProjectManager;
23 
24 class MvpnTable : public BgpTable {
25 public:
26  static const int kPartitionCount = 1;
27 
29  RequestKey(const MvpnPrefix &prefix, const IPeer *ipeer)
30  : prefix(prefix), peer(ipeer) {
31  }
33  const IPeer *peer;
34  virtual const IPeer *GetPeer() const { return peer; }
35  };
36 
37  MvpnTable(DB *db, const std::string &name);
38 
39  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *key) const;
40  virtual std::unique_ptr<DBEntry> AllocEntryStr(const std::string &key) const;
41  void CreateManager();
42  void DestroyManager();
43  virtual Address::Family family() const { return Address::MVPN; }
44  bool IsMaster() const;
45  virtual bool IsVpnTable() const { return IsMaster(); }
46 
47  virtual size_t Hash(const DBEntry *entry) const;
48  virtual size_t Hash(const DBRequestKey *key) const;
49  virtual int PartitionCount() const { return kPartitionCount; }
50  MvpnRoute *FindSPMSIRoute(MvpnRoute *leaf_ad_rt) { return NULL; }
53  }
54 
55  virtual BgpRoute *RouteReplicate(BgpServer *server, BgpTable *src_table,
56  BgpRoute *src_rt, const BgpPath *path,
57  ExtCommunityPtr ptr);
58  virtual bool Export(RibOut *ribout, Route *route,
59  const RibPeerSet &peerset,
60  UpdateInfoSList &info_slist);
61  static DBTableBase *CreateTable(DB *db, const std::string &name);
62  size_t HashFunction(const MvpnPrefix &prefix) const;
64  const MvpnManager *manager() const { return manager_; }
65  MvpnManager *manager() { return manager_; }
66 
71  BgpRoute *route) const;
73  TableSet *secondary_tables);
77  MvpnPrefix CreateType1ADRoutePrefix(const Ip4Address &originator_ip);
81  MvpnRoute *FindType1ADRoute(const Ip4Address &originator_ip);
85  MvpnRoute *LocateType3SPMSIRoute(const MvpnRoute *type7_join_rt);
86  MvpnRoute *LocateType4LeafADRoute(const MvpnRoute *type3_spmsi_rt);
87  MvpnRoute *FindRoute(const MvpnPrefix &prefix);
88  const MvpnRoute *FindRoute(const MvpnPrefix &prefix) const;
89  void CreateMvpnManagers();
90  bool IsProjectManagerUsable() const;
91 
92 private:
93  friend class BgpMulticastTest;
94  typedef std::set<std::string> MvpnManagerNetworks;
95  typedef std::map<std::string, MvpnManagerNetworks>
97 
98  void DeleteMvpnManager();
99  virtual BgpRoute *TableFind(DBTablePartition *rtp,
100  const DBRequestKey *prefix);
101  MvpnRoute *LocateRoute(const MvpnPrefix &prefix);
102  UpdateInfo *GetMvpnUpdateInfo(RibOut *ribout, MvpnRoute *route,
103  const RibPeerSet &peerset);
104  void GetPeerSet(RibOut *ribout, MvpnRoute *route,
105  const RibPeerSet &peerset, RibPeerSet *new_peerset);
107  MvpnTable *src_table, MvpnRoute *src_rt, const BgpPath *src_path,
108  ExtCommunityPtr ext_community);
110  MvpnTable *src_table, MvpnRoute *src_rt, const BgpPath *src_path,
111  ExtCommunityPtr comm);
112  const MvpnTable *table() const { return this; }
113 
115 
117 };
118 
119 #endif // SRC_BGP_MVPN_MVPN_TABLE_H_
MvpnRoute * FindSPMSIRoute(MvpnRoute *leaf_ad_rt)
Definition: mvpn_table.h:50
boost::array< uint8_t, 8 > ExtCommunityValue
Definition: community.h:152
void DeleteMvpnManager()
Definition: mvpn_table.cc:160
MvpnRoute * LocateRoute(const MvpnPrefix &prefix)
Definition: mvpn_table.cc:281
size_t HashFunction(const MvpnPrefix &prefix) const
Definition: mvpn_table.cc:32
virtual const IPeer * GetPeer() const
Definition: mvpn_table.h:34
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)
Definition: mvpn_table.cc:593
BgpRoute * ReplicatePath(BgpServer *server, const MvpnPrefix &mprefix, MvpnTable *src_table, MvpnRoute *src_rt, const BgpPath *src_path, ExtCommunityPtr comm)
Definition: mvpn_table.cc:516
Family
Definition: address.h:24
const ExtCommunity::ExtCommunityValue GetAutoVrfImportRouteTarget() const
Definition: mvpn_table.h:51
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
Definition: mvpn_table.cc:63
const IPeer * peer
Definition: mvpn_table.h:33
Definition: route.h:14
MvpnPrefix CreateType3SPMSIRoutePrefix(const MvpnRoute *type7_rt)
Definition: mvpn_table.cc:308
bool RouteNotify(BgpServer *server, DBTablePartBase *root, DBEntryBase *e)
MvpnRoute * LocateType4LeafADRoute(const MvpnRoute *type3_spmsi_rt)
Definition: mvpn_table.cc:303
MvpnPrefix CreateType2ADRoutePrefix()
Definition: mvpn_table.cc:347
virtual BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_table, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
Definition: mvpn_table.cc:391
Definition: ipeer.h:186
void UpdateSecondaryTablesForReplication(BgpRoute *rt, TableSet *secondary_tables)
Definition: mvpn_table.cc:238
std::map< std::string, MvpnManagerNetworks > MvpnProjectManagerNetworks
Definition: mvpn_table.h:96
MvpnRoute * FindType1ADRoute()
Definition: mvpn_table.cc:376
void CreateMvpnManagers()
Definition: mvpn_table.cc:123
const MvpnManager * manager() const
Definition: mvpn_table.h:64
Definition: db.h:24
MvpnRoute * FindRoute(const MvpnPrefix &prefix)
Definition: mvpn_table.cc:266
void DestroyManager()
Definition: mvpn_table.cc:113
virtual size_t Hash(const DBEntry *entry) const
Definition: mvpn_table.cc:69
MvpnPrefix CreateType1ADRoutePrefix()
Definition: mvpn_table.cc:362
PathResolver * CreatePathResolver()
Definition: mvpn_table.cc:49
const MvpnRoute * FindType7SourceTreeJoinRoute(MvpnRoute *rt) const
Definition: mvpn_table.cc:381
DISALLOW_COPY_AND_ASSIGN(MvpnTable)
BgpRoute * ReplicateType7SourceTreeJoin(BgpServer *server, MvpnTable *src_table, MvpnRoute *src_rt, const BgpPath *src_path, ExtCommunityPtr ext_community)
Definition: mvpn_table.cc:431
boost::intrusive_ptr< const ExtCommunity > ExtCommunityPtr
Definition: community.h:448
virtual Address::Family family() const
Definition: mvpn_table.h:43
void CreateManager()
Definition: mvpn_table.cc:96
std::set< BgpTable * > TableSet
Definition: bgp_table.h:38
const MvpnTable * table() const
Definition: mvpn_table.h:112
RequestKey(const MvpnPrefix &prefix, const IPeer *ipeer)
Definition: mvpn_table.h:29
virtual BgpRoute * TableFind(DBTablePartition *rtp, const DBRequestKey *prefix)
Definition: mvpn_table.cc:83
const std::string & name() const
Definition: db_table.h:110
friend class BgpMulticastTest
Definition: mvpn_table.h:93
void GetPeerSet(RibOut *ribout, MvpnRoute *route, const RibPeerSet &peerset, RibPeerSet *new_peerset)
Definition: mvpn_table.cc:616
static const int kPartitionCount
Definition: mvpn_table.h:26
MvpnPrefix CreateType4LeafADRoutePrefix(const MvpnRoute *type3_rt)
Definition: mvpn_table.cc:295
MvpnPrefix CreateType7SourceTreeJoinRoutePrefix(MvpnRoute *rt) const
Definition: mvpn_table.cc:328
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
virtual bool IsVpnTable() const
Definition: mvpn_table.h:45
BgpServer * server()
Definition: bgp_table.cc:88
UpdateInfo * GetMvpnUpdateInfo(RibOut *ribout, MvpnRoute *route, const RibPeerSet &peerset)
Definition: mvpn_table.cc:634
const MvpnProjectManager * GetProjectManager() const
Definition: mvpn_table.cc:185
const MvpnProjectManagerPartition * GetProjectManagerPartition(BgpRoute *route) const
Definition: mvpn_table.cc:222
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
Definition: mvpn_table.cc:57
bool IsMaster() const
Definition: mvpn_table.cc:664
MvpnTable(DB *db, const std::string &name)
Definition: mvpn_table.cc:45
std::set< std::string > MvpnManagerNetworks
Definition: mvpn_table.h:94
MvpnPrefix CreateLocalType7Prefix(MvpnRoute *rt) const
Definition: mvpn_table.cc:319
MvpnRoute * LocateType3SPMSIRoute(const MvpnRoute *type7_join_rt)
Definition: mvpn_table.cc:342
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: mvpn_table.cc:90
virtual int PartitionCount() const
Definition: mvpn_table.h:49
bool IsProjectManagerUsable() const
Definition: mvpn_table.cc:200
MvpnManager * manager_
Definition: mvpn_table.h:114
MvpnRoute * LocateType1ADRoute()
Definition: mvpn_table.cc:366
MvpnManager * manager()
Definition: mvpn_table.h:65