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