OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
rtarget_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_RTARGET_RTARGET_TABLE_H_
6 #define SRC_BGP_RTARGET_RTARGET_TABLE_H_
7 
8 #include <string>
9 
10 #include "bgp/bgp_attr.h"
11 #include "bgp/bgp_table.h"
14 
15 class BgpServer;
16 class BgpRoute;
17 
18 class RTargetTable : public BgpTable {
19 public:
21  RequestKey(const RTargetPrefix &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  RTargetTable(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 
34  virtual Address::Family family() const { return Address::RTARGET; }
35 
36  virtual size_t Hash(const DBEntry *entry) const;
37  virtual size_t Hash(const DBRequestKey *key) const;
38 
39  virtual BgpRoute *RouteReplicate(BgpServer *server, BgpTable *src_table,
40  BgpRoute *src_rt, const BgpPath *path,
41  ExtCommunityPtr ptr);
42 
43  virtual bool Export(RibOut *ribout, Route *route,
44  const RibPeerSet &peerset,
45  UpdateInfoSList &info_slist);
46  static DBTableBase *CreateTable(DB *db, const std::string &name);
47  time_t last_updated() const { return last_updated_; }
48 
49 private:
50  virtual BgpRoute *TableFind(DBTablePartition *rtp,
51  const DBRequestKey *prefix);
52  void AddRemoveCallback(const DBEntryBase *entry, bool add) const;
53 
54  mutable tbb::atomic<time_t> last_updated_;
55 
57 };
58 
59 #endif // SRC_BGP_RTARGET_RTARGET_TABLE_H_
virtual size_t Hash(const DBEntry *entry) const
time_t last_updated() const
Definition: rtarget_table.h:47
Family
Definition: address.h:24
Definition: route.h:14
virtual Address::Family family() const
Definition: rtarget_table.h:34
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
Definition: ipeer.h:186
RequestKey(const RTargetPrefix &prefix, const IPeer *ipeer)
Definition: rtarget_table.h:21
Definition: db.h:24
DISALLOW_COPY_AND_ASSIGN(RTargetTable)
static DBTableBase * CreateTable(DB *db, const std::string &name)
boost::intrusive_ptr< const ExtCommunity > ExtCommunityPtr
Definition: community.h:448
const std::string & name() const
Definition: db_table.h:110
virtual BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_table, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
BgpServer * server()
Definition: bgp_table.cc:88
tbb::atomic< time_t > last_updated_
Definition: rtarget_table.h:54
virtual const IPeer * GetPeer() const
Definition: rtarget_table.h:26
void AddRemoveCallback(const DBEntryBase *entry, bool add) const
RTargetTable(DB *db, const std::string &name)
virtual BgpRoute * TableFind(DBTablePartition *rtp, const DBRequestKey *prefix)
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)