OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dns_oper.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #include <cmn/dns.h>
6 #include <bind/bind_util.h>
7 #include <bind/bind_resolver.h>
8 #include <mgr/dns_mgr.h>
9 #include <mgr/dns_oper.h>
10 #include <bind/named_config.h>
12 #include <sandesh/sandesh_types.h>
13 #include <sandesh/common/vns_types.h>
14 #include <vnc_cfg_types.h>
15 
16 #include <boost/bind.hpp>
17 #include "base/logging.h"
18 #include "base/task.h"
19 #include "base/util.h"
20 #include "bind/bind_util.h"
21 #include "cfg/dns_config.h"
22 #include "cfg/config_listener.h"
23 #include "ifmap/ifmap_link.h"
24 #include "ifmap/ifmap_table.h"
25 #include "cmn/dns.h"
26 #include "xmpp/xmpp_server.h"
27 
28 using namespace std;
29 
31 
32 const std::string DnsConfig::EventString[] = {
33  "Add",
34  "Change",
35  "Delete"
36 };
45 
47 
49  : DnsConfig(node->name()), ipam_(NULL) {
50  vnni_config_.insert(DataPair(GetName(), this));
51  UpdateIpam(node);
52 }
53 
55  vnni_config_.erase(name_);
56 }
57 
59  MarkValid();
60  FindSubnets(node, subnets_);
61  if (!ipam_) {
62  UpdateIpam(node);
63  }
64  if (ipam_ && ipam_->IsValid() && ipam_->GetVirtualDns()) {
65  Subnets subnets;
68  }
69 }
70 
72  MarkDelete();
73  if (ipam_) {
74  if (ipam_->IsValid() && ipam_->GetVirtualDns()) {
75  for (unsigned int i = 0; i < subnets_.size(); i++) {
78  }
80  }
81  ipam_->DelVnni(this);
82  }
83 }
84 
86  Subnets old_subnets;
87  subnets_.swap(old_subnets);
88  FindSubnets(node, subnets_);
89  if (!ipam_) {
90  UpdateIpam(node);
91  }
92  if (ipam_ && ipam_->IsValid() && ipam_->GetVirtualDns() &&
93  NotifySubnets(old_subnets, subnets_, ipam_->GetVirtualDns())) {
95  }
96 }
97 
99  if (node) {
100  IFMapNode *ipam_node = Dns::GetDnsConfigManager()->FindTarget(node,
101  "virtual-network-network-ipam", "network-ipam");
102  if (ipam_node == NULL) {
103  DNS_TRACE(DnsError, "VirtualNetworkNetworkIpam <" + GetName() +
104  "> does not have Ipam link");
105  return;
106  }
107  ipam_ = IpamConfig::Find(ipam_node->name());
108  if (!ipam_) {
109  ipam_ = new IpamConfig(ipam_node);
110  }
111  ipam_->AddVnni(this);
112  }
113 }
114 
116  if (!node || node->IsDeleted())
117  return;
118 
119  autogen::VirtualNetworkNetworkIpam *vnni =
120  static_cast<autogen::VirtualNetworkNetworkIpam *> (node->GetObject());
121  if (!vnni)
122  return;
123 
124  const autogen::VnSubnetsType &subnets_type = vnni->data();
125  for (unsigned int i = 0; i < subnets_type.ipam_subnets.size(); ++i) {
126  Subnet subnet(subnets_type.ipam_subnets[i].subnet.ip_prefix,
127  subnets_type.ipam_subnets[i].subnet.ip_prefix_len);
128  subnets.push_back(subnet);
129  }
130  std::sort(subnets.begin(), subnets.end());
131 }
132 
133 bool VnniConfig::NotifySubnets(Subnets &old_nets, Subnets &new_nets,
134  VirtualDnsConfig *vdns) {
135  bool change = false;
136  Subnets::iterator it_old = old_nets.begin();
137  Subnets::iterator it_new = new_nets.begin();
138  while (it_old != old_nets.end() && it_new != new_nets.end()) {
139  if (*it_old < *it_new) {
140  // old entry is deleted
141  it_old->MarkDelete();
142  VdnsZoneCallback(*it_old, vdns, DnsConfig::CFG_DELETE);
143  change = true;
144  it_old++;
145  } else if (*it_new < *it_old) {
146  // new entry
147  VdnsZoneCallback(*it_new, vdns, DnsConfig::CFG_ADD);
148  change = true;
149  it_new++;
150  } else {
151  // no change in entry
152  it_old++;
153  it_new++;
154  }
155  }
156 
157  // delete remaining old entries
158  for (; it_old != old_nets.end(); ++it_old) {
159  it_old->MarkDelete();
160  VdnsZoneCallback(*it_old, vdns, DnsConfig::CFG_DELETE);
161  change = true;
162  }
163 
164  // add remaining new entries
165  for (; it_new != new_nets.end(); ++it_new) {
166  VdnsZoneCallback(*it_new, vdns, DnsConfig::CFG_ADD);
167  change = true;
168  }
169 
170  return change;
171 }
172 
173 VnniConfig *VnniConfig::Find(std::string name) {
174  if (name.empty())
175  return NULL;
176  DataMap::iterator iter = vnni_config_.find(name);
177  if (iter != vnni_config_.end())
178  return iter->second;
179  return NULL;
180 }
181 
183 
185  : DnsConfig(node->name()), virtual_dns_(NULL) {
186  GetObject(node, rec_);
187  ipam_config_.insert(DataPair(GetName(), this));
188 }
189 
191  for (VnniList::iterator it = vnni_list_.begin();
192  it != vnni_list_.end(); ++it) {
193  (*it)->ipam_ = NULL;
194  }
195  ipam_config_.erase(name_);
196 }
197 
199  MarkValid();
200  GetObject(node, rec_);
202  if (GetVirtualDns())
204 }
205 
207  Delete();
208  if (GetVirtualDns())
210 }
211 
213  autogen::IpamType new_rec;
214  GetObject(node, new_rec);
215  if (new_rec.ipam_dns_server.virtual_dns_server_name != GetVirtualDnsName()) {
216  Delete();
217  if (GetVirtualDns())
219  ClearDelete();
220  rec_ = new_rec;
222  if (GetVirtualDns())
224  } else
225  rec_ = new_rec;
226 }
227 
229  virtual_dns_ = vdns;
230  if (virtual_dns_) {
231  virtual_dns_->AddIpam(this);
233  }
234 }
235 
237  MarkDelete();
238  if (virtual_dns_) {
240  virtual_dns_->DelIpam(this);
241  }
242 }
243 
245  for (IpamConfig::VnniList::iterator it = vnni_list_.begin();
246  it != vnni_list_.end(); ++it) {
247  Subnets &subnets = (*it)->GetSubnets();
248  for (unsigned int i = 0; i < subnets.size(); i++) {
249  VdnsZoneCallback(subnets[i], virtual_dns_, ev);
250  }
251  }
252 }
253 
254 bool IpamConfig::GetObject(IFMapNode *node, autogen::IpamType &data) {
255  if (!node)
256  return false;
257 
258  autogen::NetworkIpam *ipam =
259  static_cast<autogen::NetworkIpam *>(node->GetObject());
260  if (!ipam)
261  return false;
262 
263  data = ipam->mgmt();
264  return true;
265 }
266 
267 void IpamConfig::Trace(const std::string &ev) {
268  DNS_TRACE(IpamTrace, name_, GetVirtualDnsName(), ev);
269 }
270 
271 IpamConfig *IpamConfig::Find(std::string name) {
272  if (name.empty())
273  return NULL;
274  DataMap::iterator iter = ipam_config_.find(name);
275  if (iter != ipam_config_.end())
276  return iter->second;
277  return NULL;
278 }
279 
281  for (DataMap::iterator iter = ipam_config_.begin();
282  iter != ipam_config_.end(); ++iter) {
283  IpamConfig *ipam = iter->second;
284  if (!ipam->GetVirtualDns() &&
285  ipam->GetVirtualDnsName() == vdns->GetName()) {
286  ipam->virtual_dns_ = vdns;
287  vdns->AddIpam(ipam);
288  }
289  }
290 }
291 
293 
295  GetObject(node, rec_);
296  old_rec_ = rec_;
297  virt_dns_config_.insert(DataPair(GetName(), this));
298 }
299 
300 VirtualDnsConfig::VirtualDnsConfig(const std::string &name) : DnsConfig(name) {
301  rec_.external_visible = false;
302  rec_.reverse_resolution = false;
303  old_rec_ = rec_;
304  virt_dns_config_.insert(DataPair(GetName(), this));
305 }
306 
308  virt_dns_config_.erase(name_);
309 }
310 
312  if (!GetObject(node, rec_) || GetDomainName().empty())
313  return;
314  MarkValid();
315  // Update any ipam configs dependent on this virtual dns
317  // Update any records dependent on this virtual dns
320  old_rec_ = rec_;
321  // No notification for subnets is required here as the config was
322  // available in the above notify
324  Trace("Add");
325 }
326 
328  Trace("Delete");
329  MarkDelete();
331  for (VirtualDnsConfig::IpamList::iterator iter = ipams_.begin();
332  iter != ipams_.end(); ++iter) {
333  (*iter)->virtual_dns_ = NULL;
334  }
335  for (VirtualDnsConfig::VDnsRec::iterator it =
336  virtual_dns_records_.begin();
337  it != virtual_dns_records_.end(); ++it) {
338  (*it)->virt_dns_ = NULL;
339  (*it)->ClearNotified();
340  }
342 }
343 
345  Trace("Change");
346  if (!GetObject(node, rec_) || !HasChanged())
347  return;
348 
349  bool notify = false;
350  if (!IsValid()) {
351  MarkValid();
352  // Update any ipam configs dependent on this virtual dns
354  // Update any records dependent on this virtual dns
356  notify = true;
357  }
358 
360  old_rec_ = rec_;
361  if (notify) NotifyPendingDnsRecords();
362 }
363 
365  virtual_dns_records_.insert(record);
366 }
367 
369  virtual_dns_records_.erase(record);
370 }
371 
373  autogen::VirtualDnsType &data) {
374  if (!node)
375  return false;
376 
377  autogen::VirtualDns *dns =
378  static_cast<autogen::VirtualDns *>(node->GetObject());
379  // if (!dns || !dns->IsPropertySet(autogen::VirtualDns::ID_PERMS))
380  if (!dns)
381  return false;
382 
383  data = dns->data();
384  return true;
385 }
386 
387 bool VirtualDnsConfig::GetSubnet(const IpAddress &addr, Subnet &subnet) const {
388  for (IpamList::iterator ipam_iter = ipams_.begin();
389  ipam_iter != ipams_.end(); ++ipam_iter) {
390  IpamConfig *ipam = *ipam_iter;
391  const IpamConfig::VnniList &vnni = ipam->GetVnniList();
392  for (IpamConfig::VnniList::iterator vnni_it = vnni.begin();
393  vnni_it != vnni.end(); ++vnni_it) {
394  Subnets &subnets = (*vnni_it)->GetSubnets();
395  for (unsigned int i = 0; i < subnets.size(); i++) {
396  if (subnets[i].Contains(addr)) {
397  subnet = subnets[i];
398  return true;
399  }
400  }
401  }
402  }
403  return false;
404 }
405 
407  for (VirtualDnsConfig::VDnsRec::iterator it = virtual_dns_records_.begin();
408  it != virtual_dns_records_.end(); ++it) {
409  VirtualDnsRecordConfig *rec = *it;
410  if (rec->CanNotify()) {
411  if (!rec->IsNotified()) {
413  }
414  } else {
415  rec->ClearNotified();
416  }
417  }
418 }
419 
421  if (rec_.domain_name == old_rec_.domain_name &&
422  rec_.dynamic_records_from_client == old_rec_.dynamic_records_from_client &&
423  rec_.record_order == old_rec_.record_order &&
424  rec_.default_ttl_seconds == old_rec_.default_ttl_seconds &&
425  rec_.next_virtual_DNS == old_rec_.next_virtual_DNS &&
426  rec_.external_visible == old_rec_.external_visible &&
427  rec_.reverse_resolution == old_rec_.reverse_resolution &&
428  rec_.soa_record.negative_cache_ttl_seconds == old_rec_.soa_record.negative_cache_ttl_seconds)
429  return false;
430  return true;
431 }
432 
433 void VirtualDnsConfig::VirtualDnsTrace(VirtualDnsTraceData &rec) {
434  rec.name = name_;
435  rec.dns_name = rec_.domain_name;
436  rec.dns_dyn_rec = rec_.dynamic_records_from_client;
437  rec.dns_order = rec_.record_order;
438  rec.dns_ttl = rec_.default_ttl_seconds;
439  rec.dns_next = rec_.next_virtual_DNS;
440  rec.installed = (IsNotified() ? "true" : "false");
441  rec.floating_ip_record = rec_.floating_ip_record;
442  rec.external_visible = (rec_.external_visible ? "yes" : "no");
443  rec.reverse_resolution = (rec_.reverse_resolution ? "yes" : "no");
444  rec.flags = flags_;
445  rec.negative_cache_ttl_seconds = rec_.soa_record.negative_cache_ttl_seconds;
446 }
447 
448 void VirtualDnsConfig::Trace(const std::string &ev) {
449  VirtualDnsTraceData rec;
450  VirtualDnsTrace(rec);
451  DNS_TRACE(VirtualDnsTrace, ev, rec);
452 }
453 
454 std::string VirtualDnsConfig::GetViewName() const {
455  std::string name(GetName());
457  return name;
458 }
459 
460 std::string VirtualDnsConfig::GetNextDns() const {
461  std::string name(rec_.next_virtual_DNS);
463  return name;
464 }
465 
467  return rec_.dynamic_records_from_client;
468 }
469 
471  if (name.empty())
472  return NULL;
473  DataMap::iterator iter = virt_dns_config_.find(name);
474  if (iter != virt_dns_config_.end())
475  return iter->second;
476  return NULL;
477 }
478 
480 
482  : DnsConfig(node->name()), virt_dns_(NULL), src_(VirtualDnsRecordConfig::Config) {
483  GetObject(node, rec_);
484  virt_dns_rec_config_.insert(DataPair(GetName(), this));
485  UpdateVdns(node);
486 }
487 
489  const std::string &vdns_name,
490  const DnsItem &item)
491  : DnsConfig(name), rec_(item), virt_dns_(NULL),
493  virt_dns_rec_config_.insert(DataPair(GetName(), this));
494  virt_dns_ = VirtualDnsConfig::Find(vdns_name);
495  if (!virt_dns_) {
496  virt_dns_ = new VirtualDnsConfig(vdns_name);
497  virt_dns_->AddRecord(this);
498  }
500 }
501 
504 }
505 
507  MarkValid();
508  if (!virt_dns_) {
509  if (!UpdateVdns(node)) {
510  ClearValid();
511  }
512  } else if (!virt_dns_->IsValid()) {
513  virt_dns_->AddRecord(this);
514  } else {
515  virt_dns_->AddRecord(this);
516  if (CanNotify()) {
518  }
519  }
520  Trace("Add");
521 }
522 
524  Trace("Delete");
525  MarkDelete();
526  if (virt_dns_) {
527  if (IsNotified()) {
529  }
530  virt_dns_->DelRecord(this);
531  }
532 }
533 
535  DnsItem new_rec;
536  if (!GetObject(node, new_rec) ||
537  (IsValid() && !HasChanged(new_rec))) {
538  return;
539  }
540  if (!virt_dns_) {
541  MarkValid();
542  if (!UpdateVdns(node)) {
543  ClearValid();
544  }
545  }
546  // For records, notify a change with a delete of the old record
547  // followed by addition of new record; If only TTL has changed,
548  // do not delete, as the order of delete and add processing is
549  // not controlled and we might end up with deleted record
550  if (IsNotified() && !OnlyTtlChange(new_rec)) {
552  }
553  OnChange(new_rec);
554 }
555 
557  rec_ = new_rec;
558  if (CanNotify()) {
560  }
561  Trace("Change");
562 }
563 
565  if (!node) {
566  return false;
567  }
568 
569  IFMapNode *vdns_node = Dns::GetDnsConfigManager()->FindTarget(node,
570  "virtual-DNS-virtual-DNS-record");
571  if (vdns_node == NULL) {
572  DNS_TRACE(DnsError, "Virtual DNS Record <" + GetName() +
573  "> does not have virtual DNS link");
574  return false;
575  }
576  virt_dns_ = VirtualDnsConfig::Find(vdns_node->name());
577  if (!virt_dns_) {
578  virt_dns_ = new VirtualDnsConfig(vdns_node);
579  }
580  virt_dns_->AddRecord(this);
582  return true;
583 }
584 
586  if (!IsValid() || !virt_dns_ || !virt_dns_->IsValid())
587  return false;
588 
591  return false;
592  }
593  IpAddress addr;
594  if (BindUtil::IsIP(rec_.name, addr) ||
596  Subnet net;
597  return virt_dns_->GetSubnet(addr, net);
598  }
599  if (!IsErrorLogged()) {
600  DNS_CONFIGURATION_LOG(
601  g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
602  SandeshLevel::SYS_ERR, "Invalid PTR Name",
603  GetName(), rec_.name);
604  MarkErrorLogged();
605  }
606  return false;
607  }
608 
609  return true;
610 }
611 
613  if (rec_.name == rhs.name && rec_.type == rhs.type &&
614  rec_.eclass == rhs.eclass && rec_.data == rhs.data &&
615  rec_.ttl == rhs.ttl && rec_.priority == rhs.priority)
616  return false;
617  return true;
618 }
619 
621  if (rec_.name == rhs.name && rec_.type == rhs.type &&
622  rec_.eclass == rhs.eclass && rec_.data == rhs.data &&
623  rec_.ttl != rhs.ttl && rec_.priority == rhs.priority)
624  return true;
625  return false;
626 }
627 
628 autogen::VirtualDnsType VirtualDnsRecordConfig::GetVDns() const {
629  autogen::VirtualDnsType data;
630  data.dynamic_records_from_client = false;
631  data.default_ttl_seconds = 0;
632  data.soa_record.negative_cache_ttl_seconds = 0;
633  if (virt_dns_)
634  data = virt_dns_->GetVDns();
635  return data;
636 }
637 
639  if (virt_dns_) {
640  return virt_dns_->GetViewName();
641  } else
642  return "";
643 }
644 
646  if (!node)
647  return false;
648 
649  autogen::VirtualDnsRecord *rec =
650  static_cast<autogen::VirtualDnsRecord *>(node->GetObject());
651  if (!rec)
652  return false;
653 
654  autogen::VirtualDnsRecordType rec_data = rec->data();
655  item.eclass = BindUtil::DnsClass(rec_data.record_class);
656  item.type = BindUtil::DnsType(rec_data.record_type);
657  item.name = rec_data.record_name;
658  item.data = rec_data.record_data;
659  item.ttl = rec_data.record_ttl_seconds;
660  item.priority = rec_data.record_mx_preference;
661  item.source_name = rec_data.record_source_name;
662  return true;
663 }
664 
665 void VirtualDnsRecordConfig::VirtualDnsRecordTrace(VirtualDnsRecordTraceData &rec) {
666  rec.name = name_;
667  rec.rec_name = rec_.name;
668  rec.rec_type = BindUtil::DnsType(rec_.type);
669  if (rec_.eclass == DNS_CLASS_IN)
670  rec.rec_class = "IN";
671  rec.rec_data = rec_.data;
672  rec.rec_ttl = rec_.ttl;
674  rec.source = "Config";
675  else
676  rec.source = "Agent";
677  if (IsNotified())
678  rec.installed = "true";
679  else
680  rec.installed = "false";
681  rec.flags = flags_;
682  rec.rec_source_name = rec_.source_name;
683 }
684 
685 void VirtualDnsRecordConfig::Trace(const std::string &ev) {
686  VirtualDnsRecordTraceData rec;
688  std::string dns_name;
689  if (virt_dns_)
690  dns_name = virt_dns_->name_;
691  DNS_TRACE(VirtualDnsRecordTrace, ev, dns_name, rec);
692 }
693 
695  if (name.empty())
696  return NULL;
697  DataMap::iterator iter = virt_dns_rec_config_.find(name);
698  if (iter != virt_dns_rec_config_.end())
699  return iter->second;
700  return NULL;
701 }
702 
703 // Check virtual dns records having empty VDNS to see if they belong to
704 // the vdns being added now; update the reference accordingly
706  for (DataMap::iterator it = virt_dns_rec_config_.begin();
707  it != virt_dns_rec_config_.end(); ++it) {
708  if (!it->second || it->second->GetVirtualDns()) continue;
709  if (it->second->virtual_dns_name_ == vdns->GetName()) {
710  it->second->virt_dns_ = vdns;
711  vdns->AddRecord(it->second);
712  }
713  }
714 }
715 
717  : DnsConfig(node->name()) {
718  assert(singleton_ == NULL);
719  singleton_ = this;
720 }
721 
723  singleton_ = NULL;
724 }
725 
727  return singleton_;
728 }
729 
731  XmppServer *server = Dns::GetXmppServer();
732  if (server) {
733  server->SetDscpValue(control_dscp_);
734  }
735 }
736 
738  MarkValid();
739  autogen::GlobalQosConfig *qos =
740  static_cast<autogen::GlobalQosConfig *>(node->GetObject());
741  if (!qos)
742  return;
743  const autogen::ControlTrafficDscpType &dscp = qos->control_traffic_dscp();
744  if (control_dscp_ != dscp.control) {
745  control_dscp_ = dscp.control;
746  Sandesh::SetDscpValue(dscp.control);
747  SetDscp();
748  }
749  if (analytics_dscp_ != dscp.analytics) {
750  analytics_dscp_ = dscp.analytics;
751  }
752 }
753 
755  if (control_dscp_ != 0) {
756  control_dscp_ = 0;
757  SetDscp();
758  }
759  analytics_dscp_ = 0;
760 }
761 
763  OnAdd(node);
764 }
765 
std::pair< std::string, VirtualDnsRecordConfig * > DataPair
Definition: dns_oper.h:190
void VirtualDnsTrace(VirtualDnsTraceData &rec)
Definition: dns_oper.cc:433
std::string name_
Definition: dns_oper.h:28
static DataMap virt_dns_rec_config_
Definition: dns_oper.h:201
static void AssociateIpamVdns(VirtualDnsConfig *vdns)
Definition: dns_oper.cc:280
IpamList ipams_
Definition: dns_oper.h:145
static ZoneCallback VdnsZoneCallback
Definition: dns_oper.h:65
void Trace(const std::string &ev)
Definition: dns_oper.cc:267
void OnChange(IFMapNode *node)
Definition: dns_oper.cc:534
void OnChange(IFMapNode *node)
Definition: dns_oper.cc:344
void OnChange(IFMapNode *node)
Definition: dns_oper.cc:85
static VirtualDnsRecordConfig * Find(std::string name)
Definition: dns_oper.cc:694
IpamConfig(IFMapNode *node)
Definition: dns_oper.cc:184
void DelRecord(VirtualDnsRecordConfig *record)
Definition: dns_oper.cc:368
IpamConfig * ipam_
Definition: dns_oper.h:78
bool IsValid() const
Definition: dns_oper.h:45
bool GetObject(IFMapNode *node, autogen::VirtualDnsType &data)
Definition: dns_oper.cc:372
void OnChange(IFMapNode *node)
Definition: dns_oper.cc:762
void SetDscp()
Definition: dns_oper.cc:730
GlobalQosConfig(IFMapNode *node)
Definition: dns_oper.cc:716
#define DNS_PTR_RECORD
Definition: bind_util.h:40
~VnniConfig()
Definition: dns_oper.cc:54
uint8_t flags_
Definition: dns_oper.h:29
void OnDelete()
Definition: dns_oper.cc:754
bool IsDeleted() const
Definition: db_entry.h:49
boost::asio::ip::address IpAddress
Definition: address.h:13
VirtualDnsConfig * virtual_dns_
Definition: dns_oper.h:106
static Callback VdnsCallback
Definition: dns_oper.h:63
uint8_t control_dscp_
Definition: dns_oper.h:239
std::string GetViewName() const
Definition: dns_oper.cc:638
VDnsRec virtual_dns_records_
Definition: dns_oper.h:144
VirtualDnsConfig * virt_dns_
Definition: dns_oper.h:198
void ClearValid()
Definition: dns_oper.h:46
void ClearNotified() const
Definition: dns_oper.h:49
bool UpdateVdns(IFMapNode *node)
Definition: dns_oper.cc:564
static const std::string EventString[]
Definition: dns_oper.h:66
uint16_t priority
Definition: bind_util.h:152
void MarkDelete()
Definition: dns_oper.h:50
VirtualDnsConfig * GetVirtualDns()
Definition: dns_oper.h:127
static void SetDscpValue(uint8_t value)
Definition: sandesh.cc:334
boost::function< void(const DnsConfig *, DnsConfig::DnsConfigEvent)> Callback
Definition: dns_oper.h:60
static VnniConfig * Find(std::string name)
Definition: dns_oper.cc:173
std::string name
Definition: bind_util.h:158
void SetDscpValue(uint8_t value)
Definition: xmpp_server.cc:585
#define DNS_CLASS_IN
Definition: bind_util.h:31
IFMapNode * FindTarget(IFMapNode *node, std::string link_name)
Definition: dns_config.cc:168
static GlobalQosConfig * Find(const std::string &name)
Definition: dns_oper.cc:726
static DataMap vnni_config_
Definition: dns_oper.h:79
std::set< VnniConfig * > VnniList
Definition: dns_oper.h:101
const std::string & GetName() const
Definition: dns_oper.h:57
bool IsReverseResolutionEnabled() const
Definition: dns_oper.h:176
void MarkValid()
Definition: dns_oper.h:44
uint8_t analytics_dscp_
Definition: dns_oper.h:240
std::pair< std::string, VnniConfig * > DataPair
Definition: dns_oper.h:75
void OnAdd(IFMapNode *node=NULL)
Definition: dns_oper.cc:506
static GlobalQosConfig * singleton_
Definition: dns_oper.h:241
void Add(VirtualDnsConfig *vdns)
Definition: dns_oper.cc:228
std::map< std::string, IpamConfig * > DataMap
Definition: dns_oper.h:102
void OnDelete()
Definition: dns_oper.cc:71
static void RemoveSpecialChars(std::string &name)
Definition: bind_util.cc:1009
bool DynamicUpdatesEnabled() const
Definition: dns_oper.cc:466
static VirtualDnsConfig * Find(std::string name)
Definition: dns_oper.cc:470
static DataMap virt_dns_config_
Definition: dns_oper.h:146
static void UpdateVirtualDns(VirtualDnsConfig *vdns)
Definition: dns_oper.cc:705
bool IsErrorLogged() const
Definition: dns_oper.h:54
Definition: agent.h:358
void VirtualDnsRecordTrace(VirtualDnsRecordTraceData &rec)
Definition: dns_oper.cc:665
VnniConfig(IFMapNode *node)
Definition: dns_oper.cc:48
static DataMap ipam_config_
Definition: dns_oper.h:108
autogen::IpamType rec_
Definition: dns_oper.h:105
void AddVnni(VnniConfig *vnni)
Definition: dns_oper.h:122
static IpamConfig * Find(std::string name)
Definition: dns_oper.cc:271
uint16_t eclass
Definition: bind_util.h:149
std::vector< Subnet > Subnets
Definition: bind_util.h:278
std::string source_name
Definition: bind_util.h:159
void OnChange(IFMapNode *node)
Definition: dns_oper.cc:212
std::string GetDomainName() const
Definition: dns_oper.h:172
static bool IsIP(const std::string &name, IpAddress &addr)
Definition: bind_util.cc:715
#define DNS_TRACE(Obj,...)
Definition: dns_config.h:34
std::string data
Definition: bind_util.h:160
static Callback VdnsRecordCallback
Definition: dns_oper.h:64
autogen::VirtualDnsType GetVDns() const
Definition: dns_oper.h:160
void DelIpam(IpamConfig *ipam)
Definition: dns_oper.h:158
bool IsNotified() const
Definition: dns_oper.h:48
std::pair< std::string, IpamConfig * > DataPair
Definition: dns_oper.h:103
void OnAdd(IFMapNode *node)
Definition: dns_oper.cc:58
static DnsConfigManager * GetDnsConfigManager()
Definition: dns.h:37
void AddIpam(IpamConfig *ipam)
Definition: dns_oper.h:157
const std::string & name() const
Definition: ifmap_node.h:48
bool GetObject(IFMapNode *node, autogen::IpamType &data)
Definition: dns_oper.cc:254
static uint16_t DnsClass(const std::string &cl)
Definition: bind_util.cc:112
const VnniList & GetVnniList() const
Definition: dns_oper.h:128
std::string GetViewName() const
Definition: dns_oper.cc:454
void OnDelete()
Definition: dns_oper.cc:206
std::string virtual_dns_name_
Definition: dns_oper.h:199
bool HasChanged(DnsItem &rhs)
Definition: dns_oper.cc:612
void AddRecord(VirtualDnsRecordConfig *record)
Definition: dns_oper.cc:364
IFMapObject * GetObject()
Definition: ifmap_node.cc:63
std::map< std::string, VirtualDnsRecordConfig * > DataMap
Definition: dns_oper.h:189
bool GetSubnet(const IpAddress &addr, Subnet &subnet) const
Definition: dns_oper.cc:387
void FindSubnets(IFMapNode *node, Subnets &subnets)
Definition: dns_oper.cc:115
autogen::VirtualDnsType rec_
Definition: dns_oper.h:142
static bool GetAddrFromPtrName(std::string &ptr_name, IpAddress &mask)
Definition: bind_util.cc:933
void Delete()
Definition: dns_oper.cc:236
bool HasChanged()
Definition: dns_oper.cc:420
bool NotifySubnets(Subnets &old_nets, Subnets &new_nets, VirtualDnsConfig *vdns)
Definition: dns_oper.cc:133
bool GetObject(IFMapNode *node, DnsItem &item)
Definition: dns_oper.cc:645
VnniList vnni_list_
Definition: dns_oper.h:107
std::pair< std::string, VirtualDnsConfig * > DataPair
Definition: dns_oper.h:140
void Trace(const std::string &ev)
Definition: dns_oper.cc:448
void Trace(const std::string &ev)
Definition: dns_oper.cc:685
void OnAdd(IFMapNode *node)
Definition: dns_oper.cc:311
std::map< std::string, VirtualDnsConfig * > DataMap
Definition: dns_oper.h:139
std::string GetNextDns() const
Definition: dns_oper.cc:460
VirtualDnsConfig(IFMapNode *node)
Definition: dns_oper.cc:294
void DelVnni(VnniConfig *vnni)
Definition: dns_oper.h:123
void ClearDelete()
Definition: dns_oper.h:52
void Notify(DnsConfig::DnsConfigEvent ev)
Definition: dns_oper.cc:244
DnsConfigEvent
Definition: dns_oper.h:31
uint32_t ttl
Definition: bind_util.h:151
std::map< std::string, VnniConfig * > DataMap
Definition: dns_oper.h:74
void UpdateIpam(IFMapNode *node)
Definition: dns_oper.cc:98
autogen::VirtualDnsType GetVDns() const
Definition: dns_oper.cc:628
static uint16_t DnsType(const std::string &tp)
Definition: bind_util.cc:125
static XmppServer * GetXmppServer()
Definition: dns.h:40
bool OnlyTtlChange(DnsItem &rhs)
Definition: dns_oper.cc:620
Subnets subnets_
Definition: dns_oper.h:77
void MarkErrorLogged()
Definition: dns_oper.h:53
VirtualDnsRecordConfig(IFMapNode *node)
Definition: dns_oper.cc:481
autogen::VirtualDnsType old_rec_
Definition: dns_oper.h:143
void NotifyPendingDnsRecords()
Definition: dns_oper.cc:406
void OnAdd(IFMapNode *node)
Definition: dns_oper.cc:198
boost::function< void(const Subnet &, const VirtualDnsConfig *, DnsConfig::DnsConfigEvent)> ZoneCallback
Definition: dns_oper.h:62
std::string & GetVirtualDnsName()
Definition: dns_oper.h:124
void OnAdd(IFMapNode *node)
Definition: dns_oper.cc:737
uint16_t type
Definition: bind_util.h:150