15 : bind_status_(boost::bind(&
DnsManager::BindEventHandler, this, _1)),
16 end_of_config_(false),
17 record_send_count_(
TaskScheduler::GetInstance()->HardwareThreadCount()),
18 named_max_retransmissions_(kMaxRetransmitCount),
19 named_retransmission_interval_(kPendingRecordReScheduleTime),
20 named_lo_watermark_(kNamedLoWaterMark),
21 named_hi_watermark_(kNamedHiWaterMark),
22 named_send_throttled_(false),
23 pending_done_queue_(
TaskScheduler::GetInstance()->GetTaskId(
"dns::NamedSndRcv"), 0,
24 boost::bind(&
DnsManager::PendingDone, this, _1)),
25 idx_(kMaxIndexAllocator) {
26 std::vector<BindResolver::DnsServer> bind_servers;
36 obs.
virtual_dns = boost::bind(&DnsManager::ProcessConfig<VirtualDnsConfig>,
39 boost::bind(&DnsManager::ProcessConfig<VirtualDnsRecordConfig>,
41 obs.
ipam = boost::bind(&DnsManager::ProcessConfig<IpamConfig>,
this, _1, _2, _3);
42 obs.
vnni = boost::bind(&DnsManager::ProcessConfig<VnniConfig>,
this, _1, _2, _3);
43 obs.
global_qos = boost::bind(&DnsManager::ProcessConfig<GlobalQosConfig>,
59 "Check_EndofConfig_Timer",
67 const std::string& named_config_dir,
68 const std::string& named_config_file,
69 const std::string& named_log_file,
70 const std::string& rndc_config_file,
71 const std::string& rndc_secret,
72 const std::string& named_max_cache_size,
73 const uint16_t named_max_retransmissions,
74 const uint16_t named_retranmission_interval) {
76 named_log_file, rndc_config_file, rndc_secret,
77 named_max_cache_size);
97 template <
typename ConfigType>
99 const std::string &name,
102 ConfigType *config = ConfigType::Find(name);
106 config =
new ConfigType(node);
113 config->OnChange(node);
129 const std::string &name,
130 const std::string &vdns_name,
132 tbb::mutex::scoped_lock lock(
mutex_);
173 if (dns_domain.empty()) {
175 "> doesnt have domain; ignoring event : " <<
216 if (dns_domain.empty()) {
219 " Domain: " << dns_domain <<
" Reverse Resolution: " <<
233 subnet.
prefix.to_string() <<
"/" << subnet.
plen <<
" " <<
252 if (item.
name ==
"" || item.
data ==
"") {
255 "> doesnt have name / data; ignoring event : " <<
284 const autogen::VirtualDnsType vdns = config->
GetVDns();
288 if (!vdns.reverse_resolution) {
291 " not added - reverse resolution is not enabled");
300 config->
GetName() <<
"> invalid PTR name " <<
301 item.
name <<
"; ignoring");
312 "> doesnt belong to a known subnet; ignoring");
327 "> only PTR and NS records allowed in reverse zone; ignoring");
330 if (!vdns.reverse_resolution) {
333 " not added - reverse resolution is not enabled");
339 config->
GetName() <<
"> invalid reverse name " <<
340 item.
name <<
"; ignoring");
347 "> doesnt belong to a known subnet; ignoring");
352 zone = config->
GetVDns().domain_name;
354 vdns.domain_name, vdns.domain_name);
370 for (VirtualDnsConfig::VDnsRec::const_iterator it =
379 items.push_back(item);
381 return (
SendUpdate(op, view_name, zone, items));
385 const std::string &zone,
DnsItems &items) {
389 g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
390 SandeshLevel::SYS_NOTICE,
"Bind named Send Throttled");
401 const std::string &view,
402 const std::string &zone,
DnsItems &items,
403 uint32_t retransmit_count) {
409 "DNS transmit sent for DNS record; xid = " <<
410 xid <<
"; View = " << view <<
"; Zone = " << zone <<
"; " <<
430 for (VirtualDnsConfig::DataMap::iterator it = vmap.begin();
431 it != vmap.end(); ++it) {
444 for (VirtualDnsConfig::DataMap::iterator it = vmap.begin();
445 it != vmap.end(); ++it) {
453 g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
454 SandeshLevel::SYS_NOTICE,
455 "Bulk sync has been done (the DB has been synced with named)");
463 ques, ans, auth, add)) {
482 static uint16_t start_index = 0;
483 uint16_t sent_count = 0;
485 PendingListMap::iterator it;
486 if (start_index == 0) {
494 DNS_BIND_TRACE(DnsBindTrace,
"DNS records max retransmits reached;"
495 <<
"no more retransmission; xid = " << it->first);
499 it->second.zone, it->second.items,
501 it->second.retransmit_count)));
506 it->second.retransmit_count++;
508 it->second.zone, it->second.items,
509 it->second.retransmit_count);
516 start_index = it->first;
533 const std::string &zone,
const DnsItems &items,
538 std::pair<PendingListMap::iterator,bool> status;
541 if (status.second ==
false) {
554 const std::string &zone,
556 for (PendingListMap::iterator it =
pending_map_.begin();
558 if (it->second.view == view &&
559 it->second.zone == zone &&
560 it->second.items == items) {
575 g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
576 SandeshLevel::SYS_NOTICE,
"BIND named Send UnThrottled");
590 for (PendingListMap::iterator it =
pending_map_.begin();
602 for (uint32_t i = 0; i < zones.size(); i++) {
603 if (zones[i] == pend.
zone)
615 for (PendingListMap::iterator it =
pending_map_.begin();
651 for (VirtualDnsConfig::DataMap::iterator it = vmap.begin();
652 it != vmap.end(); ++it) {
657 for (VirtualDnsConfig::VDnsRec::const_iterator it =
660 if ((*it)->IsValid()) {
661 if (!((*it)->IsNotified())) {
678 for (VirtualDnsConfig::VDnsRec::const_iterator it =
682 (*it)->ClearNotified();
683 if ((*it)->IsValid())
698 for (VirtualDnsConfig::VDnsRec::const_iterator it =
701 DnsItem item = (*it)->GetRecord();
703 (*it)->ClearNotified();
704 if ((*it)->IsValid() && notify) {
721 DNS_CONFIGURATION_LOG(
722 g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
723 SandeshLevel::SYS_ERR,
724 "Invalid DNS Name - cannot use special characters in DNS name",
736 g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
737 SandeshLevel::SYS_NOTICE,
"BIND named up; DNS is operational");
746 g_vns_constants.CategoryNames.find(Category::DNSAGENT)->second,
747 SandeshLevel::SYS_NOTICE,
"BIND named down; DNS is not operational");
772 if ((current_config_state !=
end_of_config_) && current_config_state) {
781 void SandeshError(
const std::string &msg,
const std::string &context) {
782 ErrorResp *resp =
new ErrorResp();
784 resp->set_context(context);
788 void ShowVirtualDnsServers::HandleRequest()
const {
793 SandeshError(
"Invalid Request No DnsManager Object", context());
798 VirtualDnsConfig::DataMap::iterator vdns_it,
799 VirtualDnsConfig::DataMap::iterator vdns_iter,
800 const std::string &key,
const std::string &req_name)
const {
802 req->set_table_size(vdns.size());
805 if(vdns_iter != vdns.end()) {
806 req->set_next_page(vdns_iter->first + req_name);
810 if(vdns.size() != 0) {
811 req->set_first_page((vdns.begin())->first + req_name);
815 uint16_t start_entry=0, end_entry=0;
816 std::stringstream ss1, ss2;
817 if(vdns.size() != 0) {
818 start_entry = std::distance(vdns.begin(), vdns_it);
820 if(start_entry != vdns.size()) {
821 end_entry = std::distance(vdns.begin(), --vdns_iter);
824 end_entry = start_entry;
829 req->set_entries(ss1.str() +
" - " + ss2.str());
832 if(vdns_it != vdns.begin()) {
835 if(vdns_it == vdns.begin())
838 req->set_prev_page(vdns_it->first + req_name);
842 req->set_all(
"AllEntries" + req_name);
846 const std::string &context)
const {
847 VirtualDnsServersResponse *resp;
851 VirtualDnsConfig::DataMap::iterator vdns_it, vdns_iter;
852 std::vector<VirtualDnsServersSandesh> vdns_list_sandesh;
853 if(key ==
"AllEntries") {
854 sandesh_msg_limit = vdns.size();
855 vdns_it = vdns.begin();
856 }
else if(key !=
"") {
857 vdns_it = vdns.lower_bound(key);
859 vdns_it = vdns.begin();
862 for (vdns_iter= vdns_it; vdns_iter != vdns.end(); ++vdns_iter) {
864 if (count++ == sandesh_msg_limit) {
868 VirtualDnsServersSandesh vdns_sandesh;
869 VirtualDnsTraceData vdns_trace_data;
872 std::vector<std::string> net_list_sandesh;
873 for (VirtualDnsConfig::IpamList::iterator ipam_iter =
874 vdns_config->
ipams_.begin();
875 ipam_iter != vdns_config->
ipams_.end(); ++ipam_iter) {
878 for (IpamConfig::VnniList::iterator vnni_it = vnni.begin();
879 vnni_it != vnni.end(); ++vnni_it) {
880 Subnets &subnets = (*vnni_it)->GetSubnets();
881 for (
unsigned int i = 0; i < subnets.size(); i++) {
882 std::stringstream str;
883 str << subnets[i].prefix.to_string();
885 str << subnets[i].plen;
886 net_list_sandesh.push_back(str.str());
891 vdns_sandesh.set_virtual_dns(vdns_trace_data);
892 vdns_sandesh.set_records(vdns_config->
GetName());
894 vdns_sandesh.set_subnets(net_list_sandesh);
895 vdns_list_sandesh.push_back(vdns_sandesh);
898 resp =
new VirtualDnsServersResponse();
899 resp->set_context(context);
900 resp->set_virtual_dns_servers(vdns_list_sandesh);
901 resp->set_more(
true);
904 Pagination *page =
new Pagination();
907 page->set_context(context);
913 void ShowDnsConfig::HandleRequest()
const {
918 SandeshError(
"Invalid Request No DnsManager Object", context());
923 const std::string &context)
const {
924 DnsConfigResponse *resp =
new DnsConfigResponse();
928 VirtualDnsConfig::DataMap::iterator vdns_it, vdns_iter;
929 std::vector<VirtualDnsSandesh> vdns_list_sandesh;
930 if(key ==
"AllEntries") {
931 sandesh_msg_limit = vdns.size();
932 vdns_it = vdns.begin();
933 }
else if(key !=
"") {
934 vdns_it = vdns.lower_bound(key);
936 vdns_it = vdns.begin();
939 for (vdns_iter = vdns_it; vdns_iter != vdns.end(); ++vdns_iter) {
940 if (count++ == sandesh_msg_limit) {
944 VirtualDnsSandesh vdns_sandesh;
945 VirtualDnsTraceData vdns_trace_data;
948 std::vector<VirtualDnsRecordTraceData> rec_list_sandesh;
949 for (VirtualDnsConfig::VDnsRec::iterator rec_it =
952 VirtualDnsRecordTraceData rec_trace_data;
953 (*rec_it)->VirtualDnsRecordTrace(rec_trace_data);
954 rec_list_sandesh.push_back(rec_trace_data);
957 std::vector<std::string> net_list_sandesh;
958 for (VirtualDnsConfig::IpamList::iterator ipam_iter =
959 vdns_config->
ipams_.begin();
960 ipam_iter != vdns_config->
ipams_.end(); ++ipam_iter) {
963 for (IpamConfig::VnniList::iterator vnni_it = vnni.begin();
964 vnni_it != vnni.end(); ++vnni_it) {
965 Subnets &subnets = (*vnni_it)->GetSubnets();
966 for (
unsigned int i = 0; i < subnets.size(); i++) {
967 std::stringstream str;
968 str << subnets[i].prefix.to_string();
970 str << subnets[i].plen;
971 net_list_sandesh.push_back(str.str());
976 vdns_sandesh.set_virtual_dns(vdns_trace_data);
977 vdns_sandesh.set_records(rec_list_sandesh);
978 vdns_sandesh.set_subnets(net_list_sandesh);
979 vdns_list_sandesh.push_back(vdns_sandesh);
982 resp->set_context(context);
983 resp->set_virtual_dns(vdns_list_sandesh);
984 resp->set_more(
true);
987 Pagination *page =
new Pagination();
990 page->set_context(context);
995 void ShowVirtualDnsRecords::HandleRequest()
const {
1000 SandeshError(
"Invalid Request No DnsManager Object", context());
1005 const std::string &context,
bool show_all)
const {
1006 VirtualDnsRecordsResponse *resp =
new VirtualDnsRecordsResponse();
1009 std::stringstream ss(key);
1010 std::stringstream str;
1011 std::string vdns_server, next_iterator;
1013 std::getline(ss, vdns_server,
'@');
1014 std::getline(ss, next_iterator);
1016 if (!next_iterator.empty()) {
1017 std::stringstream next_iter(next_iterator);
1022 std::vector<VirtualDnsRecordTraceData> rec_list_sandesh;
1023 VirtualDnsConfig::VDnsRec::iterator rec_it, rec_it1;
1024 VirtualDnsConfig::DataMap::iterator vdns_it = vdns.find(vdns_server);
1025 if (vdns_it != vdns.end()) {
1031 sandesh_msg_limit = size;
1035 for(rec_it = rec_it1;
1037 VirtualDnsRecordTraceData rec_trace_data;
1038 (*rec_it)->VirtualDnsRecordTrace(rec_trace_data);
1039 rec_list_sandesh.push_back(rec_trace_data);
1040 if (++count == sandesh_msg_limit) {
1043 uint64_t value = (uint64_t)(*rec_it);
1044 str << vdns_server <<
"@" << value;
1049 resp->set_context(context);
1050 resp->set_virtual_dns_server(vdns_server);
1051 resp->set_records(rec_list_sandesh);
1052 resp->set_more(
true);
1055 Pagination *page =
new Pagination();
1059 req.set_table_size(size);
1063 req.set_next_page(str.str() +
" VdnsRecordsReq");
1068 std::stringstream str;
1070 str << vdns_server <<
"@" << value;
1071 req.set_first_page(str.str() +
" VdnsRecordsReq");
1075 int start_entry=0, end_entry=0;
1076 std::stringstream ss1, ss2;
1080 if(start_entry != size) {
1084 end_entry = start_entry;
1090 req.set_entries(ss1.str() +
" - " + ss2.str());
1094 for (
int i=0; i < (sandesh_msg_limit); i++) {
1099 std::stringstream str;
1100 uint64_t value = (uint64_t)(*rec_it1);
1101 str << vdns_server <<
"@" << value;
1102 req.set_prev_page(str.str() +
" VdnsRecordsReq");
1106 std::stringstream str;
1108 str << vdns_server <<
"@" << value;
1109 req.set_all(str.str() +
" AllEntriesVdnsRecordsReq");
1111 page->set_context(context);
1116 SandeshError(
"Invalid Request Enter Vdns Server Name", context);
1121 void ShowBindPendingList::HandleRequest()
const {
1126 SandeshError(
"Invalid Request No DnsManager Object", context());
1131 const std::string &context)
const {
1132 BindPendingListResponse *resp =
new BindPendingListResponse();
1141 uint16_t size = map.size();
1142 std::vector<PendingListEntry> &pending_list =
1143 const_cast<std::vector<PendingListEntry>&
>(resp->get_data());
1144 DnsManager::PendingListMap::iterator map_it, map_iter;
1145 if(key ==
"AllEntries") {
1146 sandesh_msg_limit = size;
1147 map_it = map.begin();
1149 else if(key !=
"") {
1150 map_it = map.lower_bound(index);
1153 map_it = map.begin();
1156 for (map_iter = map_it; map_iter!= map.end(); ++map_iter) {
1157 if (count++ == sandesh_msg_limit) {
1160 PendingListEntry entry;
1161 entry.set_xid(map_iter->second.xid);
1162 entry.set_view(map_iter->second.view);
1163 entry.set_zone(map_iter->second.zone);
1164 entry.set_retry_count(map_iter->second.retransmit_count);
1167 pending_list.push_back(entry);
1170 resp->set_context(context);
1171 resp->set_more(
true);
1174 Pagination *page =
new Pagination();
1178 req.set_table_size(size);
1181 if(map_iter != map.end()) {
1182 std::stringstream ss;
1183 ss << map_iter->first;
1184 req.set_next_page(ss.str() +
" BindPendingListReq");
1189 std::stringstream ss;
1190 ss << map.begin()->first;
1191 req.set_first_page(ss.str()+
" BindPendingListReq");
1195 int start_entry=0, end_entry=0;
1196 std::stringstream ss1, ss2;
1198 start_entry = std::distance(map.begin(), map_it);
1200 if(start_entry != size) {
1201 end_entry = std::distance(map.begin(), --map_iter);
1204 end_entry = start_entry;
1210 req.set_entries(ss1.str() +
" - " + ss2.str());
1213 if(map_it != map.begin()) {
1214 for (
int i=0; i < (sandesh_msg_limit); i++) {
1216 if(map_it == map.begin())
1219 std::stringstream ss;
1220 ss << map_it->first;
1221 req.set_prev_page(ss.str() +
" BindPendingListReq");
1225 req.set_all(
"AllEntries BindPendingListReq");
1227 page->set_context(context);
1232 SandeshError(
"Invalid Request No DnsManager Object ", context);
1237 void PageReq::HandleRequest()
const {
1238 string req_name, search_key;
1239 vector<string> tokens;
1240 boost::split(tokens, get_key(), boost::is_any_of(
" "));
1242 if(dns_manager && (tokens.size() == 2)) {
1243 search_key = tokens[0];
1244 req_name = tokens[1];
1245 if(req_name ==
"VdnsServersReq") {
1247 }
else if(req_name ==
"DnsConfigReq") {
1249 }
else if(req_name ==
"VdnsRecordsReq") {
1251 }
else if(req_name ==
"AllEntriesVdnsRecordsReq") {
1253 }
else if (req_name ==
"BindPendingListReq") {
1263 void ShowGlobalQosConfig::HandleRequest()
const {
1264 GlobalQosConfigResponse *resp =
new GlobalQosConfigResponse();
1268 resp->set_context(context());
1269 resp->set_more(
false);
void VirtualDnsTrace(VirtualDnsTraceData &rec)
void NotifyReverseDnsRecords(const VirtualDnsConfig *config, DnsConfig::DnsConfigEvent ev, bool notify)
void MakeSandeshPageReq(PageReqData *req, VirtualDnsConfig::DataMap &vdns, VirtualDnsConfig::DataMap::iterator vdns_it, VirtualDnsConfig::DataMap::iterator vdns_iter, const std::string &key, const std::string &req_name) const
virtual void AddAllViews()
void DnsView(const DnsConfig *config, DnsConfig::DnsConfigEvent ev)
bool CheckName(std::string rec_name, std::string name)
virtual void DelZone(const Subnet &subnet, const VirtualDnsConfig *vdns)
#define DNS_BIND_TRACE(obj, arg)
static ZoneCallback VdnsZoneCallback
bool CheckZoneDelete(ZoneList &zones, PendingList &pend)
void StartPendingTimer(int)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
void Shutdown(bool delete_entries=true)
void OnChange(IFMapNode *node)
static VirtualDnsRecordConfig * Find(std::string name)
static const uint32_t GetDnsPort()
bool named_send_throttled_
void HandleUpdateResponse(uint8_t *pkt, std::size_t length)
uint16_t named_lo_watermark_
virtual void ChangeView(const VirtualDnsConfig *vdns)
static int BuildDnsUpdate(uint8_t *buf, Operation op, uint16_t xid, const std::string &domain, const std::string &zone, const DnsItems &items)
virtual void AddView(const VirtualDnsConfig *vdns)
DnsConfigManager config_mgr_
void NotifyThrottledDnsRecords()
boost::asio::ip::address IpAddress
bool stringToInteger(const std::string &str, NumberType &num)
std::string GetOldDomainName() const
uint16_t named_max_retransmissions_
static Callback VdnsCallback
void BindPendingMsgHandler(const std::string &key, const std::string &context) const
void DeletePendingList(uint16_t xid)
void ClearDeportedPendingList()
std::string GetViewName() const
VDnsRec virtual_dns_records_
bool ResendRecordsinBatch()
std::list< DnsItem > DnsItems
void ClearNotified() const
PendingListMap pending_map_
static void Init(const std::string &named_config_dir, const std::string &named_config_file, const std::string &named_log_file, const std::string &rndc_config_file, const std::string &rndc_secret, const std::string &named_max_cache_size)
virtual void AddZone(const Subnet &subnet, const VirtualDnsConfig *vdns)
void Initialize(DB *config_db, DBGraph *config_graph, const std::string &named_config_dir, const std::string &named_config_file, const std::string &named_log_file, const std::string &rndc_config_file, const std::string &rndc_secret, const std::string &named_max_cache_size, const uint16_t named_max_retransmissions, const uint16_t named_retransmission_interval)
PendingListMap GetDeportedPendingListMap()
static const int max_pkt_size
void CancelEndofConfigTimer()
bool SendRecordUpdate(BindUtil::Operation op, const VirtualDnsRecordConfig *config)
void StartEndofConfigTimer()
static void SetDnsConfigManager(DnsConfigManager *cfg)
static GlobalQosConfig * Find(const std::string &name)
bool HasReverseResolutionChanged() const
std::set< VnniConfig * > VnniList
const std::string & GetName() const
bool IsReverseResolutionEnabled() const
static const std::string & DnsResponseCode(uint16_t code)
void GetReverseZones(ZoneList &zones) const
void OnAdd(IFMapNode *node=NULL)
void VdnsServersMsgHandler(const std::string &key, const std::string &context) const
static bool ParseDnsResponse(uint8_t *dns, uint16_t dnslen, uint16_t &xid, dns_flags &flags, DnsItems &ques, DnsItems &ans, DnsItems &auth, DnsItems &add)
static std::string GetFQDN(const std::string &name, const std::string &domain, const std::string &match)
bool PendingTimerExpiry()
static void RemoveSpecialChars(std::string &name)
void DnsPtrZone(const Subnet &subnet, const VirtualDnsConfig *vdns, DnsConfig::DnsConfigEvent ev)
static NamedConfig * GetNamedConfigObject()
static bool IsReverseZone(const std::string &name)
void ProcessAgentUpdate(BindUtil::Operation event, const std::string &name, const std::string &vdns_name, const DnsItem &item)
VirtualDnsConfig * GetVirtualDns() const
void RegisterObservers(const Observers &obs)
void SendRetransmit(uint16_t xid, BindUtil::Operation op, const std::string &view, const std::string &zone, DnsItems &items, uint32_t retranmit_count)
void BindEventHandler(BindStatus::Event ev)
static TaskScheduler * GetInstance()
std::pair< uint16_t, PendingList > PendingListPair
static DnsManager * GetDnsManager()
void MarkNotified() const
Observer virtual_dns_record
void DnsConfigMsgHandler(const std::string &key, const std::string &context) const
std::vector< Subnet > Subnets
static BindResolver * Resolver()
virtual void DelView(const VirtualDnsConfig *vdns)
const DnsItem & GetRecord() const
std::string GetDomainName() const
static bool IsIP(const std::string &name, IpAddress &addr)
static const uint16_t ContrailDnsClientUdpPort()
static Callback VdnsRecordCallback
bool PendingDone(uint16_t xid)
void DnsRecord(const DnsConfig *config, DnsConfig::DnsConfigEvent ev)
static const int kEndOfConfigCheckTime
bool EndofConfigTimerExpiry()
static DnsConfigManager * GetDnsConfigManager()
void FreeIndex(size_t index)
void PendingListViewDelete(const VirtualDnsConfig *config)
static Timer * CreateTimer(boost::asio::io_context &service, const std::string &name, int task_id=Timer::GetTimerTaskId(), int task_instance=Timer::GetTimerInstanceId(), bool delete_on_completion=false)
const VnniList & GetVnniList() const
std::string GetViewName() const
void VdnsRecordsMsgHandler(const std::string &key, const std::string &context, bool show_all=false) const
static const std::string & ToEventString(DnsConfigEvent ev)
uint16_t named_hi_watermark_
bool GetSubnet(const IpAddress &addr, Subnet &subnet) const
void ProcessConfig(IFMapNodeProxy *proxy, const std::string &name, DnsConfigManager::EventType event)
void UpdatePendingList(const std::string &view, const std::string &zone, const DnsItems &items)
DeportedPendingListMap dp_pending_map_
static bool GetAddrFromPtrName(std::string &ptr_name, IpAddress &mask)
bool SendUpdate(BindUtil::Operation op, const std::string &view, const std::string &zone, DnsItems &items)
bool Start(int time, Handler handler, ErrorHandler error_handler=NULL)
static const int max_records_per_sandesh
void ResetTransId(uint16_t)
void NotifyAllDnsRecords(const VirtualDnsConfig *config, DnsConfig::DnsConfigEvent ev)
std::map< std::string, VirtualDnsConfig * > DataMap
Timer * end_of_config_check_timer_
void PendingListZoneDelete(const Subnet &subnet, const VirtualDnsConfig *config)
std::map< uint16_t, PendingList > PendingListMap
static bool HasSpecialChars(const std::string &name)
autogen::VirtualDnsType GetVDns() const
void Initialize(DB *db, DBGraph *db_graph)
static EventManager * GetEventManager()
uint32_t record_send_count_
bool Reschedule(int time)
void SandeshError(const std::string &msg, const std::string &context)
uint16_t named_retransmission_interval_
static void GetReverseZone(const Ip4Address &addr, uint32_t plen, std::string &zone)
bool Enqueue(QueueEntryT entry)
static DataMap & GetVirtualDnsMap()
static std::string DnsItemsToString(DnsItems &items)
bool AddPendingList(uint16_t xid, const std::string &view, const std::string &zone, const DnsItems &items, BindUtil::Operation op)
static void Init(boost::asio::io_context &io, const std::vector< DnsServer > &dns_servers, uint16_t client_port, Callback cb, uint8_t dscp)
void CancelPendingTimer()
WorkQueue< uint16_t > pending_done_queue_
std::vector< std::string > ZoneList
static bool DeleteTimer(Timer *Timer)