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