OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dns_config.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __DNS_CONFIG_H__
6 #define __DNS_CONFIG_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 #include <boost/ptr_container/ptr_map.hpp>
16 
17 #include "base/util.h"
18 #include "base/queue_task.h"
19 #include "base/task_trigger.h"
20 #include "ifmap/ifmap_link.h"
21 #include "ifmap/ifmap_table.h"
22 #include "ifmap/ifmap_node_proxy.h"
23 #include "vnc_cfg_types.h"
24 #include "sandesh/sandesh_trace.h"
25 #include "cmn/dns_types.h"
26 
27 class ConfigListener;
28 class DB;
29 class DBGraph;
30 class IFMapNodeProxy;
31 
33 
34 #define DNS_TRACE(Obj, ...) \
35 do { \
36  Obj::TraceMsg(DnsConfigTraceBuf, __FILE__, __LINE__, ##__VA_ARGS__); \
37 } while (false)
38 
39 typedef boost::shared_ptr<IFMapNodeProxy> IFMapNodeProxyRef;
40 
41 struct ConfigDelta {
42  ConfigDelta();
43  ConfigDelta(const ConfigDelta &rhs);
44  ~ConfigDelta();
45  std::string id_type;
46  std::string id_name;
49 };
50 
51 struct DnsConfigData {
52  typedef std::map<std::string, IFMapNodeProxyRef> DataMap;
53  typedef std::pair<std::string, IFMapNodeProxyRef> DataPair;
54 
56 
57  void Add(std::string name, IFMapNodeProxyRef node) {
58  data_.insert(DataPair(name, node));
59  }
60 
61  void Del(std::string name) {
62  data_.erase(name);
63  }
64 
65  IFMapNodeProxy *Find(std::string name) {
66  DataMap::iterator iter = data_.find(name);
67  if (iter != data_.end())
68  return iter->second.get();
69  return NULL;
70  }
71 };
72 
74 public:
75  static const int kConfigTaskInstanceId = 0;
76  enum EventType {
81  };
82  static const std::string EventString[];
83  static const char *config_types[];
84  static uint32_t config_types_size;
85  typedef boost::function<void(IFMapNodeProxy *,
86  const std::string&, EventType)> Observer;
87  struct Observers {
93  };
94 
96  virtual ~DnsConfigManager();
97  void Initialize(DB *db, DBGraph *db_graph);
98  void RegisterObservers(const Observers &obs) { obs_ = obs; }
99 
100  DB *database() { return db_; }
101  DBGraph *graph() { return db_graph_; }
102 
103  void OnChange();
104 
105  const std::string &localname() const { return localname_; }
106 
107  const std::string &ToEventString(EventType ev) { return EventString[ev]; }
108  void Terminate();
109 
110  IFMapNode *FindTarget(IFMapNode *node, std::string link_name);
111  IFMapNode *FindTarget(IFMapNode *node, std::string link_name,
112  std::string node_type);
113 private:
114  typedef std::vector<ConfigDelta> ChangeList;
115  typedef std::map<std::string,
116  boost::function<void(const ConfigDelta &)> >IdentifierMap;
117 
118  void IdentifierMapInit();
119  void ProcessChanges(const ChangeList &change_list);
120  void ProcessNetworkIpam(const ConfigDelta &delta);
121  void ProcessVNNI(const ConfigDelta &delta);
122  void ProcessVirtualDNS(const ConfigDelta &delta);
123  void ProcessVirtualDNSRecord(const ConfigDelta &delta);
124  void ProcessGlobalQosConfig(const ConfigDelta &delta);
125  void ProcessNode(const ConfigDelta &delta, DnsConfigData &config_data,
126  Observer observer);
127 
128  bool ConfigHandler();
129  static int config_task_id_;
130 
131  DB *db_;
133  std::string localname_;
142  boost::scoped_ptr<ConfigListener> listener_;
144 };
145 
146 
147 #endif // __DNS_CONFIG_H__
boost::shared_ptr< IFMapNodeProxy > IFMapNodeProxyRef
Definition: dns_config.h:39
static const char * config_types[]
Definition: dns_config.h:83
static int config_task_id_
Definition: dns_config.h:129
std::map< std::string, boost::function< void(const ConfigDelta &)> > IdentifierMap
Definition: dns_config.h:116
void ProcessVirtualDNS(const ConfigDelta &delta)
Definition: dns_config.cc:127
DnsConfigData vnni_config_
Definition: dns_config.h:136
void ProcessChanges(const ChangeList &change_list)
Definition: dns_config.cc:194
const std::string & localname() const
Definition: dns_config.h:105
IdentifierMap id_map_
Definition: dns_config.h:134
void ProcessGlobalQosConfig(const ConfigDelta &delta)
Definition: dns_config.cc:159
boost::scoped_ptr< ConfigListener > listener_
Definition: dns_config.h:142
virtual ~DnsConfigManager()
Definition: dns_config.cc:62
const std::string & ToEventString(EventType ev)
Definition: dns_config.h:107
boost::intrusive_ptr< IFMapObject > IFMapObjectRef
Definition: ifmap_object.h:58
IFMapNode * FindTarget(IFMapNode *node, std::string link_name)
Definition: dns_config.cc:168
static const std::string EventString[]
Definition: dns_config.h:82
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
SandeshTraceBufferPtr DnsConfigTraceBuf
boost::function< void(IFMapNodeProxy *, const std::string &, EventType)> Observer
Definition: dns_config.h:86
std::string id_type
Definition: dns_config.h:45
Definition: db.h:24
std::pair< std::string, IFMapNodeProxyRef > DataPair
Definition: dns_config.h:53
DnsConfigData global_qos_config_
Definition: dns_config.h:139
void ProcessVirtualDNSRecord(const ConfigDelta &delta)
Definition: dns_config.cc:135
DnsConfigData ipam_config_
Definition: dns_config.h:135
void ProcessVNNI(const ConfigDelta &delta)
Definition: dns_config.cc:143
bool ConfigHandler()
Definition: dns_config.cc:204
DnsConfigData virt_dns_rec_config_
Definition: dns_config.h:138
void RegisterObservers(const Observers &obs)
Definition: dns_config.h:98
std::string localname_
Definition: dns_config.h:133
DataMap data_
Definition: dns_config.h:55
void ProcessNode(const ConfigDelta &delta, DnsConfigData &config_data, Observer observer)
Definition: dns_config.cc:89
DBGraph * db_graph_
Definition: dns_config.h:132
Observers obs_
Definition: dns_config.h:140
std::vector< ConfigDelta > ChangeList
Definition: dns_config.h:114
IFMapObjectRef obj
Definition: dns_config.h:48
std::map< std::string, IFMapNodeProxyRef > DataMap
Definition: dns_config.h:52
void IdentifierMapInit()
Definition: dns_config.cc:76
IFMapNodeProxy * Find(std::string name)
Definition: dns_config.h:65
TaskTrigger trigger_
Definition: dns_config.h:141
DBGraph * graph()
Definition: dns_config.h:101
static uint32_t config_types_size
Definition: dns_config.h:84
DnsConfigData virt_dns_config_
Definition: dns_config.h:137
void Initialize(DB *db, DBGraph *db_graph)
Definition: dns_config.cc:65
void ProcessNetworkIpam(const ConfigDelta &delta)
Definition: dns_config.cc:151
IFMapNodeProxyRef node
Definition: dns_config.h:47
std::string id_name
Definition: dns_config.h:46
void Add(std::string name, IFMapNodeProxyRef node)
Definition: dns_config.h:57
static const int kConfigTaskInstanceId
Definition: dns_config.h:75
DISALLOW_COPY_AND_ASSIGN(DnsConfigManager)
void Del(std::string name)
Definition: dns_config.h:61