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