5 #ifndef vnsw_agent_vn_hpp
6 #define vnsw_agent_vn_hpp
10 #include <oper/agent_types.h>
21 struct VirtualDnsType;
25 const std::string &vrf_name);
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,
92 bool admin_state,
bool enable_rpf,
bool flood_unknown_unicast,
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,
100 UuidList mp_list,
bool cfg_igmp_enable, uint32_t vn_max_flows,
101 bool mac_ip_learning_enable,
177 std::vector<OperDhcpOptions::HostRoute> *routes)
const;
180 autogen::IpamType *ipam_type)
const;
182 autogen::IpamType *ipam_type,
183 autogen::VirtualDnsType *vdns_type)
const;
185 uint8_t *plen)
const;
253 bool *is_gateway)
const;
283 const IpAddress &new_address,
bool policy);
341 const std::string &context);
353 virtual void Clear();
356 bool *flood_unknown_unicast,
358 bool *mirror_destination);
365 const std::vector<VnIpam> &ipam,
367 int vxlan_id,
bool admin_state,
bool enable_rpf,
368 bool flood_unknown_unicast,
bool pbb_etree_enable,
369 bool pbb_evpn_enable,
bool layer2_control_word);
376 int GetCfgVnId(autogen::VirtualNetwork *cfg_vn);
382 void BuildVnIpamData(
const std::vector<autogen::IpamSubnetType> &subnets,
383 const std::string &ipam_name,
384 std::vector<VnIpam> *vn_ipam);
387 std::string node_type);
439 bool GetIpam(
const std::string &name, autogen::IpamType *ipam);
440 bool GetVDns(
const std::string &vdns, autogen::VirtualDnsType *vdns_type);
446 const autogen::IpamType &cur)
const;
boost::asio::ip::address_v6 Ip6Address
boost::asio::ip::address IpAddress
std::vector< boost::uuids::uuid > UuidList
boost::intrusive_ptr< const AgentQosConfig > AgentQosConfigConstRef
boost::intrusive_ptr< VxLanId > VxLanIdRef
boost::intrusive_ptr< AclDBEntry > AclDBEntryRef
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
boost::intrusive_ptr< AgentRouteWalker > AgentRouteWalkerPtr
uint32_t GetRefCount() const
std::unique_ptr< DBRequestKey > KeyPtr
const std::string & name() const
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
DISALLOW_COPY_AND_ASSIGN(DomainConfig)
void VDnsAddChange(IFMapNode *node)
bool GetIpam(const std::string &name, autogen::IpamType *ipam)
boost::function< void(IFMapNode *)> Callback
void CallIpamCb(IFMapNode *node)
std::map< std::string, autogen::VirtualDnsType > VdnsDomainConfigMap
VdnsDomainConfigMap vdns_config_
std::pair< std::string, autogen::IpamType > IpamDomainConfigPair
void RegisterIpamCb(Callback cb)
bool GetVDns(const std::string &vdns, autogen::VirtualDnsType *vdns_type)
void VDnsDelete(IFMapNode *node)
void CallVdnsCb(IFMapNode *node)
std::pair< std::string, autogen::VirtualDnsType > VdnsDomainConfigPair
void IpamAddChange(IFMapNode *node)
void RegisterVdnsCb(Callback cb)
std::vector< Callback > vdns_callback_
IpamDomainConfigMap ipam_config_
void IpamDelete(IFMapNode *node)
std::map< std::string, autogen::IpamType > IpamDomainConfigMap
std::vector< Callback > ipam_callback_
bool IpamChanged(const autogen::IpamType &old, const autogen::IpamType &cur) const
const std::vector< HostRoute > & host_routes() const
DomainConfig * domain_config_
void ConfigDelete(IFMapNode *node)
void ConfigAddChange(IFMapNode *node)
OperNetworkIpam(Agent *agent, DomainConfig *domain_config)
void ConfigManagerEnqueue(IFMapNode *node)
DISALLOW_COPY_AND_ASSIGN(OperNetworkIpam)
virtual ~OperNetworkIpam()
void ConfigManagerEnqueue(IFMapNode *node)
DISALLOW_COPY_AND_ASSIGN(OperVirtualDns)
void ConfigAddChange(IFMapNode *node)
DomainConfig * domain_config_
virtual ~OperVirtualDns()
OperVirtualDns(Agent *agent, DomainConfig *domain_config)
void ConfigDelete(IFMapNode *node)
VnData::VnIpamDataMap vn_ipam_data_
bool AddIpamRoutes(Agent *agent, VnIpam *ipam)
bool GetIpamVdnsData(const IpAddress &vm_addr, autogen::IpamType *ipam_type, autogen::VirtualDnsType *vdns_type) const
bool flood_unknown_unicast_
void set_bridging(bool bridging)
bool ApplyIpam(Agent *agent, VnIpam *ipam, VrfEntry *old_vrf, bool del)
const AgentQosConfig * qos_config() const
bool layer2_control_word_
bool pbb_etree_enable() const
const UuidList & mp_list() const
AclDBEntryRef mirror_cfg_acl_
bool ApplyAllIpam(Agent *agent, VrfEntry *old_vrf, bool del)
bool ChangeHandler(Agent *agent, const DBRequest *req)
uint32_t GetRefCount() const
void AddHostRoute(const IpAddress &address, bool policy)
void SendObjectLog(SandeshTraceBufferPtr ptr, AgentLogEvent::type event) const
const boost::uuids::uuid & GetUuid() const
void UpdateHostRoute(Agent *agent, const IpAddress &old_address, const IpAddress &new_address, bool policy)
VnEntry(Agent *agent, boost::uuids::uuid id)
boost::uuids::uuid health_check_uuid_
bool UpdateVxlan(Agent *agent, bool op_del)
uint32_t vn_max_flows() const
IpAddress GetGatewayFromIpam(const IpAddress &ip) const
bool underlay_forwarding_
bool underlay_forwarding() const
void set_lr_vrf(const VrfEntry *vrf)
bool pbb_evpn_enable() const
bool Resync(Agent *agent)
const bool mirror_destination() const
IpAddress GetDnsFromIpam(const IpAddress &ip) const
bool layer2_control_word() const
AgentRouteWalkerPtr route_resync_walker_
const std::vector< VnIpam > & GetVnIpam() const
VrfEntry * GetVrf() const
const boost::uuids::uuid & health_check_uuid() const
std::vector< VnIpam > ipam_
void set_layer3_forwarding(bool layer3_forwarding)
AclDBEntryRef mirror_acl_
const string & GetName() const
const AclDBEntry * GetAcl() const
bool UpdateIpam(Agent *agent, std::vector< VnIpam > &new_ipam)
bool GetVnHostRoutes(const std::string &ipam, std::vector< OperDhcpOptions::HostRoute > *routes) const
const VrfEntry * lr_vrf() const
bool GetIpamData(const IpAddress &vm_addr, std::string *ipam_name, autogen::IpamType *ipam_type) const
bool mac_ip_learning_enable() const
virtual void SetKey(const DBRequestKey *key)
bool CanInstallIpam(const VnIpam *ipam)
const AclDBEntry * GetMirrorAcl() const
virtual string ToString() const
void DelHostRoute(const IpAddress &address)
bool layer3_forwarding() const
AgentQosConfigConstRef qos_config_
bool mac_ip_learning_enable_
const VnIpam * GetIpam(const IpAddress &ip) const
bool GetPrefix(const Ip6Address &ip, Ip6Address *prefix, uint8_t *plen) const
bool cfg_igmp_enable() const
virtual bool IsLess(const DBEntry &rhs) const
std::string GetProject() const
bool GetIpamName(const IpAddress &vm_addr, std::string *ipam_name) const
void DelIpamRoutes(Agent *agent, VnIpam *ipam, VrfEntry *vrf)
const AclDBEntry * GetMirrorCfgAcl() const
virtual KeyPtr GetDBRequestKey() const
Agent::ForwardingMode forwarding_mode() const
boost::uuids::uuid logical_router_uuid_
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
const UuidList & slo_list() const
const boost::uuids::uuid & logical_router_uuid() const
Agent::ForwardingMode forwarding_mode_
void AddSubnetRoute(VnIpam *ipam)
const VxLanId * vxlan_id_ref() const
uint32_t GetAllocUnitFromIpam(const IpAddress &ip) const
bool vxlan_routing_vn() const
bool IdentifyBgpRoutersServiceIp(const IpAddress &ip_address, bool *is_dns, bool *is_gateway) const
DISALLOW_COPY_AND_ASSIGN(VnEntry)
bool flood_unknown_unicast() const
void DelSubnetRoute(VnIpam *ipam)
bool UpdateForwardingMode(Agent *agent)
bool HandleIpamChange(Agent *agent, VnIpam *old_ipam, VnIpam *new_ipam)
void GlobalVrouterConfigChanged()
virtual size_t Hash(const DBRequestKey *key) const
void DelVn(const boost::uuids::uuid &vn_uuid)
bool IsGwHostRouteRequired()
virtual bool OperDBResync(DBEntry *entry, const DBRequest *req)
bool IsGatewayL2(const string &gateway) const
VnEntry * Find(const boost::uuids::uuid &vn_uuid)
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
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)
void BuildVnIpamData(const std::vector< autogen::IpamSubnetType > &subnets, const std::string &ipam_name, std::vector< VnIpam > *vn_ipam)
virtual DBEntry * OperDBAdd(const DBRequest *req)
void CfgForwardingFlags(IFMapNode *node, bool *rpf, bool *flood_unknown_unicast, Agent::ForwardingMode *forwarding_mode, bool *mirror_destination)
static DBTableBase * CreateTable(DB *db, const std::string &name)
IFMapNode * FindTarget(IFMapAgentTable *table, IFMapNode *node, std::string node_type)
bool VnEntryWalk(DBTablePartBase *partition, DBEntryBase *entry)
void VnEntryWalkDone(DBTable::DBTableWalkRef walk_ref, DBTableBase *partition)
void ResyncReq(const boost::uuids::uuid &vn)
virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req)
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
DBTable::DBTableWalkRef walk_ref_
virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
DISALLOW_COPY_AND_ASSIGN(VnTable)
VnTable(DB *db, const std::string &name)
virtual size_t Hash(const DBEntry *entry) const
virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
static VnTable * GetInstance()
VnData * BuildData(IFMapNode *node)
int GetCfgVnId(autogen::VirtualNetwork *cfg_vn)
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
virtual bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
static VnTable * vn_table_
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
const Agent * agent() const
bool flood_unknown_unicast_
std::map< std::string, VnIpamLinkData > VnIpamDataMap
std::vector< VnIpam > ipam_
std::pair< std::string, VnIpamLinkData > VnIpamDataPair
boost::uuids::uuid logical_router_uuid_
bool underlay_forwarding_
boost::uuids::uuid health_check_uuid_
bool layer2_control_word_
Agent::ForwardingMode forwarding_mode_
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)
boost::uuids::uuid mirror_acl_id_
boost::uuids::uuid qos_config_uuid_
bool mac_ip_learning_enable_
boost::uuids::uuid mirror_cfg_acl_id_
boost::uuids::uuid acl_id_
VnIpamDataMap vn_ipam_data_
bool operator==(const VnIpamLinkData &rhs) const
OperDhcpOptions oper_dhcp_options_
bool operator<(const VnIpam &rhs) const
bool IsSubnetMember(const IpAddress &ip) const
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)
IpAddress GetSubnetAddress() const
OperDhcpOptions oper_dhcp_options
VnKey(const boost::uuids::uuid &id)
bool IsVRFServiceChainingInstance(const std::string &vn_name, const std::string &vrf_name)