OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
qos_config.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __AGENT_OPER_QOS_CONFIG_H
6 #define __AGENT_OPER_QOS_CONFIG_H
7 
8 #include <cmn/agent.h>
9 #include <oper_db.h>
10 #include <cmn/index_vector.h>
11 
12 class Agent;
13 class DB;
15 struct AgentQosConfigData;
16 
19  uuid_(uuid) {}
20 
22  uuid_(rhs.uuid_) {}
23 
24  bool IsLess(const AgentQosConfigKey &rhs) const {
25  return uuid_ < rhs.uuid_;
26  }
27 
29 };
30 
31 typedef std::pair<uint32_t, uint32_t> AgentQosIdForwardingClassPair;
32 typedef std::map<uint32_t, uint32_t> AgentQosIdForwardingClassMap;
33 
35  AgentRefCount<AgentQosConfig>, public AgentOperDBEntry {
36 public:
37  static const uint32_t kDefaultQosMsgSize = 4098;
38  typedef enum {
42  } Type;
43  typedef std::pair<uint32_t, uint32_t> QosIdForwardingClassPair;
44  typedef std::map<uint32_t, uint32_t> QosIdForwardingClassMap;
45 
47  virtual ~AgentQosConfig();
48 
49  KeyPtr GetDBRequestKey() const;
50  std::string ToString() const;
51  virtual bool IsLess(const DBEntry &rhs) const;
52  virtual bool DBEntrySandesh(Sandesh *resp, std::string &name) const;
53 
54  virtual bool Change(const DBRequest *req);
55  virtual void Delete(const DBRequest *req);
56  virtual void SetKey(const DBRequestKey *key);
57 
58  virtual bool DeleteOnZeroRefCount() const {
59  return false;
60  }
61  virtual void OnZeroRefCount() {};
62  uint32_t GetRefCount() const {
64  }
65 
67  return uuid_;
68  }
69 
70  void set_id(uint32_t id) {
71  id_ = id;
72  }
73  uint32_t id() const {
74  return id_;
75  }
76 
77  std::string name() const {
78  return name_;
79  }
80 
82  return dscp_map_;
83  }
84 
86  return vlan_priority_map_;
87  }
88 
90  return mpls_exp_map_;
91  }
92 
93  Type type() const {
94  return type_;
95  }
96 
97  uint32_t default_forwarding_class() const {
99  }
100 
101  int MsgLen() { return kDefaultQosMsgSize; }
102 
103 private:
104  bool VerifyLinkToGlobalQosConfig(const Agent *agent,
105  const AgentQosConfigData *data);
106  void HandleVhostQosConfig(const Agent *agent,
107  const AgentQosConfigData *data, bool deleted);
108  void HandleFabricQosConfig(const Agent *agent,
109  const AgentQosConfigData *data, bool deleted);
110  void HandleGlobalQosConfig(const AgentQosConfigData *data);
111  bool HandleQosForwardingMapChange(const Agent *agent,
113  const AgentQosIdForwardingClassMap &data_map);
115  std::string name_;
116  uint32_t id_;
123 };
124 
127  AgentOperDBData(agent, node), default_forwarding_class_(0) {}
128 
129  std::string name_;
135 };
136 
138 public:
139  typedef std::map<std::string, AgentQosConfig*> AgentQosConfigNameMap;
140  typedef std::pair<std::string, AgentQosConfig*> AgentQosConfigNamePair;
141 
142  AgentQosConfigTable(Agent *agent, DB *db, const std::string &name);
143  virtual ~AgentQosConfigTable();
144  static const uint32_t kInvalidIndex=0xFFFF;
145  static const uint32_t kDscpEntries = 63;
146  static const uint32_t k801pEntries = 7;
147  static const uint32_t kExpEntries = 7;
148 
149 
150  static DBTableBase *CreateTable(Agent *agent, DB *db,
151  const std::string &name);
152 
153  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
154 
155  virtual size_t Hash(const DBEntry *entry) const {return 0;}
156  virtual size_t Hash(const DBRequestKey *key) const {return 0;}
157 
158  virtual DBEntry *OperDBAdd(const DBRequest *req);
159  virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req);
160  virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req);
161  virtual bool OperDBResync(DBEntry *entry, const DBRequest *req);
162 
163  virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req,
164  const boost::uuids::uuid &u);
165  virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u);
166  virtual bool ProcessConfig(IFMapNode *node, DBRequest &req,
167  const boost::uuids::uuid &u);
169  void ReleaseIndex(AgentQosConfig *qc);
171  const std::string &context);
172 
173  const AgentQosConfig* FindByName(const std::string &name) {
174  AgentQosConfigNameMap::const_iterator it = name_map_.find(name);
175  if (it == name_map_.end()) {
176  return NULL;
177  }
178  return it->second;
179  }
180 
181  const AgentQosConfig* FindByIndex(uint32_t idx) const {
182  return index_table_.At(idx);
183  }
184 
186  fabric_qos_config_uuids_.erase(uuid);
187  }
188 
190  fabric_qos_config_uuids_.insert(uuid);
191  }
192 
194  std::set<boost::uuids::uuid>::const_iterator it =
195  fabric_qos_config_uuids_.begin();
196  if (it == fabric_qos_config_uuids_.end()) {
197  return boost::uuids::nil_uuid();
198  }
199  return *it;
200  }
201 
203  vhost_qos_config_uuids_.erase(uuid);
204  }
205 
207  vhost_qos_config_uuids_.insert(uuid);
208  }
209 
211  std::set<boost::uuids::uuid>::const_iterator it =
212  vhost_qos_config_uuids_.begin();
213  if (it == vhost_qos_config_uuids_.end()) {
214  return boost::uuids::nil_uuid();
215  }
216  return *it;
217  }
218 private:
220  std::set<boost::uuids::uuid> vhost_qos_config_uuids_;
221  std::set<boost::uuids::uuid> fabric_qos_config_uuids_;
224 };
225 #endif
const QosIdForwardingClassMap & dscp_map() const
Definition: qos_config.h:81
AgentQosConfigKey(const AgentQosConfigKey &rhs)
Definition: qos_config.h:21
EntryType At(size_t index) const
Definition: index_vector.h:32
void EraseVhostQosConfig(const boost::uuids::uuid &uuid)
Definition: qos_config.h:202
AgentQosIdForwardingClassMap dscp_map_
Definition: qos_config.h:130
std::set< boost::uuids::uuid > fabric_qos_config_uuids_
Definition: qos_config.h:221
AgentQosConfigNameMap name_map_
Definition: qos_config.h:219
virtual bool IsLess(const DBEntry &rhs) const
Definition: qos_config.cc:96
uint32_t GetRefCount() const
Definition: agent_db.h:54
uint32_t default_forwarding_class() const
Definition: qos_config.h:97
std::set< boost::uuids::uuid > vhost_qos_config_uuids_
Definition: qos_config.h:220
const AgentQosConfig * FindByName(const std::string &name)
Definition: qos_config.h:173
AgentQosConfigData(const Agent *agent, IFMapNode *node)
Definition: qos_config.h:126
AgentQosConfig(const boost::uuids::uuid uuid)
Definition: qos_config.cc:20
Agent * agent() const
Definition: agent_db.h:213
DISALLOW_COPY_AND_ASSIGN(AgentQosConfig)
void HandleGlobalQosConfig(const AgentQosConfigData *data)
Definition: qos_config.cc:200
static const uint32_t kInvalidIndex
Definition: qos_config.h:144
uint32_t id() const
Definition: qos_config.h:73
boost::uuids::uuid uuid
virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
Definition: qos_config.cc:349
KeyPtr GetDBRequestKey() const
Definition: qos_config.cc:30
Type type() const
Definition: qos_config.h:93
virtual void SetKey(const DBRequestKey *key)
Definition: qos_config.cc:266
uint32_t default_forwarding_class_
Definition: qos_config.h:134
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: qos_config.cc:334
const QosIdForwardingClassMap & mpls_exp_map() const
Definition: qos_config.h:89
std::string ToString() const
Definition: qos_config.cc:35
virtual bool Change(const DBRequest *req)
Definition: qos_config.cc:211
AgentQosIdForwardingClassMap vlan_priority_map_
Definition: qos_config.h:131
AgentQosConfigData * BuildData(IFMapNode *node)
Definition: qos_config.cc:371
virtual bool DeleteOnZeroRefCount() const
Definition: qos_config.h:58
std::pair< uint32_t, uint32_t > AgentQosIdForwardingClassPair
Definition: qos_config.h:31
DISALLOW_COPY_AND_ASSIGN(AgentQosConfigTable)
static const uint32_t kDefaultQosMsgSize
Definition: qos_config.h:37
virtual ~AgentQosConfig()
Definition: qos_config.cc:24
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
virtual bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: qos_config.cc:357
virtual size_t Hash(const DBRequestKey *key) const
Definition: qos_config.h:156
bool VerifyLinkToGlobalQosConfig(const Agent *agent, const AgentQosConfigData *data)
Definition: qos_config.cc:121
uint32_t id_
Definition: qos_config.h:116
virtual size_t Hash(const DBEntry *entry) const
Definition: qos_config.h:155
std::pair< uint32_t, uint32_t > QosIdForwardingClassPair
Definition: qos_config.h:43
Definition: db.h:24
uint32_t default_forwarding_class_
Definition: qos_config.h:121
virtual bool DBEntrySandesh(Sandesh *resp, std::string &name) const
Definition: qos_config.cc:41
void ReleaseIndex(AgentQosConfig *qc)
Definition: qos_config.cc:327
static const uint32_t kDscpEntries
Definition: qos_config.h:145
AgentQosConfigKey(const boost::uuids::uuid &uuid)
Definition: qos_config.h:18
void InsertVhostQosConfig(const boost::uuids::uuid &uuid)
Definition: qos_config.h:206
Definition: agent.h:358
QosIdForwardingClassMap dscp_map_
Definition: qos_config.h:117
AgentQosIdForwardingClassMap mpls_exp_map_
Definition: qos_config.h:132
IndexVector< AgentQosConfig * > index_table_
Definition: qos_config.h:222
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
virtual void OnZeroRefCount()
Definition: qos_config.h:61
const std::string & name() const
Definition: db_table.h:110
virtual bool OperDBResync(DBEntry *entry, const DBRequest *req)
Definition: qos_config.cc:316
bool IsLess(const AgentQosConfigKey &rhs) const
Definition: qos_config.h:24
boost::uuids::uuid uuid_
Definition: qos_config.h:114
std::string name_
Definition: qos_config.h:129
void HandleVhostQosConfig(const Agent *agent, const AgentQosConfigData *data, bool deleted)
Definition: qos_config.cc:137
const QosIdForwardingClassMap & vlan_priority_map() const
Definition: qos_config.h:85
void EraseFabricQosConfig(const boost::uuids::uuid &uuid)
Definition: qos_config.h:185
const boost::uuids::uuid GetActiveFabricQosConfig()
Definition: qos_config.h:193
QosIdForwardingClassMap mpls_exp_map_
Definition: qos_config.h:119
void Delete()
Definition: db_entry.cc:131
virtual DBEntry * OperDBAdd(const DBRequest *req)
Definition: qos_config.cc:296
const AgentQosConfig * FindByIndex(uint32_t idx) const
Definition: qos_config.h:181
AgentQosConfigTable(Agent *agent, DB *db, const std::string &name)
Definition: qos_config.cc:272
std::string name() const
Definition: qos_config.h:77
static const uint32_t kExpEntries
Definition: qos_config.h:147
const Agent * agent() const
Definition: oper_db.h:65
void HandleFabricQosConfig(const Agent *agent, const AgentQosConfigData *data, bool deleted)
Definition: qos_config.cc:168
boost::uuids::uuid uuid() const
Definition: qos_config.h:66
virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req)
Definition: qos_config.cc:320
const boost::uuids::uuid GetActiveVhostQosConfig()
Definition: qos_config.h:210
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
Definition: qos_config.cc:406
virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
Definition: qos_config.cc:311
std::map< uint32_t, uint32_t > AgentQosIdForwardingClassMap
Definition: qos_config.h:32
std::map< std::string, AgentQosConfig * > AgentQosConfigNameMap
Definition: qos_config.h:139
static DBTableBase * CreateTable(Agent *agent, DB *db, const std::string &name)
Definition: qos_config.cc:282
std::string name_
Definition: qos_config.h:115
void InsertFabricQosConfig(const boost::uuids::uuid &uuid)
Definition: qos_config.h:189
virtual ~AgentQosConfigTable()
Definition: qos_config.cc:278
boost::uuids::uuid uuid_
Definition: qos_config.h:28
static const uint32_t k801pEntries
Definition: qos_config.h:146
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
Definition: qos_config.cc:289
void set_id(uint32_t id)
Definition: qos_config.h:70
uint32_t GetRefCount() const
Definition: qos_config.h:62
bool HandleQosForwardingMapChange(const Agent *agent, QosIdForwardingClassMap &map, const AgentQosIdForwardingClassMap &data_map)
Definition: qos_config.cc:101
QosIdForwardingClassMap vlan_priority_map_
Definition: qos_config.h:118
AgentQosConfig::Type type_
Definition: qos_config.h:133
std::pair< std::string, AgentQosConfig * > AgentQosConfigNamePair
Definition: qos_config.h:140
std::map< uint32_t, uint32_t > QosIdForwardingClassMap
Definition: qos_config.h:44