OpenSDN source code
vn.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_vn_hpp
6 #define vnsw_agent_vn_hpp
7 
8 #include <cmn/agent_cmn.h>
9 #include <cmn/agent.h>
10 #include <oper/agent_types.h>
11 #include <oper/oper_db.h>
12 #include <oper/oper_dhcp_options.h>
14 
15 class AgentRouteResync;
16 
17 namespace autogen {
18  class NetworkIpam;
19  class VirtualDns;
20  struct IpamType;
21  struct VirtualDnsType;
22 }
23 
24 bool IsVRFServiceChainingInstance(const std::string &vn_name,
25  const std::string &vrf_name);
26 class VmInterface;
27 
28 struct VnIpam {
30  uint32_t plen;
32  // In case of TSN, we could have different addresses for default_gw & dns
34  bool installed; // is the route to send pkts to host installed
37  std::string ipam_name;
39  uint32_t alloc_unit;
40 
41  VnIpam(const std::string& ip, uint32_t len, const std::string& gw,
42  const std::string& dns, bool dhcp, const std::string &name,
43  const std::vector<autogen::DhcpOptionType> &dhcp_options,
44  const std::vector<autogen::RouteType> &host_routes,
45  uint32_t alloc);
46 
47  bool IsV4() const {
48  return ip_prefix.is_v4();
49  }
50  bool IsV6() const {
51  return ip_prefix.is_v6();
52  }
53  bool operator<(const VnIpam &rhs) const {
54  if (ip_prefix != rhs.ip_prefix)
55  return ip_prefix < rhs.ip_prefix;
56 
57  return (plen < rhs.plen);
58  }
60 
61  bool IsSubnetMember(const IpAddress &ip) const;
62 };
63 
64 // Per IPAM data of the VN
67 
68  bool operator==(const VnIpamLinkData &rhs) const {
71  return true;
72  return false;
73  }
74 };
75 
76 struct VnKey : public AgentOperDBKey {
77  VnKey(const boost::uuids::uuid &id) : AgentOperDBKey(), uuid_(id) { }
78  virtual ~VnKey() { }
79 
81 };
82 
83 struct VnData : public AgentOperDBData {
84  typedef std::map<std::string, VnIpamLinkData> VnIpamDataMap;
85  typedef std::pair<std::string, VnIpamLinkData> VnIpamDataPair;
86 
87  VnData(const Agent *agent, IFMapNode *node, const string &name,
88  const boost::uuids::uuid &acl_id, const string &vrf_name,
89  const boost::uuids::uuid &mirror_acl_id,
90  const boost::uuids::uuid &mc_acl_id, const std::vector<VnIpam> &ipam,
91  const VnIpamDataMap &vn_ipam_data, int vxlan_id, int vnid,
92  bool admin_state, bool enable_rpf, bool flood_unknown_unicast,
93  Agent::ForwardingMode forwarding_mode,
94  const boost::uuids::uuid &qos_config_uuid, bool mirror_destination,
95  bool pbb_etree_enable, bool pbb_evpn_enable,
96  bool layer2_control_word, UuidList slo_list,
97  bool underlay_forwarding,
98  bool vxlan_routing_vn,
99  const boost::uuids::uuid &logical_router_uuid,
100  UuidList mp_list, bool cfg_igmp_enable, uint32_t vn_max_flows,
101  bool mac_ip_learning_enable,
102  const boost::uuids::uuid &health_check_uuid) :
103  AgentOperDBData(agent, node), name_(name), vrf_name_(vrf_name),
104  acl_id_(acl_id), mirror_acl_id_(mirror_acl_id),
105  mirror_cfg_acl_id_(mc_acl_id), ipam_(ipam), vn_ipam_data_(vn_ipam_data),
106  vxlan_id_(vxlan_id), vnid_(vnid), admin_state_(admin_state),
107  enable_rpf_(enable_rpf), flood_unknown_unicast_(flood_unknown_unicast),
108  forwarding_mode_(forwarding_mode), qos_config_uuid_(qos_config_uuid),
109  mirror_destination_(mirror_destination),
110  pbb_etree_enable_(pbb_etree_enable), pbb_evpn_enable_(pbb_evpn_enable),
111  layer2_control_word_(layer2_control_word), slo_list_(slo_list),
112  underlay_forwarding_(underlay_forwarding),
113  vxlan_routing_vn_(vxlan_routing_vn),
114  logical_router_uuid_(logical_router_uuid), mp_list_(mp_list),
115  cfg_igmp_enable_(cfg_igmp_enable),
116  vn_max_flows_(vn_max_flows),
117  mac_ip_learning_enable_(mac_ip_learning_enable),
118  health_check_uuid_(health_check_uuid) {
119  };
120  virtual ~VnData() { }
121 
122  string name_;
123  string vrf_name_;
127  std::vector<VnIpam> ipam_;
130  int vnid_;
146  uint32_t vn_max_flows_;
149 };
150 
151 class VnEntry : AgentRefCount<VnEntry>, public AgentOperDBEntry {
152 public:
153  VnEntry(Agent *agent, boost::uuids::uuid id);
154  virtual ~VnEntry();
155 
156  virtual bool IsLess(const DBEntry &rhs) const;
157  virtual KeyPtr GetDBRequestKey() const;
158  virtual void SetKey(const DBRequestKey *key);
159  virtual string ToString() const;
160 
161  const boost::uuids::uuid &GetUuid() const {return uuid_;};
162  const string &GetName() const {return name_;};
163  bool IsAclSet() const {
164  return ((acl_.get() != NULL) || (mirror_acl_.get() != NULL) ||
165  (mirror_cfg_acl_.get() != NULL));
166  }
167  const AclDBEntry *GetAcl() const {return acl_.get();}
168  const AclDBEntry *GetMirrorAcl() const {return mirror_acl_.get();}
169  const AclDBEntry *GetMirrorCfgAcl() const {return mirror_cfg_acl_.get();}
170  VrfEntry *GetVrf() const {return vrf_.get();}
171  const std::vector<VnIpam> &GetVnIpam() const { return ipam_; }
172  const VnIpam *GetIpam(const IpAddress &ip) const;
173  IpAddress GetGatewayFromIpam(const IpAddress &ip) const;
174  IpAddress GetDnsFromIpam(const IpAddress &ip) const;
175  uint32_t GetAllocUnitFromIpam(const IpAddress &ip) const;
176  bool GetVnHostRoutes(const std::string &ipam,
177  std::vector<OperDhcpOptions::HostRoute> *routes) const;
178  bool GetIpamName(const IpAddress &vm_addr, std::string *ipam_name) const;
179  bool GetIpamData(const IpAddress &vm_addr, std::string *ipam_name,
180  autogen::IpamType *ipam_type) const;
181  bool GetIpamVdnsData(const IpAddress &vm_addr,
182  autogen::IpamType *ipam_type,
183  autogen::VirtualDnsType *vdns_type) const;
184  bool GetPrefix(const Ip6Address &ip, Ip6Address *prefix,
185  uint8_t *plen) const;
186  std::string GetProject() const;
187  int GetVxLanId() const;
188 
190  int GetOperVxlanId() const;
191 
192  const VxLanId *vxlan_id_ref() const {return vxlan_id_ref_.get();}
194  bool bridging() const {return bridging_;};
195  bool layer3_forwarding() const {return layer3_forwarding_;};
199 
200  bool admin_state() const {return admin_state_;}
201  bool enable_rpf() const {return enable_rpf_;}
203 
204  const AgentQosConfig* qos_config() const {
205  return qos_config_.get();
206  }
207 
208  const bool mirror_destination() const {
209  return mirror_destination_;
210  }
211  int vnid() const {return vnid_;}
212 
213  bool pbb_etree_enable() const {
214  return pbb_etree_enable_;
215  }
216 
217  bool pbb_evpn_enable() const {
218  return pbb_evpn_enable_;
219  }
220 
221  bool layer2_control_word() const {
222  return layer2_control_word_;
223  }
224 
225  const UuidList &slo_list() const {
226  return slo_list_;
227  }
228 
229  bool underlay_forwarding() const {
230  return underlay_forwarding_;
231  }
232 
233  const UuidList &mp_list() const {
234  return mp_list_;
235  }
236 
237  bool cfg_igmp_enable() const {
238  return cfg_igmp_enable_;
239  }
240 
241  bool mac_ip_learning_enable() const {
243  }
244 
246  return health_check_uuid_;
247  }
248 
249  uint32_t GetRefCount() const {
251  }
252  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
254  AgentLogEvent::type event) const;
255  bool IdentifyBgpRoutersServiceIp(const IpAddress &ip_address, bool *is_dns,
256  bool *is_gateway) const;
257  void AllocWalker();
258  void ReleaseWalker();
259  bool vxlan_routing_vn() const {return vxlan_routing_vn_;}
261  return logical_router_uuid_;
262  }
263  uint32_t vn_max_flows() const {return vn_max_flows_;}
264 
265  const VrfEntry* lr_vrf() const {
266  return lr_vrf_.get();
267  }
268 
269  void set_lr_vrf(const VrfEntry *vrf) {
270  lr_vrf_.reset(vrf);
271  }
272 
273 private:
274  friend class VnTable;
275  bool Resync(Agent *agent);
276  bool ChangeHandler(Agent *agent, const DBRequest *req);
277  bool UpdateVxlan(Agent *agent, bool op_del);
278  void ResyncRoutes();
280  bool ApplyAllIpam(Agent *agent, VrfEntry *old_vrf, bool del);
281  bool ApplyIpam(Agent *agent, VnIpam *ipam, VrfEntry *old_vrf, bool del);
282  bool CanInstallIpam(const VnIpam *ipam);
283  bool UpdateIpam(Agent *agent, std::vector<VnIpam> &new_ipam);
284  bool HandleIpamChange(Agent *agent, VnIpam *old_ipam, VnIpam *new_ipam);
285  void UpdateHostRoute(Agent *agent, const IpAddress &old_address,
286  const IpAddress &new_address, bool policy);
287  bool AddIpamRoutes(Agent *agent, VnIpam *ipam);
288  void DelIpamRoutes(Agent *agent, VnIpam *ipam, VrfEntry *vrf);
289  void AddHostRoute(const IpAddress &address, bool policy);
290  void DelHostRoute(const IpAddress &address);
291  void AddSubnetRoute(VnIpam *ipam);
292  void DelSubnetRoute(VnIpam *ipam);
293 
296  string name_;
301  std::vector<VnIpam> ipam_;
304  int vnid_;
305  // Based on vxlan-network-identifier mode, the active_vxlan_id_ is picked
306  // from either vxlan_id_ or vnid_
308  bool bridging_;
312  uint32_t table_label_;
328  uint32_t vn_max_flows_;
333 };
334 
335 class VnTable : public AgentOperDBTable {
336 public:
337  VnTable(DB *db, const std::string &name);
338  virtual ~VnTable();
339 
340  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
341  virtual size_t Hash(const DBEntry *entry) const {return 0;};
342  virtual size_t Hash(const DBRequestKey *key) const {return 0;};
344  const std::string &context);
345 
346  virtual DBEntry *OperDBAdd(const DBRequest *req);
347  virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req);
348  virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req);
349  virtual bool OperDBResync(DBEntry *entry, const DBRequest *req);
350 
351  virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req,
352  const boost::uuids::uuid &u);
353  virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u);
354  virtual bool ProcessConfig(IFMapNode *node, DBRequest &req,
355  const boost::uuids::uuid &u);
356  virtual void Clear();
357 
358  void CfgForwardingFlags(IFMapNode *node, bool *rpf,
359  bool *flood_unknown_unicast,
360  Agent::ForwardingMode *forwarding_mode,
361  bool *mirror_destination);
362 
363  static DBTableBase *CreateTable(DB *db, const std::string &name);
364  static VnTable *GetInstance() {return vn_table_;};
365 
366  void AddVn(const boost::uuids::uuid &vn_uuid, const string &name,
367  const boost::uuids::uuid &acl_id, const string &vrf_name,
368  const std::vector<VnIpam> &ipam,
369  const VnData::VnIpamDataMap &vn_ipam_data, int vn_id,
370  int vxlan_id, bool admin_state, bool enable_rpf,
371  bool flood_unknown_unicast, bool pbb_etree_enable,
372  bool pbb_evpn_enable, bool layer2_control_word);
373  void DelVn(const boost::uuids::uuid &vn_uuid);
374  void ResyncReq(const boost::uuids::uuid &vn);
375  VnEntry *Find(const boost::uuids::uuid &vn_uuid);
377  bool VnEntryWalk(DBTablePartBase *partition, DBEntryBase *entry);
378  void VnEntryWalkDone(DBTable::DBTableWalkRef walk_ref, DBTableBase *partition);
379  int GetCfgVnId(autogen::VirtualNetwork *cfg_vn);
380 
381 private:
384  bool IsGatewayL2(const string &gateway) const;
385  void BuildVnIpamData(const std::vector<autogen::IpamSubnetType> &subnets,
386  const std::string &ipam_name,
387  std::vector<VnIpam> *vn_ipam);
388  VnData *BuildData(IFMapNode *node);
390  std::string node_type);
392 
394 };
395 
397 public:
398 
399  OperNetworkIpam(Agent *agent, DomainConfig *domain_config);
400  virtual ~OperNetworkIpam();
401 
402  void ConfigDelete(IFMapNode *node);
403  void ConfigAddChange(IFMapNode *node);
404  void ConfigManagerEnqueue(IFMapNode *node);
405 private:
408 };
409 
411 public:
412 
413  OperVirtualDns(Agent *agent, DomainConfig *domain_config);
414  virtual ~OperVirtualDns();
415 
416  void ConfigDelete(IFMapNode *node);
417  void ConfigAddChange(IFMapNode *node);
418  void ConfigManagerEnqueue(IFMapNode *node);
419 private:
422 };
423 
425 public:
426  typedef std::map<std::string, autogen::IpamType> IpamDomainConfigMap;
427  typedef std::pair<std::string, autogen::IpamType> IpamDomainConfigPair;
428  typedef std::map<std::string, autogen::VirtualDnsType> VdnsDomainConfigMap;
429  typedef std::pair<std::string, autogen::VirtualDnsType> VdnsDomainConfigPair;
430  typedef boost::function<void(IFMapNode *)> Callback;
431 
432  DomainConfig(Agent *);
433  virtual ~DomainConfig();
434  void Init();
435  void Terminate();
436  void RegisterIpamCb(Callback cb);
437  void RegisterVdnsCb(Callback cb);
438  void IpamDelete(IFMapNode *node);
439  void IpamAddChange(IFMapNode *node);
440  void VDnsDelete(IFMapNode *node);
441  void VDnsAddChange(IFMapNode *node);
442  bool GetIpam(const std::string &name, autogen::IpamType *ipam);
443  bool GetVDns(const std::string &vdns, autogen::VirtualDnsType *vdns_type);
444 
445 private:
446  void CallVdnsCb(IFMapNode *node);
447  void CallIpamCb(IFMapNode *node);
448  bool IpamChanged(const autogen::IpamType &old,
449  const autogen::IpamType &cur) const;
450 
453  std::vector<Callback> ipam_callback_;
454  std::vector<Callback> vdns_callback_;
455 
457 };
458 
459 #endif // vnsw_agent_vn_hpp
boost::asio::ip::address_v6 Ip6Address
Definition: address.h:15
boost::asio::ip::address IpAddress
Definition: address.h:13
std::vector< boost::uuids::uuid > UuidList
Definition: agent.h:203
boost::intrusive_ptr< const AgentQosConfig > AgentQosConfigConstRef
Definition: agent.h:178
boost::intrusive_ptr< VxLanId > VxLanIdRef
Definition: agent.h:104
boost::intrusive_ptr< AclDBEntry > AclDBEntryRef
Definition: agent.h:141
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
boost::intrusive_ptr< AgentRouteWalker > AgentRouteWalkerPtr
Definition: acl.h:92
Agent * agent() const
Definition: agent_db.h:213
uint32_t GetRefCount() const
Definition: agent_db.h:54
Definition: agent.h:360
ForwardingMode
Definition: agent.h:405
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
const std::string & name() const
Definition: db_table.h:110
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
Definition: db_table.h:169
Definition: db.h:24
DISALLOW_COPY_AND_ASSIGN(DomainConfig)
void VDnsAddChange(IFMapNode *node)
Definition: vn.cc:1485
bool GetIpam(const std::string &name, autogen::IpamType *ipam)
Definition: vn.cc:1560
boost::function< void(IFMapNode *)> Callback
Definition: vn.h:430
void CallIpamCb(IFMapNode *node)
Definition: vn.cc:1500
std::map< std::string, autogen::VirtualDnsType > VdnsDomainConfigMap
Definition: vn.h:428
VdnsDomainConfigMap vdns_config_
Definition: vn.h:452
std::pair< std::string, autogen::IpamType > IpamDomainConfigPair
Definition: vn.h:427
void RegisterIpamCb(Callback cb)
Definition: vn.cc:1442
bool GetVDns(const std::string &vdns, autogen::VirtualDnsType *vdns_type)
Definition: vn.cc:1568
void VDnsDelete(IFMapNode *node)
Definition: vn.cc:1479
virtual ~DomainConfig()
Definition: vn.cc:1433
void CallVdnsCb(IFMapNode *node)
Definition: vn.cc:1506
void Terminate()
Definition: vn.cc:1439
DomainConfig(Agent *)
Definition: vn.cc:1430
std::pair< std::string, autogen::VirtualDnsType > VdnsDomainConfigPair
Definition: vn.h:429
void IpamAddChange(IFMapNode *node)
Definition: vn.cc:1458
void RegisterVdnsCb(Callback cb)
Definition: vn.cc:1446
std::vector< Callback > vdns_callback_
Definition: vn.h:454
IpamDomainConfigMap ipam_config_
Definition: vn.h:451
void IpamDelete(IFMapNode *node)
Definition: vn.cc:1452
void Init()
Definition: vn.cc:1436
std::map< std::string, autogen::IpamType > IpamDomainConfigMap
Definition: vn.h:426
std::vector< Callback > ipam_callback_
Definition: vn.h:453
bool IpamChanged(const autogen::IpamType &old, const autogen::IpamType &cur) const
Definition: vn.cc:1512
const std::vector< HostRoute > & host_routes() const
Agent * agent() const
Definition: oper_db.h:245
DomainConfig * domain_config_
Definition: vn.h:406
void ConfigDelete(IFMapNode *node)
Definition: vn.cc:1587
void ConfigAddChange(IFMapNode *node)
Definition: vn.cc:1591
OperNetworkIpam(Agent *agent, DomainConfig *domain_config)
Definition: vn.cc:1580
void ConfigManagerEnqueue(IFMapNode *node)
Definition: vn.cc:1595
DISALLOW_COPY_AND_ASSIGN(OperNetworkIpam)
virtual ~OperNetworkIpam()
Definition: vn.cc:1584
void ConfigManagerEnqueue(IFMapNode *node)
Definition: vn.cc:1614
DISALLOW_COPY_AND_ASSIGN(OperVirtualDns)
void ConfigAddChange(IFMapNode *node)
Definition: vn.cc:1610
DomainConfig * domain_config_
Definition: vn.h:420
virtual ~OperVirtualDns()
Definition: vn.cc:1603
OperVirtualDns(Agent *agent, DomainConfig *domain_config)
Definition: vn.cc:1599
void ConfigDelete(IFMapNode *node)
Definition: vn.cc:1606
Definition: vn.h:151
VnData::VnIpamDataMap vn_ipam_data_
Definition: vn.h:302
AclDBEntryRef acl_
Definition: vn.h:297
bool AddIpamRoutes(Agent *agent, VnIpam *ipam)
Definition: vn.cc:527
bool GetIpamVdnsData(const IpAddress &vm_addr, autogen::IpamType *ipam_type, autogen::VirtualDnsType *vdns_type) const
Definition: vn.cc:685
bool flood_unknown_unicast_
Definition: vn.h:314
bool pbb_evpn_enable_
Definition: vn.h:320
void set_bridging(bool bridging)
Definition: vn.h:193
VrfEntryConstRef lr_vrf_
Definition: vn.h:331
bool ApplyIpam(Agent *agent, VnIpam *ipam, VrfEntry *old_vrf, bool del)
Definition: vn.cc:381
bool enable_rpf() const
Definition: vn.h:201
const AgentQosConfig * qos_config() const
Definition: vn.h:204
bool layer2_control_word_
Definition: vn.h:321
bool pbb_etree_enable() const
Definition: vn.h:213
const UuidList & mp_list() const
Definition: vn.h:233
AclDBEntryRef mirror_cfg_acl_
Definition: vn.h:299
bool ApplyAllIpam(Agent *agent, VrfEntry *old_vrf, bool del)
Definition: vn.cc:371
bool ChangeHandler(Agent *agent, const DBRequest *req)
Definition: vn.cc:133
uint32_t GetRefCount() const
Definition: vn.h:249
bool vxlan_routing_vn_
Definition: vn.h:324
void AddHostRoute(const IpAddress &address, bool policy)
Definition: vn.cc:560
bool enable_rpf_
Definition: vn.h:313
void SendObjectLog(SandeshTraceBufferPtr ptr, AgentLogEvent::type event) const
Definition: vn.cc:1335
const boost::uuids::uuid & GetUuid() const
Definition: vn.h:161
void UpdateHostRoute(Agent *agent, const IpAddress &old_address, const IpAddress &new_address, bool policy)
Definition: vn.cc:516
void ResyncRoutes()
VnEntry(Agent *agent, boost::uuids::uuid id)
Definition: vn.cc:87
boost::uuids::uuid health_check_uuid_
Definition: vn.h:330
bool UpdateVxlan(Agent *agent, bool op_del)
Definition: vn.cc:321
uint32_t vn_max_flows() const
Definition: vn.h:263
bool pbb_etree_enable_
Definition: vn.h:319
IpAddress GetGatewayFromIpam(const IpAddress &ip) const
Definition: vn.cc:661
UuidList mp_list_
Definition: vn.h:326
bool underlay_forwarding_
Definition: vn.h:323
bool underlay_forwarding() const
Definition: vn.h:229
void set_lr_vrf(const VrfEntry *vrf)
Definition: vn.h:269
bool pbb_evpn_enable() const
Definition: vn.h:217
bool Resync(Agent *agent)
Definition: vn.cc:123
int vxlan_id_
Definition: vn.h:303
VxLanIdRef vxlan_id_ref_
Definition: vn.h:311
string name_
Definition: vn.h:296
const bool mirror_destination() const
Definition: vn.h:208
IpAddress GetDnsFromIpam(const IpAddress &ip) const
Definition: vn.cc:669
bool layer2_control_word() const
Definition: vn.h:221
AgentRouteWalkerPtr route_resync_walker_
Definition: vn.h:316
int vnid_
Definition: vn.h:304
const std::vector< VnIpam > & GetVnIpam() const
Definition: vn.h:171
VrfEntry * GetVrf() const
Definition: vn.h:170
const boost::uuids::uuid & health_check_uuid() const
Definition: vn.h:245
std::vector< VnIpam > ipam_
Definition: vn.h:301
int active_vxlan_id_
Definition: vn.h:307
void set_layer3_forwarding(bool layer3_forwarding)
Definition: vn.h:196
int GetVxLanId() const
Definition: vn.cc:728
virtual ~VnEntry()
Definition: vn.cc:98
AclDBEntryRef mirror_acl_
Definition: vn.h:298
bool IsAclSet() const
Definition: vn.h:163
const string & GetName() const
Definition: vn.h:162
const AclDBEntry * GetAcl() const
Definition: vn.h:167
bool UpdateIpam(Agent *agent, std::vector< VnIpam > &new_ipam)
Definition: vn.cc:404
bool GetVnHostRoutes(const std::string &ipam, std::vector< OperDhcpOptions::HostRoute > *routes) const
Definition: vn.cc:621
uint32_t table_label_
Definition: vn.h:312
bool bridging_
Definition: vn.h:308
bool admin_state() const
Definition: vn.h:200
const VrfEntry * lr_vrf() const
Definition: vn.h:265
void AllocWalker()
Definition: vn.cc:604
bool admin_state_
Definition: vn.h:310
bool GetIpamData(const IpAddress &vm_addr, std::string *ipam_name, autogen::IpamType *ipam_type) const
Definition: vn.cc:642
uint32_t vn_max_flows_
Definition: vn.h:328
bool mac_ip_learning_enable() const
Definition: vn.h:241
virtual void SetKey(const DBRequestKey *key)
Definition: vn.cc:116
void ReleaseWalker()
Definition: vn.cc:613
bool CanInstallIpam(const VnIpam *ipam)
Definition: vn.cc:397
bool cfg_igmp_enable_
Definition: vn.h:327
const AclDBEntry * GetMirrorAcl() const
Definition: vn.h:168
virtual string ToString() const
Definition: vn.cc:106
bool bridging() const
Definition: vn.h:194
void DelHostRoute(const IpAddress &address)
Definition: vn.cc:573
bool layer3_forwarding() const
Definition: vn.h:195
AgentQosConfigConstRef qos_config_
Definition: vn.h:317
bool mac_ip_learning_enable_
Definition: vn.h:329
const VnIpam * GetIpam(const IpAddress &ip) const
Definition: vn.cc:652
bool GetPrefix(const Ip6Address &ip, Ip6Address *prefix, uint8_t *plen) const
Definition: vn.cc:701
bool cfg_igmp_enable() const
Definition: vn.h:237
virtual bool IsLess(const DBEntry &rhs) const
Definition: vn.cc:101
std::string GetProject() const
Definition: vn.cc:717
bool GetIpamName(const IpAddress &vm_addr, std::string *ipam_name) const
Definition: vn.cc:631
void DelIpamRoutes(Agent *agent, VnIpam *ipam, VrfEntry *vrf)
Definition: vn.cc:548
const AclDBEntry * GetMirrorCfgAcl() const
Definition: vn.h:169
virtual KeyPtr GetDBRequestKey() const
Definition: vn.cc:112
Agent::ForwardingMode forwarding_mode() const
Definition: vn.h:198
boost::uuids::uuid logical_router_uuid_
Definition: vn.h:325
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
Definition: vn.cc:1234
const UuidList & slo_list() const
Definition: vn.h:225
VrfEntryRef vrf_
Definition: vn.h:300
const boost::uuids::uuid & logical_router_uuid() const
Definition: vn.h:260
Agent::ForwardingMode forwarding_mode_
Definition: vn.h:315
void AddSubnetRoute(VnIpam *ipam)
Definition: vn.cc:588
boost::uuids::uuid uuid_
Definition: vn.h:295
const VxLanId * vxlan_id_ref() const
Definition: vn.h:192
uint32_t GetAllocUnitFromIpam(const IpAddress &ip) const
Definition: vn.cc:677
bool layer3_forwarding_
Definition: vn.h:309
bool vxlan_routing_vn() const
Definition: vn.h:259
bool IdentifyBgpRoutersServiceIp(const IpAddress &ip_address, bool *is_dns, bool *is_gateway) const
Agent * agent_
Definition: vn.h:294
int vnid() const
Definition: vn.h:211
bool mirror_destination_
Definition: vn.h:318
DISALLOW_COPY_AND_ASSIGN(VnEntry)
UuidList slo_list_
Definition: vn.h:322
bool flood_unknown_unicast() const
Definition: vn.h:202
void DelSubnetRoute(VnIpam *ipam)
Definition: vn.cc:596
bool UpdateForwardingMode(Agent *agent)
Definition: vn.cc:346
bool HandleIpamChange(Agent *agent, VnIpam *old_ipam, VnIpam *new_ipam)
Definition: vn.cc:450
int GetOperVxlanId() const
Returns a value of the VxLAN ID stored in the Oper DB.
Definition: vn.cc:738
Definition: vn.h:335
void GlobalVrouterConfigChanged()
Definition: vn.cc:849
virtual size_t Hash(const DBRequestKey *key) const
Definition: vn.h:342
void DelVn(const boost::uuids::uuid &vn_uuid)
Definition: vn.cc:1215
bool IsGwHostRouteRequired()
virtual bool OperDBResync(DBEntry *entry, const DBRequest *req)
Definition: vn.cc:829
bool IsGatewayL2(const string &gateway) const
VnEntry * Find(const boost::uuids::uuid &vn_uuid)
Definition: vn.cc:770
virtual ~VnTable()
Definition: vn.cc:757
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
Definition: vn.cc:1418
void AddVn(const boost::uuids::uuid &vn_uuid, const string &name, const boost::uuids::uuid &acl_id, const string &vrf_name, const std::vector< VnIpam > &ipam, const VnData::VnIpamDataMap &vn_ipam_data, int vn_id, int vxlan_id, bool admin_state, bool enable_rpf, bool flood_unknown_unicast, bool pbb_etree_enable, bool pbb_evpn_enable, bool layer2_control_word)
Definition: vn.cc:1189
void BuildVnIpamData(const std::vector< autogen::IpamSubnetType > &subnets, const std::string &ipam_name, std::vector< VnIpam > *vn_ipam)
Definition: vn.cc:937
virtual DBEntry * OperDBAdd(const DBRequest *req)
Definition: vn.cc:781
void CfgForwardingFlags(IFMapNode *node, bool *rpf, bool *flood_unknown_unicast, Agent::ForwardingMode *forwarding_mode, bool *mirror_destination)
Definition: vn.cc:917
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: vn.cc:764
IFMapNode * FindTarget(IFMapAgentTable *table, IFMapNode *node, std::string node_type)
Definition: vn.cc:899
bool VnEntryWalk(DBTablePartBase *partition, DBEntryBase *entry)
Definition: vn.cc:834
void VnEntryWalkDone(DBTable::DBTableWalkRef walk_ref, DBTableBase *partition)
Definition: vn.cc:842
void ResyncReq(const boost::uuids::uuid &vn)
Definition: vn.cc:1222
virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req)
Definition: vn.cc:801
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: vn.cc:1159
DBTable::DBTableWalkRef walk_ref_
Definition: vn.h:391
virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
Definition: vn.cc:815
DISALLOW_COPY_AND_ASSIGN(VnTable)
VnTable(DB *db, const std::string &name)
Definition: vn.cc:751
virtual size_t Hash(const DBEntry *entry) const
Definition: vn.h:341
virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
Definition: vn.cc:1151
static VnTable * GetInstance()
Definition: vn.h:364
VnData * BuildData(IFMapNode *node)
Definition: vn.cc:963
int GetCfgVnId(autogen::VirtualNetwork *cfg_vn)
Definition: vn.cc:910
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
Definition: vn.cc:775
virtual bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: vn.cc:1175
static VnTable * vn_table_
Definition: vn.h:382
virtual void Clear()
Definition: vn.cc:760
Definition: vrf.h:86
Definition: vxlan.h:14
uint8_t type
Definition: load_balance.h:2
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
const Agent * agent() const
Definition: oper_db.h:65
Definition: vn.h:83
bool flood_unknown_unicast_
Definition: vn.h:133
std::map< std::string, VnIpamLinkData > VnIpamDataMap
Definition: vn.h:84
int vnid_
Definition: vn.h:130
UuidList mp_list_
Definition: vn.h:144
uint32_t vn_max_flows_
Definition: vn.h:146
bool cfg_igmp_enable_
Definition: vn.h:145
std::vector< VnIpam > ipam_
Definition: vn.h:127
std::pair< std::string, VnIpamLinkData > VnIpamDataPair
Definition: vn.h:85
bool pbb_etree_enable_
Definition: vn.h:137
boost::uuids::uuid logical_router_uuid_
Definition: vn.h:143
UuidList slo_list_
Definition: vn.h:140
string name_
Definition: vn.h:122
bool underlay_forwarding_
Definition: vn.h:141
boost::uuids::uuid health_check_uuid_
Definition: vn.h:148
string vrf_name_
Definition: vn.h:123
bool pbb_evpn_enable_
Definition: vn.h:138
bool layer2_control_word_
Definition: vn.h:139
bool mirror_destination_
Definition: vn.h:136
bool admin_state_
Definition: vn.h:131
Agent::ForwardingMode forwarding_mode_
Definition: vn.h:134
VnData(const Agent *agent, IFMapNode *node, const string &name, const boost::uuids::uuid &acl_id, const string &vrf_name, const boost::uuids::uuid &mirror_acl_id, const boost::uuids::uuid &mc_acl_id, const std::vector< VnIpam > &ipam, const VnIpamDataMap &vn_ipam_data, int vxlan_id, int vnid, bool admin_state, bool enable_rpf, bool flood_unknown_unicast, Agent::ForwardingMode forwarding_mode, const boost::uuids::uuid &qos_config_uuid, bool mirror_destination, bool pbb_etree_enable, bool pbb_evpn_enable, bool layer2_control_word, UuidList slo_list, bool underlay_forwarding, bool vxlan_routing_vn, const boost::uuids::uuid &logical_router_uuid, UuidList mp_list, bool cfg_igmp_enable, uint32_t vn_max_flows, bool mac_ip_learning_enable, const boost::uuids::uuid &health_check_uuid)
Definition: vn.h:87
int vxlan_id_
Definition: vn.h:129
boost::uuids::uuid mirror_acl_id_
Definition: vn.h:125
boost::uuids::uuid qos_config_uuid_
Definition: vn.h:135
bool mac_ip_learning_enable_
Definition: vn.h:147
boost::uuids::uuid mirror_cfg_acl_id_
Definition: vn.h:126
boost::uuids::uuid acl_id_
Definition: vn.h:124
VnIpamDataMap vn_ipam_data_
Definition: vn.h:128
bool vxlan_routing_vn_
Definition: vn.h:142
virtual ~VnData()
Definition: vn.h:120
bool enable_rpf_
Definition: vn.h:132
bool operator==(const VnIpamLinkData &rhs) const
Definition: vn.h:68
OperDhcpOptions oper_dhcp_options_
Definition: vn.h:66
Definition: vn.h:28
uint32_t alloc_unit
Definition: vn.h:39
std::string ipam_name
Definition: vn.h:37
bool operator<(const VnIpam &rhs) const
Definition: vn.h:53
bool dhcp_enable
Definition: vn.h:35
bool IsV6() const
Definition: vn.h:50
bool IsSubnetMember(const IpAddress &ip) const
Definition: vn.cc:73
bool installed
Definition: vn.h:34
IpAddress dns_server
Definition: vn.h:33
VnIpam(const std::string &ip, uint32_t len, const std::string &gw, const std::string &dns, bool dhcp, const std::string &name, const std::vector< autogen::DhcpOptionType > &dhcp_options, const std::vector< autogen::RouteType > &host_routes, uint32_t alloc)
Definition: vn.cc:48
uint32_t plen
Definition: vn.h:30
IpAddress ip_prefix
Definition: vn.h:29
bool dhcp_enable_v6
Definition: vn.h:36
IpAddress default_gw
Definition: vn.h:31
bool IsV4() const
Definition: vn.h:47
IpAddress GetSubnetAddress() const
Definition: vn.cc:63
OperDhcpOptions oper_dhcp_options
Definition: vn.h:38
Definition: vn.h:76
VnKey(const boost::uuids::uuid &id)
Definition: vn.h:77
virtual ~VnKey()
Definition: vn.h:78
boost::uuids::uuid uuid_
Definition: vn.h:80
bool IsVRFServiceChainingInstance(const std::string &vn_name, const std::string &vrf_name)
boost::uuids::uuid uuid