OpenSDN source code
evpn_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_EVPN_EVPN_TABLE_H_
6 #define SRC_BGP_EVPN_EVPN_TABLE_H_
7 
8 #include <atomic>
9 #include <string>
10 
11 #include "bgp/bgp_config_ifmap.h"
12 #include "bgp/bgp_table.h"
13 #include "bgp/evpn/evpn_route.h"
14 
15 class EvpnManager;
16 class PathResolver;
17 
18 class EvpnTable : public BgpTable {
19 public:
21  RequestKey(const EvpnPrefix &prefix, const IPeer *ipeer)
22  : prefix(prefix), peer(ipeer) {
23  }
25  const IPeer *peer;
26  virtual const IPeer *GetPeer() const { return peer; }
27  };
28 
29  EvpnTable(DB *db, const std::string &name);
30 
31  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *key) const;
32  virtual std::unique_ptr<DBEntry> AllocEntryStr(const std::string &key) const;
33  virtual void AddRemoveCallback(const DBEntryBase *entry, bool add) const;
34 
35  virtual Address::Family family() const { return Address::EVPN; }
36  bool IsMaster() const;
37  virtual bool IsVpnTable() const { return IsMaster(); }
38 
39  virtual size_t Hash(const DBEntry *entry) const;
40  virtual size_t Hash(const DBRequestKey *key) const;
41 
42  virtual BgpRoute *RouteReplicate(BgpServer *server, BgpTable *src_table,
43  BgpRoute *src_rt, const BgpPath *path,
44  ExtCommunityPtr ptr);
45 
46  virtual bool Export(RibOut *ribout, Route *route,
47  const RibPeerSet &peerset,
48  UpdateInfoSList &info_slist);
49 
51 
52  static size_t HashFunction(const EvpnPrefix &prefix);
53  static DBTableBase *CreateTable(DB *db, const std::string &name);
54  EvpnRoute *FindRoute(const EvpnPrefix &prefix);
55  const EvpnRoute *FindRoute(const EvpnPrefix &prefix) const;
56 
57  void CreateEvpnManager();
58  void DestroyEvpnManager();
60  const EvpnManager *GetEvpnManager() const;
61  virtual void set_routing_instance(RoutingInstance *rtinstance);
62 
63  uint64_t mac_route_count() const { return mac_route_count_; }
64  uint64_t unique_mac_route_count() const { return unique_mac_route_count_; }
65  uint64_t im_route_count() const { return im_route_count_; }
66  uint64_t ip_route_count() const { return ip_route_count_; }
67 
68 private:
69  virtual BgpRoute *TableFind(DBTablePartition *rtp,
70  const DBRequestKey *prefix);
71  bool ShouldReplicate(const BgpServer *server, const BgpTable *src_table,
72  const ExtCommunityPtr community,
73  const EvpnPrefix &evpn_prefix) const;
75  mutable std::atomic<uint64_t> mac_route_count_;
76  mutable std::atomic<uint64_t> unique_mac_route_count_;
77  mutable std::atomic<uint64_t> im_route_count_;
78  mutable std::atomic<uint64_t> ip_route_count_;
79 
81 };
82 
83 #endif // SRC_BGP_EVPN_EVPN_TABLE_H_
Family
Definition: address.h:24
@ EVPN
Definition: address.h:31
BgpServer * server()
Definition: bgp_table.cc:87
const std::string & name() const
Definition: db_table.h:110
Definition: db.h:24
This class represents the EVPN manager for an EvpnTable in a VRF.
Definition: bgp_evpn.h:579
uint64_t im_route_count() const
Definition: evpn_table.h:65
std::atomic< uint64_t > ip_route_count_
Definition: evpn_table.h:78
virtual BgpRoute * TableFind(DBTablePartition *rtp, const DBRequestKey *prefix)
Definition: evpn_table.cc:120
EvpnManager * GetEvpnManager()
Definition: evpn_table.cc:373
std::atomic< uint64_t > mac_route_count_
Definition: evpn_table.h:75
virtual Address::Family family() const
Definition: evpn_table.h:35
void CreateEvpnManager()
Definition: evpn_table.cc:358
virtual void set_routing_instance(RoutingInstance *rtinstance)
Definition: evpn_table.cc:381
uint64_t unique_mac_route_count() const
Definition: evpn_table.h:64
virtual BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_table, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
Definition: evpn_table.cc:194
uint64_t ip_route_count() const
Definition: evpn_table.h:66
EvpnManager * evpn_manager_
Definition: evpn_table.h:74
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
Definition: evpn_table.cc:47
DISALLOW_COPY_AND_ASSIGN(EvpnTable)
static size_t HashFunction(const EvpnPrefix &prefix)
Definition: evpn_table.cc:21
uint64_t mac_route_count() const
Definition: evpn_table.h:63
EvpnRoute * FindRoute(const EvpnPrefix &prefix)
Definition: evpn_table.cc:140
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)
Definition: evpn_table.cc:309
void DestroyEvpnManager()
Definition: evpn_table.cc:366
virtual bool IsVpnTable() const
Definition: evpn_table.h:37
virtual PathResolver * CreatePathResolver()
Definition: evpn_table.cc:127
bool ShouldReplicate(const BgpServer *server, const BgpTable *src_table, const ExtCommunityPtr community, const EvpnPrefix &evpn_prefix) const
Definition: evpn_table.cc:154
bool IsMaster() const
Definition: evpn_table.cc:386
virtual void AddRemoveCallback(const DBEntryBase *entry, bool add) const
Definition: evpn_table.cc:59
std::atomic< uint64_t > unique_mac_route_count_
Definition: evpn_table.h:76
std::atomic< uint64_t > im_route_count_
Definition: evpn_table.h:77
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: evpn_table.cc:133
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
Definition: evpn_table.cc:53
EvpnTable(DB *db, const std::string &name)
Definition: evpn_table.cc:39
virtual size_t Hash(const DBEntry *entry) const
Definition: evpn_table.cc:114
Definition: ipeer.h:186
Definition: route.h:14
boost::intrusive_ptr< const ExtCommunity > ExtCommunityPtr
Definition: community.h:450
const IPeer * peer
Definition: evpn_table.h:25
RequestKey(const EvpnPrefix &prefix, const IPeer *ipeer)
Definition: evpn_table.h:21
virtual const IPeer * GetPeer() const
Definition: evpn_table.h:26