OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vm_uve_table_base.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_uve_table_base_h
6 #define vnsw_agent_vm_uve_table_base_h
7 
8 #include <string>
9 #include <vector>
10 #include <set>
11 #include <map>
12 #include <boost/scoped_ptr.hpp>
13 #include <boost/shared_ptr.hpp>
14 #include <virtual_machine_types.h>
15 #include <uve/vm_stat.h>
16 #include <uve/vm_stat_data.h>
17 #include <oper/vm.h>
18 #include <oper/peer.h>
19 #include <cmn/index_vector.h>
20 #include <uve/vm_uve_entry_base.h>
21 #include "base/queue_task.h"
22 
23 //The container class for objects representing VirtualMachine UVEs
24 //Defines routines for storing and managing (add, delete, change and send)
25 //VirtualMachine UVEs
27 public:
28  struct VmUveInterfaceState :public DBState {
30  const std::string cfg_name)
31  : vm_uuid_(u), interface_cfg_name_(cfg_name) {}
33  std::string interface_cfg_name_;
34  std::string vm_name_;
35  };
36 
37  class VmUveVmState: public DBState {
38  public:
39  VmUveVmState() : stat_(NULL) { };
40  VmStat *stat_;
41  };
42  typedef boost::shared_ptr<VmUveEntryBase> VmUveEntryPtr;
43  typedef std::map<const boost::uuids::uuid, VmUveEntryPtr> UveVmMap;
44  typedef std::pair<const boost::uuids::uuid, VmUveEntryPtr> UveVmPair;
45 
46  VmUveTableBase(Agent *agent, uint32_t default_intvl);
47  virtual ~VmUveTableBase();
48  void RegisterDBClients();
49  void Shutdown(void);
50  virtual void DispatchVmMsg(const UveVirtualMachineAgent &uve);
51  bool TimerExpiry();
52 
53 protected:
54  virtual void VmStatCollectionStart(VmUveVmState *state, const VmEntry *vm);
55  virtual void VmStatCollectionStop(VmUveVmState *state);
57  virtual void SendVmDeleteMsg(const std::string &vm_config_name);
58 
61  /* For exclusion between kTaskFlowStatsCollector and kTaskDBExclude */
62  tbb::mutex uve_vm_map_mutex_;
63 private:
64  virtual VmUveEntryPtr Allocate(const VmEntry *vm);
65  void InterfaceNotify(DBTablePartBase *partition, DBEntryBase *e);
66  void VmNotify(DBTablePartBase *partition, DBEntryBase *e);
67  void InterfaceAddHandler(const VmEntry* vm, const VmInterface *vmi);
69  const std::string &intf_cfg_name);
70  void UpdateVmName(const boost::uuids::uuid &u, const std::string &vm_name);
71  void MarkChanged(const boost::uuids::uuid &u);
72  VmUveEntryBase* Add(const VmEntry *vm, bool vm_notify);
73  void Delete(const boost::uuids::uuid &u);
74  void Change(const VmEntry *vm);
75  void set_expiry_time(int time);
76  void SendVmMsg(VmUveEntryBase *entry, const boost::uuids::uuid &u);
77 
80  // Last visited VmEntry by timer
85 };
86 
87 #endif // vnsw_agent_vm_uve_table_base_h
tbb::mutex uve_vm_map_mutex_
VmUveEntryBase * UveEntryFromVm(const boost::uuids::uuid &u)
boost::uuids::uuid timer_last_visited_
DISALLOW_COPY_AND_ASSIGN(VmUveTableBase)
virtual VmUveEntryPtr Allocate(const VmEntry *vm)
virtual void VmStatCollectionStop(VmUveVmState *state)
Definition: vm.h:32
int ListenerId
Definition: db_table.h:62
boost::uuids::uuid uuid
void SendVmMsg(VmUveEntryBase *entry, const boost::uuids::uuid &u)
Definition: vm_stat.h:17
boost::shared_ptr< VmUveEntryBase > VmUveEntryPtr
void VmNotify(DBTablePartBase *partition, DBEntryBase *e)
void Delete(const boost::uuids::uuid &u)
virtual ~VmUveTableBase()
void set_expiry_time(int time)
Definition: agent.h:358
DBTableBase::ListenerId vm_listener_id_
void InterfaceAddHandler(const VmEntry *vm, const VmInterface *vmi)
virtual void VmStatCollectionStart(VmUveVmState *state, const VmEntry *vm)
void InterfaceDeleteHandler(const boost::uuids::uuid &u, const std::string &intf_cfg_name)
VmUveInterfaceState(const boost::uuids::uuid u, const std::string cfg_name)
std::map< const boost::uuids::uuid, VmUveEntryPtr > UveVmMap
VmUveTableBase(Agent *agent, uint32_t default_intvl)
virtual void DispatchVmMsg(const UveVirtualMachineAgent &uve)
void UpdateVmName(const boost::uuids::uuid &u, const std::string &vm_name)
std::pair< const boost::uuids::uuid, VmUveEntryPtr > UveVmPair
virtual void SendVmDeleteMsg(const std::string &vm_config_name)
void Change(const VmEntry *vm)
VmUveEntryBase * Add(const VmEntry *vm, bool vm_notify)
void InterfaceNotify(DBTablePartBase *partition, DBEntryBase *e)
void MarkChanged(const boost::uuids::uuid &u)
Definition: timer.h:54
DBTableBase::ListenerId intf_listener_id_