OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vm.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_agent_vm_hpp
6 #define vnsw_agent_vm_hpp
7 
8 #include <cmn/agent_cmn.h>
9 #include <oper/oper_db.h>
10 #include <agent_types.h>
11 
12 typedef std::map<std::string, boost::uuids::uuid> VmNameUuidTree;
13 
14 struct VmKey : public AgentOperDBKey {
16  virtual ~VmKey() { }
17 
19 };
20 
21 struct VmData : public AgentOperDBData {
22  typedef vector<boost::uuids::uuid> SGUuidList;
23  VmData(Agent *agent, IFMapNode *node, const std::string &name,
24  const SGUuidList &sg_list) :
25  AgentOperDBData(agent, node), name_(name), sg_list_(sg_list) { }
26  virtual ~VmData() { }
27 
28  std::string name_;
30 };
31 
32 class VmEntry : AgentRefCount<VmEntry>, public AgentOperDBEntry {
33 public:
34  static const int kVectorIncreaseSize = 16;
35 
36  VmEntry(const boost::uuids::uuid &id);
37  virtual ~VmEntry();
38 
39  virtual bool IsLess(const DBEntry &rhs) const;
40  virtual KeyPtr GetDBRequestKey() const;
41  virtual void SetKey(const DBRequestKey *key);
42  virtual string ToString() const;
43  const string &GetCfgName() const { return name_; }
44  void SetCfgName(std::string name) { name_ = name; }
45 
46  const boost::uuids::uuid &GetUuid() const { return uuid_; }
47 
48  uint32_t GetRefCount() const {
50  }
51 
52  void SendObjectLog(AgentLogEvent::type event) const;
53  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
54 
55  uint32_t flow_count() const { return flow_count_; }
56  void update_flow_count(int val) const;
57 
58  uint32_t linklocal_flow_count() const { return linklocal_flow_count_; }
59  void update_linklocal_flow_count(int val) const {
60  int tmp = linklocal_flow_count_.fetch_and_add(val);
61  if (val < 0)
62  assert(tmp >= val);
63  }
64 
65  bool drop_new_flows() const { return drop_new_flows_; }
66 
67 private:
69  friend class VmTable;
71  std::string name_;
72  mutable tbb::atomic<int> flow_count_;
73  mutable tbb::atomic<int> linklocal_flow_count_;
74  mutable bool drop_new_flows_;
76 };
77 
78 class VmTable : public AgentOperDBTable {
79 public:
80  VmTable(DB *db, const std::string &name) : AgentOperDBTable(db, name) { }
81  virtual ~VmTable() { }
82 
83  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
84  virtual size_t Hash(const DBEntry *entry) const {return 0;}
85  virtual size_t Hash(const DBRequestKey *key) const {return 0;}
86 
87  virtual DBEntry *OperDBAdd(const DBRequest *req);
88  virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req);
89  virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req);
90  virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req,
91  const boost::uuids::uuid &u);
92  virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u);
93  bool ProcessConfig(IFMapNode *node, DBRequest &req,
94  const boost::uuids::uuid &u);
96  const std::string &context);
97 
98  static DBTableBase *CreateTable(DB *db, const std::string &name);
99  static VmTable *GetInstance() {return vm_table_;}
100 
101  boost::uuids::uuid GetVmUuid(const std::string &name);
102 
103 private:
107 };
108 
109 #endif // vnsw_agent_vm_hpp
static VmTable * vm_table_
Definition: vm.h:104
VmData(Agent *agent, IFMapNode *node, const std::string &name, const SGUuidList &sg_list)
Definition: vm.h:23
uint32_t flow_count() const
Definition: vm.h:55
virtual string ToString() const
Definition: vm.cc:38
void update_flow_count(int val) const
Definition: vm.cc:69
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
Definition: vm.cc:153
const string & GetCfgName() const
Definition: vm.h:43
uint32_t GetRefCount() const
Definition: agent_db.h:54
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: vm.cc:206
virtual DBEntry * OperDBAdd(const DBRequest *req)
Definition: vm.cc:159
Definition: vm.h:14
boost::uuids::uuid GetVmUuid(const std::string &name)
Definition: vm.cc:144
void SetCfgName(std::string name)
Definition: vm.h:44
Definition: vm.h:32
Definition: vm.h:78
virtual ~VmEntry()
Definition: vm.cc:28
uint32_t GetRefCount() const
Definition: vm.h:48
virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
Definition: vm.cc:175
boost::uuids::uuid uuid
DISALLOW_COPY_AND_ASSIGN(VmEntry)
const boost::uuids::uuid & GetUuid() const
Definition: vm.h:46
virtual size_t Hash(const DBRequestKey *key) const
Definition: vm.h:85
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req)
Definition: vm.cc:181
std::string name_
Definition: vm.h:71
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
Definition: vm.cc:238
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: vm.cc:193
std::string name_
Definition: vm.h:28
virtual ~VmKey()
Definition: vm.h:16
virtual KeyPtr GetDBRequestKey() const
Definition: vm.cc:42
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
Definition: vm.cc:52
VmKey(boost::uuids::uuid id)
Definition: vm.h:15
Definition: db.h:24
bool drop_new_flows() const
Definition: vm.h:65
uint8_t type
Definition: load_balance.h:109
virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
Definition: vm.cc:198
Definition: vm.h:21
Definition: agent.h:358
tbb::atomic< int > flow_count_
Definition: vm.h:72
uint32_t linklocal_flow_count() const
Definition: vm.h:58
virtual ~VmData()
Definition: vm.h:26
bool drop_new_flows_
Definition: vm.h:74
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
VmTable(DB *db, const std::string &name)
Definition: vm.h:80
boost::uuids::uuid uuid_
Definition: vm.h:70
const std::string & name() const
Definition: db_table.h:110
vector< boost::uuids::uuid > SGUuidList
Definition: vm.h:22
virtual size_t Hash(const DBEntry *entry) const
Definition: vm.h:84
tbb::atomic< int > linklocal_flow_count_
Definition: vm.h:73
VmEntry(const boost::uuids::uuid &id)
Definition: vm.cc:22
const Agent * agent() const
Definition: oper_db.h:65
VmNameUuidTree vm_name_uuid_tree_
Definition: vm.h:105
virtual bool IsLess(const DBEntry &rhs) const
Definition: vm.cc:33
boost::uuids::uuid uuid_
Definition: vm.h:18
void update_linklocal_flow_count(int val) const
Definition: vm.h:59
virtual ~VmTable()
Definition: vm.h:81
void SendObjectLog(AgentLogEvent::type event) const
Definition: vm.cc:115
bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: vm.cc:219
static const int kVectorIncreaseSize
Definition: vm.h:34
SGUuidList sg_list_
Definition: vm.h:29
void SetInterfacesDropNewFlows(bool drop_new_flows) const
Definition: vm.cc:94
virtual void SetKey(const DBRequestKey *key)
Definition: vm.cc:47
static VmTable * GetInstance()
Definition: vm.h:99
DISALLOW_COPY_AND_ASSIGN(VmTable)
std::map< std::string, boost::uuids::uuid > VmNameUuidTree
Definition: vm.h:12