OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dns_mgr.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __dns_manager_h__
6 #define __dns_manager_h__
7 
8 #include <tbb/mutex.h>
9 #include <base/index_allocator.h>
10 #include <mgr/dns_oper.h>
11 #include <bind/named_config.h>
12 #include <cfg/dns_config.h>
13 #include <config_client_manager.h>
14 
15 class DB;
16 class DBGraph;
17 struct VirtualDnsConfig;
19 
20 class DnsManager {
21 public:
22  static const int max_records_per_sandesh = 100;
23  static const int kEndOfConfigCheckTime = 1000; // msec
24  static const uint16_t kMaxRetransmitCount = 6;
25  static const uint16_t kPendingRecordReScheduleTime = 1000; //msec
26  static const uint16_t kNamedLoWaterMark = 8192; //pow(2,13);
27  static const uint16_t kNamedHiWaterMark = 32768; //pow(2,15);
28  static const uint16_t kMaxIndexAllocator = 65535;
29 
30  struct PendingList {
31  uint16_t xid;
32  std::string view;
33  std::string zone;
36  uint32_t retransmit_count;
37 
38  PendingList(uint16_t id, const std::string &v, const std::string &z,
39  const DnsItems &it, BindUtil::Operation o,
40  uint32_t recount = 0) {
41  xid = id;
42  view = v;
43  zone = z;
44  items = it;
45  op = o;
46  retransmit_count = recount;
47  }
48  };
49  typedef std::map<uint16_t, PendingList> PendingListMap;
50  typedef std::pair<uint16_t, PendingList> PendingListPair;
51 
52  typedef std::map<uint16_t, PendingList> DeportedPendingListMap;
53  typedef std::pair<uint16_t, PendingList> DeportedPendingListPair;
54 
55  DnsManager();
56  virtual ~DnsManager();
57  void Initialize(DB *config_db, DBGraph *config_graph,
58  const std::string& named_config_dir,
59  const std::string& named_config_file,
60  const std::string& named_log_file,
61  const std::string& rndc_config_file,
62  const std::string& rndc_secret,
63  const std::string& named_max_cache_size,
64  const uint16_t named_max_retransmissions,
65  const uint16_t named_retransmission_interval);
66  void Shutdown();
67  void DnsView(const DnsConfig *config, DnsConfig::DnsConfigEvent ev);
68  void DnsPtrZone(const Subnet &subnet, const VirtualDnsConfig *vdns,
70  void DnsRecord(const DnsConfig *config, DnsConfig::DnsConfigEvent ev);
71  void HandleUpdateResponse(uint8_t *pkt, std::size_t length);
73  bool SendUpdate(BindUtil::Operation op, const std::string &view,
74  const std::string &zone, DnsItems &items);
75  void SendRetransmit(uint16_t xid, BindUtil::Operation op,
76  const std::string &view, const std::string &zone,
77  DnsItems &items, uint32_t retranmit_count);
78  void UpdateAll();
79  void StartEndofConfigTimer();
81 
82  template <typename ConfigType>
83  void ProcessConfig(IFMapNodeProxy *proxy, const std::string &name,
85  void ProcessAgentUpdate(BindUtil::Operation event, const std::string &name,
86  const std::string &vdns_name, const DnsItem &item);
87  bool IsBindStatusUp() { return bind_status_.IsUp(); }
88 
89  void set_config_manager(ConfigClientManager *config_manager) {
90  config_client_manager_ = config_manager;
91  }
93  bool IsEndOfConfig() {
96  return (true);
97  }
101  void DnsConfigMsgHandler(const std::string &key, const std::string &context) const;
102  void VdnsRecordsMsgHandler(const std::string &key, const std::string &context, bool show_all = false) const;
103  void BindPendingMsgHandler(const std::string &key, const std::string &context) const;
104  void VdnsServersMsgHandler(const std::string &key, const std::string &context) const;
105  void MakeSandeshPageReq(PageReqData *req, VirtualDnsConfig::DataMap &vdns, VirtualDnsConfig::DataMap::iterator vdns_it,
106  VirtualDnsConfig::DataMap::iterator vdns_iter, const std::string &key, const std::string &req_name) const;
107 private:
108  friend class DnsBindTest;
109  friend class DnsManagerTest;
110 
112  const VirtualDnsRecordConfig *config);
113  bool PendingDone(uint16_t xid);
114  bool ResendRecordsinBatch();
115  bool AddPendingList(uint16_t xid, const std::string &view,
116  const std::string &zone, const DnsItems &items,
118  void UpdatePendingList(const std::string &view,
119  const std::string &zone,
120  const DnsItems &items);
121  void DeletePendingList(uint16_t xid);
122  void ClearPendingList();
123  void PendingListViewDelete(const VirtualDnsConfig *config);
124  bool CheckZoneDelete(ZoneList &zones, PendingList &pend);
125  void PendingListZoneDelete(const Subnet &subnet,
126  const VirtualDnsConfig *config);
127  /* Pending Record List transmitted to named */
128  void StartPendingTimer(int);
129  void CancelPendingTimer();
130  bool PendingTimerExpiry();
131 
132  void CancelEndofConfigTimer();
133  bool EndofConfigTimerExpiry();
134 
135  void NotifyAllDnsRecords(const VirtualDnsConfig *config,
137  void NotifyReverseDnsRecords(const VirtualDnsConfig *config,
138  DnsConfig::DnsConfigEvent ev, bool notify);
139  inline uint16_t GetTransId();
140  void ResetTransId(uint16_t);
141  inline bool CheckName(std::string rec_name, std::string name);
142 
143  tbb::mutex mutex_;
147  static uint16_t g_trans_id_;
161 
163 };
164 
165 #endif // __dns_manager_h__
void NotifyReverseDnsRecords(const VirtualDnsConfig *config, DnsConfig::DnsConfigEvent ev, bool notify)
Definition: dns_mgr.cc:688
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
Definition: dns_mgr.cc:797
ConfigClientManager * config_client_manager_
Definition: dns_mgr.h:146
void DnsView(const DnsConfig *config, DnsConfig::DnsConfigEvent ev)
Definition: dns_mgr.cc:160
BindStatus bind_status_
Definition: dns_mgr.h:144
std::string zone
Definition: dns_mgr.h:33
bool CheckName(std::string rec_name, std::string name)
Definition: dns_mgr.cc:719
void set_config_manager(ConfigClientManager *config_manager)
Definition: dns_mgr.h:89
bool CheckZoneDelete(ZoneList &zones, PendingList &pend)
Definition: dns_mgr.cc:601
PendingList(uint16_t id, const std::string &v, const std::string &z, const DnsItems &it, BindUtil::Operation o, uint32_t recount=0)
Definition: dns_mgr.h:38
void StartPendingTimer(int)
Definition: dns_mgr.cc:627
void ClearPendingList()
Definition: dns_mgr.cc:584
void Shutdown()
Definition: dns_mgr.cc:91
bool named_send_throttled_
Definition: dns_mgr.h:158
void HandleUpdateResponse(uint8_t *pkt, std::size_t length)
Definition: dns_mgr.cc:458
uint16_t named_lo_watermark_
Definition: dns_mgr.h:156
std::pair< uint16_t, PendingList > DeportedPendingListPair
Definition: dns_mgr.h:53
DnsConfigManager config_mgr_
Definition: dns_mgr.h:145
void NotifyThrottledDnsRecords()
Definition: dns_mgr.cc:642
uint16_t named_max_retransmissions_
Definition: dns_mgr.h:154
void BindPendingMsgHandler(const std::string &key, const std::string &context) const
Definition: dns_mgr.cc:1130
void DeletePendingList(uint16_t xid)
Definition: dns_mgr.cc:569
static const uint16_t kNamedHiWaterMark
Definition: dns_mgr.h:27
bool end_of_config_
Definition: dns_mgr.h:152
void ClearDeportedPendingList()
Definition: dns_mgr.h:99
bool ResendRecordsinBatch()
Definition: dns_mgr.cc:481
std::list< DnsItem > DnsItems
Definition: bind_util.h:193
PendingListMap pending_map_
Definition: dns_mgr.h:148
static const uint16_t kNamedLoWaterMark
Definition: dns_mgr.h:26
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)
Definition: dns_mgr.cc:66
PendingListMap GetDeportedPendingListMap()
Definition: dns_mgr.h:98
ConfigClientManager * get_config_manager()
Definition: dns_mgr.h:92
void CancelEndofConfigTimer()
Definition: dns_mgr.cc:766
bool SendRecordUpdate(BindUtil::Operation op, const VirtualDnsRecordConfig *config)
Definition: dns_mgr.cc:281
void StartEndofConfigTimer()
Definition: dns_mgr.cc:759
uint16_t GetTransId()
Definition: dns_mgr.cc:711
bool IsBindStatusUp()
Definition: dns_mgr.h:87
tbb::mutex mutex_
Definition: dns_mgr.h:143
IndexAllocator idx_
Definition: dns_mgr.h:160
virtual ~DnsManager()
Definition: dns_mgr.cc:83
void VdnsServersMsgHandler(const std::string &key, const std::string &context) const
Definition: dns_mgr.cc:845
bool PendingTimerExpiry()
Definition: dns_mgr.cc:638
void DnsPtrZone(const Subnet &subnet, const VirtualDnsConfig *vdns, DnsConfig::DnsConfigEvent ev)
Definition: dns_mgr.cc:206
Definition: db.h:24
static const uint16_t kPendingRecordReScheduleTime
Definition: dns_mgr.h:25
static const uint16_t kMaxRetransmitCount
Definition: dns_mgr.h:24
void ProcessAgentUpdate(BindUtil::Operation event, const std::string &name, const std::string &vdns_name, const DnsItem &item)
Definition: dns_mgr.cc:128
Timer * pending_timer_
Definition: dns_mgr.h:150
void UpdateAll()
Definition: dns_mgr.cc:416
static const uint16_t kMaxIndexAllocator
Definition: dns_mgr.h:28
void SendRetransmit(uint16_t xid, BindUtil::Operation op, const std::string &view, const std::string &zone, DnsItems &items, uint32_t retranmit_count)
Definition: dns_mgr.cc:400
void BindEventHandler(BindStatus::Event ev)
Definition: dns_mgr.cc:731
std::pair< uint16_t, PendingList > PendingListPair
Definition: dns_mgr.h:50
uint32_t retransmit_count
Definition: dns_mgr.h:36
static uint16_t g_trans_id_
Definition: dns_mgr.h:147
DnsManager()
Definition: dns_mgr.cc:14
void DnsConfigMsgHandler(const std::string &key, const std::string &context) const
Definition: dns_mgr.cc:922
bool PendingDone(uint16_t xid)
Definition: dns_mgr.cc:476
void DnsRecord(const DnsConfig *config, DnsConfig::DnsConfigEvent ev)
Definition: dns_mgr.cc:237
static const int kEndOfConfigCheckTime
Definition: dns_mgr.h:23
bool EndofConfigTimerExpiry()
Definition: dns_mgr.cc:770
std::map< uint16_t, PendingList > DeportedPendingListMap
Definition: dns_mgr.h:52
void PendingListViewDelete(const VirtualDnsConfig *config)
Definition: dns_mgr.cc:589
bool IsEndOfConfig()
Definition: dns_mgr.h:93
void VdnsRecordsMsgHandler(const std::string &key, const std::string &context, bool show_all=false) const
Definition: dns_mgr.cc:1004
std::string view
Definition: dns_mgr.h:32
uint16_t named_hi_watermark_
Definition: dns_mgr.h:157
void ProcessConfig(IFMapNodeProxy *proxy, const std::string &name, DnsConfigManager::EventType event)
Definition: dns_mgr.cc:98
DISALLOW_COPY_AND_ASSIGN(DnsManager)
void UpdatePendingList(const std::string &view, const std::string &zone, const DnsItems &items)
Definition: dns_mgr.cc:553
DeportedPendingListMap dp_pending_map_
Definition: dns_mgr.h:149
bool SendUpdate(BindUtil::Operation op, const std::string &view, const std::string &zone, DnsItems &items)
Definition: dns_mgr.cc:384
BindUtil::Operation op
Definition: dns_mgr.h:35
static const int max_records_per_sandesh
Definition: dns_mgr.h:22
void ResetTransId(uint16_t)
Definition: dns_mgr.cc:715
void NotifyAllDnsRecords(const VirtualDnsConfig *config, DnsConfig::DnsConfigEvent ev)
Definition: dns_mgr.cc:669
std::map< std::string, VirtualDnsConfig * > DataMap
Definition: dns_oper.h:139
Timer * end_of_config_check_timer_
Definition: dns_mgr.h:151
void PendingListZoneDelete(const Subnet &subnet, const VirtualDnsConfig *config)
Definition: dns_mgr.cc:610
std::map< uint16_t, PendingList > PendingListMap
Definition: dns_mgr.h:49
DnsConfigEvent
Definition: dns_oper.h:31
uint32_t record_send_count_
Definition: dns_mgr.h:153
Definition: timer.h:54
uint16_t named_retransmission_interval_
Definition: dns_mgr.h:155
bool IsUp()
Definition: named_config.h:27
bool AddPendingList(uint16_t xid, const std::string &view, const std::string &zone, const DnsItems &items, BindUtil::Operation op)
Definition: dns_mgr.cc:532
DnsConfigManager & GetConfigManager()
Definition: dns_mgr.h:72
void CancelPendingTimer()
Definition: dns_mgr.cc:634
WorkQueue< uint16_t > pending_done_queue_
Definition: dns_mgr.h:159
std::vector< std::string > ZoneList
Definition: bind_util.h:250
friend class DnsManagerTest
Definition: dns_mgr.h:109
friend class DnsBindTest
Definition: dns_mgr.h:108