Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : * Copyright Contributors to the OpenSDN project 4 : */ 5 : 6 : #ifndef __AGENT_OPER_QOS_QUEUE_H 7 : #define __AGENT_OPER_QOS_QUEUE_H 8 : 9 : #include <cmn/agent.h> 10 : #include <oper_db.h> 11 : #include <cmn/index_vector.h> 12 : 13 : class Agent; 14 : class DB; 15 : 16 : struct QosQueueKey : public AgentOperDBKey { 17 0 : QosQueueKey(const boost::uuids::uuid &uuid): 18 0 : uuid_(uuid) {} 19 : 20 : QosQueueKey(const QosQueueKey &rhs): 21 : uuid_(rhs.uuid_) {} 22 : 23 : bool IsLess(const QosQueueKey &rhs) const { 24 : return uuid_ < rhs.uuid_; 25 : } 26 : 27 : boost::uuids::uuid uuid_; 28 : }; 29 : 30 : struct QosQueueData : public AgentOperDBData { 31 : 32 0 : QosQueueData(const Agent *agent, IFMapNode *node, const std::string &name, 33 0 : uint16_t id): 34 0 : AgentOperDBData(agent, node), name_(name), id_(id) {} 35 : std::string name_; 36 : uint16_t id_; 37 : }; 38 : 39 : class QosQueue : 40 : AgentRefCount<QosQueue>, public AgentOperDBEntry { 41 : public: 42 : QosQueue(const boost::uuids::uuid &uuid); 43 : virtual ~QosQueue(); 44 : 45 : KeyPtr GetDBRequestKey() const; 46 : std::string ToString() const; 47 : virtual bool IsLess(const DBEntry &rhs) const; 48 : virtual bool DBEntrySandesh(Sandesh *resp, std::string &name) const; 49 : 50 : virtual bool Change(const DBRequest *req); 51 : virtual void Delete(const DBRequest *req); 52 : virtual void SetKey(const DBRequestKey *key); 53 : virtual void PostAdd(); 54 : 55 0 : virtual bool DeleteOnZeroRefCount() const { 56 0 : return false; 57 : } 58 0 : virtual void OnZeroRefCount() {}; 59 0 : uint32_t GetRefCount() const { 60 0 : return AgentRefCount<QosQueue>::GetRefCount(); 61 : } 62 : 63 0 : const boost::uuids::uuid& uuid() const {return uuid_;} 64 0 : uint32_t id() const { 65 0 : return id_; 66 : } 67 0 : void set_id(uint32_t id) { 68 0 : id_ = id; 69 0 : } 70 : 71 0 : const std::string& name() const { 72 0 : return name_; 73 : } 74 : 75 0 : uint16_t nic_queue_id() const { 76 0 : return nic_queue_id_; 77 : } 78 : 79 : private: 80 : boost::uuids::uuid uuid_; 81 : uint16_t id_; 82 : std::string name_; 83 : uint16_t nic_queue_id_; 84 : DISALLOW_COPY_AND_ASSIGN(QosQueue); 85 : }; 86 : 87 : class QosQueueTable : public AgentOperDBTable { 88 : public: 89 : static const uint32_t kInvalidIndex=0xFF; 90 : QosQueueTable(Agent *agent, DB *db, const std::string &name); 91 : virtual ~QosQueueTable(); 92 : 93 : static DBTableBase *CreateTable(Agent *agent, DB *db, 94 : const std::string &name); 95 : 96 : virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const; 97 : 98 0 : virtual size_t Hash(const DBEntry *entry) const {return 0;} 99 0 : virtual size_t Hash(const DBRequestKey *key) const {return 0;} 100 : 101 : virtual DBEntry *OperDBAdd(const DBRequest *req); 102 : virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req); 103 : virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req); 104 : virtual bool OperDBResync(DBEntry *entry, const DBRequest *req); 105 : 106 : virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, 107 : const boost::uuids::uuid &u); 108 : virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u); 109 : virtual bool ProcessConfig(IFMapNode *node, DBRequest &req, 110 : const boost::uuids::uuid &u); 111 : void ReleaseIndex(QosQueue *qos_queue); 112 : virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, 113 : const std::string &context); 114 : private: 115 : IndexVector<QosQueue *> index_table_; 116 : DISALLOW_COPY_AND_ASSIGN(QosQueueTable); 117 : }; 118 : #endif