OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dns_oper.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __dns_oper_h__
6 #define __dns_oper_h__
7 
8 #include <list>
9 #include <map>
10 #include <set>
11 
12 #include <boost/function.hpp>
13 #include <boost/shared_ptr.hpp>
14 #include <boost/scoped_ptr.hpp>
15 
16 #include "ifmap/ifmap_link.h"
17 #include "ifmap/ifmap_table.h"
18 #include "ifmap/ifmap_node_proxy.h"
19 #include "vnc_cfg_types.h"
20 #include "cmn/dns_types.h"
21 
22 class IFMapNodeProxy;
23 struct IpamConfig;
24 struct VirtualDnsConfig;
26 
27 struct DnsConfig {
28  std::string name_;
29  mutable uint8_t flags_;
30 
35  };
36 
38  DnsConfigValid = 1 << 0, // DnsManager received the config
39  DnsConfigNotified = 1 << 1, // DnsManager installed the config
40  DnsConfigDeleteMarked = 1 << 2, // Config is deleted
41  DnsConfigErrorLogged = 1 << 3, // Config error logged
42  };
43 
45  bool IsValid() const { return (flags_ & DnsConfigValid); }
47  void MarkNotified() const { flags_ |= DnsConfigNotified; }
48  bool IsNotified() const { return (flags_ & DnsConfigNotified); }
49  void ClearNotified() const { flags_ &= ~DnsConfigNotified; }
51  bool IsDeleted() const { return (flags_ & DnsConfigDeleteMarked); }
54  bool IsErrorLogged() const { return (flags_ & DnsConfigErrorLogged); }
55 
56  DnsConfig(const std::string &name) : name_(name), flags_(0) {}
57  const std::string &GetName() const { return name_; }
58 
59  typedef boost::function<void(const DnsConfig *,
61  typedef boost::function<void(const Subnet &, const VirtualDnsConfig *,
66  static const std::string EventString[];
67  static const std::string &ToEventString(DnsConfigEvent ev) {
68  return EventString[ev];
69  }
70 
71 };
72 
73 struct VnniConfig : public DnsConfig {
74  typedef std::map<std::string, VnniConfig *> DataMap;
75  typedef std::pair<std::string, VnniConfig *> DataPair;
76 
80 
81  VnniConfig(IFMapNode *node);
82  ~VnniConfig();
83  bool operator <(VnniConfig &rhs) const {
84  return (GetName() < rhs.GetName());
85  }
86 
87  void OnAdd(IFMapNode *node);
88  void OnDelete();
89  void OnChange(IFMapNode *node);
90 
91  void UpdateIpam(IFMapNode *node);
92  Subnets &GetSubnets() { return subnets_; }
93  void FindSubnets(IFMapNode *node, Subnets &subnets);
94  bool NotifySubnets(Subnets &old_nets, Subnets &new_nets,
95  VirtualDnsConfig *vdns);
96 
97  static VnniConfig *Find(std::string name);
98 };
99 
100 struct IpamConfig : public DnsConfig {
101  typedef std::set<VnniConfig *> VnniList;
102  typedef std::map<std::string, IpamConfig *> DataMap;
103  typedef std::pair<std::string, IpamConfig *> DataPair;
104 
105  autogen::IpamType rec_;
109 
110  IpamConfig(IFMapNode *node);
111  ~IpamConfig();
112 
113  void OnAdd(IFMapNode *node);
114  void OnDelete();
115  void OnChange(IFMapNode *node);
116 
117  void Add(VirtualDnsConfig *vdns);
118  void Delete();
120 
121  bool GetObject(IFMapNode *node, autogen::IpamType &data);
122  void AddVnni(VnniConfig *vnni) { vnni_list_.insert(vnni); }
123  void DelVnni(VnniConfig *vnni) { vnni_list_.erase(vnni); }
124  std::string &GetVirtualDnsName() {
125  return rec_.ipam_dns_server.virtual_dns_server_name;
126  }
128  const VnniList &GetVnniList() const { return vnni_list_; }
129 
130  void Trace(const std::string &ev);
131 
132  static IpamConfig *Find(std::string name);
133  static void AssociateIpamVdns(VirtualDnsConfig *vdns);
134 };
135 
136 struct VirtualDnsConfig : public DnsConfig {
137  typedef std::set<IpamConfig *> IpamList;
138  typedef std::set<VirtualDnsRecordConfig *> VDnsRec;
139  typedef std::map<std::string, VirtualDnsConfig *> DataMap;
140  typedef std::pair<std::string, VirtualDnsConfig *> DataPair;
141 
142  autogen::VirtualDnsType rec_;
143  autogen::VirtualDnsType old_rec_;
147 
149  VirtualDnsConfig(const std::string &name);
151  void OnAdd(IFMapNode *node);
152  void OnDelete();
153  void OnChange(IFMapNode *node);
154 
155  void AddRecord(VirtualDnsRecordConfig *record);
156  void DelRecord(VirtualDnsRecordConfig *record);
157  void AddIpam(IpamConfig *ipam) { ipams_.insert(ipam); }
158  void DelIpam(IpamConfig *ipam) { ipams_.erase(ipam); }
159  const IpamList &GetIpamList() const { return ipams_; }
160  autogen::VirtualDnsType GetVDns() const { return rec_; }
161 
162  bool GetObject(IFMapNode *node, autogen::VirtualDnsType &data);
163  bool GetSubnet(const IpAddress &addr, Subnet &subnet) const;
165  bool HasChanged();
166 
167  void VirtualDnsTrace(VirtualDnsTraceData &rec);
168  void Trace(const std::string &ev);
169 
170  std::string GetViewName() const;
171  std::string GetNextDns() const;
172  std::string GetDomainName() const { return rec_.domain_name; }
173  std::string GetOldDomainName() const { return old_rec_.domain_name; }
174  std::string GetRecordOrder() const { return rec_.record_order; }
175  bool IsExternalVisible() const { return rec_.external_visible; }
176  bool IsReverseResolutionEnabled() const { return rec_.reverse_resolution; }
178  return rec_.reverse_resolution != old_rec_.reverse_resolution;
179  }
180  bool DynamicUpdatesEnabled() const;
181  int GetTtl() const { return rec_.default_ttl_seconds; }
182  int GetNegativeCacheTtl() const { return rec_.soa_record.negative_cache_ttl_seconds; }
183 
184  static VirtualDnsConfig *Find(std::string name);
186 };
187 
189  typedef std::map<std::string, VirtualDnsRecordConfig *> DataMap;
190  typedef std::pair<std::string, VirtualDnsRecordConfig *> DataPair;
191 
192  enum Source {
195  };
196 
199  std::string virtual_dns_name_;
202 
204  VirtualDnsRecordConfig(const std::string &name,
205  const std::string &vdns_name, const DnsItem &item);
207  void OnAdd(IFMapNode *node = NULL);
208  void OnDelete();
209  void OnChange(IFMapNode *node);
210  void OnChange(const DnsItem &new_rec);
211  bool UpdateVdns(IFMapNode *node);
212 
213  bool CanNotify();
214  bool HasChanged(DnsItem &rhs);
215  bool OnlyTtlChange(DnsItem &rhs);
216  autogen::VirtualDnsType GetVDns() const;
217  const DnsItem &GetRecord() const { return rec_; }
218  std::string GetViewName() const;
220  bool GetObject(IFMapNode *node, DnsItem &item);
221 
222  void VirtualDnsRecordTrace(VirtualDnsRecordTraceData &rec);
223  void Trace(const std::string &ev);
224 
225  static VirtualDnsRecordConfig *Find(std::string name);
226  static void UpdateVirtualDns(VirtualDnsConfig *vdns);
227 };
228 
229 struct GlobalQosConfig : public DnsConfig {
230  GlobalQosConfig(IFMapNode *node);
232 
233  void OnAdd(IFMapNode *node);
234  void OnDelete();
235  void OnChange(IFMapNode *node);
236  void SetDscp();
237  static GlobalQosConfig *Find(const std::string &name);
238 
239  uint8_t control_dscp_;
242 };
243 #endif // __dns_oper_h__
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
std::set< VirtualDnsRecordConfig * > VDnsRec
Definition: dns_oper.h:138
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
int GetNegativeCacheTtl() const
Definition: dns_oper.h:182
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
const IpamList & GetIpamList() const
Definition: dns_oper.h:159
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
~VnniConfig()
Definition: dns_oper.cc:54
uint8_t flags_
Definition: dns_oper.h:29
void OnDelete()
Definition: dns_oper.cc:754
boost::asio::ip::address IpAddress
Definition: address.h:13
std::string GetOldDomainName() const
Definition: dns_oper.h:173
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
void MarkDelete()
Definition: dns_oper.h:50
VirtualDnsConfig * GetVirtualDns()
Definition: dns_oper.h:127
boost::function< void(const DnsConfig *, DnsConfig::DnsConfigEvent)> Callback
Definition: dns_oper.h:60
static VnniConfig * Find(std::string name)
Definition: dns_oper.cc:173
static GlobalQosConfig * Find(const std::string &name)
Definition: dns_oper.cc:726
static DataMap vnni_config_
Definition: dns_oper.h:79
bool HasReverseResolutionChanged() const
Definition: dns_oper.h:177
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
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
int GetTtl() const
Definition: dns_oper.h:181
VirtualDnsConfig * GetVirtualDns() const
Definition: dns_oper.h:219
std::string GetRecordOrder() const
Definition: dns_oper.h:174
Definition: agent.h:358
void VirtualDnsRecordTrace(VirtualDnsRecordTraceData &rec)
Definition: dns_oper.cc:665
VnniConfig(IFMapNode *node)
Definition: dns_oper.cc:48
bool IsExternalVisible() const
Definition: dns_oper.h:175
static DataMap ipam_config_
Definition: dns_oper.h:108
autogen::IpamType rec_
Definition: dns_oper.h:105
bool operator<(VnniConfig &rhs) const
Definition: dns_oper.h:83
void AddVnni(VnniConfig *vnni)
Definition: dns_oper.h:122
static IpamConfig * Find(std::string name)
Definition: dns_oper.cc:271
void MarkNotified() const
Definition: dns_oper.h:47
std::vector< Subnet > Subnets
Definition: bind_util.h:278
const DnsItem & GetRecord() const
Definition: dns_oper.h:217
void OnChange(IFMapNode *node)
Definition: dns_oper.cc:212
std::string GetDomainName() const
Definition: dns_oper.h:172
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
void AddIpam(IpamConfig *ipam)
Definition: dns_oper.h:157
bool GetObject(IFMapNode *node, autogen::IpamType &data)
Definition: dns_oper.cc:254
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
static const std::string & ToEventString(DnsConfigEvent ev)
Definition: dns_oper.h:67
std::string virtual_dns_name_
Definition: dns_oper.h:199
bool HasChanged(DnsItem &rhs)
Definition: dns_oper.cc:612
Subnets & GetSubnets()
Definition: dns_oper.h:92
void AddRecord(VirtualDnsRecordConfig *record)
Definition: dns_oper.cc:364
DnsConfigFlags
Definition: dns_oper.h:37
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
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
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
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
std::set< IpamConfig * > IpamList
Definition: dns_oper.h:137
bool IsDeleted() const
Definition: dns_oper.h:51
static DataMap & GetVirtualDnsMap()
Definition: dns_oper.h:185
DnsConfig(const std::string &name)
Definition: dns_oper.h:56
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