LCOV - code coverage report
Current view: top level - dns/mgr - dns_mgr.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 9 16 56.2 %
Date: 2026-06-08 02:02:55 Functions: 1 5 20.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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 <mutex>
       9             : 
      10             : #include <base/index_allocator.h>
      11             : #include <mgr/dns_oper.h>
      12             : #include <bind/named_config.h>
      13             : #include <cfg/dns_config.h>
      14             : #include <config_client_manager.h>
      15             : 
      16             : class DB;
      17             : class DBGraph;
      18             : struct VirtualDnsConfig;
      19             : struct VirtualDnsRecordConfig;
      20             : 
      21             : class DnsManager {
      22             : public:
      23             :     static const int max_records_per_sandesh = 100;
      24             :     static const int kEndOfConfigCheckTime = 1000; // msec
      25             :     static const uint16_t kMaxRetransmitCount = 6;
      26             :     static const uint16_t kPendingRecordReScheduleTime = 1000; //msec
      27             :     static const uint16_t kNamedLoWaterMark = 8192; //pow(2,13);
      28             :     static const uint16_t kNamedHiWaterMark = 32768;  //pow(2,15);
      29             :     static const uint16_t kMaxIndexAllocator = 65535;
      30             : 
      31             :     struct PendingList {
      32             :         uint16_t xid;
      33             :         std::string view;
      34             :         std::string zone;
      35             :         DnsItems items;
      36             :         BindUtil::Operation op;
      37             :         uint32_t retransmit_count;
      38             : 
      39          41 :         PendingList(uint16_t id, const std::string &v, const std::string &z,
      40             :                     const DnsItems &it, BindUtil::Operation o,
      41          41 :                     uint32_t recount = 0) {
      42          41 :             xid = id;
      43          41 :             view = v;
      44          41 :             zone = z;
      45          41 :             items = it;
      46          41 :             op = o;
      47          41 :             retransmit_count = recount;
      48          41 :         }
      49             :     };
      50             :     typedef std::map<uint16_t, PendingList> PendingListMap;
      51             :     typedef std::pair<uint16_t, PendingList> PendingListPair;
      52             : 
      53             :     typedef std::map<uint16_t, PendingList> DeportedPendingListMap;
      54             :     typedef std::pair<uint16_t, PendingList> DeportedPendingListPair;
      55             : 
      56             :     DnsManager();
      57             :     virtual ~DnsManager();
      58             :     void Initialize(DB *config_db, DBGraph *config_graph,
      59             :                     const std::string& named_config_dir,
      60             :                     const std::string& named_config_file,
      61             :                     const std::string& named_log_file,
      62             :                     const std::string& rndc_config_file,
      63             :                     const std::string& rndc_secret,
      64             :                     const std::string& named_max_cache_size,
      65             :                     const uint16_t named_max_retransmissions,
      66             :                     const uint16_t named_retransmission_interval);
      67             :     void Shutdown();
      68             :     void DnsView(const DnsConfig *config, DnsConfig::DnsConfigEvent ev);
      69             :     void DnsPtrZone(const Subnet &subnet, const VirtualDnsConfig *vdns,
      70             :                     DnsConfig::DnsConfigEvent ev);
      71             :     void DnsRecord(const DnsConfig *config, DnsConfig::DnsConfigEvent ev);
      72             :     void HandleUpdateResponse(uint8_t *pkt, std::size_t length);
      73             :     DnsConfigManager &GetConfigManager() { return config_mgr_; }
      74             :     bool SendUpdate(BindUtil::Operation op, const std::string &view,
      75             :                     const std::string &zone, DnsItems &items);
      76             :     void SendRetransmit(uint16_t xid, BindUtil::Operation op,
      77             :                         const std::string &view, const std::string &zone,
      78             :                         DnsItems &items, uint32_t retranmit_count);
      79             :     void UpdateAll();
      80             :     void StartEndofConfigTimer();
      81             :     void BindEventHandler(BindStatus::Event ev);
      82             : 
      83             :     template <typename ConfigType>
      84             :     void ProcessConfig(IFMapNodeProxy *proxy, const std::string &name,
      85             :                        DnsConfigManager::EventType event);
      86             :     void ProcessAgentUpdate(BindUtil::Operation event, const std::string &name,
      87             :                             const std::string &vdns_name, const DnsItem &item);
      88             :     bool IsBindStatusUp() { return bind_status_.IsUp(); }
      89             : 
      90             :     void set_config_manager(ConfigClientManager *config_manager) {
      91             :         config_client_manager_ = config_manager;
      92             :     }
      93           0 :     ConfigClientManager* get_config_manager() { return config_client_manager_; }
      94           0 :     bool IsEndOfConfig() {
      95           0 :         if (config_client_manager_)
      96           0 :             return (config_client_manager_->GetEndOfRibComputed());
      97           0 :         return (true);
      98             :     }
      99           0 :     PendingListMap GetDeportedPendingListMap() { return dp_pending_map_; }
     100           0 :     void ClearDeportedPendingList() { dp_pending_map_.clear(); }
     101             :     void NotifyThrottledDnsRecords();
     102             :     void DnsConfigMsgHandler(const std::string &key, const std::string &context) const;
     103             :     void VdnsRecordsMsgHandler(const std::string &key, const std::string &context, bool show_all = false) const;
     104             :     void BindPendingMsgHandler(const std::string &key, const std::string &context) const;
     105             :     void VdnsServersMsgHandler(const std::string &key, const std::string &context) const;
     106             :     void MakeSandeshPageReq(PageReqData *req, VirtualDnsConfig::DataMap &vdns, VirtualDnsConfig::DataMap::iterator vdns_it,
     107             :                         VirtualDnsConfig::DataMap::iterator vdns_iter, const std::string &key, const std::string &req_name) const;
     108             : private:
     109             :     friend class DnsBindTest;
     110             :     friend class DnsManagerTest;
     111             : 
     112             :     bool SendRecordUpdate(BindUtil::Operation op,
     113             :                           const VirtualDnsRecordConfig *config);
     114             :     bool PendingDone(uint16_t xid);
     115             :     bool ResendRecordsinBatch();
     116             :     bool AddPendingList(uint16_t xid, const std::string &view,
     117             :                                     const std::string &zone, const DnsItems &items,
     118             :                                     BindUtil::Operation op);
     119             :     void UpdatePendingList(const std::string &view,
     120             :                                        const std::string &zone,
     121             :                                        const DnsItems &items);
     122             :     void DeletePendingList(uint16_t xid);
     123             :     void ClearPendingList();
     124             :     void PendingListViewDelete(const VirtualDnsConfig *config);
     125             :     bool CheckZoneDelete(ZoneList &zones, PendingList &pend);
     126             :     void PendingListZoneDelete(const Subnet &subnet,
     127             :                                const VirtualDnsConfig *config);
     128             :     /* Pending Record List transmitted to named */
     129             :     void StartPendingTimer(int);
     130             :     void CancelPendingTimer();
     131             :     bool PendingTimerExpiry();
     132             : 
     133             :     void CancelEndofConfigTimer();
     134             :     bool EndofConfigTimerExpiry();
     135             : 
     136             :     void NotifyAllDnsRecords(const VirtualDnsConfig *config,
     137             :                              DnsConfig::DnsConfigEvent ev);
     138             :     void NotifyReverseDnsRecords(const VirtualDnsConfig *config,
     139             :                                  DnsConfig::DnsConfigEvent ev, bool notify);
     140             :     inline uint16_t GetTransId();
     141             :     void ResetTransId(uint16_t);
     142             :     inline bool CheckName(std::string rec_name, std::string name);
     143             : 
     144             :     std::mutex mutex_;
     145             :     BindStatus bind_status_;
     146             :     DnsConfigManager config_mgr_;
     147             :     ConfigClientManager *config_client_manager_;
     148             :     static uint16_t g_trans_id_;
     149             :     PendingListMap pending_map_;
     150             :     DeportedPendingListMap dp_pending_map_;
     151             :     Timer *pending_timer_;
     152             :     Timer *end_of_config_check_timer_;
     153             :     bool end_of_config_;
     154             :     uint32_t record_send_count_;
     155             :     uint16_t named_max_retransmissions_;
     156             :     uint16_t named_retransmission_interval_;
     157             :     uint16_t named_lo_watermark_;
     158             :     uint16_t named_hi_watermark_;
     159             :     bool named_send_throttled_;
     160             :     WorkQueue<uint16_t> pending_done_queue_;
     161             :     IndexAllocator idx_;
     162             : 
     163             :     DISALLOW_COPY_AND_ASSIGN(DnsManager);
     164             : };
     165             : 
     166             : #endif // __dns_manager_h__

Generated by: LCOV version 1.14