OpenSDN source code
vrf.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_agent_vrf_hpp
6 #define vnsw_agent_vrf_hpp
7 
8 #include <atomic>
9 #include <mutex>
10 
11 #include <cmn/agent_cmn.h>
12 #include <cmn/index_vector.h>
13 #include <cmn/agent.h>
14 #include <oper/agent_types.h>
15 #include <oper/oper_db.h>
17 #include <oper/interface.h>
18 
19 class LifetimeActor;
20 class LifetimeManager;
21 class ComponentNHData;
22 class AgentRouteWalker;
23 class AgentRouteResync;
24 
25 struct VrfKey : public AgentOperDBKey {
26  VrfKey(const string &name) : AgentOperDBKey(), name_(name) { }
27  virtual ~VrfKey() { }
28 
29  void Init(const string &vrf_name) {name_ = vrf_name;};
30  bool IsLess(const VrfKey &rhs) const {
31  return name_ < rhs.name_;
32  }
33 
34  bool IsEqual(const VrfKey &rhs) const {
35  if ((IsLess(rhs) == false) && (rhs.IsLess(*this) == false)) {
36  return true;
37  }
38  return false;
39  }
40 
41  string name_;
42 };
43 
44 struct VrfData : public AgentOperDBData {
46  ConfigVrf = 1 << 0, // vrf is received from config
47  GwVrf = 1 << 1, // GW configured for this VRF
48  MirrorVrf = 1 << 2, // internally Created VRF
49  PbbVrf = 1 << 3, // Per ISID VRF
50  //Note addition of new flag may need update in
51  //ConfigFlags() API, if flag being added is a property
52  //flag(Ex PbbVrf) and not flag indicating Config origination(ex: GwVrf)
53  };
54 
55  enum VrfId {
58  };
59 
60  VrfData(Agent *agent, IFMapNode *node, uint32_t flags,
61  const boost::uuids::uuid &vn_uuid, uint32_t isid,
62  const std::string bmac_vrf_name,
63  uint32_t mac_aging_time, bool learning_enabled,
64  uint32_t hbf_rintf = Interface::kInvalidIndex,
65  uint32_t hbf_lintf = Interface::kInvalidIndex) :
66  AgentOperDBData(agent, node), flags_(flags), vn_uuid_(vn_uuid),
67  isid_(isid), bmac_vrf_name_(bmac_vrf_name),
68  mac_aging_time_(mac_aging_time), learning_enabled_(learning_enabled),
69  forwarding_vrf_name_(""), hbf_rintf_(hbf_rintf),
70  hbf_lintf_(hbf_lintf) {}
71  virtual ~VrfData() {}
72 
73  uint32_t ConfigFlags() {
74  return ~(PbbVrf);
75  }
76 
77  uint32_t flags_;
80  uint32_t isid_;
81  std::string bmac_vrf_name_;
82  uint32_t mac_aging_time_;
84  std::string forwarding_vrf_name_;
85  uint32_t hbf_rintf_;
86  uint32_t hbf_lintf_;
87 };
88 
89 class VrfEntry : AgentRefCount<VrfEntry>, public AgentOperDBEntry {
90 public:
91  static const uint32_t kInvalidIndex = 0xFFFFFFFF;
92  static const uint32_t kDeleteTimeout = 900 * 1000;
93 
94  VrfEntry(const string &name, uint32_t flags, Agent *agent);
95  virtual ~VrfEntry();
96 
97  virtual bool IsLess(const DBEntry &rhs) const;
98  virtual KeyPtr GetDBRequestKey() const;
99  virtual void SetKey(const DBRequestKey *key);
100  virtual string ToString() const;
101 
102  const uint32_t vrf_id() const {return id_;};
103  const string &GetName() const {return name_;};
104  VnEntry *vn() const { return vn_.get(); }
105  VnEntry *si_vn_ref() const { return si_vn_ref_.get(); }
106 
107  uint32_t GetRefCount() const {
109  }
110 
111  uint32_t flags() const { return flags_; }
112  void set_flags(uint32_t flags) { flags_ |= flags; }
114  return (flags_ & flags);
115  }
116 
117  void set_table_label(uint32_t label) {
118  table_label_ = label;
119  }
120  uint32_t table_label() const {
121  return table_label_;
122  }
123 
124  const std::string& GetExportName() {
126  return bmac_vrf_name_;
127  }
128  return name_;
129  }
130 
131  bool learning_enabled() const {
132  return learning_enabled_;
133  }
134 
135  bool ShouldExportRoute() const {
137  return false;
138  }
139  return true;
140  }
141 
142  bool layer2_control_word() const {
143  return layer2_control_word_;
144  }
145 
146  const uint32_t hbf_rintf() const { return hbf_rintf_; }
147  const uint32_t hbf_lintf() const { return hbf_lintf_; }
148 
149  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
150  InetUnicastRouteEntry *GetUcRoute(const IpAddress &addr) const;
152  bool UpdateVxlanId(Agent *agent, uint32_t new_vxlan_id);
153 
155  virtual void RetryDelete();
156  bool AllRouteTablesEmpty() const;
157  void SendObjectLog(AgentLogEvent::type event) const;
158  void StartDeleteTimer();
159  bool DeleteTimeout();
160  void CancelDeleteTimer();
161  bool ResetVrfDelete();
162  void PostAdd();
163  void AddNH(Ip4Address ip, uint8_t plen, ComponentNHData *nh_data) ;
164  void DeleteNH(Ip4Address ip, uint8_t plen, ComponentNHData *nh_data) ;
165  uint32_t GetNHCount(Ip4Address ip, uint8_t plen) ;
166  void UpdateLabel(Ip4Address ip, uint8_t plen, uint32_t label);
167  uint32_t GetLabel(Ip4Address ip, uint8_t plen);
168  uint32_t vxlan_id() const {return vxlan_id_;}
169  std::vector<ComponentNHData>* GetNHList(Ip4Address ip, uint8_t plen);
170  bool FindNH(const Ip4Address &ip, uint8_t plen,
171  const ComponentNHData &nh_data);
172 
179  AgentRouteTable *GetRouteTable(uint8_t table_type) const;
180  void CreateTableLabel(bool learning_enabled, bool l2,
181  bool flod_unknown_unicast,
182  bool layer2_control_word);
183  const std::string GetTableTypeString(uint8_t table_type) const;
184  bool AllRouteTableDeleted() const;
185  bool RouteTableDeleted(uint8_t table_type) const;
186  void SetRouteTableDeleted(uint8_t table_type);
187  void DeleteRouteTables();
188  void ResyncRoutes();
191  }
192 
193  //To be set in test cases only
196  }
198  void ReleaseWalker();
199 
200  uint32_t isid() const {
201  return isid_;
202  }
203 
204  const std::string bmac_vrf_name() const {
205  return bmac_vrf_name_;
206  }
207 
208  bool IsPbbVrf() const {
210  }
211 
212  uint32_t mac_aging_time() const {
213  return mac_aging_time_;
214  }
215 
216  void set_mac_aging_time(uint32_t aging_time) {
217  mac_aging_time_ = aging_time;
218  }
219 
221  return forwarding_vrf_.get();
222  }
223  int rd() const {return rd_;}
224  void set_rd(int rd) {rd_ = rd;}
225  void set_routing_vrf(bool val) {routing_vrf_ = val;}
226  bool routing_vrf() const {return routing_vrf_;}
227  void set_hbf_rintf(uint32_t idx) {hbf_rintf_ = idx;}
228  void set_hbf_lintf(uint32_t idx) {hbf_lintf_ = idx;}
229 
230 private:
231  friend class VrfTable;
232  void CreateRouteTables();
233  void SetNotify();
234  int RDInstanceId(bool tor_agent_enabled) const;
235 
236  class DeleteActor;
237  string name_;
238  uint32_t id_;
239  uint32_t flags_;
241  // service-instance primary VN reference
245  boost::scoped_ptr<DeleteActor> deleter_;
248  uint32_t table_label_;
249  uint32_t vxlan_id_;
255  uint32_t isid_;
256  std::atomic<uint32_t> mac_aging_time_;
260  bool l2_;
262  int rd_;
264  uint32_t retries_;
265  uint32_t hbf_rintf_;
266  uint32_t hbf_lintf_;
267  bool deleted_;
269 };
270 
271 class VrfTable : public AgentOperDBTable {
272 public:
273  const static uint32_t kDefaultMacAgingTime = 300;
274  // Map from VRF Name to VRF Entry
275  typedef map<string, VrfEntry *> VrfNameTree;
276  typedef pair<string, VrfEntry *> VrfNamePair;
277 
278  // Config tree of VRF to VMI entries. Tree used to track the VMIs that are
279  // already processed after VRF has been added
280  typedef std::set<std::string, boost::uuids::uuid> CfgVmiTree;
281 
282  // Map from VRF Name to Route Table
283  typedef map<string, RouteTable *> VrfDbTree;
284  typedef pair<string, RouteTable *> VrfDbPair;
285 
286  VrfTable(DB *db, const std::string &name) :
287  AgentOperDBTable(db, name), db_(db),
288  walkid_(DBTableWalker::kInvalidWalkerId),
289  route_delete_walker_(NULL),
290  vrf_delete_walker_(NULL) { };
291  virtual ~VrfTable();
292 
293  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
294  virtual size_t Hash(const DBEntry *entry) const {return 0;};
295  virtual size_t Hash(const DBRequestKey *key) const {return 0;};
296  virtual void Input(DBTablePartition *root, DBClient *client,
297  DBRequest *req);
298  void VrfReuse(std::string name);
299  virtual DBEntry *OperDBAdd(const DBRequest *req);
300  virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req);
301  virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req);
302  virtual void OnZeroRefcount(AgentDBEntry *e);
304  const std::string &context);
305  virtual void Clear();
306 
307  // Create a VRF entry with given name
308  void CreateVrf(const string &name,
309  const boost::uuids::uuid &vn_uuid, uint32_t flags);
310  void CreateVrf(const string &name,
311  const boost::uuids::uuid &vn_uuid, uint32_t flags,
312  uint32_t isid, const std::string& bmac_vrf_name,
313  uint32_t mac_aging_time, bool learning_enabled);
314  void DeleteVrf(const string &name, uint32_t flags = VrfData::ConfigVrf);
315  void CreateVrfReq(const string &name, uint32_t flags = VrfData::ConfigVrf);
316  void CreateVrfReq(const string &name, const boost::uuids::uuid &vn_uuid,
317  uint32_t flags = VrfData::ConfigVrf);
318  void DeleteVrfReq(const string &name, uint32_t flags = VrfData::ConfigVrf);
319  //Add and delete routine for VRF not deleted on VRF config delete
320  void CreateStaticVrf(const string &name);
321  void DeleteStaticVrf(const string &name);
322  void CreateFabricPolicyVrf(const string &name);
323 
324  // Create VRF Table with given name
325  static DBTableBase *CreateTable(DB *db, const std::string &name);
326  static VrfTable *GetInstance() {return vrf_table_;};
327 
328  virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req,
329  const boost::uuids::uuid &u);
330  bool ProcessConfig(IFMapNode *node, DBRequest &req,
331  const boost::uuids::uuid &u);
332 
333  VrfEntry *FindVrfFromName(const string &name);
334  VrfEntry *FindVrfFromId(size_t index);
336  void FreeVrfId(size_t index);
337 
339  (const std::string &vrf_name);
341  (const std::string &vrf_name);
342  AgentRouteTable *GetInet4MulticastRouteTable(const std::string &vrf_name);
343  AgentRouteTable *GetEvpnRouteTable(const std::string &vrf_name);
344  AgentRouteTable *GetBridgeRouteTable(const std::string &vrf_name);
345  AgentRouteTable *GetRouteTable(const string &vrf_name, uint8_t table_type);
347  (const std::string &vrf_name);
348  bool IsStaticVrf(const std::string &vrf_name) const {
349  if (static_vrf_set_.find(vrf_name) != static_vrf_set_.end()) {
350  return true;
351  }
352  return false;
353  }
354 
355  void DeleteRoutes();
356  void Shutdown();
357  void DeleteFromDbTree(int table_type, const std::string &vrf_name);
360 
361 private:
362  friend class VrfEntry;
363 
364  DB *db_;
370  std::set<std::string> static_vrf_set_;
374 };
375 
376 #endif // vnsw_agent_vrf_hpp
boost::asio::ip::address IpAddress
Definition: address.h:13
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
boost::intrusive_ptr< NextHop > NextHopRef
Definition: agent.h:124
boost::intrusive_ptr< VnEntry > VnEntryRef
Definition: agent.h:68
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:20
boost::intrusive_ptr< AgentRouteWalker > AgentRouteWalkerPtr
uint32_t GetRefCount() const
Definition: agent_db.h:56
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge,...
Definition: agent_route.h:109
Definition: agent.h:360
@ ROUTE_TABLE_MAX
Definition: agent.h:425
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:24
const std::string & name() const
Definition: db_table.h:110
Definition: db.h:24
boost::intrusive_ptr< IFMapNodeState > IFMapNodePtr
static const uint32_t kInvalidIndex
Definition: interface.h:72
Definition: timer.h:57
Definition: vn.h:151
Definition: vrf.h:89
const std::string & GetExportName()
Definition: vrf.h:124
void set_allow_route_add_on_deleted_vrf(bool val)
Definition: vrf.h:194
const string & GetName() const
Definition: vrf.h:103
uint32_t hbf_lintf_
Definition: vrf.h:266
IFMapDependencyManager::IFMapNodePtr vrf_node_ptr_
Definition: vrf.h:251
uint32_t table_label() const
Definition: vrf.h:120
void DeleteNH(Ip4Address ip, uint8_t plen, ComponentNHData *nh_data)
void set_hbf_lintf(uint32_t idx)
Definition: vrf.h:228
DBTableWalker::WalkId walkid_
Definition: vrf.h:244
AgentRouteTable * GetBridgeRouteTable() const
Definition: vrf.cc:334
NextHopRef nh_
Definition: vrf.h:243
void set_table_label(uint32_t label)
Definition: vrf.h:117
void StartDeleteTimer()
Definition: vrf.cc:451
bool layer2_control_word_
Definition: vrf.h:259
bool learning_enabled() const
Definition: vrf.h:131
void CreateTableLabel(bool learning_enabled, bool l2, bool flod_unknown_unicast, bool layer2_control_word)
Definition: vrf.cc:118
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
Definition: vrf.cc:342
void set_mac_aging_time(uint32_t aging_time)
Definition: vrf.h:216
virtual void SetKey(const DBRequestKey *key)
Definition: vrf.cc:232
bool allow_route_add_on_deleted_vrf() const
Definition: vrf.h:189
VrfEntryRef forwarding_vrf_
Definition: vrf.h:261
DISALLOW_COPY_AND_ASSIGN(VrfEntry)
int rd() const
Definition: vrf.h:223
bool ResetVrfDelete()
Definition: vrf.cc:465
void DeleteRouteTables()
Definition: vrf.cc:154
bool RouteTableDeleted(uint8_t table_type) const
Definition: vrf.cc:277
const std::string GetTableTypeString(uint8_t table_type) const
Definition: vrf.cc:289
bool ShouldExportRoute() const
Definition: vrf.h:135
void ResyncRoutes()
Definition: vrf.cc:516
const std::string bmac_vrf_name() const
Definition: vrf.h:204
virtual ~VrfEntry()
Definition: vrf.cc:79
uint32_t flags() const
Definition: vrf.h:111
InetUnicastAgentRouteTable * GetInet4MplsUnicastRouteTable() const
Definition: vrf.cc:323
const uint32_t hbf_lintf() const
Definition: vrf.h:147
std::vector< ComponentNHData > * GetNHList(Ip4Address ip, uint8_t plen)
const uint32_t hbf_rintf() const
Definition: vrf.h:146
virtual string ToString() const
Definition: vrf.cc:104
uint32_t vxlan_id_
Definition: vrf.h:249
bool UpdateVxlanId(Agent *agent, uint32_t new_vxlan_id)
Definition: vrf.cc:108
void set_flags(uint32_t flags)
Definition: vrf.h:112
AgentRouteTable * rt_table_db_[Agent::ROUTE_TABLE_MAX]
Definition: vrf.h:246
uint32_t isid_
Definition: vrf.h:255
bool DeleteTimeout()
Definition: vrf.cc:417
void set_rd(int rd)
Definition: vrf.h:224
VnEntryRef si_vn_ref_
Definition: vrf.h:242
uint32_t GetLabel(Ip4Address ip, uint8_t plen)
InetUnicastRouteEntry * GetUcRoute(const IpAddress &addr) const
Definition: vrf.cc:237
void PostAdd()
Definition: vrf.cc:168
void set_routing_vrf(bool val)
Definition: vrf.h:225
void CreateRouteTables()
Definition: vrf.cc:141
InetUnicastAgentRouteTable * GetInet4UnicastRouteTable() const
Definition: vrf.cc:319
static const uint32_t kDeleteTimeout
Definition: vrf.h:92
bool deleted_
Definition: vrf.h:267
uint32_t hbf_rintf_
Definition: vrf.h:265
uint32_t mac_aging_time() const
Definition: vrf.h:212
int rd_
Definition: vrf.h:262
VrfEntry(const string &name, uint32_t flags, Agent *agent)
Definition: vrf.cc:64
void SetNotify()
Definition: vrf.cc:583
boost::scoped_ptr< DeleteActor > deleter_
Definition: vrf.h:245
uint32_t retries_
Definition: vrf.h:264
void set_hbf_rintf(uint32_t idx)
Definition: vrf.h:227
bool routing_vrf_
Definition: vrf.h:263
void ReleaseWalker()
Definition: vrf.cc:566
static const uint32_t kInvalidIndex
Definition: vrf.h:91
uint32_t id_
Definition: vrf.h:238
bool IsPbbVrf() const
Definition: vrf.h:208
uint32_t isid() const
Definition: vrf.h:200
InetUnicastAgentRouteTable * GetInet6UnicastRouteTable() const
Definition: vrf.cc:338
virtual bool IsLess(const DBEntry &rhs) const
Definition: vrf.cc:99
const uint32_t vrf_id() const
Definition: vrf.h:102
uint32_t table_label_
Definition: vrf.h:248
uint32_t rt_table_delete_bmap_
Definition: vrf.h:250
void AddNH(Ip4Address ip, uint8_t plen, ComponentNHData *nh_data)
LifetimeActor * deleter()
Definition: vrf.cc:264
InetUnicastAgentRouteTable * GetInetUnicastRouteTable(const IpAddress &addr) const
Definition: vrf.cc:575
AgentRouteTable * GetEvpnRouteTable() const
Definition: vrf.cc:330
bool FindNH(const Ip4Address &ip, uint8_t plen, const ComponentNHData &nh_data)
AgentRouteTable * GetInet4MulticastRouteTable() const
Definition: vrf.cc:326
bool are_flags_set(const VrfData::VrfEntryFlags &flags) const
Definition: vrf.h:113
uint32_t flags_
Definition: vrf.h:239
string name_
Definition: vrf.h:236
virtual void RetryDelete()
Definition: vrf.cc:544
std::atomic< uint32_t > mac_aging_time_
Definition: vrf.h:256
bool routing_vrf() const
Definition: vrf.h:226
bool allow_route_add_on_deleted_vrf_
Definition: vrf.h:253
bool l2_
Definition: vrf.h:260
bool AllRouteTableDeleted() const
Definition: vrf.cc:268
uint32_t vxlan_id() const
Definition: vrf.h:168
VrfEntry * forwarding_vrf() const
Definition: vrf.h:220
VnEntry * si_vn_ref() const
Definition: vrf.h:105
string bmac_vrf_name_
Definition: vrf.h:254
void SetRouteTableDeleted(uint8_t table_type)
Definition: vrf.cc:281
void SendObjectLog(AgentLogEvent::type event) const
Definition: vrf.cc:391
virtual KeyPtr GetDBRequestKey() const
Definition: vrf.cc:227
uint32_t GetRefCount() const
Definition: vrf.h:107
VnEntry * vn() const
Definition: vrf.h:104
VnEntryRef vn_
Definition: vrf.h:240
bool learning_enabled_
Definition: vrf.h:258
uint32_t GetNHCount(Ip4Address ip, uint8_t plen)
bool AllRouteTablesEmpty() const
Definition: vrf.cc:555
bool layer2_control_word() const
Definition: vrf.h:142
AgentRouteWalkerPtr route_resync_walker_
Definition: vrf.h:252
AgentRouteTable * GetRouteTable(uint8_t table_type) const
Definition: vrf.cc:285
int RDInstanceId(bool tor_agent_enabled) const
Definition: vrf.cc:530
void CancelDeleteTimer()
Definition: vrf.cc:461
std::mutex delete_reuse_mutex_
Definition: vrf.h:257
Timer * delete_timeout_timer_
Definition: vrf.h:247
void UpdateLabel(Ip4Address ip, uint8_t plen, uint32_t label)
Definition: vrf.h:271
IndexVector< VrfEntry * > index_table_
Definition: vrf.h:366
void DeleteFromDbTree(int table_type, const std::string &vrf_name)
Definition: vrf.cc:1016
virtual DBEntry * OperDBAdd(const DBRequest *req)
Definition: vrf.cc:645
virtual ~VrfTable()
Definition: vrf.cc:642
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: vrf.cc:1252
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: vrf.cc:867
bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: vrf.cc:1279
void DeleteVrf(const string &name, uint32_t flags=VrfData::ConfigVrf)
Definition: vrf.cc:987
void CreateFabricPolicyVrf(const string &name)
Definition: vrf.cc:1000
void reset_route_delete_walker()
Definition: vrf.h:358
AgentRouteWalkerPtr vrf_delete_walker_
Definition: vrf.h:372
pair< string, RouteTable * > VrfDbPair
Definition: vrf.h:284
VrfEntry * FindVrfFromName(const string &name)
Definition: vrf.cc:873
VrfEntry * FindVrfFromIdIncludingDeletedVrf(size_t index)
Definition: vrf.cc:892
InetUnicastAgentRouteTable * GetInet6UnicastRouteTable(const std::string &vrf_name)
Definition: vrf.cc:922
void reset_vrf_delete_walker()
Definition: vrf.h:359
map< string, VrfEntry * > VrfNameTree
Definition: vrf.h:275
AgentRouteTable * GetEvpnRouteTable(const std::string &vrf_name)
Definition: vrf.cc:913
map< string, RouteTable * > VrfDbTree
Definition: vrf.h:283
void DeleteStaticVrf(const string &name)
Definition: vrf.cc:1011
static VrfTable * vrf_table_
Definition: vrf.h:365
virtual void Clear()
Definition: vrf.cc:627
void VrfReuse(std::string name)
Definition: vrf.cc:842
VrfTable(DB *db, const std::string &name)
Definition: vrf.h:286
virtual void Input(DBTablePartition *root, DBClient *client, DBRequest *req)
Definition: vrf.cc:1020
void DeleteVrfReq(const string &name, uint32_t flags=VrfData::ConfigVrf)
Definition: vrf.cc:979
DBTableWalker::WalkId walkid_
Definition: vrf.h:369
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
Definition: vrf.cc:636
virtual size_t Hash(const DBRequestKey *key) const
Definition: vrf.h:295
pair< string, VrfEntry * > VrfNamePair
Definition: vrf.h:276
AgentRouteWalkerPtr route_delete_walker_
Definition: vrf.h:371
AgentRouteTable * GetRouteTable(const string &vrf_name, uint8_t table_type)
Definition: vrf.cc:927
AgentRouteTable * GetBridgeRouteTable(const std::string &vrf_name)
Definition: vrf.cc:917
std::set< std::string, boost::uuids::uuid > CfgVmiTree
Definition: vrf.h:280
static const uint32_t kDefaultMacAgingTime
Definition: vrf.h:273
VrfEntry * FindVrfFromId(size_t index)
Definition: vrf.cc:884
void CreateStaticVrf(const string &name)
Definition: vrf.cc:995
void CreateVrf(const string &name, const boost::uuids::uuid &vn_uuid, uint32_t flags)
Definition: vrf.cc:970
VrfDbTree dbtree_[Agent::ROUTE_TABLE_MAX]
Definition: vrf.h:368
DISALLOW_COPY_AND_ASSIGN(VrfTable)
InetUnicastAgentRouteTable * GetInet4UnicastRouteTable(const std::string &vrf_name)
Definition: vrf.cc:898
void Shutdown()
Definition: vrf.cc:1377
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
Definition: vrf.cc:1317
bool IsStaticVrf(const std::string &vrf_name) const
Definition: vrf.h:348
void FreeVrfId(size_t index)
Definition: vrf.cc:623
virtual void OnZeroRefcount(AgentDBEntry *e)
Definition: vrf.cc:856
VrfNameTree name_tree_
Definition: vrf.h:367
void CreateVrfReq(const string &name, uint32_t flags=VrfData::ConfigVrf)
Definition: vrf.cc:939
AgentRouteTable * GetInet4MulticastRouteTable(const std::string &vrf_name)
Definition: vrf.cc:909
InetUnicastAgentRouteTable * GetInet4MplsUnicastRouteTable(const std::string &vrf_name)
Definition: vrf.cc:904
virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
Definition: vrf.cc:688
virtual size_t Hash(const DBEntry *entry) const
Definition: vrf.h:294
static VrfTable * GetInstance()
Definition: vrf.h:326
std::set< std::string > static_vrf_set_
Definition: vrf.h:370
void DeleteRoutes()
Definition: vrf.cc:1363
DB * db_
Definition: vrf.h:364
virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req)
Definition: vrf.cc:781
uint8_t type
Definition: load_balance.h:2
const Agent * agent() const
Definition: oper_db.h:65
Definition: vrf.h:44
virtual ~VrfData()
Definition: vrf.h:71
boost::uuids::uuid vn_uuid_
Definition: vrf.h:78
uint32_t mac_aging_time_
Definition: vrf.h:82
VrfEntryFlags
Definition: vrf.h:45
@ ConfigVrf
Definition: vrf.h:46
@ GwVrf
Definition: vrf.h:47
@ PbbVrf
Definition: vrf.h:49
@ MirrorVrf
Definition: vrf.h:48
uint32_t flags_
Definition: vrf.h:77
boost::uuids::uuid si_vn_ref_uuid_
Definition: vrf.h:79
uint32_t ConfigFlags()
Definition: vrf.h:73
uint32_t isid_
Definition: vrf.h:80
VrfId
Definition: vrf.h:55
@ LINKLOCAL_VRF_ID
Definition: vrf.h:57
@ FABRIC_VRF_ID
Definition: vrf.h:56
uint32_t hbf_rintf_
Definition: vrf.h:85
bool learning_enabled_
Definition: vrf.h:83
VrfData(Agent *agent, IFMapNode *node, uint32_t flags, const boost::uuids::uuid &vn_uuid, uint32_t isid, const std::string bmac_vrf_name, uint32_t mac_aging_time, bool learning_enabled, uint32_t hbf_rintf=Interface::kInvalidIndex, uint32_t hbf_lintf=Interface::kInvalidIndex)
Definition: vrf.h:60
std::string forwarding_vrf_name_
Definition: vrf.h:84
uint32_t hbf_lintf_
Definition: vrf.h:86
std::string bmac_vrf_name_
Definition: vrf.h:81
Definition: vrf.h:25
virtual ~VrfKey()
Definition: vrf.h:27
VrfKey(const string &name)
Definition: vrf.h:26
void Init(const string &vrf_name)
Definition: vrf.h:29
bool IsLess(const VrfKey &rhs) const
Definition: vrf.h:30
string name_
Definition: vrf.h:41
bool IsEqual(const VrfKey &rhs) const
Definition: vrf.h:34
boost::uuids::uuid uuid