OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
service_instance.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef VNSW_AGENT_OPER_SERVICE_INSTANCE_H__
6 #define VNSW_AGENT_OPER_SERVICE_INSTANCE_H__
7 
8 #include <string>
9 #include <map>
10 #include <boost/uuid/uuid.hpp>
11 #include "cmn/agent_db.h"
13 #include "schema/vnc_cfg_types.h"
14 
15 class DBGraph;
17 class InstanceManager;
18 
19 class ServiceInstanceKey : public AgentKey {
20  public:
22  uuid_ = uuid;
23  }
25  return uuid_;
26  }
27 
28  private:
30 };
31 
32 class ServiceInstance : public AgentRefCount<ServiceInstance>,
33  public AgentDBEntry {
34 public:
35  enum ServiceType {
36  Other = 1,
39  };
44  };
46  KVM = 1,
48  };
49 
50  /*
51  * Properties computed from walking the ifmap graph.
52  * POD type.
53  */
54  struct Properties {
55  void Clear();
56  int CompareTo(const Properties &rhs) const;
57  const std::string &ServiceTypeString() const;
58 
59  bool Usable() const;
60  std::string DiffString(const Properties &rhs) const;
61  std::string IdToCmdLineStr() const;
62  boost::uuids::uuid ToId() const;
63 
64  /* template parameters */
68 
69  /* virtual machine */
71 
72  /* interfaces */
76 
77  std::string mac_addr_inside;
78  std::string mac_addr_outside;
79  std::string mac_addr_management;
80 
81  std::string ip_addr_inside;
82  std::string ip_addr_outside;
83  std::string ip_addr_management;
84 
85  std::string gw_ip;
86  std::string image_name;
87 
91 
93 
94  std::string instance_data;
95  std::vector<autogen::KeyValuePair> instance_kvps;
96 
97  // loadbalancer id
98  std::string loadbalancer_id;
99  };
100 
101  ServiceInstance();
102  virtual bool IsLess(const DBEntry &rhs) const;
103  virtual std::string ToString() const;
104  virtual void SetKey(const DBRequestKey *key);
105  virtual KeyPtr GetDBRequestKey() const;
106  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
107 
108  virtual uint32_t GetRefCount() const {
110  }
111 
114  }
115 
116  const Properties &properties() const { return properties_; }
117 
118  const boost::uuids::uuid &uuid() const { return uuid_; }
119 
120  bool IsUsable() const;
121 
123  ifmap_node_state_ref_ = ref;
124  }
125 
128  return NULL;
129  IFMapNodeState *state = ifmap_node_state_ref_.get();
130  return state->node();
131  }
132 private:
136 
138 };
139 
141  public:
142  ServiceInstanceTable(DB *db, const std::string &name);
143 
144  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *key) const;
145 
146  /*
147  * Register with the dependency manager.
148  */
149  void Initialize(DBGraph *graph, IFMapDependencyManager *dependency_manager);
150 
151  /*
152  * Add/Delete methods establish the mapping between the IFMapNode
153  * and the ServiceInstance DBEntry with the dependency manager.
154  */
155  virtual DBEntry *Add(const DBRequest *request);
156  virtual bool Delete(DBEntry *entry, const DBRequest *request);
157  virtual bool OnChange(DBEntry *entry, const DBRequest *request);
158 
159  /*
160  * Walk the IFMap graph and calculate the properties for this node.
161  */
162  void CalculateProperties(DBGraph *graph, IFMapNode *node,
163  ServiceInstance::Properties *properties);
164 
165  /*
166  * IFNodeToReq
167  *
168  * Convert the ifmap node to a (key,data) pair stored in the database.
169  */
170  virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req,
171  const boost::uuids::uuid &u);
172  virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &id);
173 
175  const std::string &context);
176  static DBTableBase *CreateTable(DB *db, const std::string &name);
177 
178  private:
179  /*
180  * Invoked by dependency manager whenever a node in the graph
181  * changes in a way that it affects the service instance
182  * configuration. The dependency tracking policy is configured in
183  * the dependency manager directly.
184  */
185  void ChangeEventHandler(IFMapNode *node, DBEntry *entry);
186  bool HandleAddChange(ServiceInstance **svc_instance, const DBRequest *key);
187 
190 
192 };
193 
194 #endif // VNSW_AGENT_OPER_SERVICE_INSTANCE_H__
IFMapNode * ifmap_node()
boost::uuids::uuid ToId() const
IFMapDependencyManager * dependency_manager_
void Initialize(DBGraph *graph, IFMapDependencyManager *dependency_manager)
uint32_t GetRefCount() const
Definition: agent_db.h:54
static DBTableBase * CreateTable(DB *db, const std::string &name)
DISALLOW_COPY_AND_ASSIGN(ServiceInstanceTable)
void CalculateProperties(DBGraph *graph, IFMapNode *node, ServiceInstance::Properties *properties)
bool IsUsable() const
const std::string & ServiceTypeString() const
bool HandleAddChange(ServiceInstance **svc_instance, const DBRequest *key)
boost::uuids::uuid uuid_
boost::uuids::uuid uuid
DISALLOW_COPY_AND_ASSIGN(ServiceInstance)
virtual KeyPtr GetDBRequestKey() const
virtual bool OnChange(DBEntry *entry, const DBRequest *request)
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
Definition: db.h:24
int CompareTo(const Properties &rhs) const
Properties properties_
ServiceInstanceKey(boost::uuids::uuid uuid)
boost::uuids::uuid instance_id
virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &id)
boost::uuids::uuid vmi_outside
boost::uuids::uuid vmi_management
void set_properties(const Properties &properties)
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
std::vector< autogen::KeyValuePair > instance_kvps
IFMapDependencyManager::IFMapNodePtr ifmap_node_state_ref_
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
const std::string & name() const
Definition: db_table.h:110
boost::uuids::uuid uuid_
virtual bool Delete(DBEntry *entry, const DBRequest *request)
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
ServiceInstanceTable(DB *db, const std::string &name)
const Properties & properties() const
const boost::uuids::uuid & uuid() const
virtual void SetKey(const DBRequestKey *key)
virtual DBEntry * Add(const DBRequest *request)
const boost::uuids::uuid & instance_id() const
boost::intrusive_ptr< IFMapNodeState > IFMapNodePtr
virtual bool IsLess(const DBEntry &rhs) const
std::string DiffString(const Properties &rhs) const
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
std::string IdToCmdLineStr() const
void ChangeEventHandler(IFMapNode *node, DBEntry *entry)
void SetIFMapNodeState(IFMapDependencyManager::IFMapNodePtr ref)
boost::uuids::uuid vmi_inside
virtual std::string ToString() const
virtual uint32_t GetRefCount() const