OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
physical_device_vn.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
3  */
4 #ifndef SRC_VNSW_AGENT_OPER_PHYSICAL_DEVICE_VN_H_
5 #define SRC_VNSW_AGENT_OPER_PHYSICAL_DEVICE_VN_H_
6 
8 // Manages DB Table of "Physical Device and Virtual-Network" membership. The
9 // table is built based on the IFMap schema
11 #include <cmn/agent_cmn.h>
12 #include <cmn/agent.h>
13 #include <string>
14 
16 
19  const boost::uuids::uuid &vn,
20  const boost::uuids::uuid vmi) :
21  dev_(dev), vn_(vn), vmi_(vmi) {
22  }
24  dev_(boost::uuids::nil_uuid()), vn_(boost::uuids::nil_uuid()),
25  vmi_(boost::uuids::nil_uuid()) {
26  }
27 
29  dev_(rhs.dev_), vn_(rhs.vn_), vmi_(rhs.vmi_) {
30  }
31 
32  virtual ~PhysicalDeviceVnToVmi() { }
33 
35  const PhysicalDeviceVnToVmi &rhs) const {
36  if (lhs.dev_ != rhs.dev_)
37  return lhs.dev_ < rhs.dev_;
38  if (lhs.vn_ != rhs.vn_)
39  return lhs.vn_ < rhs.vn_;
40  return lhs.vmi_ < rhs.vmi_;
41  }
42 
46 };
47 
48 struct PhysicalDeviceVnKey : public AgentKey {
49  explicit PhysicalDeviceVnKey(const boost::uuids::uuid &dev_uuid,
50  const boost::uuids::uuid &vn_uuid) :
51  AgentKey(), device_uuid_(dev_uuid), vn_uuid_(vn_uuid) { }
52  virtual ~PhysicalDeviceVnKey() { }
53 
56 };
57 
60  virtual ~PhysicalDeviceVnData() { }
61 };
62 
63 class PhysicalDeviceVn : AgentRefCount<PhysicalDeviceVn>,
64  public AgentDBEntry {
65  public:
67  const boost::uuids::uuid &vn_uuid) :
68  device_uuid_(device_uuid), vn_uuid_(vn_uuid), device_(), vn_(),
70  virtual ~PhysicalDeviceVn() { }
71 
72  virtual bool IsLess(const DBEntry &rhs) const;
73  virtual void SetKey(const DBRequestKey *key);
74  virtual std::string ToString() const;
75  uint32_t GetRefCount() const {
77  }
79 
80  const boost::uuids::uuid &device_uuid() const { return device_uuid_; }
81  PhysicalDevice *device() const { return device_.get(); }
82 
83  const boost::uuids::uuid &vn_uuid() const { return vn_uuid_; }
84  VnEntry *vn() const { return vn_.get(); }
85  int vxlan_id() const { return vxlan_id_; }
86  const IpAddress &tor_ip() const {return tor_ip_;}
87  const std::string &device_display_name() const {return device_display_name_;}
88 
89  bool Copy(PhysicalDeviceVnTable *table, const PhysicalDeviceVnData *data);
90  void SendObjectLog(AgentLogEvent::type event) const;
91  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
92 
93  private:
94  friend class PhysicalDeviceVnTable;
97 
102  std::string device_display_name_;
104 };
105 
107  public:
108  struct Compare {
110  const PhysicalDeviceVnKey &right) const {
111  if (left.device_uuid_ != right.device_uuid_) {
112  return left.device_uuid_ < right.device_uuid_;
113  }
114  return left.vn_uuid_ < right.vn_uuid_;
115  }
116  };
117 
118  typedef std::set<PhysicalDeviceVnToVmi, PhysicalDeviceVnToVmi> ConfigTree;
119 
120  PhysicalDeviceVnTable(DB *db, const std::string &name);
122 
123  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
124  virtual size_t Hash(const DBEntry *entry) const {return 0;}
125  virtual size_t Hash(const DBRequestKey *key) const {return 0;}
126 
127  virtual DBEntry *Add(const DBRequest *req);
128  virtual bool OnChange(DBEntry *entry, const DBRequest *req);
129  virtual bool Delete(DBEntry *entry, const DBRequest *req);
130  virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req,
131  const boost::uuids::uuid &u);
132  virtual bool Resync(DBEntry *entry, const DBRequest *req);
133  virtual void Clear();
135  const std::string &context);
136 
137  void ProcessConfig(const boost::uuids::uuid &dev,
138  const boost::uuids::uuid &vn);
139  bool AddConfigEntry(const boost::uuids::uuid &vmi,
140  const boost::uuids::uuid &dev,
141  const boost::uuids::uuid &vn);
142  bool DeleteConfigEntry(const boost::uuids::uuid &vmi,
143  const boost::uuids::uuid &dev,
144  const boost::uuids::uuid &vn);
145  const ConfigTree &config_tree() const { return config_tree_; }
146 
147  static DBTableBase *CreateTable(DB *db, const std::string &name);
148 
149  bool DeviceVnWalk(DBTablePartBase *partition, DBEntryBase *entry);
150  void DeviceVnWalkDone(DBTable::DBTableWalkRef walk_ref, DBTableBase *partition);
151  // Handle change in VxLan Identifier mode from global-config
153 
154  private:
158 };
159 
160 #endif // SRC_VNSW_AGENT_OPER_PHYSICAL_DEVICE_VN_H_
DBTable::DBTableWalkRef vxlan_id_walk_ref_
const std::string & device_display_name() const
void DeviceVnWalkDone(DBTable::DBTableWalkRef walk_ref, DBTableBase *partition)
const boost::uuids::uuid & vn_uuid() const
void ProcessConfig(const boost::uuids::uuid &dev, const boost::uuids::uuid &vn)
uint32_t GetRefCount() const
Definition: agent_db.h:54
std::set< PhysicalDeviceVnToVmi, PhysicalDeviceVnToVmi > ConfigTree
std::string device_display_name_
const IpAddress & tor_ip() const
bool operator()(const PhysicalDeviceVnKey &left, const PhysicalDeviceVnKey &right) const
bool operator()(const PhysicalDeviceVnToVmi &lhs, const PhysicalDeviceVnToVmi &rhs) const
boost::asio::ip::address IpAddress
Definition: address.h:13
DISALLOW_COPY_AND_ASSIGN(PhysicalDeviceVn)
DBEntryBase::KeyPtr GetDBRequestKey() const
virtual DBEntry * Add(const DBRequest *req)
boost::uuids::uuid uuid
boost::uuids::uuid vmi_
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
bool DeviceVnWalk(DBTablePartBase *partition, DBEntryBase *entry)
PhysicalDeviceVn(const boost::uuids::uuid &device_uuid, const boost::uuids::uuid &vn_uuid)
int vxlan_id() const
virtual size_t Hash(const DBRequestKey *key) const
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
boost::uuids::uuid vn_uuid_
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
virtual std::string ToString() const
PhysicalDevice * device() const
Definition: db.h:24
uint8_t type
Definition: load_balance.h:109
boost::intrusive_ptr< VnEntry > VnEntryRef
Definition: agent.h:68
PhysicalDeviceRef device_
boost::uuids::uuid device_uuid_
void SendObjectLog(AgentLogEvent::type event) const
bool Copy(PhysicalDeviceVnTable *table, const PhysicalDeviceVnData *data)
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
DISALLOW_COPY_AND_ASSIGN(PhysicalDeviceVnTable)
boost::uuids::uuid dev_
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
const std::string & name() const
Definition: db_table.h:110
virtual size_t Hash(const DBEntry *entry) const
const ConfigTree & config_tree() const
PhysicalDeviceVnToVmi(const boost::uuids::uuid &dev, const boost::uuids::uuid &vn, const boost::uuids::uuid vmi)
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
Definition: vn.h:151
boost::uuids::uuid vn_
bool AddConfigEntry(const boost::uuids::uuid &vmi, const boost::uuids::uuid &dev, const boost::uuids::uuid &vn)
virtual void SetKey(const DBRequestKey *key)
virtual bool OnChange(DBEntry *entry, const DBRequest *req)
virtual bool Delete(DBEntry *entry, const DBRequest *req)
PhysicalDeviceVnKey(const boost::uuids::uuid &dev_uuid, const boost::uuids::uuid &vn_uuid)
uint32_t GetRefCount() const
PhysicalDeviceVnToVmi(const PhysicalDeviceVnToVmi &rhs)
virtual bool IsLess(const DBEntry &rhs) const
virtual bool Resync(DBEntry *entry, const DBRequest *req)
boost::uuids::uuid device_uuid_
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
Definition: db_table.h:169
boost::intrusive_ptr< PhysicalDevice > PhysicalDeviceRef
Definition: agent.h:153
bool DeleteConfigEntry(const boost::uuids::uuid &vmi, const boost::uuids::uuid &dev, const boost::uuids::uuid &vn)
virtual ~PhysicalDeviceVn()
static DBTableBase * CreateTable(DB *db, const std::string &name)
VnEntry * vn() const
const boost::uuids::uuid & device_uuid() const
boost::uuids::uuid vn_uuid_
PhysicalDeviceVnTable(DB *db, const std::string &name)