12 #include <sandesh/sandesh_types.h>
13 #include <sandesh/common/vns_types.h>
14 #include <vnc_cfg_types.h>
16 #include <boost/bind/bind.hpp>
29 using namespace boost::placeholders;
76 for (
unsigned int i = 0; i <
subnets_.size(); i++) {
102 "virtual-network-network-ipam",
"network-ipam");
103 if (ipam_node == NULL) {
105 "> does not have Ipam link");
120 autogen::VirtualNetworkNetworkIpam *vnni =
121 static_cast<autogen::VirtualNetworkNetworkIpam *
> (node->
GetObject());
125 const autogen::VnSubnetsType &subnets_type = vnni->data();
126 for (
unsigned int i = 0; i < subnets_type.ipam_subnets.size(); ++i) {
127 Subnet subnet(subnets_type.ipam_subnets[i].subnet.ip_prefix,
128 subnets_type.ipam_subnets[i].subnet.ip_prefix_len);
129 subnets.push_back(subnet);
131 std::sort(subnets.begin(), subnets.end());
137 Subnets::iterator it_old = old_nets.begin();
138 Subnets::iterator it_new = new_nets.begin();
139 while (it_old != old_nets.end() && it_new != new_nets.end()) {
140 if (*it_old < *it_new) {
142 it_old->MarkDelete();
146 }
else if (*it_new < *it_old) {
159 for (; it_old != old_nets.end(); ++it_old) {
160 it_old->MarkDelete();
166 for (; it_new != new_nets.end(); ++it_new) {
186 :
DnsConfig(node->name()), virtual_dns_(NULL) {
192 for (VnniList::iterator it =
vnni_list_.begin();
214 autogen::IpamType new_rec;
246 for (IpamConfig::VnniList::iterator it =
vnni_list_.begin();
248 Subnets &subnets = (*it)->GetSubnets();
249 for (
unsigned int i = 0; i < subnets.size(); i++) {
259 autogen::NetworkIpam *ipam =
260 static_cast<autogen::NetworkIpam *
>(node->
GetObject());
302 rec_.external_visible =
false;
303 rec_.reverse_resolution =
false;
332 for (VirtualDnsConfig::IpamList::iterator iter =
ipams_.begin();
333 iter !=
ipams_.end(); ++iter) {
334 (*iter)->virtual_dns_ = NULL;
336 for (VirtualDnsConfig::VDnsRec::iterator it =
339 (*it)->virt_dns_ = NULL;
340 (*it)->ClearNotified();
374 autogen::VirtualDnsType &data) {
378 autogen::VirtualDns *dns =
379 static_cast<autogen::VirtualDns *
>(node->
GetObject());
389 for (IpamList::iterator ipam_iter =
ipams_.begin();
390 ipam_iter !=
ipams_.end(); ++ipam_iter) {
393 for (IpamConfig::VnniList::iterator vnni_it = vnni.begin();
394 vnni_it != vnni.end(); ++vnni_it) {
395 Subnets &subnets = (*vnni_it)->GetSubnets();
396 for (
unsigned int i = 0; i < subnets.size(); i++) {
397 if (subnets[i].Contains(addr)) {
423 rec_.dynamic_records_from_client ==
old_rec_.dynamic_records_from_client &&
425 rec_.default_ttl_seconds ==
old_rec_.default_ttl_seconds &&
428 rec_.reverse_resolution ==
old_rec_.reverse_resolution &&
429 rec_.soa_record.negative_cache_ttl_seconds ==
old_rec_.soa_record.negative_cache_ttl_seconds)
436 rec.dns_name =
rec_.domain_name;
437 rec.dns_dyn_rec =
rec_.dynamic_records_from_client;
438 rec.dns_order =
rec_.record_order;
439 rec.dns_ttl =
rec_.default_ttl_seconds;
440 rec.dns_next =
rec_.next_virtual_DNS;
441 rec.installed = (
IsNotified() ?
"true" :
"false");
442 rec.floating_ip_record =
rec_.floating_ip_record;
443 rec.external_visible = (
rec_.external_visible ?
"yes" :
"no");
444 rec.reverse_resolution = (
rec_.reverse_resolution ?
"yes" :
"no");
446 rec.negative_cache_ttl_seconds =
rec_.soa_record.negative_cache_ttl_seconds;
450 VirtualDnsTraceData rec;
462 std::string name(
rec_.next_virtual_DNS);
468 return rec_.dynamic_records_from_client;
490 const std::string &vdns_name,
492 :
DnsConfig(name), rec_(item), virt_dns_(NULL),
571 "virtual-DNS-virtual-DNS-record");
572 if (vdns_node == NULL) {
574 "> does not have virtual DNS link");
601 DNS_CONFIGURATION_LOG(
602 g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
603 SandeshLevel::SYS_ERR,
"Invalid PTR Name",
630 autogen::VirtualDnsType data;
631 data.dynamic_records_from_client =
false;
632 data.default_ttl_seconds = 0;
633 data.soa_record.negative_cache_ttl_seconds = 0;
650 autogen::VirtualDnsRecord *rec =
651 static_cast<autogen::VirtualDnsRecord *
>(node->
GetObject());
655 autogen::VirtualDnsRecordType rec_data = rec->data();
658 item.
name = rec_data.record_name;
659 item.
data = rec_data.record_data;
660 item.
ttl = rec_data.record_ttl_seconds;
661 item.
priority = rec_data.record_mx_preference;
671 rec.rec_class =
"IN";
675 rec.source =
"Config";
677 rec.source =
"Agent";
679 rec.installed =
"true";
681 rec.installed =
"false";
687 VirtualDnsRecordTraceData rec;
689 std::string dns_name;
709 if (!it->second || it->second->GetVirtualDns())
continue;
710 if (it->second->virtual_dns_name_ == vdns->
GetName()) {
711 it->second->virt_dns_ = vdns;
740 autogen::GlobalQosConfig *qos =
741 static_cast<autogen::GlobalQosConfig *
>(node->
GetObject());
744 const autogen::ControlTrafficDscpType &dscp = qos->control_traffic_dscp();
boost::asio::ip::address IpAddress
std::vector< Subnet > Subnets
static void RemoveSpecialChars(std::string &name)
static uint16_t DnsType(const std::string &tp)
static bool GetAddrFromPtrName(std::string &ptr_name, IpAddress &mask)
static uint16_t DnsClass(const std::string &cl)
static bool IsIP(const std::string &name, IpAddress &addr)
IFMapNode * FindTarget(IFMapNode *node, std::string link_name)
static DnsConfigManager * GetDnsConfigManager()
static XmppServer * GetXmppServer()
const std::string & name() const
IFMapObject * GetObject()
static void SetDscpValue(uint8_t value)
void SetDscpValue(uint8_t value)
#define DNS_TRACE(Obj,...)
boost::function< void(const DnsConfig *, DnsConfig::DnsConfigEvent)> Callback
bool IsErrorLogged() const
const std::string & GetName() const
void ClearNotified() const
static const std::string EventString[]
static ZoneCallback VdnsZoneCallback
boost::function< void(const Subnet &, const VirtualDnsConfig *, DnsConfig::DnsConfigEvent)> ZoneCallback
static Callback VdnsCallback
static Callback VdnsRecordCallback
void OnAdd(IFMapNode *node)
static GlobalQosConfig * singleton_
static GlobalQosConfig * Find(const std::string &name)
void OnChange(IFMapNode *node)
GlobalQosConfig(IFMapNode *node)
void OnChange(IFMapNode *node)
bool GetObject(IFMapNode *node, autogen::IpamType &data)
static void AssociateIpamVdns(VirtualDnsConfig *vdns)
void OnAdd(IFMapNode *node)
std::map< std::string, IpamConfig * > DataMap
VirtualDnsConfig * GetVirtualDns()
static IpamConfig * Find(std::string name)
void Trace(const std::string &ev)
std::string & GetVirtualDnsName()
void DelVnni(VnniConfig *vnni)
void Add(VirtualDnsConfig *vdns)
std::pair< std::string, IpamConfig * > DataPair
static DataMap ipam_config_
IpamConfig(IFMapNode *node)
VirtualDnsConfig * virtual_dns_
const VnniList & GetVnniList() const
std::set< VnniConfig * > VnniList
void AddVnni(VnniConfig *vnni)
void Notify(DnsConfig::DnsConfigEvent ev)
void NotifyPendingDnsRecords()
std::string GetNextDns() const
void AddRecord(VirtualDnsRecordConfig *record)
static VirtualDnsConfig * Find(std::string name)
void OnAdd(IFMapNode *node)
void VirtualDnsTrace(VirtualDnsTraceData &rec)
autogen::VirtualDnsType rec_
void Trace(const std::string &ev)
void AddIpam(IpamConfig *ipam)
bool GetObject(IFMapNode *node, autogen::VirtualDnsType &data)
autogen::VirtualDnsType GetVDns() const
static DataMap virt_dns_config_
bool GetSubnet(const IpAddress &addr, Subnet &subnet) const
autogen::VirtualDnsType old_rec_
VirtualDnsConfig(IFMapNode *node)
std::map< std::string, VirtualDnsConfig * > DataMap
bool DynamicUpdatesEnabled() const
void DelRecord(VirtualDnsRecordConfig *record)
void DelIpam(IpamConfig *ipam)
void OnChange(IFMapNode *node)
VDnsRec virtual_dns_records_
bool IsReverseResolutionEnabled() const
std::string GetDomainName() const
std::string GetViewName() const
std::pair< std::string, VirtualDnsConfig * > DataPair
void OnChange(IFMapNode *node)
~VirtualDnsRecordConfig()
std::string virtual_dns_name_
std::string GetViewName() const
bool OnlyTtlChange(DnsItem &rhs)
void Trace(const std::string &ev)
static DataMap virt_dns_rec_config_
autogen::VirtualDnsType GetVDns() const
void VirtualDnsRecordTrace(VirtualDnsRecordTraceData &rec)
static VirtualDnsRecordConfig * Find(std::string name)
std::map< std::string, VirtualDnsRecordConfig * > DataMap
void OnAdd(IFMapNode *node=NULL)
static void UpdateVirtualDns(VirtualDnsConfig *vdns)
VirtualDnsConfig * virt_dns_
bool HasChanged(DnsItem &rhs)
bool UpdateVdns(IFMapNode *node)
VirtualDnsRecordConfig(IFMapNode *node)
std::pair< std::string, VirtualDnsRecordConfig * > DataPair
bool GetObject(IFMapNode *node, DnsItem &item)
bool NotifySubnets(Subnets &old_nets, Subnets &new_nets, VirtualDnsConfig *vdns)
std::pair< std::string, VnniConfig * > DataPair
static VnniConfig * Find(std::string name)
void FindSubnets(IFMapNode *node, Subnets &subnets)
void OnAdd(IFMapNode *node)
void UpdateIpam(IFMapNode *node)
VnniConfig(IFMapNode *node)
void OnChange(IFMapNode *node)
static DataMap vnni_config_
std::map< std::string, VnniConfig * > DataMap