OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
rtarget_table.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
6 
7 #include "bgp/bgp_update.h"
8 #include "db/db.h"
9 
10 using std::unique_ptr;
11 using std::string;
12 
13 RTargetTable::RTargetTable(DB *db, const string &name)
14  : BgpTable(db, name) {
15 }
16 
17 unique_ptr<DBEntry> RTargetTable::AllocEntry(const DBRequestKey *key) const {
18  const RequestKey *pfxkey = static_cast<const RequestKey *>(key);
19  return unique_ptr<DBEntry> (new RTargetRoute(pfxkey->prefix));
20 }
21 
22 unique_ptr<DBEntry> RTargetTable::AllocEntryStr(const string &key_str) const {
23  RTargetPrefix prefix = RTargetPrefix::FromString(key_str);
24  return unique_ptr<DBEntry> (new RTargetRoute(prefix));
25 }
26 
27 size_t RTargetTable::Hash(const DBEntry *entry) const {
28  return 0;
29 }
30 
31 size_t RTargetTable::Hash(const DBRequestKey *key) const {
32  return 0;
33 }
34 
36  const DBRequestKey *prefix) {
37  const RequestKey *pfxkey = static_cast<const RequestKey *>(prefix);
38  RTargetRoute rt_key(pfxkey->prefix);
39  return static_cast<BgpRoute *>(rtp->Find(&rt_key));
40 }
41 
42 DBTableBase *RTargetTable::CreateTable(DB *db, const string &name) {
43  RTargetTable *table = new RTargetTable(db, name);
44  table->Init();
45  return table;
46 }
47 
49  BgpTable *src_table, BgpRoute *src_rt, const BgpPath *src_path,
50  ExtCommunityPtr community) {
51  return NULL;
52 }
53 
54 bool RTargetTable::Export(RibOut *ribout, Route *route,
55  const RibPeerSet &peerset, UpdateInfoSList &uinfo_slist) {
56  BgpRoute *bgp_route = static_cast<BgpRoute *> (route);
57  UpdateInfo *uinfo = GetUpdateInfo(ribout, bgp_route, peerset);
58  if (!uinfo) return false;
59  uinfo_slist->push_front(*uinfo);
60 
61  return true;
62 }
63 
64 void RTargetTable::AddRemoveCallback(const DBEntryBase *entry, bool add) const {
65  if (add)
67 }
68 
69 static void RegisterFactory() {
71 }
virtual size_t Hash(const DBEntry *entry) const
static void RegisterFactory()
UpdateInfo * GetUpdateInfo(RibOut *ribout, BgpRoute *route, const RibPeerSet &peerset)
Definition: bgp_table.cc:578
DBEntry * Find(const DBEntry *entry)
Definition: route.h:14
static RTargetPrefix FromString(const std::string &str, boost::system::error_code *errorp=NULL)
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
Definition: db.h:24
void Init()
Definition: db_table.cc:387
static DBTableBase * CreateTable(DB *db, const std::string &name)
boost::intrusive_ptr< const ExtCommunity > ExtCommunityPtr
Definition: community.h:448
virtual BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_table, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
static time_t UTCTimestamp()
Definition: time_util.h:23
tbb::atomic< time_t > last_updated_
Definition: rtarget_table.h:54
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
#define MODULE_INITIALIZER(Func)
Definition: util.h:61
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)
static void RegisterFactory(const std::string &prefix, CreateFunction create_fn)
Definition: db.cc:24