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