forked from Juniper/contrail-controller
-
Notifications
You must be signed in to change notification settings - Fork 1
/
mvpn_table.h
115 lines (98 loc) · 4.53 KB
/
mvpn_table.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
* Copyright (c) 2017 Juniper Networks, Inc. All rights reserved.
*/
#ifndef SRC_BGP_MVPN_MVPN_TABLE_H_
#define SRC_BGP_MVPN_MVPN_TABLE_H_
#include <string>
#include "bgp/bgp_attr.h"
#include "bgp/bgp_table.h"
#include "bgp/mvpn/mvpn_route.h"
class BgpPath;
class BgpRoute;
class BgpServer;
class MvpnManager;
class MvpnProjectManager;
class MvpnProjectManagerPartition;
class MvpnTable : public BgpTable {
public:
static const int kPartitionCount = 1;
struct RequestKey : BgpTable::RequestKey {
RequestKey(const MvpnPrefix &prefix, const IPeer *ipeer)
: prefix(prefix), peer(ipeer) {
}
MvpnPrefix prefix;
const IPeer *peer;
virtual const IPeer *GetPeer() const { return peer; }
};
MvpnTable(DB *db, const std::string &name);
virtual std::auto_ptr<DBEntry> AllocEntry(const DBRequestKey *key) const;
virtual std::auto_ptr<DBEntry> AllocEntryStr(const std::string &key) const;
void CreateManager();
void DestroyManager();
virtual Address::Family family() const { return Address::MVPN; }
bool IsMaster() const;
virtual bool IsVpnTable() const { return IsMaster(); }
virtual size_t Hash(const DBEntry *entry) const;
virtual size_t Hash(const DBRequestKey *key) const;
virtual int PartitionCount() const { return kPartitionCount; }
MvpnRoute *FindSPMSIRoute(MvpnRoute *leaf_ad_rt) { return NULL; }
const ExtCommunity::ExtCommunityValue GetAutoVrfImportRouteTarget() const {
return ExtCommunity::ExtCommunityValue();
}
virtual BgpRoute *RouteReplicate(BgpServer *server, BgpTable *src_table,
BgpRoute *src_rt, const BgpPath *path,
ExtCommunityPtr ptr);
virtual bool Export(RibOut *ribout, Route *route,
const RibPeerSet &peerset,
UpdateInfoSList &info_slist);
static DBTableBase *CreateTable(DB *db, const std::string &name);
size_t HashFunction(const MvpnPrefix &prefix) const;
PathResolver *CreatePathResolver();
const MvpnManager *manager() const { return manager_; }
MvpnManager *manager() { return manager_; }
bool RouteNotify(BgpServer *server, DBTablePartBase *root, DBEntryBase *e);
RouteDistinguisher GetSourceRouteDistinguisher(const BgpPath *path) const;
const MvpnProjectManager *GetProjectManager() const;
MvpnProjectManager *GetProjectManager();
const MvpnProjectManagerPartition *GetProjectManagerPartition(
BgpRoute *route) const;
MvpnProjectManagerPartition *GetProjectManagerPartition(BgpRoute *rt);
void UpdateSecondaryTablesForReplication(BgpRoute *rt,
TableSet *secondary_tables);
const RouteTarget::List &GetExportList(BgpRoute *rt) const;
MvpnPrefix CreateType4LeafADRoutePrefix(const MvpnRoute *type3_rt);
MvpnPrefix CreateType3SPMSIRoutePrefix(MvpnRoute *type7_rt);
MvpnPrefix CreateType2ADRoutePrefix();
MvpnPrefix CreateType1ADRoutePrefix();
MvpnPrefix CreateType5SourceActiveRoutePrefix(MvpnRoute *rt) const;
MvpnRoute *FindType1ADRoute();
MvpnRoute *FindType2ADRoute();
MvpnRoute *FindType5SourceActiveADRoute(MvpnRoute *rt);
const MvpnRoute *FindType5SourceActiveADRoute(MvpnRoute *rt) const;
MvpnRoute *LocateType1ADRoute();
MvpnRoute *LocateType2ADRoute();
MvpnRoute *LocateType3SPMSIRoute(MvpnRoute *type7_join_rt);
MvpnRoute *LocateType4LeafADRoute(const MvpnRoute *type3_spmsi_rt);
bool force_replication() const { return force_replication_; }
void set_force_replication(bool flag) { force_replication_ = flag; }
private:
friend class BgpMulticastTest;
virtual BgpRoute *TableFind(DBTablePartition *rtp,
const DBRequestKey *prefix);
MvpnRoute *LocateRoute(MvpnPrefix &prefix);
MvpnRoute *FindRoute(MvpnPrefix &prefix);
const MvpnRoute *FindRoute(MvpnPrefix &prefix) const;
BgpRoute *ReplicateType7SourceTreeJoin(BgpServer *server,
MvpnTable *src_table, MvpnRoute *src_rt, const BgpPath *src_path,
ExtCommunityPtr comm);
BgpRoute *ReplicatePath(BgpServer *server, const MvpnPrefix &prefix,
MvpnTable *src_table, MvpnRoute *src_rt, const BgpPath *src_path,
ExtCommunityPtr comm, BgpAttrPtr new_attr = NULL,
bool *replicated = NULL);
UpdateInfo *GetMvpnUpdateInfo(RibOut *ribout, MvpnRoute *route,
const RibPeerSet &peerset);
MvpnManager *manager_;
bool force_replication_;
DISALLOW_COPY_AND_ASSIGN(MvpnTable);
};
#endif // SRC_BGP_MVPN_MVPN_TABLE_H_