OpenSDN source code
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 <atomic>
9 #include <string>
10 
11 #include "bgp/bgp_attr.h"
12 #include "bgp/bgp_table.h"
15 
16 class BgpServer;
17 class BgpRoute;
18 
19 class RTargetTable : public BgpTable {
20 public:
22  RequestKey(const RTargetPrefix &prefix, const IPeer *ipeer)
23  : prefix(prefix), peer(ipeer) {
24  }
26  const IPeer *peer;
27  virtual const IPeer *GetPeer() const { return peer; }
28  };
29 
30  RTargetTable(DB *db, const std::string &name);
31 
32  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *key) const;
33  virtual std::unique_ptr<DBEntry> AllocEntryStr(const std::string &key) const;
34 
35  virtual Address::Family family() const { return Address::RTARGET; }
36 
37  virtual size_t Hash(const DBEntry *entry) const;
38  virtual size_t Hash(const DBRequestKey *key) const;
39 
40  virtual BgpRoute *RouteReplicate(BgpServer *server, BgpTable *src_table,
41  BgpRoute *src_rt, const BgpPath *path,
42  ExtCommunityPtr ptr);
43 
44  virtual bool Export(RibOut *ribout, Route *route,
45  const RibPeerSet &peerset,
46  UpdateInfoSList &info_slist);
47  static DBTableBase *CreateTable(DB *db, const std::string &name);
48  time_t last_updated() const { return last_updated_; }
49 
50 private:
51  virtual BgpRoute *TableFind(DBTablePartition *rtp,
52  const DBRequestKey *prefix);
53  void AddRemoveCallback(const DBEntryBase *entry, bool add) const;
54 
55  mutable std::atomic<time_t> last_updated_;
56 
58 };
59 
60 #endif // SRC_BGP_RTARGET_RTARGET_TABLE_H_
Family
Definition: address.h:24
@ RTARGET
Definition: address.h:30
BgpServer * server()
Definition: bgp_table.cc:87
const std::string & name() const
Definition: db_table.h:110
Definition: db.h:24
Definition: ipeer.h:186
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
virtual BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_table, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
RTargetTable(DB *db, const std::string &name)
virtual Address::Family family() const
Definition: rtarget_table.h:35
virtual BgpRoute * TableFind(DBTablePartition *rtp, const DBRequestKey *prefix)
void AddRemoveCallback(const DBEntryBase *entry, bool add) const
std::atomic< time_t > last_updated_
Definition: rtarget_table.h:55
static DBTableBase * CreateTable(DB *db, const std::string &name)
time_t last_updated() const
Definition: rtarget_table.h:48
DISALLOW_COPY_AND_ASSIGN(RTargetTable)
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
virtual size_t Hash(const DBEntry *entry) const
Definition: route.h:14
boost::intrusive_ptr< const ExtCommunity > ExtCommunityPtr
Definition: community.h:450
RequestKey(const RTargetPrefix &prefix, const IPeer *ipeer)
Definition: rtarget_table.h:22
virtual const IPeer * GetPeer() const
Definition: rtarget_table.h:27