OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
inet_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_INET_INET_TABLE_H_
6 #define SRC_BGP_INET_INET_TABLE_H_
7 
8 #include <string>
9 
10 #include "bgp/bgp_table.h"
11 #include "bgp/inet/inet_route.h"
12 #include "base/address.h"
13 
14 class BgpServer;
15 class InetVpnPrefix;
16 class Ip4Prefix;
17 class PathResolver;
18 
19 class InetTable : public BgpTable {
20 public:
22  RequestKey(const Ip4Prefix &prefix, const IPeer *ipeer)
23  : prefix(prefix), peer(ipeer) {
24  }
26  const IPeer *peer;
27  virtual const IPeer *GetPeer() const {
28  return peer;
29  }
30  };
31 
32  InetTable(DB *db, const std::string &name);
33 
34  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *key) const;
35  virtual std::unique_ptr<DBEntry> AllocEntryStr(const std::string &key) const;
36 
37  virtual Address::Family family() const { return family_; }
38 
39  virtual size_t Hash(const DBEntry *entry) const;
40  virtual size_t Hash(const DBRequestKey *key) const;
41 
42  virtual bool Export(RibOut *ribout, Route *route,
43  const RibPeerSet &peerset,
44  UpdateInfoSList &info_slist);
46 
47  static size_t HashFunction(const Ip4Prefix &addr);
48  static DBTableBase *CreateTable(DB *db, const std::string &name);
50  BgpRoute *src_rt, const BgpPath *path,
51  ExtCommunityPtr ptr);
52 
53  virtual bool IsRoutingPolicySupported() const { return true; }
54  virtual bool IsRouteAggregationSupported() const {
55  return((family_ == Address::INETMPLS) ? false : true); }
56  virtual BgpAttrPtr GetAttributes(BgpRoute *rt, BgpAttrPtr attrp,
57  const IPeer *peer);
58  void UpdateRoute(const InetVpnPrefix &inetvpn_prefix, const IPeer *peer,
59  BgpAttrPtr inetvpn_attrp);
60 
61 private:
63  const IPeer *peer);
65  BgpAttrPtr UpdateAttributes(const BgpAttrPtr inetvpn_attrp,
66  const BgpAttrPtr inet_attrp);
67  void UpdateExtendedCommunity(RibOutAttr *roattr);
68  virtual BgpRoute *TableFind(DBTablePartition *rtp,
69  const DBRequestKey *prefix);
70 
73 };
74 
75 #endif // SRC_BGP_INET_INET_TABLE_H_
virtual bool IsRoutingPolicySupported() const
Definition: inet_table.h:53
BgpAttrPtr UpdateAttributes(const BgpAttrPtr inetvpn_attrp, const BgpAttrPtr inet_attrp)
Definition: inet_table.cc:239
Family
Definition: address.h:24
Definition: route.h:14
void UpdateRoute(const InetVpnPrefix &inetvpn_prefix, const IPeer *peer, BgpAttrPtr inetvpn_attrp)
Definition: inet_table.cc:352
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
Definition: inet_table.cc:32
virtual size_t Hash(const DBEntry *entry) const
Definition: inet_table.cc:42
virtual PathResolver * CreatePathResolver()
Definition: inet_table.cc:397
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: inet_table.cc:61
Definition: ipeer.h:186
virtual Address::Family family() const
Definition: inet_table.h:37
Definition: db.h:24
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
Definition: bgp_attr.h:991
BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_tbl, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
Definition: inet_table.cc:67
const IPeer * peer
Definition: inet_table.h:26
boost::intrusive_ptr< const ExtCommunity > ExtCommunityPtr
Definition: community.h:448
virtual BgpAttrPtr GetAttributes(BgpRoute *rt, BgpAttrPtr attrp, const IPeer *peer)
Definition: inet_table.cc:285
static size_t HashFunction(const Ip4Prefix &addr)
Definition: inet_table.cc:28
const std::string & name() const
Definition: db_table.h:110
void UpdateExtendedCommunity(RibOutAttr *roattr)
Definition: inet_table.cc:198
RequestKey(const Ip4Prefix &prefix, const IPeer *ipeer)
Definition: inet_table.h:22
BgpAttrPtr GetMvpnAttributes(BgpAttrPtr attrp)
Definition: inet_table.cc:293
BgpServer * server()
Definition: bgp_table.cc:88
Address::Family family_
Definition: inet_table.h:71
virtual bool IsRouteAggregationSupported() const
Definition: inet_table.h:54
virtual const IPeer * GetPeer() const
Definition: inet_table.h:27
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)
Definition: inet_table.cc:173
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
Definition: inet_table.cc:37
DISALLOW_COPY_AND_ASSIGN(InetTable)
BgpAttrPtr GetFabricAttributes(BgpRoute *rt, BgpAttrPtr attrp, const IPeer *peer)
Definition: inet_table.cc:313
InetTable(DB *db, const std::string &name)
Definition: inet_table.cc:22
virtual BgpRoute * TableFind(DBTablePartition *rtp, const DBRequestKey *prefix)
Definition: inet_table.cc:54